Merge pull request #7662 from rhc54/topic/dpm
Update dpm to handle deprecation of MPI_Info keys
Этот коммит содержится в:
Коммит
0fa7ead700
1
.gitignore
поставляемый
1
.gitignore
поставляемый
@ -464,6 +464,7 @@ test/simple/hello_output
|
|||||||
test/simple/hello_show_help
|
test/simple/hello_show_help
|
||||||
test/simple/hello
|
test/simple/hello
|
||||||
test/simple/hello++
|
test/simple/hello++
|
||||||
|
test/simple/intercomm1
|
||||||
test/simple/interlib
|
test/simple/interlib
|
||||||
test/simple/loop_child
|
test/simple/loop_child
|
||||||
test/simple/loop_spawn
|
test/simple/loop_spawn
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# -*- makefile -*-
|
# -*- makefile -*-
|
||||||
#
|
#
|
||||||
# Copyright (c) 2015 Intel, Inc. All rights reserved.
|
# Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||||
# Copyright (c) 2016 IBM Corporation. All rights reserved.
|
# Copyright (c) 2016 IBM Corporation. All rights reserved.
|
||||||
# $COPYRIGHT$
|
# $COPYRIGHT$
|
||||||
#
|
#
|
||||||
@ -11,6 +11,8 @@
|
|||||||
|
|
||||||
# This makefile.am does not stand on its own - it is included from ompi/Makefile.am
|
# This makefile.am does not stand on its own - it is included from ompi/Makefile.am
|
||||||
|
|
||||||
|
dist_ompidata_DATA += dpm/help-dpm.txt
|
||||||
|
|
||||||
headers += \
|
headers += \
|
||||||
dpm/dpm.h
|
dpm/dpm.h
|
||||||
|
|
||||||
|
587
ompi/dpm/dpm.c
587
ompi/dpm/dpm.c
@ -15,7 +15,7 @@
|
|||||||
* Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
|
* Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2011-2015 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2011-2015 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
|
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||||
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
||||||
* Copyright (c) 2014-2020 Research Organization for Information Science
|
* Copyright (c) 2014-2020 Research Organization for Information Science
|
||||||
* and Technology (RIST). All rights reserved.
|
* and Technology (RIST). All rights reserved.
|
||||||
@ -618,6 +618,156 @@ int ompi_dpm_disconnect(ompi_communicator_t *comm)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *name;
|
||||||
|
char **conflicts;
|
||||||
|
} dpm_conflicts_t;
|
||||||
|
|
||||||
|
static dpm_conflicts_t mapby_modifiers[] = {
|
||||||
|
{.name = "oversubscribe", .conflicts = (char *[]){"nooversubscribe", NULL}},
|
||||||
|
{.name = "nooversubscribe", .conflicts = (char *[]){"oversubscribe", NULL}},
|
||||||
|
{.name = ""}
|
||||||
|
};
|
||||||
|
|
||||||
|
static dpm_conflicts_t rankby_modifiers[] = {
|
||||||
|
{.name = ""}
|
||||||
|
};
|
||||||
|
|
||||||
|
static dpm_conflicts_t bindto_modifiers[] = {
|
||||||
|
{.name = ""}
|
||||||
|
};
|
||||||
|
|
||||||
|
static int check_modifiers(char *modifier, char **checks, dpm_conflicts_t *conflicts)
|
||||||
|
{
|
||||||
|
int n, m, k;
|
||||||
|
|
||||||
|
for (n=0; 0 != strlen(conflicts[n].name); n++) {
|
||||||
|
if (0 == strcasecmp(conflicts[n].name, modifier)) {
|
||||||
|
for (m=0; NULL != checks[m]; m++) {
|
||||||
|
for (k=0; NULL != conflicts[n].conflicts[k]; k++) {
|
||||||
|
if (0 == strcasecmp(checks[m], conflicts[n].conflicts[k])) {
|
||||||
|
return OMPI_ERR_BAD_PARAM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return OMPI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int dpm_convert(opal_list_t *infos,
|
||||||
|
char *infokey,
|
||||||
|
char *option,
|
||||||
|
char *directive,
|
||||||
|
char *modifier)
|
||||||
|
{
|
||||||
|
opal_info_item_t *iptr;
|
||||||
|
char *ck, *ptr, *help_str;
|
||||||
|
int rc;
|
||||||
|
char **tmp;
|
||||||
|
dpm_conflicts_t *modifiers;
|
||||||
|
const char *attr;
|
||||||
|
|
||||||
|
/* pick the modifiers to be checked */
|
||||||
|
if (NULL != modifier) {
|
||||||
|
if (0 == strcmp(option, PMIX_MAPBY)) {
|
||||||
|
modifiers = mapby_modifiers;
|
||||||
|
} else if (0 == strcmp(option, PMIX_RANKBY)) {
|
||||||
|
modifiers = rankby_modifiers;
|
||||||
|
} else if (0 == strcmp(option, PMIX_BINDTO)) {
|
||||||
|
modifiers = bindto_modifiers;
|
||||||
|
} else {
|
||||||
|
return OMPI_ERR_BAD_PARAM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* does the matching option already exist? */
|
||||||
|
OPAL_LIST_FOREACH(iptr, infos, opal_info_item_t) {
|
||||||
|
if (PMIX_CHECK_KEY(&iptr->info, option)) {
|
||||||
|
ck = strdup(iptr->info.value.data.string);
|
||||||
|
if (NULL != (ptr = strchr(ck, ':'))) {
|
||||||
|
*ptr = '\0';
|
||||||
|
++ptr;
|
||||||
|
}
|
||||||
|
/* were we given a directive? */
|
||||||
|
if (NULL != directive) {
|
||||||
|
/* does it conflict? */
|
||||||
|
if (0 != strncasecmp(ck, directive, strlen(directive))) {
|
||||||
|
opal_asprintf(&help_str, "Conflicting directives \"%s %s\"", ck, directive);
|
||||||
|
attr = PMIx_Get_attribute_string(option);
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-fail", true,
|
||||||
|
infokey, attr, help_str);
|
||||||
|
free(help_str);
|
||||||
|
free(ck);
|
||||||
|
return OMPI_ERR_BAD_PARAM;
|
||||||
|
}
|
||||||
|
/* if they match, then nothing further to do */
|
||||||
|
}
|
||||||
|
/* were we given a modifier? */
|
||||||
|
if (NULL != modifier) {
|
||||||
|
if (NULL == ptr) {
|
||||||
|
/* no modifiers in the existing directive - just add the new one */
|
||||||
|
opal_asprintf(&ptr, "%s:%s", ck, modifier);
|
||||||
|
free(iptr->info.value.data.string);
|
||||||
|
iptr->info.value.data.string = ptr;
|
||||||
|
free(ck);
|
||||||
|
return OMPI_SUCCESS;
|
||||||
|
} else {
|
||||||
|
/* we already have modifiers - need to check for conflict with
|
||||||
|
* the one we were told to add */
|
||||||
|
tmp = opal_argv_split(ptr, ',');
|
||||||
|
rc = check_modifiers(modifier, tmp, modifiers);
|
||||||
|
opal_argv_free(tmp);
|
||||||
|
if (OMPI_SUCCESS != rc) {
|
||||||
|
/* we have a conflict */
|
||||||
|
opal_asprintf(&ptr, " Option %s\n Conflicting modifiers \"%s %s\"", option, infokey, modifier);
|
||||||
|
attr = PMIx_Get_attribute_string(option);
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-fail", true,
|
||||||
|
infokey, attr, ptr);
|
||||||
|
free(ptr);
|
||||||
|
free(ck);
|
||||||
|
return OMPI_ERR_BAD_PARAM;
|
||||||
|
}
|
||||||
|
/* add the modifier to the end */
|
||||||
|
opal_asprintf(&ptr, "%s,%s", iptr->info.value.data.string, modifier);
|
||||||
|
free(iptr->info.value.data.string);
|
||||||
|
iptr->info.value.data.string = ptr;
|
||||||
|
free(ck);
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
infokey, iptr->info.value.data.string);
|
||||||
|
return OMPI_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**** Get here if the specified option is not found in the
|
||||||
|
**** current list - add it
|
||||||
|
****/
|
||||||
|
|
||||||
|
if (NULL == directive) {
|
||||||
|
opal_asprintf(&ptr, ":%s", modifier);
|
||||||
|
} else if (NULL == modifier) {
|
||||||
|
ptr = strdup(directive);
|
||||||
|
} else {
|
||||||
|
opal_asprintf(&ptr, "%s:%s", directive, modifier);
|
||||||
|
}
|
||||||
|
iptr = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&iptr->info, option, ptr, PMIX_STRING);
|
||||||
|
opal_list_append(infos, &iptr->super);
|
||||||
|
|
||||||
|
/* alert them */
|
||||||
|
opal_asprintf(&help_str, "Key: %s Value: %s", option, ptr);
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
infokey, help_str);
|
||||||
|
free(help_str);
|
||||||
|
free(ptr);
|
||||||
|
|
||||||
|
return OMPI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
||||||
char **array_of_argv[],
|
char **array_of_argv[],
|
||||||
const int array_of_maxprocs[],
|
const int array_of_maxprocs[],
|
||||||
@ -647,6 +797,10 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
|||||||
pmix_info_t *pinfo = NULL;
|
pmix_info_t *pinfo = NULL;
|
||||||
pmix_status_t pret;
|
pmix_status_t pret;
|
||||||
pmix_nspace_t nspace;
|
pmix_nspace_t nspace;
|
||||||
|
size_t scount = count;
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
const char *checkkey;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* parse the info object */
|
/* parse the info object */
|
||||||
/* check potentially for:
|
/* check potentially for:
|
||||||
@ -686,7 +840,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
|||||||
|
|
||||||
/* setup the job object */
|
/* setup the job object */
|
||||||
OBJ_CONSTRUCT(&job_info, opal_list_t);
|
OBJ_CONSTRUCT(&job_info, opal_list_t);
|
||||||
PMIX_APP_CREATE(apps, count);
|
PMIX_APP_CREATE(apps, scount);
|
||||||
|
|
||||||
/* Convert the list of commands to array of pmix_app_t */
|
/* Convert the list of commands to array of pmix_app_t */
|
||||||
for (i = 0; i < count; ++i) {
|
for (i = 0; i < count; ++i) {
|
||||||
@ -724,53 +878,185 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
|||||||
/* check for personality - this is a job-level key */
|
/* check for personality - this is a job-level key */
|
||||||
ompi_info_get (array_of_info[i], "personality", sizeof(host) - 1, host, &flag);
|
ompi_info_get (array_of_info[i], "personality", sizeof(host) - 1, host, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_PERSONALITY */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"personality", "PMIX_PERSONALITY");
|
||||||
personality = true;
|
personality = true;
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_PERSONALITY, host, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_PERSONALITY, host, PMIX_STRING);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_PERSONALITY", sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
personality = true;
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_PERSONALITY, host, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_PERSONALITY");
|
||||||
|
ompi_info_get (array_of_info[i], checkkey, sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
personality = true;
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_PERSONALITY, host, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'host' */
|
/* check for 'host' */
|
||||||
ompi_info_get (array_of_info[i], "host", sizeof(host) - 1, host, &flag);
|
ompi_info_get (array_of_info[i], "host", sizeof(host) - 1, host, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_PERSONALITY */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"host", "PMIX_HOST");
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_HOST, host, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_HOST, host, PMIX_STRING);
|
||||||
opal_list_append(&app_info, &info->super);
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_HOST", sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_HOST, host, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_HOST");
|
||||||
|
ompi_info_get (array_of_info[i], checkkey, sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_HOST, host, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'hostfile' */
|
/* check for 'hostfile' */
|
||||||
ompi_info_get (array_of_info[i], "hostfile", sizeof(host) - 1, host, &flag);
|
ompi_info_get (array_of_info[i], "hostfile", sizeof(host) - 1, host, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_HOSTFILE */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"hostfile", "PMIX_HOSTFILE");
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_HOSTFILE, host, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_HOSTFILE, host, PMIX_STRING);
|
||||||
opal_list_append(&app_info, &info->super);
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_HOSTFILE", sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_HOSTFILE, host, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_HOSTFILE");
|
||||||
|
ompi_info_get (array_of_info[i], checkkey, sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_HOSTFILE, host, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'add-hostfile' */
|
/* check for 'add-hostfile' */
|
||||||
ompi_info_get (array_of_info[i], "add-hostfile", sizeof(host) - 1, host, &flag);
|
ompi_info_get (array_of_info[i], "add-hostfile", sizeof(host) - 1, host, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_ADD_HOSTFILE */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"add-hostfile", "PMIX_ADD_HOSTFILE");
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOSTFILE, host, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOSTFILE, host, PMIX_STRING);
|
||||||
opal_list_append(&app_info, &info->super);
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_ADD_HOSTFILE", sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOSTFILE, host, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_ADD_HOSTFILE");
|
||||||
|
ompi_info_get (array_of_info[i], checkkey, sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOSTFILE, host, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'add-host' */
|
/* check for 'add-host' */
|
||||||
ompi_info_get (array_of_info[i], "add-host", sizeof(host) - 1, host, &flag);
|
ompi_info_get (array_of_info[i], "add-host", sizeof(host) - 1, host, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_ADD_HOST */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"add-host", "PMIX_ADD_HOST");
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOST, host, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOST, host, PMIX_STRING);
|
||||||
opal_list_append(&app_info, &info->super);
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_ADD_HOST", sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOST, host, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_ADD_HOST");
|
||||||
|
ompi_info_get (array_of_info[i], checkkey, sizeof(host) - 1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOST, host, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for env */
|
/* check for env */
|
||||||
ompi_info_get (array_of_info[i], "env", sizeof(host)-1, host, &flag);
|
ompi_info_get (array_of_info[i], "env", sizeof(host)-1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_ENVAR */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"env", "PMIX_ENVAR");
|
||||||
|
envars = opal_argv_split(host, '\n');
|
||||||
|
for (j=0; NULL != envars[j]; j++) {
|
||||||
|
opal_argv_append_nosize(&app->env, envars[j]);
|
||||||
|
}
|
||||||
|
opal_argv_free(envars);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_ENVAR", sizeof(host)-1, host, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
envars = opal_argv_split(host, '\n');
|
envars = opal_argv_split(host, '\n');
|
||||||
for (j=0; NULL != envars[j]; j++) {
|
for (j=0; NULL != envars[j]; j++) {
|
||||||
opal_argv_append_nosize(&app->env, envars[j]);
|
opal_argv_append_nosize(&app->env, envars[j]);
|
||||||
}
|
}
|
||||||
opal_argv_free(envars);
|
opal_argv_free(envars);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_ENVAR");
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_ENVAR", sizeof(host)-1, host, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
envars = opal_argv_split(host, '\n');
|
||||||
|
for (j=0; NULL != envars[j]; j++) {
|
||||||
|
opal_argv_append_nosize(&app->env, envars[j]);
|
||||||
|
}
|
||||||
|
opal_argv_free(envars);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 'path', 'arch', 'file', 'soft' -- to be implemented */
|
/* 'path', 'arch', 'file', 'soft' -- to be implemented */
|
||||||
|
|
||||||
@ -781,111 +1067,335 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
|||||||
*/
|
*/
|
||||||
ompi_info_get (array_of_info[i], "ompi_prefix", sizeof(prefix) - 1, prefix, &flag);
|
ompi_info_get (array_of_info[i], "ompi_prefix", sizeof(prefix) - 1, prefix, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_PREFIX */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"ompi_prefix", "PMIX_PREFIX");
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_PREFIX, prefix, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_PREFIX, prefix, PMIX_STRING);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_PREFIX", sizeof(prefix) - 1, prefix, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_PREFIX, prefix, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_PREFIX");
|
||||||
|
ompi_info_get (array_of_info[i], checkkey, sizeof(prefix) - 1, prefix, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_PREFIX, prefix, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'wdir' */
|
/* check for 'wdir' */
|
||||||
ompi_info_get (array_of_info[i], "wdir", sizeof(cwd) - 1, cwd, &flag);
|
ompi_info_get (array_of_info[i], "wdir", sizeof(cwd) - 1, cwd, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_WDIR */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"wdir", "PMIX_WDIR");
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_WDIR, cwd, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_WDIR, cwd, PMIX_STRING);
|
||||||
opal_list_append(&app_info, &info->super);
|
opal_list_append(&app_info, &info->super);
|
||||||
have_wdir = 1;
|
have_wdir = 1;
|
||||||
}
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_WDIR", sizeof(cwd) - 1, cwd, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_WDIR, cwd, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
have_wdir = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_WDIR");
|
||||||
|
ompi_info_get (array_of_info[i], checkkey, sizeof(cwd) - 1, cwd, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_WDIR, cwd, PMIX_STRING);
|
||||||
|
opal_list_append(&app_info, &info->super);
|
||||||
|
have_wdir = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'mapper' - a job-level key */
|
/* check for 'mapper' - a job-level key */
|
||||||
ompi_info_get(array_of_info[i], "mapper", sizeof(mapper) - 1, mapper, &flag);
|
ompi_info_get(array_of_info[i], "mapper", sizeof(mapper) - 1, mapper, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_MAPPER */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"mapper", "PMIX_MAPPER");
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_MAPPER, mapper, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_MAPPER, mapper, PMIX_STRING);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
ompi_info_get(array_of_info[i], "PMIX_MAPPER", sizeof(mapper) - 1, mapper, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_MAPPER, mapper, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_MAPPER");
|
||||||
|
ompi_info_get(array_of_info[i], checkkey, sizeof(mapper) - 1, mapper, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_MAPPER, mapper, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'display_map' - a job-level key */
|
/* check for 'display_map' - a job-level key */
|
||||||
ompi_info_get_bool(array_of_info[i], "display_map", &local_spawn, &flag);
|
ompi_info_get_bool(array_of_info[i], "display_map", &local_spawn, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
rc = dpm_convert(&job_info, "display_map", PMIX_MAPBY, NULL, "DISPLAYMAP");
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_DISPLAY_MAP, &local_spawn, PMIX_BOOL);
|
if (OMPI_SUCCESS != rc) {
|
||||||
opal_list_append(&job_info, &info->super);
|
OPAL_LIST_DESTRUCT(&job_info);
|
||||||
|
OPAL_LIST_DESTRUCT(&app_info);
|
||||||
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
opal_progress_event_users_decrement();
|
||||||
|
return MPI_ERR_SPAWN;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check for 'npernode' and 'ppr' - job-level key */
|
/* check for 'npernode' and 'ppr' - job-level key */
|
||||||
ompi_info_get (array_of_info[i], "npernode", sizeof(slot_list) - 1, slot_list, &flag);
|
ompi_info_get (array_of_info[i], "npernode", sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
opal_asprintf(&tmp, "PPR:%s:NODE", slot_list);
|
||||||
(void)opal_asprintf(&tmp, "%s:n", slot_list);
|
rc = dpm_convert(&job_info, "npernode", PMIX_MAPBY, tmp, NULL);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_PPR, tmp, PMIX_STRING);
|
|
||||||
free(tmp);
|
free(tmp);
|
||||||
opal_list_append(&job_info, &info->super);
|
if (OMPI_SUCCESS != rc) {
|
||||||
|
OPAL_LIST_DESTRUCT(&job_info);
|
||||||
|
OPAL_LIST_DESTRUCT(&app_info);
|
||||||
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
opal_progress_event_users_decrement();
|
||||||
|
return MPI_ERR_SPAWN;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
ompi_info_get (array_of_info[i], "pernode", sizeof(slot_list) - 1, slot_list, &flag);
|
ompi_info_get (array_of_info[i], "pernode", sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
rc = dpm_convert(&job_info, "pernode", PMIX_MAPBY, "PPR:1:NODE", NULL);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_PPR, "1:n", PMIX_STRING);
|
free(tmp);
|
||||||
opal_list_append(&job_info, &info->super);
|
if (OMPI_SUCCESS != rc) {
|
||||||
|
OPAL_LIST_DESTRUCT(&job_info);
|
||||||
|
OPAL_LIST_DESTRUCT(&app_info);
|
||||||
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
opal_progress_event_users_decrement();
|
||||||
|
return MPI_ERR_SPAWN;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
ompi_info_get (array_of_info[i], "ppr", sizeof(slot_list) - 1, slot_list, &flag);
|
ompi_info_get (array_of_info[i], "ppr", sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
/* must have correct syntax with two colons */
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_PPR, slot_list, PMIX_STRING);
|
if (NULL == (tmp = strchr(slot_list, ':'))) {
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_show_help("help-dpm.txt", "bad-ppr", true, slot_list);
|
||||||
|
OPAL_LIST_DESTRUCT(&job_info);
|
||||||
|
OPAL_LIST_DESTRUCT(&app_info);
|
||||||
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
opal_progress_event_users_decrement();
|
||||||
|
return MPI_ERR_SPAWN;
|
||||||
|
}
|
||||||
|
++tmp; // step over first colon
|
||||||
|
if (NULL == strchr(tmp, ':')) {
|
||||||
|
opal_show_help("help-dpm.txt", "bad-ppr", true, slot_list);
|
||||||
|
OPAL_LIST_DESTRUCT(&job_info);
|
||||||
|
OPAL_LIST_DESTRUCT(&app_info);
|
||||||
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
opal_progress_event_users_decrement();
|
||||||
|
return MPI_ERR_SPAWN;
|
||||||
|
}
|
||||||
|
rc = dpm_convert(&job_info, "ppr", PMIX_MAPBY, slot_list, NULL);
|
||||||
|
free(tmp);
|
||||||
|
if (OMPI_SUCCESS != rc) {
|
||||||
|
OPAL_LIST_DESTRUCT(&job_info);
|
||||||
|
OPAL_LIST_DESTRUCT(&app_info);
|
||||||
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
opal_progress_event_users_decrement();
|
||||||
|
return MPI_ERR_SPAWN;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check for 'map_by' - job-level key */
|
/* check for 'map_by' - job-level key */
|
||||||
ompi_info_get(array_of_info[i], "map_by", sizeof(slot_list) - 1, slot_list, &flag);
|
ompi_info_get(array_of_info[i], "map_by", sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
rc = dpm_convert(&job_info, "map_by", PMIX_MAPBY, slot_list, NULL);
|
||||||
|
free(tmp);
|
||||||
|
if (OMPI_SUCCESS != rc) {
|
||||||
|
OPAL_LIST_DESTRUCT(&job_info);
|
||||||
|
OPAL_LIST_DESTRUCT(&app_info);
|
||||||
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
opal_progress_event_users_decrement();
|
||||||
|
return MPI_ERR_SPAWN;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ompi_info_get(array_of_info[i], "PMIX_MAPBY", sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_MAPBY, slot_list, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_MAPBY, slot_list, PMIX_STRING);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_MAPBY");
|
||||||
|
ompi_info_get(array_of_info[i], checkkey, sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_MAPBY, slot_list, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'rank_by' - job-level key */
|
/* check for 'rank_by' - job-level key */
|
||||||
ompi_info_get(array_of_info[i], "rank_by", sizeof(slot_list) - 1, slot_list, &flag);
|
ompi_info_get(array_of_info[i], "rank_by", sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
rc = dpm_convert(&job_info, "rank_by", PMIX_RANKBY, slot_list, NULL);
|
||||||
|
free(tmp);
|
||||||
|
if (OMPI_SUCCESS != rc) {
|
||||||
|
OPAL_LIST_DESTRUCT(&job_info);
|
||||||
|
OPAL_LIST_DESTRUCT(&app_info);
|
||||||
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
opal_progress_event_users_decrement();
|
||||||
|
return MPI_ERR_SPAWN;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ompi_info_get(array_of_info[i], "PMIX_RANKBY", sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_RANKBY, slot_list, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_RANKBY, slot_list, PMIX_STRING);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_RANKBY");
|
||||||
|
ompi_info_get(array_of_info[i], checkkey, sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_RANKBY, slot_list, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'bind_to' - job-level key */
|
/* check for 'bind_to' - job-level key */
|
||||||
ompi_info_get(array_of_info[i], "bind_to", sizeof(slot_list) - 1, slot_list, &flag);
|
ompi_info_get(array_of_info[i], "bind_to", sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
rc = dpm_convert(&job_info, "bind_to", PMIX_BINDTO, slot_list, NULL);
|
||||||
|
free(tmp);
|
||||||
|
if (OMPI_SUCCESS != rc) {
|
||||||
|
OPAL_LIST_DESTRUCT(&job_info);
|
||||||
|
OPAL_LIST_DESTRUCT(&app_info);
|
||||||
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
opal_progress_event_users_decrement();
|
||||||
|
return MPI_ERR_SPAWN;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ompi_info_get(array_of_info[i], "PMIX_BINDTO", sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_BINDTO, slot_list, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_BINDTO, slot_list, PMIX_STRING);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_BINDTO");
|
||||||
|
ompi_info_get(array_of_info[i], checkkey, sizeof(slot_list) - 1, slot_list, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_BINDTO, slot_list, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'preload_binary' - job-level key */
|
/* check for 'preload_binary' - job-level key */
|
||||||
ompi_info_get_bool(array_of_info[i], "ompi_preload_binary", &local_spawn, &flag);
|
ompi_info_get_bool(array_of_info[i], "ompi_preload_binary", &local_spawn, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_PRELOAD_BIN */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"ompi_preload_binary", "PMIX_PRELOAD_BIN");
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_BIN, &local_spawn, PMIX_BOOL);
|
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_BIN, &local_spawn, PMIX_BOOL);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
ompi_info_get_bool(array_of_info[i], "PMIX_PRELOAD_BIN", &local_spawn, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_BIN, &local_spawn, PMIX_BOOL);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_PRELOAD_BIN");
|
||||||
|
ompi_info_get_bool(array_of_info[i], checkkey, &local_spawn, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_BIN, &local_spawn, PMIX_BOOL);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check for 'preload_files' - job-level key */
|
/* check for 'preload_files' - job-level key */
|
||||||
ompi_info_get (array_of_info[i], "ompi_preload_files", sizeof(cwd) - 1, cwd, &flag);
|
ompi_info_get (array_of_info[i], "ompi_preload_files", sizeof(cwd) - 1, cwd, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_PRELOAD_FILES */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"ompi_preload_files", "PMIX_PRELOAD_FILES");
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_BIN, cwd, PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_FILES, cwd, PMIX_STRING);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_PRELOAD_FILES", sizeof(cwd) - 1, cwd, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_FILES, cwd, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_PRELOAD_FILES");
|
||||||
|
ompi_info_get (array_of_info[i], checkkey, sizeof(cwd) - 1, cwd, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_FILES, cwd, PMIX_STRING);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* see if this is a non-mpi job - if so, then set the flag so ORTE
|
/* see if this is a non-mpi job - if so, then set the flag so ORTE
|
||||||
* knows what to do - job-level key
|
* knows what to do - job-level key
|
||||||
*/
|
*/
|
||||||
ompi_info_get_bool(array_of_info[i], "ompi_non_mpi", &non_mpi, &flag);
|
ompi_info_get_bool(array_of_info[i], "ompi_non_mpi", &non_mpi, &flag);
|
||||||
if (flag && non_mpi) {
|
if (flag && non_mpi) {
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
opal_show_help("help-dpm.txt", "deprecated-inform", true,
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_NON_PMI, &non_mpi, PMIX_BOOL);
|
"ompi_non_mpi", "No longer relevant as RTE automatically detects this scenario");
|
||||||
opal_list_append(&job_info, &info->super);
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* see if this is an MCA param that the user wants applied to the child job */
|
/* see if this is an MCA param that the user wants applied to the child job */
|
||||||
ompi_info_get (array_of_info[i], "ompi_param", sizeof(params) - 1, params, &flag);
|
ompi_info_get (array_of_info[i], "ompi_param", sizeof(params) - 1, params, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"ompi_param", "PMIX_ENVAR");
|
||||||
opal_argv_append_unique_nosize(&app->env, params, true);
|
opal_argv_append_unique_nosize(&app->env, params, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -893,6 +1403,23 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
|||||||
* not forwarding stdin to child processes - job-level key
|
* not forwarding stdin to child processes - job-level key
|
||||||
*/
|
*/
|
||||||
ompi_info_get (array_of_info[i], "ompi_stdin_target", sizeof(stdin_target) - 1, stdin_target, &flag);
|
ompi_info_get (array_of_info[i], "ompi_stdin_target", sizeof(stdin_target) - 1, stdin_target, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
/* deprecate --> PMIX_STDIN_TGT */
|
||||||
|
opal_show_help("help-dpm.txt", "deprecated-converted", true,
|
||||||
|
"ompi_stdin_target", "PMIX_STDIN_TGT");
|
||||||
|
if (0 == strcmp(stdin_target, "all")) {
|
||||||
|
ui32 = OPAL_VPID_WILDCARD;
|
||||||
|
} else if (0 == strcmp(stdin_target, "none")) {
|
||||||
|
ui32 = OPAL_VPID_INVALID;
|
||||||
|
} else {
|
||||||
|
ui32 = strtoul(stdin_target, NULL, 10);
|
||||||
|
}
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_STDIN_TGT, &ui32, PMIX_UINT32);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ompi_info_get (array_of_info[i], "PMIX_STDIN_TGT", sizeof(stdin_target) - 1, stdin_target, &flag);
|
||||||
if ( flag ) {
|
if ( flag ) {
|
||||||
if (0 == strcmp(stdin_target, "all")) {
|
if (0 == strcmp(stdin_target, "all")) {
|
||||||
ui32 = OPAL_VPID_WILDCARD;
|
ui32 = OPAL_VPID_WILDCARD;
|
||||||
@ -904,7 +1431,25 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
|||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_STDIN_TGT, &ui32, PMIX_UINT32);
|
PMIX_INFO_LOAD(&info->info, PMIX_STDIN_TGT, &ui32, PMIX_UINT32);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
#if PMIX_NUMERIC_VERSION >= 0x00040000
|
||||||
|
checkkey = PMIx_Get_attribute_string("PMIX_STDIN_TGT");
|
||||||
|
ompi_info_get (array_of_info[i], checkkey, sizeof(stdin_target) - 1, stdin_target, &flag);
|
||||||
|
if ( flag ) {
|
||||||
|
if (0 == strcmp(stdin_target, "all")) {
|
||||||
|
ui32 = OPAL_VPID_WILDCARD;
|
||||||
|
} else if (0 == strcmp(stdin_target, "none")) {
|
||||||
|
ui32 = OPAL_VPID_INVALID;
|
||||||
|
} else {
|
||||||
|
ui32 = strtoul(stdin_target, NULL, 10);
|
||||||
|
}
|
||||||
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
|
PMIX_INFO_LOAD(&info->info, PMIX_STDIN_TGT, &ui32, PMIX_UINT32);
|
||||||
|
opal_list_append(&job_info, &info->super);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* default value: If the user did not tell us where to look for the
|
/* default value: If the user did not tell us where to look for the
|
||||||
@ -942,7 +1487,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
|||||||
/* default the personality - job-level key */
|
/* default the personality - job-level key */
|
||||||
if (!personality) {
|
if (!personality) {
|
||||||
info = OBJ_NEW(opal_info_item_t);
|
info = OBJ_NEW(opal_info_item_t);
|
||||||
PMIX_INFO_LOAD(&info->info, PMIX_PERSONALITY, "ompi", PMIX_STRING);
|
PMIX_INFO_LOAD(&info->info, PMIX_PERSONALITY, "ompi5", PMIX_STRING);
|
||||||
opal_list_append(&job_info, &info->super);
|
opal_list_append(&job_info, &info->super);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -963,7 +1508,7 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
|
|||||||
if (NULL != pinfo) {
|
if (NULL != pinfo) {
|
||||||
PMIX_INFO_FREE(pinfo, ninfo);
|
PMIX_INFO_FREE(pinfo, ninfo);
|
||||||
}
|
}
|
||||||
PMIX_APP_FREE(apps, (size_t)count);
|
PMIX_APP_FREE(apps, scount);
|
||||||
|
|
||||||
if (OPAL_SUCCESS != rc) {
|
if (OPAL_SUCCESS != rc) {
|
||||||
opal_progress_event_users_decrement();
|
opal_progress_event_users_decrement();
|
||||||
|
46
ompi/dpm/help-dpm.txt
Обычный файл
46
ompi/dpm/help-dpm.txt
Обычный файл
@ -0,0 +1,46 @@
|
|||||||
|
# -*- text -*-
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 Intel, Inc. All rights reserved.
|
||||||
|
# $COPYRIGHT$
|
||||||
|
#
|
||||||
|
# Additional copyrights may follow
|
||||||
|
#
|
||||||
|
# $HEADER$
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
[deprecated-converted]
|
||||||
|
WARNING: A deprecated MPI_Info key was used.
|
||||||
|
|
||||||
|
Deprecated key: %s
|
||||||
|
Corrected key: %s
|
||||||
|
|
||||||
|
We have updated this for you and will proceed. However, this will be treated
|
||||||
|
as an error in a future release. Please update your application.
|
||||||
|
#
|
||||||
|
[deprecated-inform]
|
||||||
|
WARNING: A deprecated MPI_Info key was used.
|
||||||
|
|
||||||
|
Deprecated option: %s
|
||||||
|
Reason: %s
|
||||||
|
|
||||||
|
This has been ignored as it is no longer meaningful. Please update
|
||||||
|
your application.
|
||||||
|
#
|
||||||
|
[deprecated-fail]
|
||||||
|
WARNING: A deprecated MPI_Info key was used. It is unclear how to update
|
||||||
|
this option. Please contact the community for how best to resolve this issue.
|
||||||
|
|
||||||
|
Deprecated info key: %s
|
||||||
|
Updated option: %s
|
||||||
|
Reason: %s
|
||||||
|
|
||||||
|
We are not able to proceed. Please update your application.
|
||||||
|
#
|
||||||
|
[bad-ppr]
|
||||||
|
The proc-per-resource MPI_Info key is not correct. The value must include both
|
||||||
|
the number of procs for each resource and the type of resource to be used.
|
||||||
|
|
||||||
|
Specified value: %s
|
||||||
|
|
||||||
|
We are not able to proceed. Please correct your application.
|
@ -230,7 +230,7 @@ int ompi_info_get_value_enum (ompi_info_t *info, const char *key, int *value,
|
|||||||
return opal_info_get_value_enum (&(info->super), key, value,
|
return opal_info_get_value_enum (&(info->super), key, value,
|
||||||
default_value, var_enum, flag);
|
default_value, var_enum, flag);
|
||||||
}
|
}
|
||||||
int ompi_info_get_bool(ompi_info_t *info, char *key, bool *value, int *flag) {
|
int ompi_info_get_bool(ompi_info_t *info, const char *key, bool *value, int *flag) {
|
||||||
return opal_info_get_bool(&(info->super), key, value, flag);
|
return opal_info_get_bool(&(info->super), key, value, flag);
|
||||||
}
|
}
|
||||||
int ompi_info_delete (ompi_info_t *info, const char *key) {
|
int ompi_info_delete (ompi_info_t *info, const char *key) {
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2016-2017 IBM Corporation. All rights reserved.
|
* Copyright (c) 2016-2017 IBM Corporation. All rights reserved.
|
||||||
|
* Copyright (c) 2020 Intel, Inc. All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -119,7 +120,7 @@ OMPI_DECLSPEC int ompi_info_set_value_enum (ompi_info_t *info, const char *key,
|
|||||||
/**
|
/**
|
||||||
* ompi_info_foo() wrapper around various opal_info_foo() calls
|
* ompi_info_foo() wrapper around various opal_info_foo() calls
|
||||||
*/
|
*/
|
||||||
OMPI_DECLSPEC int ompi_info_get_bool (ompi_info_t *info, char *key, bool *value, int *flag);
|
OMPI_DECLSPEC int ompi_info_get_bool (ompi_info_t *info, const char *key, bool *value, int *flag);
|
||||||
/**
|
/**
|
||||||
* ompi_info_foo() wrapper around various opal_info_foo() calls
|
* ompi_info_foo() wrapper around various opal_info_foo() calls
|
||||||
*/
|
*/
|
||||||
|
@ -561,7 +561,6 @@ int ompi_rte_init(int *pargc, char ***pargv)
|
|||||||
}
|
}
|
||||||
opal_process_info.nodename = ev1; // ev1 is an allocated string
|
opal_process_info.nodename = ev1; // ev1 is an allocated string
|
||||||
}
|
}
|
||||||
opal_process_info.nodename = opal_process_info.nodename;
|
|
||||||
|
|
||||||
/* get our local rank from PMIx */
|
/* get our local rank from PMIx */
|
||||||
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_LOCAL_RANK,
|
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_LOCAL_RANK,
|
||||||
|
@ -337,11 +337,6 @@ static int vader_add_procs (struct mca_btl_base_module_t* btl,
|
|||||||
return OPAL_SUCCESS;
|
return OPAL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* make sure that my local rank has been defined */
|
|
||||||
if (0 > MCA_BTL_VADER_LOCAL_RANK) {
|
|
||||||
return OPAL_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vader_btl->btl_inited) {
|
if (!vader_btl->btl_inited) {
|
||||||
rc = vader_btl_first_time_init (vader_btl, 1 + MCA_BTL_VADER_NUM_LOCAL_PEERS);
|
rc = vader_btl_first_time_init (vader_btl, 1 + MCA_BTL_VADER_NUM_LOCAL_PEERS);
|
||||||
if (rc != OPAL_SUCCESS) {
|
if (rc != OPAL_SUCCESS) {
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
* Copyright (c) 2015-2017 Research Organization for Information Science
|
* Copyright (c) 2015-2017 Research Organization for Information Science
|
||||||
* and Technology (RIST). All rights reserved.
|
* and Technology (RIST). All rights reserved.
|
||||||
* Copyright (c) 2016-2018 IBM Corporation. All rights reserved.
|
* Copyright (c) 2016-2018 IBM Corporation. All rights reserved.
|
||||||
* Copyright (c) 2017 Intel, Inc. All rights reserved.
|
* Copyright (c) 2017-2020 Intel, Inc. All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -338,7 +338,7 @@ int opal_info_get_value_enum (opal_info_t *info, const char *key, int *value,
|
|||||||
* Similar to opal_info_get(), but cast the result into a boolean
|
* Similar to opal_info_get(), but cast the result into a boolean
|
||||||
* using some well-defined rules.
|
* using some well-defined rules.
|
||||||
*/
|
*/
|
||||||
int opal_info_get_bool(opal_info_t *info, char *key, bool *value, int *flag)
|
int opal_info_get_bool(opal_info_t *info, const char *key, bool *value, int *flag)
|
||||||
{
|
{
|
||||||
char str[256];
|
char str[256];
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
* Copyright (c) 2012-2017 Los Alamos National Security, LLC. All rights
|
* Copyright (c) 2012-2017 Los Alamos National Security, LLC. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2017-2018 IBM Corporation. All rights reserved.
|
* Copyright (c) 2017-2018 IBM Corporation. All rights reserved.
|
||||||
|
* Copyright (c) 2020 Intel, Inc. All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -203,7 +204,7 @@ int opal_info_free (opal_info_t **info);
|
|||||||
* result is false
|
* result is false
|
||||||
* - All other values are false
|
* - All other values are false
|
||||||
*/
|
*/
|
||||||
OPAL_DECLSPEC int opal_info_get_bool (opal_info_t *info, char *key, bool *value,
|
OPAL_DECLSPEC int opal_info_get_bool (opal_info_t *info, const char *key, bool *value,
|
||||||
int *flag);
|
int *flag);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
25
test/simple/intercomm1.c
Обычный файл
25
test/simple/intercomm1.c
Обычный файл
@ -0,0 +1,25 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include "mpi.h"
|
||||||
|
|
||||||
|
|
||||||
|
int main( int argc, char *argv[] )
|
||||||
|
{
|
||||||
|
MPI_Status status;
|
||||||
|
MPI_Comm comm,scomm;
|
||||||
|
int rank, size, color, errs=0;
|
||||||
|
MPI_Init( 0, 0 );
|
||||||
|
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
|
||||||
|
color = rank % 2;
|
||||||
|
printf("%d Calling split\n", rank);
|
||||||
|
MPI_Comm_split( MPI_COMM_WORLD, color, rank, &scomm );
|
||||||
|
printf("%d Calling Intercomm_create\n", rank);
|
||||||
|
MPI_Intercomm_create( scomm, 0, MPI_COMM_WORLD, 1-color, 1, &comm);
|
||||||
|
printf("%d Completet\n", rank);
|
||||||
|
MPI_Comm_rank( comm, &rank );
|
||||||
|
MPI_Comm_remote_size( comm, &size );
|
||||||
|
MPI_Comm_free(&scomm);
|
||||||
|
MPI_Comm_free(&comm);
|
||||||
|
MPI_Finalize();
|
||||||
|
return errs;
|
||||||
|
}
|
||||||
|
|
Загрузка…
x
Ссылка в новой задаче
Block a user