@@ -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 ;
@@ -968,10 +969,10 @@ PREFIX(init)(int *argc, char ***argv)
968
969
969
970
ierr = MPI_Comm_size (CAF_COMM_WORLD , & caf_num_images );
970
971
chk_err (ierr );
971
- ierr = MPI_Comm_rank (CAF_COMM_WORLD , & caf_this_image );
972
+ ierr = MPI_Comm_rank (CAF_COMM_WORLD , & mpi_this_image );
972
973
chk_err (ierr );
973
974
974
- ++ caf_this_image ;
975
+ caf_this_image = mpi_this_image + 1 ;
975
976
caf_is_finalized = 0 ;
976
977
977
978
/* BEGIN SYNC IMAGE preparation
@@ -1082,22 +1083,22 @@ finalize_internal(int status_code)
1082
1083
chk_err (ierr );
1083
1084
#endif
1084
1085
/* For future security enclose setting img_status in a lock. */
1085
- CAF_Win_lock (MPI_LOCK_EXCLUSIVE , caf_this_image - 1 , * stat_tok );
1086
+ CAF_Win_lock (MPI_LOCK_EXCLUSIVE , mpi_this_image , * stat_tok );
1086
1087
if (status_code == 0 )
1087
1088
{
1088
1089
img_status = STAT_STOPPED_IMAGE ;
1089
1090
#ifdef WITH_FAILED_IMAGES
1090
- image_stati [caf_this_image - 1 ] = STAT_STOPPED_IMAGE ;
1091
+ image_stati [mpi_this_image ] = STAT_STOPPED_IMAGE ;
1091
1092
#endif
1092
1093
}
1093
1094
else
1094
1095
{
1095
1096
img_status = status_code ;
1096
1097
#ifdef WITH_FAILED_IMAGES
1097
- image_stati [caf_this_image - 1 ] = status_code ;
1098
+ image_stati [mpi_this_image ] = status_code ;
1098
1099
#endif
1099
1100
}
1100
- CAF_Win_unlock (caf_this_image - 1 , * stat_tok );
1101
+ CAF_Win_unlock (mpi_this_image , * stat_tok );
1101
1102
1102
1103
/* Announce to all other images, that this one has changed its execution
1103
1104
* status. */
@@ -1464,11 +1465,11 @@ void PREFIX(register)(size_t size, caf_register_t type, caf_token_t *token,
1464
1465
if (l_var )
1465
1466
{
1466
1467
init_array = (int * )calloc (size , sizeof (int ));
1467
- CAF_Win_lock (MPI_LOCK_EXCLUSIVE , caf_this_image - 1 , * p );
1468
- ierr = MPI_Put (init_array , size , MPI_INT , caf_this_image - 1 , 0 , size ,
1468
+ CAF_Win_lock (MPI_LOCK_EXCLUSIVE , mpi_this_image , * p );
1469
+ ierr = MPI_Put (init_array , size , MPI_INT , mpi_this_image , 0 , size ,
1469
1470
MPI_INT , * p );
1470
1471
chk_err (ierr );
1471
- CAF_Win_unlock (caf_this_image - 1 , * p );
1472
+ CAF_Win_unlock (mpi_this_image , * p );
1472
1473
free (init_array );
1473
1474
}
1474
1475
@@ -1565,11 +1566,11 @@ void *PREFIX(register)(size_t size, caf_register_t type, caf_token_t *token,
1565
1566
if (l_var )
1566
1567
{
1567
1568
init_array = (int * )calloc (size , sizeof (int ));
1568
- CAF_Win_lock (MPI_LOCK_EXCLUSIVE , caf_this_image - 1 , * p );
1569
- ierr = MPI_Put (init_array , size , MPI_INT , caf_this_image - 1 , 0 , size ,
1570
- MPI_INT , * p );
1569
+ CAF_Win_lock (MPI_LOCK_EXCLUSIVE , mpi_this_image , * p );
1570
+ ierr = MPI_Put (init_array , size , MPI_INT , mpi_this_image , 0 , size , MPI_INT ,
1571
+ * p );
1571
1572
chk_err (ierr );
1572
- CAF_Win_unlock (caf_this_image - 1 , * p );
1573
+ CAF_Win_unlock (mpi_this_image , * p );
1573
1574
free (init_array );
1574
1575
}
1575
1576
@@ -3672,16 +3673,23 @@ PREFIX(get)(caf_token_t token, size_t offset, int image_index,
3672
3673
bool free_pad_str = false, free_t_buff = false;
3673
3674
const bool dest_char_array_is_longer
3674
3675
= dst_type == BT_CHARACTER && dst_size > src_size && !same_image ;
3675
- int remote_image = image_index - 1 ;
3676
+ int remote_image = image_index - 1 , this_image = mpi_this_image ;
3677
+
3676
3678
if (!same_image )
3677
3679
{
3678
3680
MPI_Group current_team_group , win_group ;
3681
+ int trans_ranks [2 ];
3679
3682
ierr = MPI_Comm_group (CAF_COMM_WORLD , & current_team_group );
3680
3683
chk_err (ierr );
3681
3684
ierr = MPI_Win_get_group (* p , & win_group );
3682
3685
chk_err (ierr );
3683
- ierr = MPI_Group_translate_ranks (
3684
- current_team_group , 1 , (int []){remote_image }, win_group , & remote_image );
3686
+ ierr = MPI_Group_translate_ranks (current_team_group , 2 ,
3687
+ (int []){remote_image , this_image },
3688
+ win_group , trans_ranks );
3689
+ dprint ("rank translation: remote: %d -> %d, this: %d -> %d.\n" ,
3690
+ remote_image , trans_ranks [0 ], this_image , trans_ranks [1 ]);
3691
+ remote_image = trans_ranks [0 ];
3692
+ this_image = trans_ranks [1 ];
3685
3693
chk_err (ierr );
3686
3694
ierr = MPI_Group_free (& current_team_group );
3687
3695
chk_err (ierr );
@@ -3711,8 +3719,8 @@ PREFIX(get)(caf_token_t token, size_t offset, int image_index,
3711
3719
if (size == 0 )
3712
3720
return ;
3713
3721
3714
- dprint ("src_vector = %p, image_index = %d, offset = %zd.\n" , src_vector ,
3715
- image_index , offset );
3722
+ dprint ("src_vector = %p, image_index = %d (remote = %d) , offset = %zd.\n" ,
3723
+ src_vector , image_index , remote_image , offset );
3716
3724
check_image_health (image_index , stat );
3717
3725
3718
3726
/* For char arrays: create the padding array, when dst is longer than src. */
@@ -8100,8 +8108,7 @@ PREFIX(atomic_define)(caf_token_t token, size_t offset, int image_index,
8100
8108
{
8101
8109
MPI_Win * p = TOKEN (token );
8102
8110
MPI_Datatype dt ;
8103
- int ierr = 0 ,
8104
- image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8111
+ int ierr = 0 , image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8105
8112
8106
8113
selectType (kind , & dt );
8107
8114
@@ -8132,8 +8139,7 @@ PREFIX(atomic_ref)(caf_token_t token, size_t offset, int image_index,
8132
8139
{
8133
8140
MPI_Win * p = TOKEN (token );
8134
8141
MPI_Datatype dt ;
8135
- int ierr = 0 ,
8136
- image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8142
+ int ierr = 0 , image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8137
8143
8138
8144
selectType (kind , & dt );
8139
8145
@@ -8164,8 +8170,7 @@ PREFIX(atomic_cas)(caf_token_t token, size_t offset, int image_index, void *old,
8164
8170
{
8165
8171
MPI_Win * p = TOKEN (token );
8166
8172
MPI_Datatype dt ;
8167
- int ierr = 0 ,
8168
- image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8173
+ int ierr = 0 , image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8169
8174
8170
8175
selectType (kind , & dt );
8171
8176
@@ -8196,7 +8201,7 @@ PREFIX(atomic_op)(int op, caf_token_t token, size_t offset, int image_index,
8196
8201
int ierr = 0 ;
8197
8202
MPI_Datatype dt ;
8198
8203
MPI_Win * p = TOKEN (token );
8199
- int image = (image_index != 0 ) ? image_index - 1 : caf_this_image - 1 ;
8204
+ int image = (image_index != 0 ) ? image_index - 1 : mpi_this_image ;
8200
8205
8201
8206
#if MPI_VERSION >= 3
8202
8207
old = malloc (kind );
@@ -8251,7 +8256,7 @@ PREFIX(event_post)(caf_token_t token, size_t index, int image_index, int *stat,
8251
8256
int value = 1 , ierr = 0 , flag ;
8252
8257
MPI_Win * p = TOKEN (token );
8253
8258
const char msg [] = "Error on event post" ;
8254
- int image = (image_index == 0 ) ? caf_this_image - 1 : image_index - 1 ;
8259
+ int image = (image_index == 0 ) ? mpi_this_image : image_index - 1 ;
8255
8260
8256
8261
if (stat != NULL )
8257
8262
* stat = 0 ;
@@ -8289,7 +8294,7 @@ void
8289
8294
PREFIX (event_wait )(caf_token_t token , size_t index , int until_count , int * stat ,
8290
8295
char * errmsg , charlen_t errmsg_len )
8291
8296
{
8292
- int ierr = 0 , count = 0 , i , image = caf_this_image - 1 ;
8297
+ int ierr = 0 , count = 0 , i , image = mpi_this_image ;
8293
8298
int * var = NULL , flag , old = 0 , newval = 0 ;
8294
8299
const int spin_loop_max = 20000 ;
8295
8300
MPI_Win * p = TOKEN (token );
@@ -8355,8 +8360,7 @@ PREFIX(event_query)(caf_token_t token, size_t index, int image_index,
8355
8360
int * count , int * stat )
8356
8361
{
8357
8362
MPI_Win * p = TOKEN (token );
8358
- int ierr = 0 ,
8359
- image = (image_index == 0 ) ? caf_this_image - 1 : image_index - 1 ;
8363
+ int ierr = 0 , image = (image_index == 0 ) ? mpi_this_image : image_index - 1 ;
8360
8364
8361
8365
if (stat != NULL )
8362
8366
* stat = 0 ;
@@ -8695,13 +8699,12 @@ PREFIX(form_team)(int team_id, caf_team_t *team,
8695
8699
int index __attribute__((unused )))
8696
8700
{
8697
8701
struct caf_teams_list * tmp ;
8698
- void * tmp_team ;
8699
8702
MPI_Comm * newcomm ;
8700
- MPI_Comm * current_comm = & CAF_COMM_WORLD ;
8703
+ MPI_Comm current_comm = CAF_COMM_WORLD ;
8701
8704
int ierr ;
8702
8705
8703
8706
newcomm = (MPI_Comm * )calloc (1 , sizeof (MPI_Comm ));
8704
- ierr = MPI_Comm_split (* current_comm , team_id , caf_this_image , newcomm );
8707
+ ierr = MPI_Comm_split (current_comm , team_id , mpi_this_image , newcomm );
8705
8708
chk_err (ierr );
8706
8709
8707
8710
tmp = calloc (1 , sizeof (struct caf_teams_list ));
@@ -8751,9 +8754,9 @@ PREFIX(change_team)(caf_team_t *team, int coselector __attribute__((unused)))
8751
8754
tmp_team = tmp_used -> team_list_elem -> team ;
8752
8755
tmp_comm = (MPI_Comm * )tmp_team ;
8753
8756
CAF_COMM_WORLD = * tmp_comm ;
8754
- int ierr = MPI_Comm_rank (* tmp_comm , & caf_this_image );
8757
+ int ierr = MPI_Comm_rank (* tmp_comm , & mpi_this_image );
8755
8758
chk_err (ierr );
8756
- caf_this_image ++ ;
8759
+ caf_this_image = mpi_this_image + 1 ;
8757
8760
ierr = MPI_Comm_size (* tmp_comm , & caf_num_images );
8758
8761
chk_err (ierr );
8759
8762
ierr = MPI_Barrier (* tmp_comm );
@@ -8804,9 +8807,9 @@ PREFIX(end_team)(caf_team_t *team __attribute__((unused)))
8804
8807
tmp_comm = (MPI_Comm * )tmp_team ;
8805
8808
CAF_COMM_WORLD = * tmp_comm ;
8806
8809
/* CAF_COMM_WORLD = (MPI_Comm)*tmp_used->team_list_elem->team; */
8807
- ierr = MPI_Comm_rank (CAF_COMM_WORLD , & caf_this_image );
8810
+ ierr = MPI_Comm_rank (CAF_COMM_WORLD , & mpi_this_image );
8808
8811
chk_err (ierr );
8809
- caf_this_image ++ ;
8812
+ caf_this_image = mpi_this_image + 1 ;
8810
8813
ierr = MPI_Comm_size (CAF_COMM_WORLD , & caf_num_images );
8811
8814
chk_err (ierr );
8812
8815
}
0 commit comments