Ensure the process knows it local cpuset early enough to perform the locality computation
This commit was SVN r28221.
Этот коммит содержится в:
родитель
36b940b685
Коммит
24b91839aa
@ -51,6 +51,7 @@ int orte_ess_base_proc_binding(void)
|
|||||||
char *map;
|
char *map;
|
||||||
int ret;
|
int ret;
|
||||||
char *error;
|
char *error;
|
||||||
|
hwloc_cpuset_t mycpus;
|
||||||
|
|
||||||
/* Determine if we were pre-bound or not */
|
/* Determine if we were pre-bound or not */
|
||||||
if (NULL != getenv("OMPI_MCA_orte_bound_at_launch")) {
|
if (NULL != getenv("OMPI_MCA_orte_bound_at_launch")) {
|
||||||
@ -253,25 +254,37 @@ int orte_ess_base_proc_binding(void)
|
|||||||
* times, so it's more efficient to keep a global copy
|
* times, so it's more efficient to keep a global copy
|
||||||
*/
|
*/
|
||||||
opal_hwloc_base_get_local_cpuset();
|
opal_hwloc_base_get_local_cpuset();
|
||||||
/* report bindings, if requested */
|
|
||||||
if (opal_hwloc_report_bindings) {
|
/* get the cpus we are bound to */
|
||||||
char tmp1[1024], tmp2[1024];
|
mycpus = hwloc_bitmap_alloc();
|
||||||
hwloc_cpuset_t mycpus;
|
if (hwloc_get_cpubind(opal_hwloc_topology,
|
||||||
/* get the cpus we are bound to */
|
mycpus,
|
||||||
mycpus = hwloc_bitmap_alloc();
|
HWLOC_CPUBIND_PROCESS) < 0) {
|
||||||
if (hwloc_get_cpubind(opal_hwloc_topology,
|
if (NULL != orte_process_info.cpuset) {
|
||||||
mycpus,
|
free(orte_process_info.cpuset);
|
||||||
HWLOC_CPUBIND_PROCESS) < 0) {
|
orte_process_info.cpuset = NULL;
|
||||||
|
}
|
||||||
|
if (opal_hwloc_report_bindings) {
|
||||||
opal_output(0, "MCW rank %d is not bound",
|
opal_output(0, "MCW rank %d is not bound",
|
||||||
ORTE_PROC_MY_NAME->vpid);
|
ORTE_PROC_MY_NAME->vpid);
|
||||||
} else {
|
}
|
||||||
|
} else {
|
||||||
|
/* store/update the string representation of our local binding */
|
||||||
|
if (NULL != orte_process_info.cpuset) {
|
||||||
|
free(orte_process_info.cpuset);
|
||||||
|
orte_process_info.cpuset = NULL;
|
||||||
|
}
|
||||||
|
hwloc_bitmap_list_asprintf(&orte_process_info.cpuset, mycpus);
|
||||||
|
/* report the binding, if requested */
|
||||||
|
if (opal_hwloc_report_bindings) {
|
||||||
|
char tmp1[1024], tmp2[1024];
|
||||||
opal_hwloc_base_cset2str(tmp1, sizeof(tmp1), mycpus);
|
opal_hwloc_base_cset2str(tmp1, sizeof(tmp1), mycpus);
|
||||||
opal_hwloc_base_cset2mapstr(tmp2, sizeof(tmp2), mycpus);
|
opal_hwloc_base_cset2mapstr(tmp2, sizeof(tmp2), mycpus);
|
||||||
opal_output(0, "MCW rank %d bound to %s: %s",
|
opal_output(0, "MCW rank %d bound to %s: %s",
|
||||||
ORTE_PROC_MY_NAME->vpid, tmp1, tmp2);
|
ORTE_PROC_MY_NAME->vpid, tmp1, tmp2);
|
||||||
}
|
}
|
||||||
hwloc_bitmap_free(mycpus);
|
|
||||||
}
|
}
|
||||||
|
hwloc_bitmap_free(mycpus);
|
||||||
|
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
|
|
||||||
|
@ -662,7 +662,6 @@ int orte_util_encode_pidmap(opal_byte_object_t *boptr, bool update)
|
|||||||
ORTE_ERROR_LOG(rc);
|
ORTE_ERROR_LOG(rc);
|
||||||
goto cleanup_and_return;
|
goto cleanup_and_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cycle thru the job's procs, including only those that have
|
/* cycle thru the job's procs, including only those that have
|
||||||
* been updated so we minimize the amount of info being sent
|
* been updated so we minimize the amount of info being sent
|
||||||
*/
|
*/
|
||||||
@ -843,6 +842,11 @@ int orte_util_decode_pidmap(opal_byte_object_t *bo)
|
|||||||
/* set mine */
|
/* set mine */
|
||||||
orte_process_info.my_local_rank = local_rank;
|
orte_process_info.my_local_rank = local_rank;
|
||||||
orte_process_info.my_node_rank = node_rank;
|
orte_process_info.my_node_rank = node_rank;
|
||||||
|
#if OPAL_HAVE_HWLOC
|
||||||
|
if (NULL != cpu_bitmap) {
|
||||||
|
orte_process_info.cpuset = strdup(cpu_bitmap);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
/* apps don't need the rest of the data in the buffer for this proc,
|
/* apps don't need the rest of the data in the buffer for this proc,
|
||||||
* but we have to unpack it anyway to stay in sync
|
* but we have to unpack it anyway to stay in sync
|
||||||
@ -881,6 +885,9 @@ int orte_util_decode_pidmap(opal_byte_object_t *bo)
|
|||||||
ORTE_ERROR_LOG(rc);
|
ORTE_ERROR_LOG(rc);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
if (NULL != cpu_bitmap) {
|
||||||
|
free(cpu_bitmap);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
/* we don't need to store the rest of the values
|
/* we don't need to store the rest of the values
|
||||||
* for ourself in the database
|
* for ourself in the database
|
||||||
@ -1032,7 +1039,6 @@ int orte_util_decode_daemon_pidmap(opal_byte_object_t *bo)
|
|||||||
orte_local_rank_t local_rank;
|
orte_local_rank_t local_rank;
|
||||||
orte_node_rank_t node_rank;
|
orte_node_rank_t node_rank;
|
||||||
#if OPAL_HAVE_HWLOC
|
#if OPAL_HAVE_HWLOC
|
||||||
opal_hwloc_level_t bind_level = OPAL_HWLOC_NODE_LEVEL;
|
|
||||||
char *cpu_bitmap;
|
char *cpu_bitmap;
|
||||||
#endif
|
#endif
|
||||||
orte_std_cntr_t n;
|
orte_std_cntr_t n;
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user