Ajout de l'ensemble du workspace.
[GPU.git] / WCudaMSE / Student_OMP / src / cpp / core / omp / 02_pi / 07_pi_for_promotionTab.cpp
diff --git a/WCudaMSE/Student_OMP/src/cpp/core/omp/02_pi/07_pi_for_promotionTab.cpp b/WCudaMSE/Student_OMP/src/cpp/core/omp/02_pi/07_pi_for_promotionTab.cpp
new file mode 100755 (executable)
index 0000000..8240aa3
--- /dev/null
@@ -0,0 +1,80 @@
+#include <omp.h>\r
+#include "00_pi_tools.h"\r
+#include "MathTools.h"\r
+#include "OmpTools.h"\r
+\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    Declaration                                     *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |*            Imported                *|\r
+ \*-------------------------------------*/\r
+\r
+\r
+\r
+/*--------------------------------------*\\r
+ |*            Public                  *|\r
+ \*-------------------------------------*/\r
+\r
+bool isPiOMPforPromotionTab_Ok(int n);\r
+\r
+/*--------------------------------------*\\r
+ |*            Private                 *|\r
+ \*-------------------------------------*/\r
+\r
+static double piOMPforPromotionTab(int n);\r
+static void syntaxeSimplifier(double* tabSumThread,int n);\r
+static void syntaxeFull(double* tabSumThread,int n);\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    Implementation                                  *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |*            Public                  *|\r
+ \*-------------------------------------*/\r
+\r
+bool isPiOMPforPromotionTab_Ok(int n)\r
+    {\r
+    return isAlgoPI_OK(piOMPforPromotionTab, n, "Pi OMP for promotion tab");\r
+    }\r
+\r
+/*--------------------------------------*\\r
+ |*            Private                 *|\r
+ \*-------------------------------------*/\r
+\r
+/**\r
+ * De-synchronisation avec PromotionTab\r
+ */\r
+double piOMPforPromotionTab(int n)\r
+    {\r
+    double xi;\r
+    const int NB_THREAD = OmpTools::setAndGetNaturalGranularity();\r
+    const double DX = 1.0/(double)n;\r
+\r
+    double sums[NB_THREAD];\r
+    memset(sums, 0, sizeof(sums)); // TODO\r
+\r
+    #pragma omp parallel for private(xi)\r
+       for (int i = 0; i < n; i++)\r
+       {\r
+       const int TID = OmpTools::getTid();\r
+       xi = i * DX;\r
+       sums[TID] += fpi(xi);\r
+       }\r
+\r
+    double sum = 0;\r
+    for (int i = 0; i < NB_THREAD; i++)\r
+       sum += sums[i];\r
+\r
+    return sum * DX;\r
+    }\r
+\r
+\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    End                                             *|\r
+ \*---------------------------------------------------------------------*/\r
+\r