Skip to content

Commit 0cb86e7

Browse files
committed
ompi: Avoid unnecessary PMIx lookups when adding procs.
Signed-off-by: Artem Polyakov <[email protected]>
1 parent 4184c01 commit 0cb86e7

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

ompi/proc/proc.c

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "opal/util/show_help.h"
3939
#include "opal/mca/hwloc/base/base.h"
4040
#include "opal/mca/pmix/pmix.h"
41+
#include "opal/util/argv.h"
4142

4243
#include "ompi/proc/proc.h"
4344
#include "ompi/datatype/ompi_datatype.h"
@@ -343,28 +344,23 @@ int ompi_proc_complete_init(void)
343344
opal_mutex_unlock (&ompi_proc_lock);
344345

345346
if (ompi_process_info.num_procs >= ompi_add_procs_cutoff) {
346-
uint16_t u16, *u16ptr;
347-
348-
/* find and add all local processes */
349-
for (ompi_vpid_t i = 0 ; i < ompi_process_info.num_procs ; ++i ) {
350-
opal_process_name_t proc_name = {.vpid = i, .jobid = OMPI_PROC_MY_NAME->jobid};
351-
uint16_t locality = OPAL_PROC_NON_LOCAL;
352-
353-
if (OMPI_PROC_MY_NAME->vpid == i) {
354-
continue;
355-
}
356-
357-
/* the runtime is required to fill in locality for all local processes by this
358-
* point. only local processes will have locality set */
359-
u16ptr = &u16;
360-
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, OPAL_PMIX_LOCALITY, &proc_name, &u16ptr, OPAL_UINT16);
361-
if (OPAL_SUCCESS == ret) {
362-
locality = u16;
363-
}
364-
365-
if (OPAL_PROC_NON_LOCAL != locality) {
347+
/* retrieve the local peers */
348+
OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_LOCAL_PEERS,
349+
ORTE_PROC_MY_NAME, &val, OPAL_STRING);
350+
if (OPAL_SUCCESS == ret && NULL != val) {
351+
char **peers = opal_argv_split(val, ',');
352+
int i;
353+
free(val);
354+
for (i=0; NULL != peers[i]; i++) {
355+
ompi_vpid_t local_rank = strtoul(peers[i], NULL, 10);
356+
opal_process_name_t proc_name = {.vpid = local_rank, .jobid = OMPI_PROC_MY_NAME->jobid};
357+
358+
if (OMPI_PROC_MY_NAME->vpid == local_rank) {
359+
continue;
360+
}
366361
(void) ompi_proc_for_name (proc_name);
367362
}
363+
opal_argv_free(peers);
368364
}
369365
}
370366

0 commit comments

Comments
 (0)