aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2013-08-15 11:28:05 -0600
committerErik Schnetter <schnetter@gmail.com>2013-08-15 11:28:05 -0600
commit86ef2ebd9b2be15a67133625e960c8b2c7e7c57f (patch)
tree13063219e5ecbe6657a10ffd03faa7bcf81a8010
parentee44d002712e9ba9e703e1bb22a626e8c58c1603 (diff)
LoopControl: Explicitly check for consistent loop arguments from the caller
-rw-r--r--Carpet/LoopControl/src/loopcontrol.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/Carpet/LoopControl/src/loopcontrol.cc b/Carpet/LoopControl/src/loopcontrol.cc
index 1785ec3b4..391757162 100644
--- a/Carpet/LoopControl/src/loopcontrol.cc
+++ b/Carpet/LoopControl/src/loopcontrol.cc
@@ -784,10 +784,44 @@ void lc_control_init(lc_control_t *restrict const control,
}
#pragma omp barrier
+
+
// Ensure thread counts are consistent
assert(get_num_coarse_threads() * get_num_fine_threads() ==
omp_get_num_threads());
+ {
+ lc_descr_t* global_descr;
+ int global_num_threads;
+ int global_num_coarse_threads;
+ int global_num_fine_threads;
+ static int is_inconsistent;
+#pragma omp single copyprivate(global_descr, global_num_threads, global_num_coarse_threads, global_num_fine_threads)
+ {
+ global_descr = descr;
+ global_num_threads = omp_get_num_threads();
+ global_num_coarse_threads = get_num_coarse_threads();
+ global_num_fine_threads = get_num_fine_threads();
+ is_inconsistent = 0;
+ }
+#pragma omp atomic
+ is_inconsistent |=
+ global_descr != descr or
+ global_num_threads != omp_get_num_threads() or
+ global_num_coarse_threads != get_num_coarse_threads() or
+ global_num_fine_threads != get_num_fine_threads();
+#pragma omp barrier
+ if (is_inconsistent) {
+#pragma omp critical
+ cout << "thread: " << omp_get_thread_num() << "\n"
+ << " loop name: " << descr->name << "\n"
+ << " file: " << descr->file << ":" << descr->line << "\n" << flush;
+#pragma omp barrier
+#pragma omp critical
+ CCTK_ERROR("Thread inconsistency");
+ }
+ }
+
// Allocate fine thread communicators
if (int(lc_fine_thread_comm.size()) < get_num_coarse_threads()) {
#pragma omp barrier