Correct a misplaced bracket - daemons shouldn't be doing app-related operations
This may need a patch for 1.8.2, but we can try to directly apply it cmr=v1.8.2:reviewer=hjelmn This commit was SVN r31754.
Этот коммит содержится в:
родитель
f27123a20d
Коммит
3a1c2fff3e
@ -133,7 +133,6 @@ static int rte_init(void)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
ORTE_PROC_MY_NAME->jobid = jobid;
|
ORTE_PROC_MY_NAME->jobid = jobid;
|
||||||
opal_output(0, "GETTING RANK");
|
|
||||||
/* get our rank from PMI */
|
/* get our rank from PMI */
|
||||||
if (!mca_common_pmi_rank(&i)) {
|
if (!mca_common_pmi_rank(&i)) {
|
||||||
error = "could not get PMI rank";
|
error = "could not get PMI rank";
|
||||||
@ -154,220 +153,224 @@ static int rte_init(void)
|
|||||||
error = "orte_ess_base_orted_setup";
|
error = "orte_ess_base_orted_setup";
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
} else { /* we are a direct-launched MPI process */
|
return ORTE_SUCCESS;
|
||||||
#if WANT_PMI2_SUPPORT
|
|
||||||
/* Get domain id */
|
|
||||||
pmi_id = (char*)malloc(PMI2_MAX_VALLEN);
|
|
||||||
if (PMI_SUCCESS != (ret = PMI2_Job_GetId(pmi_id, PMI2_MAX_VALLEN))) {
|
|
||||||
error = "PMI2_Job_GetId failed";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
{
|
|
||||||
int pmi_maxlen;
|
|
||||||
|
|
||||||
/* get our PMI id length */
|
|
||||||
if (PMI_SUCCESS != (ret = PMI_Get_id_length_max(&pmi_maxlen))) {
|
|
||||||
error = "PMI_Get_id_length_max";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
pmi_id = (char*)malloc(pmi_maxlen);
|
|
||||||
if (PMI_SUCCESS != (ret = PMI_Get_kvs_domain_id(pmi_id, pmi_maxlen))) {
|
|
||||||
free(pmi_id);
|
|
||||||
error = "PMI_Get_kvs_domain_id";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/* PMI is very nice to us - the domain id is an integer followed
|
|
||||||
* by a '.', followed by essentially a stepid. The first integer
|
|
||||||
* defines an overall job number. The second integer is the number of
|
|
||||||
* individual jobs we have run within that allocation. So we translate
|
|
||||||
* this as the overall job number equating to our job family, and
|
|
||||||
* the individual number equating to our local jobid
|
|
||||||
*/
|
|
||||||
jobfam = strtol(pmi_id, &localj, 10);
|
|
||||||
if (NULL == localj) {
|
|
||||||
/* hmmm - no '.', so let's just use zero */
|
|
||||||
stepid = 0;
|
|
||||||
} else {
|
|
||||||
localj++; /* step over the '.' */
|
|
||||||
stepid = strtol(localj, NULL, 10) + 1; /* add one to avoid looking like a daemon */
|
|
||||||
}
|
|
||||||
free(pmi_id);
|
|
||||||
|
|
||||||
/* now build the jobid */
|
|
||||||
ORTE_PROC_MY_NAME->jobid = ORTE_CONSTRUCT_LOCAL_JOBID(jobfam << 16, stepid);
|
|
||||||
|
|
||||||
/* get our rank */
|
|
||||||
if (!mca_common_pmi_rank(&i)) {
|
|
||||||
error = "could not get PMI rank";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
ORTE_PROC_MY_NAME->vpid = i;
|
|
||||||
|
|
||||||
/* get the number of procs from PMI */
|
|
||||||
if (!mca_common_pmi_size(&i)) {
|
|
||||||
error = "could not get PMI universe size";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
orte_process_info.num_procs = i;
|
|
||||||
/* push into the environ for pickup in MPI layer for
|
|
||||||
* MPI-3 required info key
|
|
||||||
*/
|
|
||||||
asprintf(&ev1, "OMPI_MCA_orte_ess_num_procs=%d", i);
|
|
||||||
putenv(ev1);
|
|
||||||
asprintf(&ev2, "OMPI_APP_CTX_NUM_PROCS=%d", i);
|
|
||||||
putenv(ev2);
|
|
||||||
|
|
||||||
/* setup transport keys in case the MPI layer needs them -
|
|
||||||
* we can use the jobfam and stepid as unique keys
|
|
||||||
* because they are unique values assigned by the RM
|
|
||||||
*/
|
|
||||||
unique_key[0] = (uint64_t)jobfam;
|
|
||||||
unique_key[1] = (uint64_t)stepid;
|
|
||||||
if (NULL == (string_key = orte_pre_condition_transports_print(unique_key))) {
|
|
||||||
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
|
|
||||||
return ORTE_ERR_OUT_OF_RESOURCE;
|
|
||||||
}
|
|
||||||
if (OPAL_SUCCESS != mca_base_var_env_name ("orte_precondition_transports", &cs_env)) {
|
|
||||||
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
|
|
||||||
return ORTE_ERR_OUT_OF_RESOURCE;
|
|
||||||
}
|
|
||||||
asprintf(&envar, "%s=%s", cs_env, string_key);
|
|
||||||
putenv(envar);
|
|
||||||
/* cannot free the envar as that messes up our environ */
|
|
||||||
free(cs_env);
|
|
||||||
free(string_key);
|
|
||||||
|
|
||||||
/* our app_context number can only be 0 as we don't support
|
|
||||||
* dynamic spawns
|
|
||||||
*/
|
|
||||||
orte_process_info.app_num = 0;
|
|
||||||
|
|
||||||
/* setup my daemon's name - arbitrary, since we don't route
|
|
||||||
* messages
|
|
||||||
*/
|
|
||||||
ORTE_PROC_MY_DAEMON->jobid = 0;
|
|
||||||
ORTE_PROC_MY_DAEMON->vpid = 0;
|
|
||||||
|
|
||||||
/* ensure we pick the correct critical components */
|
|
||||||
putenv("OMPI_MCA_grpcomm=pmi");
|
|
||||||
putenv("OMPI_MCA_db_pmi_store_priority=100");
|
|
||||||
putenv("OMPI_MCA_routed=direct");
|
|
||||||
|
|
||||||
/* now use the default procedure to finish my setup */
|
|
||||||
if (ORTE_SUCCESS != (ret = orte_ess_base_app_setup(false))) {
|
|
||||||
ORTE_ERROR_LOG(ret);
|
|
||||||
error = "orte_ess_base_app_setup";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if WANT_PMI2_SUPPORT
|
|
||||||
{
|
|
||||||
/* get our local proc info to find our local rank */
|
|
||||||
char *pmapping = (char*)malloc(PMI2_MAX_VALLEN);
|
|
||||||
int found, sid, nodes, k;
|
|
||||||
orte_vpid_t n;
|
|
||||||
char *p;
|
|
||||||
ret = PMI2_Info_GetJobAttr("PMI_process_mapping", pmapping, PMI2_MAX_VALLEN, &found);
|
|
||||||
if (!found || PMI_SUCCESS != ret) { /* can't check PMI2_SUCCESS as some folks (i.e., Cray) don't define it */
|
|
||||||
error = "could not get PMI_process_mapping (PMI2_Info_GetJobAttr() failed)";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0; n = 0; procs = 0;
|
|
||||||
if (NULL != (p = strstr(pmapping, "(vector"))) {
|
|
||||||
while (NULL != (p = strstr(p+1, ",("))) {
|
|
||||||
if (3 == sscanf(p, ",(%d,%d,%d)", &sid, &nodes, &procs)) {
|
|
||||||
for (k = 0; k < nodes; k++) {
|
|
||||||
if ((ORTE_PROC_MY_NAME->vpid >= n) &&
|
|
||||||
(ORTE_PROC_MY_NAME->vpid < (n + procs))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
n += procs;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
procs = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(pmapping);
|
|
||||||
|
|
||||||
if (0 < procs) {
|
|
||||||
ranks = (int*)malloc(procs * sizeof(int));
|
|
||||||
for (i=0; i < procs; i++) {
|
|
||||||
ranks[i] = n + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NULL == ranks) {
|
|
||||||
error = "could not get PMI_process_mapping";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
/* get our local proc info to find our local rank */
|
|
||||||
if (PMI_SUCCESS != (ret = PMI_Get_clique_size(&procs))) {
|
|
||||||
OPAL_PMI_ERROR(ret, "PMI_Get_clique_size");
|
|
||||||
error = "could not get PMI clique size";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
/* now get the specific ranks */
|
|
||||||
ranks = (int*)calloc(procs, sizeof(int));
|
|
||||||
if (NULL == ranks) {
|
|
||||||
error = "could not get memory for local ranks";
|
|
||||||
ret = ORTE_ERR_OUT_OF_RESOURCE;
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
if (PMI_SUCCESS != (ret = PMI_Get_clique_ranks(ranks, procs))) {
|
|
||||||
OPAL_PMI_ERROR(ret, "PMI_Get_clique_ranks");
|
|
||||||
error = "could not get clique ranks";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/* store the number of local peers - remember, we want the number
|
|
||||||
* of peers that share the node WITH ME, so we have to subtract
|
|
||||||
* ourselves from that number
|
|
||||||
*/
|
|
||||||
orte_process_info.num_local_peers = procs - 1;
|
|
||||||
/* The clique ranks are returned in rank order, so
|
|
||||||
* cycle thru the array and update the local/node
|
|
||||||
* rank info
|
|
||||||
*/
|
|
||||||
for (j=0; j < procs; j++) {
|
|
||||||
if (ranks[j] == (int)ORTE_PROC_MY_NAME->vpid) {
|
|
||||||
orte_process_info.my_local_rank = (orte_local_rank_t)j;
|
|
||||||
orte_process_info.my_node_rank = (orte_node_rank_t)j;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* store the name of the local leader */
|
|
||||||
ldr.jobid = ORTE_PROC_MY_NAME->jobid;
|
|
||||||
ldr.vpid = ranks[0];
|
|
||||||
OBJ_CONSTRUCT(&kv, opal_value_t);
|
|
||||||
kv.key = strdup(OPAL_DSTORE_LOCALLDR);
|
|
||||||
kv.type = OPAL_ID_T;
|
|
||||||
kv.data.uint64 = *(opal_identifier_t*)&ldr;
|
|
||||||
if (ORTE_SUCCESS != (ret = opal_dstore.store(opal_dstore_internal,
|
|
||||||
(opal_identifier_t*)ORTE_PROC_MY_NAME, &kv))) {
|
|
||||||
error = "storing local leader";
|
|
||||||
OBJ_DESTRUCT(&kv);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
OBJ_DESTRUCT(&kv);
|
|
||||||
free(ranks);
|
|
||||||
|
|
||||||
/* setup process binding */
|
|
||||||
if (ORTE_SUCCESS != (ret = orte_ess_base_proc_binding())) {
|
|
||||||
error = "proc_binding";
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* this needs to be set to enable debugger use when direct launched */
|
|
||||||
orte_standalone_operation = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* we are a direct-launched MPI process */
|
||||||
|
|
||||||
|
#if WANT_PMI2_SUPPORT
|
||||||
|
/* Get domain id */
|
||||||
|
pmi_id = (char*)malloc(PMI2_MAX_VALLEN);
|
||||||
|
if (PMI_SUCCESS != (ret = PMI2_Job_GetId(pmi_id, PMI2_MAX_VALLEN))) {
|
||||||
|
error = "PMI2_Job_GetId failed";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
int pmi_maxlen;
|
||||||
|
|
||||||
|
/* get our PMI id length */
|
||||||
|
if (PMI_SUCCESS != (ret = PMI_Get_id_length_max(&pmi_maxlen))) {
|
||||||
|
error = "PMI_Get_id_length_max";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
pmi_id = (char*)malloc(pmi_maxlen);
|
||||||
|
if (PMI_SUCCESS != (ret = PMI_Get_kvs_domain_id(pmi_id, pmi_maxlen))) {
|
||||||
|
free(pmi_id);
|
||||||
|
error = "PMI_Get_kvs_domain_id";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/* PMI is very nice to us - the domain id is an integer followed
|
||||||
|
* by a '.', followed by essentially a stepid. The first integer
|
||||||
|
* defines an overall job number. The second integer is the number of
|
||||||
|
* individual jobs we have run within that allocation. So we translate
|
||||||
|
* this as the overall job number equating to our job family, and
|
||||||
|
* the individual number equating to our local jobid
|
||||||
|
*/
|
||||||
|
jobfam = strtol(pmi_id, &localj, 10);
|
||||||
|
if (NULL == localj) {
|
||||||
|
/* hmmm - no '.', so let's just use zero */
|
||||||
|
stepid = 0;
|
||||||
|
} else {
|
||||||
|
localj++; /* step over the '.' */
|
||||||
|
stepid = strtol(localj, NULL, 10) + 1; /* add one to avoid looking like a daemon */
|
||||||
|
}
|
||||||
|
free(pmi_id);
|
||||||
|
|
||||||
|
/* now build the jobid */
|
||||||
|
ORTE_PROC_MY_NAME->jobid = ORTE_CONSTRUCT_LOCAL_JOBID(jobfam << 16, stepid);
|
||||||
|
|
||||||
|
/* get our rank */
|
||||||
|
if (!mca_common_pmi_rank(&i)) {
|
||||||
|
error = "could not get PMI rank";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
ORTE_PROC_MY_NAME->vpid = i;
|
||||||
|
|
||||||
|
/* get the number of procs from PMI */
|
||||||
|
if (!mca_common_pmi_size(&i)) {
|
||||||
|
error = "could not get PMI universe size";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
orte_process_info.num_procs = i;
|
||||||
|
/* push into the environ for pickup in MPI layer for
|
||||||
|
* MPI-3 required info key
|
||||||
|
*/
|
||||||
|
asprintf(&ev1, "OMPI_MCA_orte_ess_num_procs=%d", i);
|
||||||
|
putenv(ev1);
|
||||||
|
asprintf(&ev2, "OMPI_APP_CTX_NUM_PROCS=%d", i);
|
||||||
|
putenv(ev2);
|
||||||
|
|
||||||
|
/* setup transport keys in case the MPI layer needs them -
|
||||||
|
* we can use the jobfam and stepid as unique keys
|
||||||
|
* because they are unique values assigned by the RM
|
||||||
|
*/
|
||||||
|
unique_key[0] = (uint64_t)jobfam;
|
||||||
|
unique_key[1] = (uint64_t)stepid;
|
||||||
|
if (NULL == (string_key = orte_pre_condition_transports_print(unique_key))) {
|
||||||
|
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
|
||||||
|
return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
|
}
|
||||||
|
if (OPAL_SUCCESS != mca_base_var_env_name ("orte_precondition_transports", &cs_env)) {
|
||||||
|
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
|
||||||
|
return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
|
}
|
||||||
|
asprintf(&envar, "%s=%s", cs_env, string_key);
|
||||||
|
putenv(envar);
|
||||||
|
/* cannot free the envar as that messes up our environ */
|
||||||
|
free(cs_env);
|
||||||
|
free(string_key);
|
||||||
|
|
||||||
|
/* our app_context number can only be 0 as we don't support
|
||||||
|
* dynamic spawns
|
||||||
|
*/
|
||||||
|
orte_process_info.app_num = 0;
|
||||||
|
|
||||||
|
/* setup my daemon's name - arbitrary, since we don't route
|
||||||
|
* messages
|
||||||
|
*/
|
||||||
|
ORTE_PROC_MY_DAEMON->jobid = 0;
|
||||||
|
ORTE_PROC_MY_DAEMON->vpid = 0;
|
||||||
|
|
||||||
|
/* ensure we pick the correct critical components */
|
||||||
|
putenv("OMPI_MCA_grpcomm=pmi");
|
||||||
|
putenv("OMPI_MCA_db_pmi_store_priority=100");
|
||||||
|
putenv("OMPI_MCA_routed=direct");
|
||||||
|
|
||||||
|
/* now use the default procedure to finish my setup */
|
||||||
|
if (ORTE_SUCCESS != (ret = orte_ess_base_app_setup(false))) {
|
||||||
|
ORTE_ERROR_LOG(ret);
|
||||||
|
error = "orte_ess_base_app_setup";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if WANT_PMI2_SUPPORT
|
||||||
|
{
|
||||||
|
/* get our local proc info to find our local rank */
|
||||||
|
char *pmapping = (char*)malloc(PMI2_MAX_VALLEN);
|
||||||
|
int found, sid, nodes, k;
|
||||||
|
orte_vpid_t n;
|
||||||
|
char *p;
|
||||||
|
ret = PMI2_Info_GetJobAttr("PMI_process_mapping", pmapping, PMI2_MAX_VALLEN, &found);
|
||||||
|
if (!found || PMI_SUCCESS != ret) { /* can't check PMI2_SUCCESS as some folks (i.e., Cray) don't define it */
|
||||||
|
error = "could not get PMI_process_mapping (PMI2_Info_GetJobAttr() failed)";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0; n = 0; procs = 0;
|
||||||
|
if (NULL != (p = strstr(pmapping, "(vector"))) {
|
||||||
|
while (NULL != (p = strstr(p+1, ",("))) {
|
||||||
|
if (3 == sscanf(p, ",(%d,%d,%d)", &sid, &nodes, &procs)) {
|
||||||
|
for (k = 0; k < nodes; k++) {
|
||||||
|
if ((ORTE_PROC_MY_NAME->vpid >= n) &&
|
||||||
|
(ORTE_PROC_MY_NAME->vpid < (n + procs))) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
n += procs;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
procs = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(pmapping);
|
||||||
|
|
||||||
|
if (0 < procs) {
|
||||||
|
ranks = (int*)malloc(procs * sizeof(int));
|
||||||
|
for (i=0; i < procs; i++) {
|
||||||
|
ranks[i] = n + i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL == ranks) {
|
||||||
|
error = "could not get PMI_process_mapping";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* get our local proc info to find our local rank */
|
||||||
|
if (PMI_SUCCESS != (ret = PMI_Get_clique_size(&procs))) {
|
||||||
|
OPAL_PMI_ERROR(ret, "PMI_Get_clique_size");
|
||||||
|
error = "could not get PMI clique size";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
/* now get the specific ranks */
|
||||||
|
ranks = (int*)calloc(procs, sizeof(int));
|
||||||
|
if (NULL == ranks) {
|
||||||
|
error = "could not get memory for local ranks";
|
||||||
|
ret = ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
if (PMI_SUCCESS != (ret = PMI_Get_clique_ranks(ranks, procs))) {
|
||||||
|
OPAL_PMI_ERROR(ret, "PMI_Get_clique_ranks");
|
||||||
|
error = "could not get clique ranks";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/* store the number of local peers - remember, we want the number
|
||||||
|
* of peers that share the node WITH ME, so we have to subtract
|
||||||
|
* ourselves from that number
|
||||||
|
*/
|
||||||
|
orte_process_info.num_local_peers = procs - 1;
|
||||||
|
/* The clique ranks are returned in rank order, so
|
||||||
|
* cycle thru the array and update the local/node
|
||||||
|
* rank info
|
||||||
|
*/
|
||||||
|
for (j=0; j < procs; j++) {
|
||||||
|
if (ranks[j] == (int)ORTE_PROC_MY_NAME->vpid) {
|
||||||
|
orte_process_info.my_local_rank = (orte_local_rank_t)j;
|
||||||
|
orte_process_info.my_node_rank = (orte_node_rank_t)j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* store the name of the local leader */
|
||||||
|
ldr.jobid = ORTE_PROC_MY_NAME->jobid;
|
||||||
|
ldr.vpid = ranks[0];
|
||||||
|
OBJ_CONSTRUCT(&kv, opal_value_t);
|
||||||
|
kv.key = strdup(OPAL_DSTORE_LOCALLDR);
|
||||||
|
kv.type = OPAL_ID_T;
|
||||||
|
kv.data.uint64 = *(opal_identifier_t*)&ldr;
|
||||||
|
if (ORTE_SUCCESS != (ret = opal_dstore.store(opal_dstore_internal,
|
||||||
|
(opal_identifier_t*)ORTE_PROC_MY_NAME, &kv))) {
|
||||||
|
error = "storing local leader";
|
||||||
|
OBJ_DESTRUCT(&kv);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
OBJ_DESTRUCT(&kv);
|
||||||
|
free(ranks);
|
||||||
|
|
||||||
|
/* setup process binding */
|
||||||
|
if (ORTE_SUCCESS != (ret = orte_ess_base_proc_binding())) {
|
||||||
|
error = "proc_binding";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* this needs to be set to enable debugger use when direct launched */
|
||||||
|
orte_standalone_operation = true;
|
||||||
|
|
||||||
/* set max procs */
|
/* set max procs */
|
||||||
if (orte_process_info.max_procs < orte_process_info.num_procs) {
|
if (orte_process_info.max_procs < orte_process_info.num_procs) {
|
||||||
orte_process_info.max_procs = orte_process_info.num_procs;
|
orte_process_info.max_procs = orte_process_info.num_procs;
|
||||||
@ -376,7 +379,7 @@ static int rte_init(void)
|
|||||||
/* construct the PMI RTE string */
|
/* construct the PMI RTE string */
|
||||||
rmluri = orte_rml.get_contact_info();
|
rmluri = orte_rml.get_contact_info();
|
||||||
|
|
||||||
OBJ_CONSTRUCT(&kv, opal_value_t);
|
OBJ_CONSTRUCT(&kv, opal_value_t);
|
||||||
kv.key = strdup(ORTE_DB_RMLURI);
|
kv.key = strdup(ORTE_DB_RMLURI);
|
||||||
kv.type = OPAL_STRING;
|
kv.type = OPAL_STRING;
|
||||||
kv.data.string = strdup(rmluri);
|
kv.data.string = strdup(rmluri);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user