Ajout de l'ensemble du workspace.
[GPU.git] / WCudaMSE / BilatTools_OMP / src / core / OMP_Tools / cpp / OmpTools.cpp
diff --git a/WCudaMSE/BilatTools_OMP/src/core/OMP_Tools/cpp/OmpTools.cpp b/WCudaMSE/BilatTools_OMP/src/core/OMP_Tools/cpp/OmpTools.cpp
new file mode 100755 (executable)
index 0000000..a7d1de1
--- /dev/null
@@ -0,0 +1,112 @@
+#include <omp.h>\r
+#include "OmpTools.h"\r
+\r
+#define MULTIPLIER 1366\r
+#define ADDEND  150889\r
+#define PMOD  714025\r
+\r
+long random_last = 0;\r
+#pragma omp threadprivate(random_last)\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    Implementation                                  *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |*            Constructor             *|\r
+ \*-------------------------------------*/\r
+\r
+OmpTools::OmpTools()\r
+    {\r
+    // rien\r
+    }\r
+\r
+OmpTools::~OmpTools()\r
+    {\r
+    // rien\r
+    }\r
+\r
+/*--------------------------------------*\\r
+ |*            Methodes                *|\r
+ \*-------------------------------------*/\r
+\r
+/*----------------------*\\r
+ |*    static  public  *|\r
+ \*---------------------*/\r
+\r
+int OmpTools::setAndGetNaturalGranularity()\r
+    {\r
+    // ko sur ARM, 1 core detecte only\r
+//    {\r
+//    int nbThread = omp_get_num_procs();\r
+//    omp_set_num_threads(nbThread);\r
+//    return nbThread;\r
+//    }\r
+\r
+#ifndef __arm__\r
+\r
+    int nbThread = omp_get_num_procs();\r
+\r
+#else\r
+\r
+    //omp_get_num_procs ne donne pas la bonne valeurs sur kayla\r
+\r
+    int nbThread=4;//4 car kayla à 4 coeurs.\r
+\r
+#endif\r
+\r
+    omp_set_num_threads(nbThread);\r
+    return nbThread;\r
+    }\r
+\r
+/*--------*\\r
+ |*  get  *|\r
+ \*-------*/\r
+\r
+int OmpTools::getNbCore()\r
+    {\r
+    return omp_get_num_procs();\r
+    }\r
+\r
+int OmpTools::getNbThread()\r
+    {\r
+    return omp_get_num_threads();\r
+    }\r
+\r
+int OmpTools::getTid()\r
+    {\r
+    return omp_get_thread_num();\r
+    }\r
+\r
+/*--------*\\r
+ |*  set  *|\r
+ \*-------*/\r
+\r
+void OmpTools::setNbThread(int nbThread)\r
+    {\r
+    omp_set_num_threads(nbThread);\r
+    }\r
+\r
+/*--------*\\r
+ |*  math  *|\r
+ \*-------*/\r
+\r
+double OmpTools::uniform01(void)\r
+    {\r
+    long random_next;\r
+\r
+    random_next = (MULTIPLIER * random_last + ADDEND) % PMOD;\r
+    random_last = random_next;\r
+\r
+    return ((double) random_next / (double) PMOD);\r
+    }\r
+\r
+double OmpTools::uniform(double a, double b)\r
+    {\r
+    return a + uniform01() * (b - a);\r
+    }\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    End                                             *|\r
+ \*---------------------------------------------------------------------*/\r
+\r