[Openmp-commits] [PATCH] D28377: Fix a race in shutdown when tasking is used
Jonas Hahnfeld via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Fri Jan 6 00:30:13 PST 2017
Hahnfeld added a comment.
Thanks, this patch seems to solve the problem!
================
Comment at: runtime/src/kmp_runtime.cpp:4007-4012
+ if (__kmp_tasking_mode != tskm_immediate_exec)
+ // When tasking is possible, threads are not safe to reap until they are
+ // done tasking; this will be set when tasking code is exited in wait
+ this_thr->th.th_reap_state = KMP_NOT_SAFE_TO_REAP;
+ else // no tasking --> always safe to reap
+ this_thr->th.th_reap_state = KMP_SAFE_TO_REAP;
----------------
Do we need this here or would it be enough to have the flag completely handled in `__kmp_execute_tasks_template`?
I don't know whether that would create a race on `th_reap_state`. If `__kmp_execute_tasks_template` is not guaranteed to be called at least once before a barrier finishes, why aren't there problems with multiple parallel regions? Each thread will have `th.th_reap_state = KMP_SAFE_TO_REAP` at the end of the first parallel region...
================
Comment at: runtime/src/kmp_wait_release.h:215-224
+ else
+ this_thr->th.th_reap_state = KMP_SAFE_TO_REAP;
}
else {
KMP_DEBUG_ASSERT(!KMP_MASTER_TID(this_thr->th.th_info.ds.ds_tid));
this_thr->th.th_task_team = NULL;
+ this_thr->th.th_reap_state = KMP_SAFE_TO_REAP;
----------------
Resetting to `th.th_reap_state = KMP_SAFE_TO_REAP` could then be done at the end of `__kmp_execute_tasks_template`
Repository:
rL LLVM
https://reviews.llvm.org/D28377
More information about the Openmp-commits
mailing list