[Openmp-commits] [PATCH] D20539: Fix for OMP_PROC_BIND=spread strategy

Jonathan Peyton via Openmp-commits openmp-commits at lists.llvm.org
Thu May 26 12:16:09 PDT 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL270890: Fix for OMP_PROC_BIND=spread strategy (authored by jlpeyton).

Changed prior to commit:
  http://reviews.llvm.org/D20539?vs=58143&id=58665#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D20539

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

Index: openmp/trunk/runtime/src/kmp_runtime.c
===================================================================
--- openmp/trunk/runtime/src/kmp_runtime.c
+++ openmp/trunk/runtime/src/kmp_runtime.c
@@ -70,7 +70,7 @@
 static void __kmp_initialize_info( kmp_info_t *, kmp_team_t *, int tid, int gtid );
 static void __kmp_initialize_team( kmp_team_t * team, int new_nproc, kmp_internal_control_t * new_icvs, ident_t * loc );
 #if OMP_40_ENABLED && KMP_AFFINITY_SUPPORTED
-static void __kmp_partition_places( kmp_team_t *team );
+static void __kmp_partition_places( kmp_team_t *team, int update_master_only=0 );
 #endif
 static void __kmp_do_serial_initialize( void );
 void __kmp_fork_barrier( int gtid, int tid );
@@ -4438,7 +4438,7 @@
 // The master thread's partition should already include its current binding.
 //
 static void
-__kmp_partition_places( kmp_team_t *team )
+__kmp_partition_places( kmp_team_t *team, int update_master_only )
 {
     //
     // Copy the master thread's place partion to the team struct
@@ -4584,6 +4584,7 @@
             int f;
             int n_th = team->t.t_nproc;
             int n_places;
+            int thidx;
             if ( first_place <= last_place ) {
                 n_places = last_place - first_place + 1;
             }
@@ -4597,7 +4598,10 @@
                 rem = n_places - n_th*S;
                 gap = rem ? n_th/rem : 1;
                 gap_ct = gap;
-                for ( f = 0; f < n_th; f++ ) {
+                thidx = n_th;
+                if (update_master_only == 1)
+                    thidx = 1;
+                for ( f = 0; f < thidx; f++ ) {
                     kmp_info_t *th = team->t.t_threads[f];
                     KMP_DEBUG_ASSERT( th != NULL );
 
@@ -4657,7 +4661,10 @@
                 gap = rem > 0 ? n_places/rem : n_places;
                 int place = masters_place;
                 int gap_ct = gap;
-                for ( f = 0; f < n_th; f++ ) {
+                thidx = n_th;
+                if (update_master_only == 1)
+                    thidx = 1;
+                for ( f = 0; f < thidx; f++ ) {
                     kmp_info_t *th = team->t.t_threads[f];
                     KMP_DEBUG_ASSERT( th != NULL );
 
@@ -4804,6 +4811,9 @@
 # if KMP_AFFINITY_SUPPORTED
             if ( ( team->t.t_size_changed == 0 )
               && ( team->t.t_proc_bind == new_proc_bind ) ) {
+                if (new_proc_bind == proc_bind_spread) {
+                    __kmp_partition_places(team, 1); // add flag to update only master for spread
+                }
                 KA_TRACE( 200, ("__kmp_allocate_team: reusing hot team #%d bindings: proc_bind = %d, partition = [%d,%d]\n",
                   team->t.t_id, new_proc_bind, team->t.t_first_place,
                   team->t.t_last_place ) );


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20539.58665.patch
Type: text/x-patch
Size: 2799 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20160526/e9c13145/attachment.bin>


More information about the Openmp-commits mailing list