group: Fix ompi_group_have_remote_peers
`ompi_group_t::grp_proc_pointers[i]` may have sentinel values even for processes which reside in the local node because the array for `MPI_COMM_WORLD` is set up before `ompi_proc_complete_init`, which allocates `ompi_proc_t` objects for processes reside in the local node, is called in `MPI_INIT`. So using `ompi_proc_is_sentinel` against `ompi_group_t::grp_proc_pointers[i]` in order to determine whether the process resides in a remote node is not appropriate. This bug sometimes causes an `MPI_ERR_RMA_SHARED` error when `MPI_WIN_ALLOCATE_SHARED` is called, where sm OSC uses `ompi_group_have_remote_peers`. Signed-off-by: KAWASHIMA Takahiro <t-kawashima@jp.fujitsu.com>
This commit is contained in:
parent
9841ad3035
commit
e453e42279
@ -563,10 +563,13 @@ bool ompi_group_have_remote_peers (ompi_group_t *group)
|
||||
#if OMPI_GROUP_SPARSE
|
||||
proc = ompi_group_peer_lookup (group, i);
|
||||
#else
|
||||
if (ompi_proc_is_sentinel (group->grp_proc_pointers[i])) {
|
||||
proc = ompi_group_get_proc_ptr_raw (group, i);
|
||||
if (ompi_proc_is_sentinel (proc)) {
|
||||
/* the proc must be stored in the group or cached in the proc
|
||||
* hash table if the process resides in the local node
|
||||
* (see ompi_proc_complete_init) */
|
||||
return true;
|
||||
}
|
||||
proc = group->grp_proc_pointers[i];
|
||||
#endif
|
||||
if (!OPAL_PROC_ON_LOCAL_NODE(proc->super.proc_flags)) {
|
||||
return true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user