[Openmp-commits] [PATCH] D13702: Bug fix: removed zeroing of the th.th_task_state for master thread at start of nested parallel.
Jonathan Peyton via Openmp-commits
openmp-commits at lists.llvm.org
Tue Oct 13 10:54:25 PDT 2015
jlpeyton created this revision.
jlpeyton added reviewers: AndreyChurbanov, tlwilmar, hfinkel.
jlpeyton added a subscriber: openmp-commits.
jlpeyton set the repository for this revision to rL LLVM.
The th.th_task_state for the master thread at the start of a nested parallel should not be zeroed in __kmp_allocate_team() because it is later put in the stack of states in __kmp_fork_call() for further re-use after exiting the nested region. It is zeroed after being put in the stack.
Repository:
rL LLVM
http://reviews.llvm.org/D13702
Files:
runtime/src/kmp_runtime.c
Index: runtime/src/kmp_runtime.c
===================================================================
--- runtime/src/kmp_runtime.c
+++ runtime/src/kmp_runtime.c
@@ -4887,12 +4887,6 @@
}
# endif /* KMP_AFFINITY_SUPPORTED */
#endif /* OMP_40_ENABLED */
-
- if (level) {
- for(f = 0; f < new_nproc; ++f) {
- team->t.t_threads[f]->th.th_task_state = 0;
- }
- }
}
else if( team->t.t_nproc > new_nproc ) {
KA_TRACE( 20, ("__kmp_allocate_team: decreasing hot team thread count to %d\n", new_nproc ));
@@ -4955,7 +4949,8 @@
/* update the remaining threads */
if (level) {
- for(f = 0; f < new_nproc; ++f) {
+ team->t.t_threads[0]->th.th_team_nproc = new_nproc;
+ for(f = 1; f < new_nproc; ++f) {
team->t.t_threads[f]->th.th_team_nproc = new_nproc;
team->t.t_threads[f]->th.th_task_state = 0;
}
@@ -5096,8 +5091,12 @@
/* reinitialize the threads */
KMP_DEBUG_ASSERT(team->t.t_nproc == new_nproc);
if (level) {
+ int old_state = team->t.t_threads[0]->th.th_task_state;
for (f=0; f < team->t.t_nproc; ++f)
__kmp_initialize_info( team->t.t_threads[ f ], team, f, __kmp_gtid_from_tid( f, team ) );
+ // th_task_state for master thread will be put in stack of states in __kmp_fork_call()
+ // before zeroing, for workers it was just zeroed in __kmp_initialize_info()
+ team->t.t_threads[0]->th.th_task_state = old_state;
}
else {
int old_state = team->t.t_threads[0]->th.th_task_state;
@@ -5137,10 +5136,9 @@
#endif /* OMP_40_ENABLED */
#if KMP_NESTED_HOT_TEAMS
if( level ) {
- // Sync task (TODO: and barrier?) state for nested hot teams, not needed for outermost hot team.
+ // Sync barrier state for nested hot teams, not needed for outermost hot team.
for( f = 1; f < new_nproc; ++f ) {
kmp_info_t *thr = team->t.t_threads[f];
- thr->th.th_task_state = 0;
int b;
kmp_balign_t * balign = thr->th.th_bar;
for( b = 0; b < bs_last_barrier; ++ b ) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13702.37272.patch
Type: text/x-patch
Size: 2394 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20151013/7c1b341e/attachment.bin>
More information about the Openmp-commits
mailing list