Per patch from Tetsuya Mishima, complete the overhaul of the round-robin mappers
Refs trac:4296 This commit was SVN r30861. The following Trac tickets were found above: Ticket 4296 --> https://svn.open-mpi.org/trac/ompi/ticket/4296
Этот коммит содержится в:
родитель
7440f21b75
Коммит
d109c523b9
@ -204,7 +204,7 @@ int orte_rmaps_rr_bynode(orte_job_t *jdata,
|
|||||||
orte_std_cntr_t num_slots,
|
orte_std_cntr_t num_slots,
|
||||||
orte_vpid_t num_procs)
|
orte_vpid_t num_procs)
|
||||||
{
|
{
|
||||||
int j, nprocs_mapped, lag, delta, nnodes;
|
int j, nprocs_mapped, nnodes;
|
||||||
orte_node_t *node;
|
orte_node_t *node;
|
||||||
orte_proc_t *proc;
|
orte_proc_t *proc;
|
||||||
int num_procs_to_assign, navg, idx;
|
int num_procs_to_assign, navg, idx;
|
||||||
@ -270,7 +270,6 @@ int orte_rmaps_rr_bynode(orte_job_t *jdata,
|
|||||||
"mca:rmaps:rr: mapping by node navg %d extra_procs %d extra_nodes %d",
|
"mca:rmaps:rr: mapping by node navg %d extra_procs %d extra_nodes %d",
|
||||||
navg, extra_procs_to_assign, nxtra_nodes);
|
navg, extra_procs_to_assign, nxtra_nodes);
|
||||||
|
|
||||||
lag = 0;
|
|
||||||
nnodes = 0;
|
nnodes = 0;
|
||||||
OPAL_LIST_FOREACH(node, node_list, orte_node_t) {
|
OPAL_LIST_FOREACH(node, node_list, orte_node_t) {
|
||||||
#if OPAL_HAVE_HWLOC
|
#if OPAL_HAVE_HWLOC
|
||||||
@ -323,26 +322,21 @@ int orte_rmaps_rr_bynode(orte_job_t *jdata,
|
|||||||
--nxtra_nodes;
|
--nxtra_nodes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* add in the extras */
|
/* if slots < avg + extra (adjusted for cpus/proc), then try to take all */
|
||||||
lag += extra_procs_to_assign;
|
if ((node->slots - node->slots_inuse) < ((navg + extra_procs_to_assign) * orte_rmaps_base.cpus_per_rank)) {
|
||||||
/* if slots < avg (adjusted for cpus/proc), then we can't put anything here */
|
num_procs_to_assign = (node->slots - node->slots_inuse)/orte_rmaps_base.cpus_per_rank;
|
||||||
if ((node->slots - node->slots_inuse) < (navg * orte_rmaps_base.cpus_per_rank)) {
|
/* if we can't take any proc, skip following steps */
|
||||||
continue;
|
if (num_procs_to_assign == 0) {
|
||||||
}
|
continue;
|
||||||
/* take the avg plus as much of the "lag" as we can */
|
|
||||||
delta = 0;
|
|
||||||
if (0 < lag) {
|
|
||||||
delta = ((node->slots - node->slots_inuse)/orte_rmaps_base.cpus_per_rank) - navg;
|
|
||||||
if (lag < delta) {
|
|
||||||
delta = lag;
|
|
||||||
}
|
}
|
||||||
lag -= delta;
|
} else {
|
||||||
|
/* take the avg + extra */
|
||||||
|
num_procs_to_assign = navg + extra_procs_to_assign;
|
||||||
}
|
}
|
||||||
num_procs_to_assign = navg + delta;
|
|
||||||
OPAL_OUTPUT_VERBOSE((20, orte_rmaps_base_framework.framework_output,
|
OPAL_OUTPUT_VERBOSE((20, orte_rmaps_base_framework.framework_output,
|
||||||
"%s NODE %s DELTA %d LAGGING %d AVG %d ASSIGN %d EXTRA %d",
|
"%s NODE %s AVG %d ASSIGN %d EXTRA %d",
|
||||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), node->name, delta,
|
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), node->name,
|
||||||
lag, navg, num_procs_to_assign, extra_procs_to_assign));
|
navg, num_procs_to_assign, extra_procs_to_assign));
|
||||||
}
|
}
|
||||||
nnodes++; // track how many nodes remain available
|
nnodes++; // track how many nodes remain available
|
||||||
OPAL_OUTPUT_VERBOSE((20, orte_rmaps_base_framework.framework_output,
|
OPAL_OUTPUT_VERBOSE((20, orte_rmaps_base_framework.framework_output,
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user