[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