From e584483283c2f50e9c70508ed85df8cbbc401eed Mon Sep 17 00:00:00 2001 From: Thomas Witkowski <thomas.witkowski@gmx.de> Date: Mon, 23 Nov 2009 17:10:54 +0000 Subject: [PATCH] New OpenMP parallelization mode. --- AMDiS/src/ProblemVec.cc | 3 ++- AMDiS/src/TraverseParallel.h | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/AMDiS/src/ProblemVec.cc b/AMDiS/src/ProblemVec.cc index 56221882..7c1ed6cc 100644 --- a/AMDiS/src/ProblemVec.cc +++ b/AMDiS/src/ProblemVec.cc @@ -620,6 +620,7 @@ namespace AMDiS { { FUNCNAME("ProblemVec::buildAfterCoarsen()"); + // printOpenmpTraverseInfo(this, true); // buildAfterCoarsen_sebastianMode(adaptInfo, flag); clock_t first = clock(); @@ -1183,7 +1184,7 @@ namespace AMDiS { const BasisFunction *basisFcts = feSpace->getBasisFcts(); #ifdef _OPENMP - TraverseParallelStack stack; + TraverseParallelStack stack(0, 1); #else TraverseStack stack; #endif diff --git a/AMDiS/src/TraverseParallel.h b/AMDiS/src/TraverseParallel.h index 97844789..c155dfc1 100644 --- a/AMDiS/src/TraverseParallel.h +++ b/AMDiS/src/TraverseParallel.h @@ -47,8 +47,13 @@ namespace AMDiS { if (parallelMode == 0) { return stacks[omp_get_thread_num()]->traverseNext(elInfoOld); } else { - - } + ElInfo *elInfo = stacks[omp_get_thread_num()]->traverseNext(elInfoOld); + while (elInfo && + elInfo->getElement()->getIndex() % nThreads != omp_get_thread_num()) { + elInfo = stacks[omp_get_thread_num()]->traverseNext(elInfo); + } + return elInfo; + } } private: -- GitLab