Skip to content

Commit 0f2c70c

Browse files
ompi/group: fix proc pointer comparison in groups
To avoid checking sentinel process pointers to the original `ompi_proc_t` pointers compare the processes in the groups using process names. Signed-off-by: Aboorva Devarajan <abodevar@in.ibm.com>
1 parent 1049307 commit 0f2c70c

File tree

2 files changed

+16
-16
lines changed

2 files changed

+16
-16
lines changed

ompi/group/group.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,20 +102,20 @@ int ompi_group_translate_ranks ( ompi_group_t *group1,
102102

103103
/* loop over all ranks */
104104
for (int proc = 0; proc < n_ranks; ++proc) {
105-
struct ompi_proc_t *proc1_pointer, *proc2_pointer;
105+
ompi_process_name_t proc1_name, proc2_name;
106106
int rank = ranks1[proc];
107107

108108
if ( MPI_PROC_NULL == rank) {
109109
ranks2[proc] = MPI_PROC_NULL;
110110
continue;
111111
}
112112

113-
proc1_pointer = ompi_group_get_proc_ptr_raw (group1, rank);
113+
proc1_name = ompi_group_get_proc_name(group1, rank);
114114
/* initialize to no "match" */
115115
ranks2[proc] = MPI_UNDEFINED;
116116
for (int proc2 = 0; proc2 < group2->grp_proc_count; ++proc2) {
117-
proc2_pointer = ompi_group_get_proc_ptr_raw (group2, proc2);
118-
if ( proc1_pointer == proc2_pointer) {
117+
proc2_name = ompi_group_get_proc_name(group2, proc2);
118+
if(0 == opal_compare_proc(proc1_name, proc2_name)) {
119119
ranks2[proc] = proc2;
120120
break;
121121
}
@@ -446,7 +446,7 @@ int ompi_group_intersection(ompi_group_t* group1,ompi_group_t* group2,
446446
int proc1,proc2,k, result;
447447
int *ranks_included=NULL;
448448
ompi_group_t *group1_pointer, *group2_pointer;
449-
ompi_proc_t *proc1_pointer, *proc2_pointer;
449+
ompi_process_name_t proc1_name, proc2_name;
450450

451451
group1_pointer=(ompi_group_t *)group1;
452452
group2_pointer=(ompi_group_t *)group2;
@@ -462,14 +462,14 @@ int ompi_group_intersection(ompi_group_t* group1,ompi_group_t* group2,
462462
/* determine the list of included processes for the incl-method */
463463
k = 0;
464464
for (proc1 = 0; proc1 < group1_pointer->grp_proc_count; proc1++) {
465-
proc1_pointer = ompi_group_peer_lookup (group1_pointer , proc1);
465+
proc1_name = ompi_group_get_proc_name(group1_pointer , proc1);
466466

467467
/* check to see if this proc is in group2 */
468468

469469
for (proc2 = 0; proc2 < group2_pointer->grp_proc_count; proc2++) {
470-
proc2_pointer = ompi_group_peer_lookup (group2_pointer ,proc2);
470+
proc2_name = ompi_group_get_proc_name(group2_pointer ,proc2);
471471

472-
if( proc1_pointer == proc2_pointer ) {
472+
if(0 == opal_compare_proc(proc1_name, proc2_name)) {
473473
ranks_included[k] = proc1;
474474
k++;
475475
break;
@@ -494,7 +494,7 @@ int ompi_group_compare(ompi_group_t *group1,
494494
int proc1, proc2, match;
495495
bool similar, identical;
496496
ompi_group_t *group1_pointer, *group2_pointer;
497-
ompi_proc_t *proc1_pointer, *proc2_pointer;
497+
opal_process_name_t proc1_name, proc2_name;
498498

499499
/* check for same groups */
500500
if( group1 == group2 ) {
@@ -524,12 +524,12 @@ int ompi_group_compare(ompi_group_t *group1,
524524
similar=true;
525525
identical=true;
526526
for(proc1=0 ; proc1 < group1_pointer->grp_proc_count ; proc1++ ) {
527-
proc1_pointer= ompi_group_peer_lookup(group1_pointer,proc1);
527+
proc1_name=ompi_group_get_proc_name(group1_pointer,proc1);
528528
/* loop over group2 processes to find "match" */
529529
match=-1;
530530
for(proc2=0 ; proc2 < group2_pointer->grp_proc_count ; proc2++ ) {
531-
proc2_pointer=ompi_group_peer_lookup(group2_pointer,proc2);
532-
if( proc1_pointer == proc2_pointer ) {
531+
proc2_name=ompi_group_get_proc_name(group2_pointer,proc2);
532+
if(0 == opal_compare_proc(proc1_name, proc2_name)) {
533533
if(proc1 != proc2 ) {
534534
identical=false;
535535
}

ompi/group/group_plist.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,18 @@
3535

3636
static int ompi_group_dense_overlap (ompi_group_t *group1, ompi_group_t *group2, opal_bitmap_t *bitmap)
3737
{
38-
ompi_proc_t *proc1_pointer, *proc2_pointer;
38+
ompi_process_name_t proc1_name, proc2_name;
3939
int rc, overlap_count;
4040

4141
overlap_count = 0;
4242

4343
for (int proc1 = 0 ; proc1 < group1->grp_proc_count ; ++proc1) {
44-
proc1_pointer = ompi_group_get_proc_ptr_raw (group1, proc1);
44+
proc1_name = ompi_group_get_proc_name(group1, proc1);
4545

4646
/* check to see if this proc is in group2 */
4747
for (int proc2 = 0 ; proc2 < group2->grp_proc_count ; ++proc2) {
48-
proc2_pointer = ompi_group_get_proc_ptr_raw (group2, proc2);
49-
if( proc1_pointer == proc2_pointer ) {
48+
proc2_name = ompi_group_get_proc_name(group2, proc2);
49+
if(0 == opal_compare_proc(proc1_name, proc2_name)) {
5050
rc = opal_bitmap_set_bit (bitmap, proc2);
5151
if (OPAL_SUCCESS != rc) {
5252
return rc;

0 commit comments

Comments
 (0)