[Openmp-commits] [openmp] r250847 - Removed zeroing 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 20 12:21:04 PDT 2015


Author: jlpeyton
Date: Tue Oct 20 14:21:04 2015
New Revision: 250847

URL: http://llvm.org/viewvc/llvm-project?rev=250847&view=rev
Log:
Removed zeroing th.th_task_state for master thread at start of nested parallel.

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.

Differential Revision: http://reviews.llvm.org/D13702

Modified:
    openmp/trunk/runtime/src/kmp_runtime.c

Modified: openmp/trunk/runtime/src/kmp_runtime.c
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_runtime.c?rev=250847&r1=250846&r2=250847&view=diff
==============================================================================
--- openmp/trunk/runtime/src/kmp_runtime.c (original)
+++ openmp/trunk/runtime/src/kmp_runtime.c Tue Oct 20 14:21:04 2015
@@ -4891,12 +4891,6 @@ __kmp_allocate_team( kmp_root_t *root, i
             }
 # 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 ));
@@ -4959,7 +4953,8 @@ __kmp_allocate_team( kmp_root_t *root, i
 
             /* 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;
                 }
@@ -5100,8 +5095,12 @@ __kmp_allocate_team( kmp_root_t *root, i
             /* 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;
@@ -5141,10 +5140,9 @@ __kmp_allocate_team( kmp_root_t *root, i
 #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 ) {




More information about the Openmp-commits mailing list