Update mapping system
Correctly transfer job-level mapping directives for dynamically spawned
jobs to the mapping system.
Signed-off-by: Ralph Castain <rhc@open-mpi.org>
(cherry picked from commit 45f23ca5c9
)
Этот коммит содержится в:
родитель
fb39c7f7e6
Коммит
18afb8e8a6
@ -123,7 +123,8 @@ ORTE_DECLSPEC int orte_rmaps_base_filter_nodes(orte_app_context_t *app,
|
|||||||
opal_list_t *nodes,
|
opal_list_t *nodes,
|
||||||
bool remove);
|
bool remove);
|
||||||
|
|
||||||
ORTE_DECLSPEC int orte_rmaps_base_set_mapping_policy(orte_mapping_policy_t *policy,
|
ORTE_DECLSPEC int orte_rmaps_base_set_mapping_policy(orte_job_t *jdata,
|
||||||
|
orte_mapping_policy_t *policy,
|
||||||
char **device, char *spec);
|
char **device, char *spec);
|
||||||
ORTE_DECLSPEC int orte_rmaps_base_set_ranking_policy(orte_ranking_policy_t *policy,
|
ORTE_DECLSPEC int orte_rmaps_base_set_ranking_policy(orte_ranking_policy_t *policy,
|
||||||
orte_mapping_policy_t mapping,
|
orte_mapping_policy_t mapping,
|
||||||
|
@ -296,7 +296,7 @@ static int orte_rmaps_base_open(mca_base_open_flag_t flags)
|
|||||||
"rmaps_base_cpus_per_proc", "rmaps_base_mapping_policy=<obj>:PE=N, default <obj>=NUMA");
|
"rmaps_base_cpus_per_proc", "rmaps_base_mapping_policy=<obj>:PE=N, default <obj>=NUMA");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ORTE_SUCCESS != (rc = orte_rmaps_base_set_mapping_policy(&orte_rmaps_base.mapping,
|
if (ORTE_SUCCESS != (rc = orte_rmaps_base_set_mapping_policy(NULL, &orte_rmaps_base.mapping,
|
||||||
&orte_rmaps_base.device,
|
&orte_rmaps_base.device,
|
||||||
rmaps_base_mapping_policy))) {
|
rmaps_base_mapping_policy))) {
|
||||||
return rc;
|
return rc;
|
||||||
@ -593,7 +593,8 @@ static int check_modifiers(char *ck, orte_mapping_policy_t *tmp)
|
|||||||
return ORTE_ERR_TAKE_NEXT_OPTION;
|
return ORTE_ERR_TAKE_NEXT_OPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
int orte_rmaps_base_set_mapping_policy(orte_mapping_policy_t *policy,
|
int orte_rmaps_base_set_mapping_policy(orte_job_t *jdata,
|
||||||
|
orte_mapping_policy_t *policy,
|
||||||
char **device, char *inspec)
|
char **device, char *inspec)
|
||||||
{
|
{
|
||||||
char *ck;
|
char *ck;
|
||||||
@ -681,7 +682,11 @@ int orte_rmaps_base_set_mapping_policy(orte_mapping_policy_t *policy,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* now save the pattern */
|
/* now save the pattern */
|
||||||
|
if (NULL == jdata || NULL == jdata->map) {
|
||||||
orte_rmaps_base.ppr = strdup(ck);
|
orte_rmaps_base.ppr = strdup(ck);
|
||||||
|
} else {
|
||||||
|
jdata->map->ppr = strdup(ck);
|
||||||
|
}
|
||||||
ORTE_SET_MAPPING_POLICY(tmp, ORTE_MAPPING_PPR);
|
ORTE_SET_MAPPING_POLICY(tmp, ORTE_MAPPING_PPR);
|
||||||
ORTE_SET_MAPPING_DIRECTIVE(tmp, ORTE_MAPPING_GIVEN);
|
ORTE_SET_MAPPING_DIRECTIVE(tmp, ORTE_MAPPING_GIVEN);
|
||||||
free(spec);
|
free(spec);
|
||||||
@ -747,7 +752,11 @@ int orte_rmaps_base_set_mapping_policy(orte_mapping_policy_t *policy,
|
|||||||
}
|
}
|
||||||
|
|
||||||
setpolicy:
|
setpolicy:
|
||||||
|
if (NULL == jdata || NULL == jdata->map) {
|
||||||
*policy = tmp;
|
*policy = tmp;
|
||||||
|
} else {
|
||||||
|
jdata->map->mapping = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -876,7 +876,7 @@ int orte_submit_job(char *argv[], int *index,
|
|||||||
jdata->map = OBJ_NEW(orte_job_map_t);
|
jdata->map = OBJ_NEW(orte_job_map_t);
|
||||||
|
|
||||||
if (NULL != orte_cmd_options.mapping_policy) {
|
if (NULL != orte_cmd_options.mapping_policy) {
|
||||||
if (ORTE_SUCCESS != (rc = orte_rmaps_base_set_mapping_policy(&jdata->map->mapping, NULL, orte_cmd_options.mapping_policy))) {
|
if (ORTE_SUCCESS != (rc = orte_rmaps_base_set_mapping_policy(jdata, &jdata->map->mapping, NULL, orte_cmd_options.mapping_policy))) {
|
||||||
ORTE_ERROR_LOG(rc);
|
ORTE_ERROR_LOG(rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -308,7 +308,7 @@ int pmix_server_spawn_fn(opal_process_name_t *requestor,
|
|||||||
orte_rmaps_base_print_mapping(orte_rmaps_base.mapping));
|
orte_rmaps_base_print_mapping(orte_rmaps_base.mapping));
|
||||||
return ORTE_ERR_BAD_PARAM;
|
return ORTE_ERR_BAD_PARAM;
|
||||||
}
|
}
|
||||||
rc = orte_rmaps_base_set_mapping_policy(&jdata->map->mapping,
|
rc = orte_rmaps_base_set_mapping_policy(jdata, &jdata->map->mapping,
|
||||||
NULL, info->data.string);
|
NULL, info->data.string);
|
||||||
if (ORTE_SUCCESS != rc) {
|
if (ORTE_SUCCESS != rc) {
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -489,7 +489,7 @@ static void _query(int sd, short args, void *cbdata)
|
|||||||
orte_job_t *jdata;
|
orte_job_t *jdata;
|
||||||
orte_proc_t *proct;
|
orte_proc_t *proct;
|
||||||
orte_app_context_t *app;
|
orte_app_context_t *app;
|
||||||
int rc, i, k, num_replies;
|
int rc = ORTE_SUCCESS, i, k, num_replies;
|
||||||
opal_list_t *results, targets, *array;
|
opal_list_t *results, targets, *array;
|
||||||
size_t n;
|
size_t n;
|
||||||
uint32_t key;
|
uint32_t key;
|
||||||
@ -716,7 +716,7 @@ static void _query(int sd, short args, void *cbdata)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ORTE_JOBID_INVALID == jobid) {
|
if (ORTE_JOBID_INVALID == jobid) {
|
||||||
rc = ORTE_ERR_BAD_PARAM;
|
rc = ORTE_ERR_NOT_FOUND;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
/* construct a list of values with opal_proc_info_t
|
/* construct a list of values with opal_proc_info_t
|
||||||
@ -810,12 +810,12 @@ static void _query(int sd, short args, void *cbdata)
|
|||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
if (ORTE_SUCCESS == rc) {
|
||||||
if (0 == opal_list_get_size(results)) {
|
if (0 == opal_list_get_size(results)) {
|
||||||
rc = ORTE_ERR_NOT_FOUND;
|
rc = ORTE_ERR_NOT_FOUND;
|
||||||
} else if (opal_list_get_size(results) < opal_list_get_size(cd->info)) {
|
} else if (opal_list_get_size(results) < opal_list_get_size(cd->info)) {
|
||||||
rc = ORTE_ERR_PARTIAL_SUCCESS;
|
rc = ORTE_ERR_PARTIAL_SUCCESS;
|
||||||
} else {
|
}
|
||||||
rc = ORTE_SUCCESS;
|
|
||||||
}
|
}
|
||||||
cd->infocbfunc(rc, results, cd->cbdata, qrel, results);
|
cd->infocbfunc(rc, results, cd->cbdata, qrel, results);
|
||||||
}
|
}
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user