@@ -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 ;
@@ -898,10 +899,10 @@ PREFIX(init)(int *argc, char ***argv)
898
899
899
900
ierr = MPI_Comm_size (CAF_COMM_WORLD , & caf_num_images );
900
901
chk_err (ierr );
901
- ierr = MPI_Comm_rank (CAF_COMM_WORLD , & caf_this_image );
902
+ ierr = MPI_Comm_rank (CAF_COMM_WORLD , & mpi_this_image );
902
903
chk_err (ierr );
903
904
904
- ++ caf_this_image ;
905
+ caf_this_image = mpi_this_image + 1 ;
905
906
caf_is_finalized = 0 ;
906
907
907
908
/* BEGIN SYNC IMAGE preparation
@@ -1007,22 +1008,22 @@ finalize_internal(int status_code)
1007
1008
chk_err (ierr );
1008
1009
#endif
1009
1010
/* For future security enclose setting img_status in a lock. */
1010
- CAF_Win_lock (MPI_LOCK_EXCLUSIVE , caf_this_image - 1 , * stat_tok );
1011
+ CAF_Win_lock (MPI_LOCK_EXCLUSIVE , mpi_this_image , * stat_tok );
1011
1012
if (status_code == 0 )
1012
1013
{
1013
1014
img_status = STAT_STOPPED_IMAGE ;
1014
1015
#ifdef WITH_FAILED_IMAGES
1015
- image_stati [caf_this_image - 1 ] = STAT_STOPPED_IMAGE ;
1016
+ image_stati [mpi_this_image ] = STAT_STOPPED_IMAGE ;
1016
1017
#endif
1017
1018
}
1018
1019
else
1019
1020
{
1020
1021
img_status = status_code ;
1021
1022
#ifdef WITH_FAILED_IMAGES
1022
- image_stati [caf_this_image - 1 ] = status_code ;
1023
+ image_stati [mpi_this_image ] = status_code ;
1023
1024
#endif
1024
1025
}
1025
- CAF_Win_unlock (caf_this_image - 1 , * stat_tok );
1026
+ CAF_Win_unlock (mpi_this_image , * stat_tok );
1026
1027
1027
1028
/* Announce to all other images, that this one has changed its execution
1028
1029
* status. */
@@ -1368,11 +1369,11 @@ void PREFIX(register)(size_t size, caf_register_t type, caf_token_t *token,
1368
1369
if (l_var )
1369
1370
{
1370
1371
init_array = (int * )calloc (size , sizeof (int ));
1371
- CAF_Win_lock (MPI_LOCK_EXCLUSIVE , caf_this_image - 1 , * p );
1372
- ierr = MPI_Put (init_array , size , MPI_INT , caf_this_image - 1 , 0 , size ,
1372
+ CAF_Win_lock (MPI_LOCK_EXCLUSIVE , mpi_this_image , * p );
1373
+ ierr = MPI_Put (init_array , size , MPI_INT , mpi_this_image , 0 , size ,
1373
1374
MPI_INT , * p );
1374
1375
chk_err (ierr );
1375
- CAF_Win_unlock (caf_this_image - 1 , * p );
1376
+ CAF_Win_unlock (mpi_this_image , * p );
1376
1377
free (init_array );
1377
1378
}
1378
1379
@@ -1469,11 +1470,11 @@ void *PREFIX(register)(size_t size, caf_register_t type, caf_token_t *token,
1469
1470
if (l_var )
1470
1471
{
1471
1472
init_array = (int * )calloc (size , sizeof (int ));
1472
- CAF_Win_lock (MPI_LOCK_EXCLUSIVE , caf_this_image - 1 , * p );
1473
- ierr = MPI_Put (init_array , size , MPI_INT , caf_this_image - 1 , 0 , size ,
1474
- MPI_INT , * p );
1473
+ CAF_Win_lock (MPI_LOCK_EXCLUSIVE , mpi_this_image , * p );
1474
+ ierr = MPI_Put (init_array , size , MPI_INT , mpi_this_image , 0 , size , MPI_INT ,
1475
+ * p );
1475
1476
chk_err (ierr );
1476
- CAF_Win_unlock (caf_this_image - 1 , * p );
1477
+ CAF_Win_unlock (mpi_this_image , * p );
1477
1478
free (init_array );
1478
1479
}
1479
1480
@@ -3576,16 +3577,23 @@ PREFIX(get)(caf_token_t token, size_t offset, int image_index,
3576
3577
bool free_pad_str = false, free_t_buff = false;
3577
3578
const bool dest_char_array_is_longer
3578
3579
= dst_type == BT_CHARACTER && dst_size > src_size && !same_image ;
3579
- int remote_image = image_index - 1 ;
3580
+ int remote_image = image_index - 1 , this_image = mpi_this_image ;
3581
+
3580
3582
if (!same_image )
3581
3583
{
3582
3584
MPI_Group current_team_group , win_group ;
3585
+ int trans_ranks [2 ];
3583
3586
ierr = MPI_Comm_group (CAF_COMM_WORLD , & current_team_group );
3584
3587
chk_err (ierr );
3585
3588
ierr = MPI_Win_get_group (* p , & win_group );
3586
3589
chk_err (ierr );
3587
- ierr = MPI_Group_translate_ranks (
3588
- current_team_group , 1 , (int []){remote_image }, win_group , & remote_image );
3590
+ ierr = MPI_Group_translate_ranks (current_team_group , 2 ,
3591
+ (int []){remote_image , this_image },
3592
+ win_group , trans_ranks );
3593
+ dprint ("rank translation: remote: %d -> %d, this: %d -> %d.\n" ,
3594
+ remote_image , trans_ranks [0 ], this_image , trans_ranks [1 ]);
3595
+ remote_image = trans_ranks [0 ];
3596
+ this_image = trans_ranks [1 ];
3589
3597
chk_err (ierr );
3590
3598
ierr = MPI_Group_free (& current_team_group );
3591
3599
chk_err (ierr );
@@ -3615,8 +3623,8 @@ PREFIX(get)(caf_token_t token, size_t offset, int image_index,
3615
3623
if (size == 0 )
3616
3624
return ;
3617
3625
3618
- dprint ("src_vector = %p, image_index = %d, offset = %zd.\n" , src_vector ,
3619
- image_index , offset );
3626
+ dprint ("src_vector = %p, image_index = %d (remote = %d) , offset = %zd.\n" ,
3627
+ src_vector , image_index , remote_image , offset );
3620
3628
check_image_health (image_index , stat );
3621
3629
3622
3630
/* For char arrays: create the padding array, when dst is longer than src. */
@@ -7992,8 +8000,7 @@ PREFIX(atomic_define)(caf_token_t token, size_t offset, int image_index,
7992
8000
{
7993
8001
MPI_Win * p = TOKEN (token );
7994
8002
MPI_Datatype dt ;
7995
- int ierr = 0 ,
7996
- image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8003
+ int ierr = 0 , image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
7997
8004
7998
8005
selectType (kind , & dt );
7999
8006
@@ -8024,8 +8031,7 @@ PREFIX(atomic_ref)(caf_token_t token, size_t offset, int image_index,
8024
8031
{
8025
8032
MPI_Win * p = TOKEN (token );
8026
8033
MPI_Datatype dt ;
8027
- int ierr = 0 ,
8028
- image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8034
+ int ierr = 0 , image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8029
8035
8030
8036
selectType (kind , & dt );
8031
8037
@@ -8056,8 +8062,7 @@ PREFIX(atomic_cas)(caf_token_t token, size_t offset, int image_index, void *old,
8056
8062
{
8057
8063
MPI_Win * p = TOKEN (token );
8058
8064
MPI_Datatype dt ;
8059
- int ierr = 0 ,
8060
- image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8065
+ int ierr = 0 , image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8061
8066
8062
8067
selectType (kind , & dt );
8063
8068
@@ -8088,7 +8093,7 @@ PREFIX(atomic_op)(int op, caf_token_t token, size_t offset, int image_index,
8088
8093
int ierr = 0 ;
8089
8094
MPI_Datatype dt ;
8090
8095
MPI_Win * p = TOKEN (token );
8091
- int image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8096
+ int image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8092
8097
8093
8098
#if MPI_VERSION >= 3
8094
8099
old = malloc (kind );
@@ -8143,7 +8148,7 @@ PREFIX(event_post)(caf_token_t token, size_t index, int image_index, int *stat,
8143
8148
int value = 1 , ierr = 0 , flag ;
8144
8149
MPI_Win * p = TOKEN (token );
8145
8150
const char msg [] = "Error on event post" ;
8146
- int image = (image_index == 0 ) ? caf_this_image - 1 : image_index - 1 ;
8151
+ int image = (image_index == 0 ) ? mpi_this_image : image_index - 1 ;
8147
8152
8148
8153
if (stat != NULL )
8149
8154
* stat = 0 ;
@@ -8181,7 +8186,7 @@ void
8181
8186
PREFIX (event_wait )(caf_token_t token , size_t index , int until_count , int * stat ,
8182
8187
char * errmsg , charlen_t errmsg_len )
8183
8188
{
8184
- int ierr = 0 , count = 0 , i , image = caf_this_image - 1 ;
8189
+ int ierr = 0 , count = 0 , i , image = mpi_this_image ;
8185
8190
int * var = NULL , flag , old = 0 , newval = 0 ;
8186
8191
const int spin_loop_max = 20000 ;
8187
8192
MPI_Win * p = TOKEN (token );
@@ -8247,8 +8252,7 @@ PREFIX(event_query)(caf_token_t token, size_t index, int image_index,
8247
8252
int * count , int * stat )
8248
8253
{
8249
8254
MPI_Win * p = TOKEN (token );
8250
- int ierr = 0 ,
8251
- image = (image_index == 0 ) ? caf_this_image - 1 : image_index - 1 ;
8255
+ int ierr = 0 , image = (image_index == 0 ) ? mpi_this_image : image_index - 1 ;
8252
8256
8253
8257
if (stat != NULL )
8254
8258
* stat = 0 ;
@@ -8587,13 +8591,12 @@ PREFIX(form_team)(int team_id, caf_team_t *team,
8587
8591
int index __attribute__((unused )))
8588
8592
{
8589
8593
struct caf_teams_list * tmp ;
8590
- void * tmp_team ;
8591
8594
MPI_Comm * newcomm ;
8592
- MPI_Comm * current_comm = & CAF_COMM_WORLD ;
8595
+ MPI_Comm current_comm = CAF_COMM_WORLD ;
8593
8596
int ierr ;
8594
8597
8595
8598
newcomm = (MPI_Comm * )calloc (1 , sizeof (MPI_Comm ));
8596
- ierr = MPI_Comm_split (* current_comm , team_id , caf_this_image , newcomm );
8599
+ ierr = MPI_Comm_split (current_comm , team_id , mpi_this_image , newcomm );
8597
8600
chk_err (ierr );
8598
8601
8599
8602
tmp = calloc (1 , sizeof (struct caf_teams_list ));
@@ -8643,9 +8646,9 @@ PREFIX(change_team)(caf_team_t *team, int coselector __attribute__((unused)))
8643
8646
tmp_team = tmp_used -> team_list_elem -> team ;
8644
8647
tmp_comm = (MPI_Comm * )tmp_team ;
8645
8648
CAF_COMM_WORLD = * tmp_comm ;
8646
- int ierr = MPI_Comm_rank (* tmp_comm , & caf_this_image );
8649
+ int ierr = MPI_Comm_rank (* tmp_comm , & mpi_this_image );
8647
8650
chk_err (ierr );
8648
- caf_this_image ++ ;
8651
+ caf_this_image = mpi_this_image + 1 ;
8649
8652
ierr = MPI_Comm_size (* tmp_comm , & caf_num_images );
8650
8653
chk_err (ierr );
8651
8654
ierr = MPI_Barrier (* tmp_comm );
@@ -8696,9 +8699,9 @@ PREFIX(end_team)(caf_team_t *team __attribute__((unused)))
8696
8699
tmp_comm = (MPI_Comm * )tmp_team ;
8697
8700
CAF_COMM_WORLD = * tmp_comm ;
8698
8701
/* CAF_COMM_WORLD = (MPI_Comm)*tmp_used->team_list_elem->team; */
8699
- ierr = MPI_Comm_rank (CAF_COMM_WORLD , & caf_this_image );
8702
+ ierr = MPI_Comm_rank (CAF_COMM_WORLD , & mpi_this_image );
8700
8703
chk_err (ierr );
8701
- caf_this_image ++ ;
8704
+ caf_this_image = mpi_this_image + 1 ;
8702
8705
ierr = MPI_Comm_size (CAF_COMM_WORLD , & caf_num_images );
8703
8706
chk_err (ierr );
8704
8707
}
0 commit comments