Fetch info from both opal_dstore_nonpeer and opal_dstore_peer
This conservative fixes tries to fetch info from both opal_dstore_nonpeer and opal_dstore_peer. This is required is task A spawns tasks B and C. B was previously unable to find info from C, this caused locality info not being set and a hang in coll/ml init. no CMR is required since v1.8 uses a unique dstore This commit was SVN r31923.
Этот коммит содержится в:
родитель
d1bcd103ac
Коммит
c930e44bad
@ -13,6 +13,8 @@
|
|||||||
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2013-2014 Intel, Inc. All rights reserved
|
* Copyright (c) 2013-2014 Intel, Inc. All rights reserved
|
||||||
|
* Copyright (c) 2014 Research Organization for Information Science
|
||||||
|
* and Technology (RIST). All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -155,8 +157,12 @@ int ompi_proc_set_locality(ompi_proc_t *proc)
|
|||||||
if (OMPI_SUCCESS != (ret = opal_dstore.fetch(opal_dstore_nonpeer,
|
if (OMPI_SUCCESS != (ret = opal_dstore.fetch(opal_dstore_nonpeer,
|
||||||
(opal_identifier_t*)&proc->proc_name,
|
(opal_identifier_t*)&proc->proc_name,
|
||||||
OMPI_RTE_NODE_ID, &myvals))) {
|
OMPI_RTE_NODE_ID, &myvals))) {
|
||||||
OPAL_LIST_DESTRUCT(&myvals);
|
if (OMPI_SUCCESS != (ret = opal_dstore.fetch(opal_dstore_peer,
|
||||||
return ret;
|
(opal_identifier_t*)&proc->proc_name,
|
||||||
|
OMPI_RTE_NODE_ID, &myvals))) {
|
||||||
|
OPAL_LIST_DESTRUCT(&myvals);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
kv = (opal_value_t*)opal_list_get_first(&myvals);
|
kv = (opal_value_t*)opal_list_get_first(&myvals);
|
||||||
vpid = kv->data.uint32;
|
vpid = kv->data.uint32;
|
||||||
@ -198,9 +204,13 @@ int ompi_proc_set_locality(ompi_proc_t *proc)
|
|||||||
(opal_identifier_t*)&proc->proc_name,
|
(opal_identifier_t*)&proc->proc_name,
|
||||||
OPAL_DSTORE_CPUSET, &myvals))) {
|
OPAL_DSTORE_CPUSET, &myvals))) {
|
||||||
/* check the nonpeer data in case of comm_spawn */
|
/* check the nonpeer data in case of comm_spawn */
|
||||||
ret = opal_dstore.fetch(opal_dstore_nonpeer,
|
if (OMPI_SUCCESS != ( ret = opal_dstore.fetch(opal_dstore_nonpeer,
|
||||||
(opal_identifier_t*)&proc->proc_name,
|
(opal_identifier_t*)&proc->proc_name,
|
||||||
OPAL_DSTORE_CPUSET, &myvals);
|
OPAL_DSTORE_CPUSET, &myvals))) {
|
||||||
|
ret = opal_dstore.fetch(opal_dstore_peer,
|
||||||
|
(opal_identifier_t*)&proc->proc_name,
|
||||||
|
OPAL_DSTORE_CPUSET, &myvals);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (OMPI_SUCCESS != ret) {
|
if (OMPI_SUCCESS != ret) {
|
||||||
/* we don't know their cpuset, so nothing more we can say */
|
/* we don't know their cpuset, so nothing more we can say */
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user