diff options
author | Erik Schnetter <schnetter@gmail.com> | 2013-08-15 11:28:05 -0600 |
---|---|---|
committer | Erik Schnetter <schnetter@gmail.com> | 2013-08-15 11:28:05 -0600 |
commit | 86ef2ebd9b2be15a67133625e960c8b2c7e7c57f (patch) | |
tree | 13063219e5ecbe6657a10ffd03faa7bcf81a8010 | |
parent | ee44d002712e9ba9e703e1bb22a626e8c58c1603 (diff) |
LoopControl: Explicitly check for consistent loop arguments from the caller
-rw-r--r-- | Carpet/LoopControl/src/loopcontrol.cc | 34 |
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 |