@@ -172,6 +172,7 @@ error_stop_str(const char *string, size_t len, bool quiet)
172
172
173
173
/* Global variables. */
174
174
static int caf_this_image ;
175
+ static int mpi_this_image ;
175
176
static int caf_num_images = 0 ;
176
177
static int caf_is_finalized = 0 ;
177
178
static MPI_Win global_dynamic_win ;
@@ -901,10 +902,10 @@ PREFIX(init)(int *argc, char ***argv)
901
902
902
903
ierr = MPI_Comm_size (CAF_COMM_WORLD , & caf_num_images );
903
904
chk_err (ierr );
904
- ierr = MPI_Comm_rank (CAF_COMM_WORLD , & caf_this_image );
905
+ ierr = MPI_Comm_rank (CAF_COMM_WORLD , & mpi_this_image );
905
906
chk_err (ierr );
906
907
907
- ++ caf_this_image ;
908
+ caf_this_image = mpi_this_image + 1 ;
908
909
caf_is_finalized = 0 ;
909
910
910
911
/* BEGIN SYNC IMAGE preparation
@@ -1010,22 +1011,22 @@ finalize_internal(int status_code)
1010
1011
chk_err (ierr );
1011
1012
#endif
1012
1013
/* For future security enclose setting img_status in a lock. */
1013
- CAF_Win_lock (MPI_LOCK_EXCLUSIVE , caf_this_image - 1 , * stat_tok );
1014
+ CAF_Win_lock (MPI_LOCK_EXCLUSIVE , mpi_this_image , * stat_tok );
1014
1015
if (status_code == 0 )
1015
1016
{
1016
1017
img_status = STAT_STOPPED_IMAGE ;
1017
1018
#ifdef WITH_FAILED_IMAGES
1018
- image_stati [caf_this_image - 1 ] = STAT_STOPPED_IMAGE ;
1019
+ image_stati [mpi_this_image ] = STAT_STOPPED_IMAGE ;
1019
1020
#endif
1020
1021
}
1021
1022
else
1022
1023
{
1023
1024
img_status = status_code ;
1024
1025
#ifdef WITH_FAILED_IMAGES
1025
- image_stati [caf_this_image - 1 ] = status_code ;
1026
+ image_stati [mpi_this_image ] = status_code ;
1026
1027
#endif
1027
1028
}
1028
- CAF_Win_unlock (caf_this_image - 1 , * stat_tok );
1029
+ CAF_Win_unlock (mpi_this_image , * stat_tok );
1029
1030
1030
1031
/* Announce to all other images, that this one has changed its execution
1031
1032
* status. */
@@ -1371,11 +1372,11 @@ void PREFIX(register)(size_t size, caf_register_t type, caf_token_t *token,
1371
1372
if (l_var )
1372
1373
{
1373
1374
init_array = (int * )calloc (size , sizeof (int ));
1374
- CAF_Win_lock (MPI_LOCK_EXCLUSIVE , caf_this_image - 1 , * p );
1375
- ierr = MPI_Put (init_array , size , MPI_INT , caf_this_image - 1 , 0 , size ,
1375
+ CAF_Win_lock (MPI_LOCK_EXCLUSIVE , mpi_this_image , * p );
1376
+ ierr = MPI_Put (init_array , size , MPI_INT , mpi_this_image , 0 , size ,
1376
1377
MPI_INT , * p );
1377
1378
chk_err (ierr );
1378
- CAF_Win_unlock (caf_this_image - 1 , * p );
1379
+ CAF_Win_unlock (mpi_this_image , * p );
1379
1380
free (init_array );
1380
1381
}
1381
1382
@@ -1472,11 +1473,11 @@ void *PREFIX(register)(size_t size, caf_register_t type, caf_token_t *token,
1472
1473
if (l_var )
1473
1474
{
1474
1475
init_array = (int * )calloc (size , sizeof (int ));
1475
- CAF_Win_lock (MPI_LOCK_EXCLUSIVE , caf_this_image - 1 , * p );
1476
- ierr = MPI_Put (init_array , size , MPI_INT , caf_this_image - 1 , 0 , size ,
1477
- MPI_INT , * p );
1476
+ CAF_Win_lock (MPI_LOCK_EXCLUSIVE , mpi_this_image , * p );
1477
+ ierr = MPI_Put (init_array , size , MPI_INT , mpi_this_image , 0 , size , MPI_INT ,
1478
+ * p );
1478
1479
chk_err (ierr );
1479
- CAF_Win_unlock (caf_this_image - 1 , * p );
1480
+ CAF_Win_unlock (mpi_this_image , * p );
1480
1481
free (init_array );
1481
1482
}
1482
1483
@@ -3579,16 +3580,23 @@ PREFIX(get)(caf_token_t token, size_t offset, int image_index,
3579
3580
bool free_pad_str = false, free_t_buff = false;
3580
3581
const bool dest_char_array_is_longer
3581
3582
= dst_type == BT_CHARACTER && dst_size > src_size && !same_image ;
3582
- int remote_image = image_index - 1 ;
3583
+ int remote_image = image_index - 1 , this_image = mpi_this_image ;
3584
+
3583
3585
if (!same_image )
3584
3586
{
3585
3587
MPI_Group current_team_group , win_group ;
3588
+ int trans_ranks [2 ];
3586
3589
ierr = MPI_Comm_group (CAF_COMM_WORLD , & current_team_group );
3587
3590
chk_err (ierr );
3588
3591
ierr = MPI_Win_get_group (* p , & win_group );
3589
3592
chk_err (ierr );
3590
- ierr = MPI_Group_translate_ranks (
3591
- current_team_group , 1 , (int []){remote_image }, win_group , & remote_image );
3593
+ ierr = MPI_Group_translate_ranks (current_team_group , 2 ,
3594
+ (int []){remote_image , this_image },
3595
+ win_group , trans_ranks );
3596
+ dprint ("rank translation: remote: %d -> %d, this: %d -> %d.\n" ,
3597
+ remote_image , trans_ranks [0 ], this_image , trans_ranks [1 ]);
3598
+ remote_image = trans_ranks [0 ];
3599
+ this_image = trans_ranks [1 ];
3592
3600
chk_err (ierr );
3593
3601
ierr = MPI_Group_free (& current_team_group );
3594
3602
chk_err (ierr );
@@ -3618,8 +3626,8 @@ PREFIX(get)(caf_token_t token, size_t offset, int image_index,
3618
3626
if (size == 0 )
3619
3627
return ;
3620
3628
3621
- dprint ("src_vector = %p, image_index = %d, offset = %zd.\n" , src_vector ,
3622
- image_index , offset );
3629
+ dprint ("src_vector = %p, image_index = %d (remote = %d) , offset = %zd.\n" ,
3630
+ src_vector , image_index , remote_image , offset );
3623
3631
check_image_health (image_index , stat );
3624
3632
3625
3633
/* For char arrays: create the padding array, when dst is longer than src. */
@@ -7995,8 +8003,7 @@ PREFIX(atomic_define)(caf_token_t token, size_t offset, int image_index,
7995
8003
{
7996
8004
MPI_Win * p = TOKEN (token );
7997
8005
MPI_Datatype dt ;
7998
- int ierr = 0 ,
7999
- image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8006
+ int ierr = 0 , image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8000
8007
8001
8008
selectType (kind , & dt );
8002
8009
@@ -8027,8 +8034,7 @@ PREFIX(atomic_ref)(caf_token_t token, size_t offset, int image_index,
8027
8034
{
8028
8035
MPI_Win * p = TOKEN (token );
8029
8036
MPI_Datatype dt ;
8030
- int ierr = 0 ,
8031
- image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8037
+ int ierr = 0 , image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8032
8038
8033
8039
selectType (kind , & dt );
8034
8040
@@ -8059,8 +8065,7 @@ PREFIX(atomic_cas)(caf_token_t token, size_t offset, int image_index, void *old,
8059
8065
{
8060
8066
MPI_Win * p = TOKEN (token );
8061
8067
MPI_Datatype dt ;
8062
- int ierr = 0 ,
8063
- image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8068
+ int ierr = 0 , image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8064
8069
8065
8070
selectType (kind , & dt );
8066
8071
@@ -8091,7 +8096,7 @@ PREFIX(atomic_op)(int op, caf_token_t token, size_t offset, int image_index,
8091
8096
int ierr = 0 ;
8092
8097
MPI_Datatype dt ;
8093
8098
MPI_Win * p = TOKEN (token );
8094
- int image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8099
+ int image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8095
8100
8096
8101
#if MPI_VERSION >= 3
8097
8102
old = malloc (kind );
@@ -8146,7 +8151,7 @@ PREFIX(event_post)(caf_token_t token, size_t index, int image_index, int *stat,
8146
8151
int value = 1 , ierr = 0 , flag ;
8147
8152
MPI_Win * p = TOKEN (token );
8148
8153
const char msg [] = "Error on event post" ;
8149
- int image = (image_index == 0 ) ? caf_this_image - 1 : image_index - 1 ;
8154
+ int image = (image_index == 0 ) ? mpi_this_image : image_index - 1 ;
8150
8155
8151
8156
if (stat != NULL )
8152
8157
* stat = 0 ;
@@ -8184,7 +8189,7 @@ void
8184
8189
PREFIX (event_wait )(caf_token_t token , size_t index , int until_count , int * stat ,
8185
8190
char * errmsg , charlen_t errmsg_len )
8186
8191
{
8187
- int ierr = 0 , count = 0 , i , image = caf_this_image - 1 ;
8192
+ int ierr = 0 , count = 0 , i , image = mpi_this_image ;
8188
8193
int * var = NULL , flag , old = 0 , newval = 0 ;
8189
8194
const int spin_loop_max = 20000 ;
8190
8195
MPI_Win * p = TOKEN (token );
@@ -8250,8 +8255,7 @@ PREFIX(event_query)(caf_token_t token, size_t index, int image_index,
8250
8255
int * count , int * stat )
8251
8256
{
8252
8257
MPI_Win * p = TOKEN (token );
8253
- int ierr = 0 ,
8254
- image = (image_index == 0 ) ? caf_this_image - 1 : image_index - 1 ;
8258
+ int ierr = 0 , image = (image_index == 0 ) ? mpi_this_image : image_index - 1 ;
8255
8259
8256
8260
if (stat != NULL )
8257
8261
* stat = 0 ;
@@ -8590,13 +8594,12 @@ PREFIX(form_team)(int team_id, caf_team_t *team,
8590
8594
int index __attribute__((unused )))
8591
8595
{
8592
8596
struct caf_teams_list * tmp ;
8593
- void * tmp_team ;
8594
8597
MPI_Comm * newcomm ;
8595
- MPI_Comm * current_comm = & CAF_COMM_WORLD ;
8598
+ MPI_Comm current_comm = CAF_COMM_WORLD ;
8596
8599
int ierr ;
8597
8600
8598
8601
newcomm = (MPI_Comm * )calloc (1 , sizeof (MPI_Comm ));
8599
- ierr = MPI_Comm_split (* current_comm , team_id , caf_this_image , newcomm );
8602
+ ierr = MPI_Comm_split (current_comm , team_id , mpi_this_image , newcomm );
8600
8603
chk_err (ierr );
8601
8604
8602
8605
tmp = calloc (1 , sizeof (struct caf_teams_list ));
@@ -8646,9 +8649,9 @@ PREFIX(change_team)(caf_team_t *team, int coselector __attribute__((unused)))
8646
8649
tmp_team = tmp_used -> team_list_elem -> team ;
8647
8650
tmp_comm = (MPI_Comm * )tmp_team ;
8648
8651
CAF_COMM_WORLD = * tmp_comm ;
8649
- int ierr = MPI_Comm_rank (* tmp_comm , & caf_this_image );
8652
+ int ierr = MPI_Comm_rank (* tmp_comm , & mpi_this_image );
8650
8653
chk_err (ierr );
8651
- caf_this_image ++ ;
8654
+ caf_this_image = mpi_this_image + 1 ;
8652
8655
ierr = MPI_Comm_size (* tmp_comm , & caf_num_images );
8653
8656
chk_err (ierr );
8654
8657
ierr = MPI_Barrier (* tmp_comm );
@@ -8699,9 +8702,9 @@ PREFIX(end_team)(caf_team_t *team __attribute__((unused)))
8699
8702
tmp_comm = (MPI_Comm * )tmp_team ;
8700
8703
CAF_COMM_WORLD = * tmp_comm ;
8701
8704
/* CAF_COMM_WORLD = (MPI_Comm)*tmp_used->team_list_elem->team; */
8702
- ierr = MPI_Comm_rank (CAF_COMM_WORLD , & caf_this_image );
8705
+ ierr = MPI_Comm_rank (CAF_COMM_WORLD , & mpi_this_image );
8703
8706
chk_err (ierr );
8704
- caf_this_image ++ ;
8707
+ caf_this_image = mpi_this_image + 1 ;
8705
8708
ierr = MPI_Comm_size (CAF_COMM_WORLD , & caf_num_images );
8706
8709
chk_err (ierr );
8707
8710
}
0 commit comments