aboutsummaryrefslogtreecommitdiff
path: root/Carpet/LoopControl
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2013-03-19 15:36:36 -0400
committerErik Schnetter <schnetter@gmail.com>2013-03-19 15:36:36 -0400
commitb2e07dd1f4a8a7ee0f82fc0453548cb6fa3eb1ac (patch)
treeb4c910baa3a4e0525d2bda1292e949a6d42d7d09 /Carpet/LoopControl
parent10cb957bb41e588c9f0407ab0c99fd2c43706bbe (diff)
LoopControl: Improve OpenMP parallelisation of get_num_fine_threads
Diffstat (limited to 'Carpet/LoopControl')
-rw-r--r--Carpet/LoopControl/src/loopcontrol.cc15
1 files changed, 7 insertions, 8 deletions
diff --git a/Carpet/LoopControl/src/loopcontrol.cc b/Carpet/LoopControl/src/loopcontrol.cc
index c8ac8f99e..398ed91de 100644
--- a/Carpet/LoopControl/src/loopcontrol.cc
+++ b/Carpet/LoopControl/src/loopcontrol.cc
@@ -279,15 +279,14 @@ namespace {
if (omp_get_num_threads() == 1) return 1;
static int num_smt_threads = -1;
if (CCTK_BUILTIN_EXPECT(num_smt_threads<0, false)) {
-#pragma omp barrier
- (void)0; // PGI compiler needs this
-#pragma omp master
- if (CCTK_IsFunctionAliased("GetNumSMTThreads")) {
- num_smt_threads = GetNumSMTThreads();
- } else {
- num_smt_threads = 1;
+#pragma omp critical
+ if (num_smt_threads<0) {
+ if (CCTK_IsFunctionAliased("GetNumSMTThreads")) {
+ num_smt_threads = GetNumSMTThreads();
+ } else {
+ num_smt_threads = 1;
+ }
}
-#pragma omp barrier
}
return num_smt_threads;
}