diff --git a/Src/Core/FFmmAlgorithmSectionTask.hpp b/Src/Core/FFmmAlgorithmSectionTask.hpp index 52c3e911797dc3b967d828efb1ea8a50b5acfffe..749810012be69bf6d9fdd613cd3b81f8aa6d6af8 100644 --- a/Src/Core/FFmmAlgorithmSectionTask.hpp +++ b/Src/Core/FFmmAlgorithmSectionTask.hpp @@ -77,11 +77,11 @@ public: FAssertLF(leafLevelSeparationCriteria < 3, "Separation criteria should be < 3"); this->kernels = new KernelClass*[MaxThreads]; - #pragma omp parallel for schedule(static) - for(int idxThread = 0 ; idxThread < MaxThreads ; ++idxThread){ + #pragma omp parallel num_threads(MaxThreads) + { #pragma omp critical (InitFFmmAlgorithmSectionTask) { - this->kernels[idxThread] = new KernelClass(*inKernels); + this->kernels[omp_get_thread_num()] = new KernelClass(*inKernels); } } diff --git a/Src/Core/FFmmAlgorithmTask.hpp b/Src/Core/FFmmAlgorithmTask.hpp index 87d190b1de3d1bbfc8a258870b96572b1c74afa6..a06029b34f967346e5b714af748da4c95d22012d 100644 --- a/Src/Core/FFmmAlgorithmTask.hpp +++ b/Src/Core/FFmmAlgorithmTask.hpp @@ -66,13 +66,13 @@ public: FAssertLF(leafLevelSeparationCriteria < 3, "Separation criteria should be < 3"); this->kernels = new KernelClass*[MaxThreads]; -#pragma omp parallel for schedule(static) - for(int idxThread = 0 ; idxThread < MaxThreads ; ++idxThread){ -#pragma omp critical (InitFFmmAlgorithmTask) - { - this->kernels[idxThread] = new KernelClass(*inKernels); - } - } + #pragma omp parallel num_threads(MaxThreads) + { + #pragma omp critical (InitFFmmAlgorithmTask) + { + this->kernels[omp_get_thread_num()] = new KernelClass(*inKernels); + } + } FAbstractAlgorithm::setNbLevelsInTree(tree->getHeight()); diff --git a/Src/Core/FFmmAlgorithmThread.hpp b/Src/Core/FFmmAlgorithmThread.hpp index d01071ebc1885e7d819bdec5e92479bb31f842a4..0e5970d9a8a4e2847a7c93ea2c3b4a02131e3836 100644 --- a/Src/Core/FFmmAlgorithmThread.hpp +++ b/Src/Core/FFmmAlgorithmThread.hpp @@ -85,11 +85,11 @@ public: FAssertLF(0 < userChunkSize, "Chunk size should be > 0"); this->kernels = new KernelClass*[MaxThreads]; - #pragma omp parallel for schedule(static) - for(int idxThread = 0 ; idxThread < MaxThreads ; ++idxThread){ - #pragma omp critical (InitFFmmAlgorithmThread) + #pragma omp parallel num_threads(MaxThreads) + { + #pragma omp critical (InitFFmmAlgorithmThread) { - this->kernels[idxThread] = new KernelClass(*inKernels); + this->kernels[omp_get_thread_num()] = new KernelClass(*inKernels); } } diff --git a/Src/Core/FFmmAlgorithmThreadBalance.hpp b/Src/Core/FFmmAlgorithmThreadBalance.hpp index e4988637f10c86a6bef9a3b3815142f6ca3e45e1..a79ebf06912ea035b072342d69401d81d9af9209 100644 --- a/Src/Core/FFmmAlgorithmThreadBalance.hpp +++ b/Src/Core/FFmmAlgorithmThreadBalance.hpp @@ -62,11 +62,11 @@ public: FAssertLF(leafLevelSeparationCriteria < 3, "Separation criteria should be < 3"); this->kernels = new KernelClass*[MaxThreads]; -#pragma omp parallel for schedule(static) - for(int idxThread = 0 ; idxThread < MaxThreads ; ++idxThread){ -#pragma omp critical (InitFFmmAlgorithmThreadBalance) + #pragma omp parallel num_threads(MaxThreads) + { + #pragma omp critical (InitFFmmAlgorithmThreadBalance) { - this->kernels[idxThread] = new KernelClass(*inKernels); + this->kernels[omp_get_thread_num()] = new KernelClass(*inKernels); } } diff --git a/Src/Core/FFmmAlgorithmThreadProc.hpp b/Src/Core/FFmmAlgorithmThreadProc.hpp index f7a3977cfa7eb223113553eb65e894a60c7632c7..ef092e9361352839733375f25154824eb1de776e 100644 --- a/Src/Core/FFmmAlgorithmThreadProc.hpp +++ b/Src/Core/FFmmAlgorithmThreadProc.hpp @@ -157,11 +157,11 @@ public: FAssertLF(leafLevelSeparationCriteria < 3, "Separation criteria should be < 3"); this->kernels = new KernelClass*[MaxThreads]; - #pragma omp parallel for schedule(static) - for(int idxThread = 0 ; idxThread < MaxThreads ; ++idxThread){ + #pragma omp parallel num_threads(MaxThreads) + { #pragma omp critical (InitFFmmAlgorithmThreadProc) { - this->kernels[idxThread] = new KernelClass(*inKernels); + this->kernels[omp_get_thread_num()] = new KernelClass(*inKernels); } } diff --git a/Src/Core/FFmmAlgorithmThreadProcPeriodic.hpp b/Src/Core/FFmmAlgorithmThreadProcPeriodic.hpp index 2779d69aab263b0ce2f53b2dad2afb17f7af6443..0bac65b8b50400960a2a93e7c13a8fd770c361fa 100644 --- a/Src/Core/FFmmAlgorithmThreadProcPeriodic.hpp +++ b/Src/Core/FFmmAlgorithmThreadProcPeriodic.hpp @@ -117,11 +117,11 @@ public: void setKernel(KernelClass*const inKernels){ this->kernels = new KernelClass*[MaxThreads]; - #pragma omp parallel for schedule(static) - for(int idxThread = 0 ; idxThread < MaxThreads ; ++idxThread){ + #pragma omp parallel num_threads(MaxThreads) + { #pragma omp critical (InitFFmmAlgorithmThreadProcPeriodic) { - this->kernels[idxThread] = new KernelClass(*inKernels); + this->kernels[omp_get_thread_num()] = new KernelClass(*inKernels); } } } diff --git a/Src/Core/FFmmAlgorithmThreadTsm.hpp b/Src/Core/FFmmAlgorithmThreadTsm.hpp index b731fb3994356250f3a34263a04a4f6389896786..761bb345a4c5e5886e7c3e463b659fdc60b816e9 100644 --- a/Src/Core/FFmmAlgorithmThreadTsm.hpp +++ b/Src/Core/FFmmAlgorithmThreadTsm.hpp @@ -71,11 +71,11 @@ public: FAssertLF(leafLevelSeparationCriteria < 3, "Separation criteria should be < 3"); this->kernels = new KernelClass*[MaxThreads]; - #pragma omp parallel for schedule(static) - for(int idxThread = 0 ; idxThread < MaxThreads ; ++idxThread){ - #pragma omp critical (InitFFmmAlgorithmThreadTsm) + #pragma omp parallel num_threads(MaxThreads) + { + #pragma omp critical (InitFFmmAlgorithmTsm) { - this->kernels[idxThread] = new KernelClass(*inKernels); + this->kernels[omp_get_thread_num()] = new KernelClass(*inKernels); } }