|
16 | 16 | * Copyright (c) 2013-2015 Intel, Inc. All rights reserved
|
17 | 17 | * Copyright (c) 2014-2017 Research Organization for Information Science
|
18 | 18 | * and Technology (RIST). All rights reserved.
|
19 |
| - * Copyright (c) 2015 Mellanox Technologies. All rights reserved. |
| 19 | + * Copyright (c) 2015-2017 Mellanox Technologies. All rights reserved. |
20 | 20 | *
|
21 | 21 | * $COPYRIGHT$
|
22 | 22 | *
|
|
38 | 38 | #include "opal/util/show_help.h"
|
39 | 39 | #include "opal/mca/hwloc/base/base.h"
|
40 | 40 | #include "opal/mca/pmix/pmix.h"
|
| 41 | +#include "opal/util/argv.h" |
41 | 42 |
|
42 | 43 | #include "ompi/proc/proc.h"
|
43 | 44 | #include "ompi/datatype/ompi_datatype.h"
|
@@ -343,28 +344,27 @@ int ompi_proc_complete_init(void)
|
343 | 344 | opal_mutex_unlock (&ompi_proc_lock);
|
344 | 345 |
|
345 | 346 | 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 | + char *val = NULL; |
| 348 | + opal_process_name_t wildcard_rank; |
| 349 | + wildcard_rank.jobid = OMPI_PROC_MY_NAME->jobid; |
| 350 | + wildcard_rank.vpid = OMPI_NAME_WILDCARD->vpid; |
| 351 | + /* retrieve the local peers */ |
| 352 | + OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_LOCAL_PEERS, |
| 353 | + &wildcard_rank, &val, OPAL_STRING); |
| 354 | + if (OPAL_SUCCESS == ret && NULL != val) { |
| 355 | + char **peers = opal_argv_split(val, ','); |
| 356 | + int i; |
| 357 | + free(val); |
| 358 | + for (i=0; NULL != peers[i]; i++) { |
| 359 | + ompi_vpid_t local_rank = strtoul(peers[i], NULL, 10); |
| 360 | + opal_process_name_t proc_name = {.vpid = local_rank, .jobid = OMPI_PROC_MY_NAME->jobid}; |
| 361 | + |
| 362 | + if (OMPI_PROC_MY_NAME->vpid == local_rank) { |
| 363 | + continue; |
| 364 | + } |
366 | 365 | (void) ompi_proc_for_name (proc_name);
|
367 | 366 | }
|
| 367 | + opal_argv_free(peers); |
368 | 368 | }
|
369 | 369 | }
|
370 | 370 |
|
|
0 commit comments