- just checkpoint
This commit was SVN r5745.
Этот коммит содержится в:
родитель
81d1d0322a
Коммит
c71f3f7152
@ -1,2 +1,3 @@
|
|||||||
angskun
|
angskun
|
||||||
zchen
|
zchen
|
||||||
|
thara
|
||||||
|
@ -41,11 +41,14 @@ struct orte_pls_poe_component_t {
|
|||||||
int priority;
|
int priority;
|
||||||
int verbose;
|
int verbose;
|
||||||
char* path;
|
char* path;
|
||||||
|
char* env;
|
||||||
char** argv;
|
char** argv;
|
||||||
int argc;
|
int argc;
|
||||||
int debug;
|
int debug;
|
||||||
char* orted;
|
char* orted;
|
||||||
char* class;
|
char* class;
|
||||||
|
char* hostfile;
|
||||||
|
char* cmdfile;
|
||||||
int retry;
|
int retry;
|
||||||
int retrycount;
|
int retrycount;
|
||||||
};
|
};
|
||||||
|
@ -131,7 +131,8 @@ int orte_pls_poe_component_open(void)
|
|||||||
mca_pls_poe_component.class = orte_pls_poe_param_reg_string("class","interactive");
|
mca_pls_poe_component.class = orte_pls_poe_param_reg_string("class","interactive");
|
||||||
mca_pls_poe_component.retry = orte_pls_poe_param_reg_int("retry", 0);
|
mca_pls_poe_component.retry = orte_pls_poe_param_reg_int("retry", 0);
|
||||||
mca_pls_poe_component.retrycount = orte_pls_poe_param_reg_int("retrycount", 0);
|
mca_pls_poe_component.retrycount = orte_pls_poe_param_reg_int("retrycount", 0);
|
||||||
param = orte_pls_poe_param_reg_string("progname","poe");
|
mca_pls_poe_component.env = orte_pls_poe_param_reg_string("progenv","env");
|
||||||
|
param = orte_pls_poe_param_reg_string("progpoe","poe");
|
||||||
mca_pls_poe_component.argv = ompi_argv_split(param, ' ');
|
mca_pls_poe_component.argv = ompi_argv_split(param, ' ');
|
||||||
mca_pls_poe_component.argc = ompi_argv_count(mca_pls_poe_component.argv);
|
mca_pls_poe_component.argc = ompi_argv_count(mca_pls_poe_component.argv);
|
||||||
if (mca_pls_poe_component.argc > 0) {
|
if (mca_pls_poe_component.argc > 0) {
|
||||||
@ -155,6 +156,10 @@ orte_pls_base_module_t *orte_pls_poe_component_init(int *priority)
|
|||||||
if (NULL == mca_pls_poe_component.path) {
|
if (NULL == mca_pls_poe_component.path) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
mca_pls_poe_component.env = ompi_path_findv(mca_pls_poe_component.env, 0, environ, NULL);
|
||||||
|
if (NULL == mca_pls_poe_component.env) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
*priority = mca_pls_poe_component.priority;
|
*priority = mca_pls_poe_component.priority;
|
||||||
return &orte_pls_poe_module;
|
return &orte_pls_poe_module;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include "ompi_config.h"
|
#include "ompi_config.h"
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "include/orte_constants.h"
|
#include "include/orte_constants.h"
|
||||||
#include "mca/pls/pls.h"
|
#include "mca/pls/pls.h"
|
||||||
@ -32,6 +33,7 @@
|
|||||||
#include "mca/ns/ns.h"
|
#include "mca/ns/ns.h"
|
||||||
#include "mca/rml/rml.h"
|
#include "mca/rml/rml.h"
|
||||||
#include "mca/errmgr/errmgr.h"
|
#include "mca/errmgr/errmgr.h"
|
||||||
|
#include "util/univ_info.h"
|
||||||
|
|
||||||
#include "util/argv.h"
|
#include "util/argv.h"
|
||||||
#include "util/ompi_environ.h"
|
#include "util/ompi_environ.h"
|
||||||
@ -71,7 +73,7 @@ int __poe_argv_append_int(int *argc, char ***argv, int varname, int min, char *a
|
|||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pls_poe_launch_interactive(orte_jobid_t jobid)
|
int pls_poe_launch_interactive_orted(orte_jobid_t jobid)
|
||||||
{
|
{
|
||||||
ompi_list_t nodes;
|
ompi_list_t nodes;
|
||||||
ompi_list_item_t* item;
|
ompi_list_item_t* item;
|
||||||
@ -88,18 +90,19 @@ int pls_poe_launch_interactive(orte_jobid_t jobid)
|
|||||||
int pid;
|
int pid;
|
||||||
int rc;
|
int rc;
|
||||||
int i;
|
int i;
|
||||||
char *hostfile, *cmdfile;
|
int status;
|
||||||
FILE *hfp, *cfp;
|
FILE *hfp, *cfp;
|
||||||
|
|
||||||
/* query the list of nodes allocated to the job - don't need the entire
|
/* query the list of nodes allocated to the job - don't need the entire
|
||||||
* mapping - as the daemon/proxy is responsibe for determining the apps
|
* mapping - as the daemon/proxy is responsibe for determining the apps
|
||||||
* to launch on each node.
|
* to launch on each node.
|
||||||
*/
|
*/
|
||||||
|
if (mca_pls_poe_component.verbose > 10) ompi_output(0, "%s:--- BEGIN ---\n", __FUNCTION__);
|
||||||
|
|
||||||
if((hostfile=tempnam(NULL,NULL))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
if((mca_pls_poe_component.hostfile=tempnam(NULL,NULL))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
if((cmdfile=tempnam(NULL,NULL))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
if((mca_pls_poe_component.cmdfile=tempnam(NULL,NULL))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
if((hfp=fopen(hostfile,"w"))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
if((hfp=fopen(mca_pls_poe_component.hostfile,"w"))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
if((cfp=fopen(cmdfile,"w"))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
if((cfp=fopen(mca_pls_poe_component.cmdfile,"w"))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
|
|
||||||
OBJ_CONSTRUCT(&nodes, ompi_list_t);
|
OBJ_CONSTRUCT(&nodes, ompi_list_t);
|
||||||
rc = orte_ras_base_node_query_alloc(&nodes, jobid);
|
rc = orte_ras_base_node_query_alloc(&nodes, jobid);
|
||||||
@ -120,25 +123,34 @@ int pls_poe_launch_interactive(orte_jobid_t jobid)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* need integer value for command line parameter - NOT hex */
|
|
||||||
asprintf(&tmp_string, "%lu", (unsigned long)jobid);
|
|
||||||
|
|
||||||
/* application */
|
/* application */
|
||||||
argv = ompi_argv_copy(ompi_argv_split(mca_pls_poe_component.orted, ' '));
|
argv = ompi_argv_copy(ompi_argv_split(mca_pls_poe_component.orted, ' '));
|
||||||
argc = ompi_argv_count(argv);
|
argc = ompi_argv_count(argv);
|
||||||
if (mca_pls_poe_component.debug) {
|
if (mca_pls_poe_component.debug) {
|
||||||
ompi_argv_append(&argc, &argv, "--debug");
|
ompi_argv_append(&argc, &argv, "--debug");
|
||||||
}
|
}
|
||||||
|
ompi_argv_append(&argc, &argv, "--debug-daemons");
|
||||||
|
|
||||||
|
ompi_argv_append(&argc, &argv, "--no-daemonize");
|
||||||
ompi_argv_append(&argc, &argv, "--bootproxy");
|
ompi_argv_append(&argc, &argv, "--bootproxy");
|
||||||
|
/* need integer value for command line parameter - NOT hex */
|
||||||
|
asprintf(&tmp_string, "%lu", (unsigned long)jobid);
|
||||||
ompi_argv_append(&argc, &argv, tmp_string);
|
ompi_argv_append(&argc, &argv, tmp_string);
|
||||||
|
free(tmp_string);
|
||||||
ompi_argv_append(&argc, &argv, "--name");
|
ompi_argv_append(&argc, &argv, "--name");
|
||||||
proc_name_index = argc;
|
proc_name_index = argc;
|
||||||
ompi_argv_append(&argc, &argv, "");
|
ompi_argv_append(&argc, &argv, "");
|
||||||
ompi_argv_append(&argc, &argv, "--nodename");
|
ompi_argv_append(&argc, &argv, "--nodename");
|
||||||
node_name_index2 = argc;
|
node_name_index2 = argc;
|
||||||
ompi_argv_append(&argc, &argv, "");
|
ompi_argv_append(&argc, &argv, "");
|
||||||
|
|
||||||
|
/* pass along the universe name and location info */
|
||||||
|
ompi_argv_append(&argc, &argv, "--universe");
|
||||||
|
asprintf(&tmp_string, "%s@%s:%s", orte_universe_info.uid,
|
||||||
|
orte_universe_info.host, orte_universe_info.name);
|
||||||
|
ompi_argv_append(&argc, &argv, tmp_string);
|
||||||
|
free(tmp_string);
|
||||||
|
|
||||||
|
|
||||||
/* setup ns contact info */
|
/* setup ns contact info */
|
||||||
ompi_argv_append(&argc, &argv, "--nsreplica");
|
ompi_argv_append(&argc, &argv, "--nsreplica");
|
||||||
@ -193,13 +205,14 @@ int pls_poe_launch_interactive(orte_jobid_t jobid)
|
|||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
argv[proc_name_index] = name_string;
|
argv[proc_name_index] = name_string;
|
||||||
|
|
||||||
for(i=0;i<argc;i++) {
|
for(i=0;i<argc;i++) {
|
||||||
printf("%s ",argv[i]);
|
|
||||||
fprintf(cfp,"%s ",argv[i]);
|
fprintf(cfp,"%s ",argv[i]);
|
||||||
}
|
}
|
||||||
printf("\n"); fflush(stdout);
|
|
||||||
fprintf(cfp,"\n");
|
fprintf(cfp,"\n");
|
||||||
|
|
||||||
|
if (mca_pls_poe_component.verbose) {
|
||||||
|
ompi_output(0, "%s:cmdfile %s\n", __FUNCTION__, ompi_argv_join(argv, ' '));
|
||||||
|
}
|
||||||
vpid++;
|
vpid++;
|
||||||
free(name);
|
free(name);
|
||||||
}
|
}
|
||||||
@ -210,21 +223,31 @@ int pls_poe_launch_interactive(orte_jobid_t jobid)
|
|||||||
argv = ompi_argv_copy(mca_pls_poe_component.argv);
|
argv = ompi_argv_copy(mca_pls_poe_component.argv);
|
||||||
argc = mca_pls_poe_component.argc;
|
argc = mca_pls_poe_component.argc;
|
||||||
ompi_argv_append(&argc, &argv, "-hostfile");
|
ompi_argv_append(&argc, &argv, "-hostfile");
|
||||||
ompi_argv_append(&argc, &argv, hostfile);
|
ompi_argv_append(&argc, &argv, mca_pls_poe_component.hostfile);
|
||||||
ompi_argv_append(&argc, &argv, "-cmdfile");
|
ompi_argv_append(&argc, &argv, "-cmdfile");
|
||||||
ompi_argv_append(&argc, &argv, cmdfile);
|
ompi_argv_append(&argc, &argv, mca_pls_poe_component.cmdfile);
|
||||||
ompi_argv_append(&argc, &argv, "-procs");
|
ompi_argv_append(&argc, &argv, "-procs");
|
||||||
asprintf(&tmp_string, "%d", num_nodes);
|
asprintf(&tmp_string, "%d", num_nodes);
|
||||||
ompi_argv_append(&argc, &argv, tmp_string);
|
ompi_argv_append(&argc, &argv, tmp_string);
|
||||||
|
free(tmp_string);
|
||||||
ompi_argv_append(&argc, &argv, "-pgmmodel");
|
ompi_argv_append(&argc, &argv, "-pgmmodel");
|
||||||
ompi_argv_append(&argc, &argv, "mpmd");
|
ompi_argv_append(&argc, &argv, "mpmd");
|
||||||
ompi_argv_append(&argc, &argv, "-resd");
|
ompi_argv_append(&argc, &argv, "-resd");
|
||||||
ompi_argv_append(&argc, &argv, "no");
|
ompi_argv_append(&argc, &argv, "no");
|
||||||
|
ompi_argv_append(&argc, &argv, "-labelio");
|
||||||
|
ompi_argv_append(&argc, &argv, "yes");
|
||||||
|
ompi_argv_append(&argc, &argv, "-infolevel");
|
||||||
|
ompi_argv_append(&argc, &argv, "6");
|
||||||
|
ompi_argv_append(&argc, &argv, "-stdoutmode");
|
||||||
|
ompi_argv_append(&argc, &argv, "ordered");
|
||||||
rc=__poe_argv_append_int(&argc, &argv, mca_pls_poe_component.retry, 0, "-retry");
|
rc=__poe_argv_append_int(&argc, &argv, mca_pls_poe_component.retry, 0, "-retry");
|
||||||
if(ORTE_SUCCESS!=rc) { ORTE_ERROR_LOG(rc); goto cleanup; }
|
if(ORTE_SUCCESS!=rc) { ORTE_ERROR_LOG(rc); goto cleanup; }
|
||||||
rc=__poe_argv_append_int(&argc, &argv, mca_pls_poe_component.retrycount, 0, "-retrycount");
|
rc=__poe_argv_append_int(&argc, &argv, mca_pls_poe_component.retrycount, 0, "-retrycount");
|
||||||
if(ORTE_SUCCESS!=rc) { ORTE_ERROR_LOG(rc); goto cleanup; }
|
if(ORTE_SUCCESS!=rc) { ORTE_ERROR_LOG(rc); goto cleanup; }
|
||||||
ompi_output(0, "%s", ompi_argv_join(argv, ' '));
|
|
||||||
|
if (mca_pls_poe_component.verbose) {
|
||||||
|
ompi_output(0, "%s:cmdline %s\n", __FUNCTION__, ompi_argv_join(argv, ' '));
|
||||||
|
}
|
||||||
|
|
||||||
pid = fork();
|
pid = fork();
|
||||||
if(pid < 0) {
|
if(pid < 0) {
|
||||||
@ -237,15 +260,243 @@ int pls_poe_launch_interactive(orte_jobid_t jobid)
|
|||||||
execv(mca_pls_poe_component.path, argv);
|
execv(mca_pls_poe_component.path, argv);
|
||||||
ompi_output(0, "orte_pls_poe: execv failed with errno=%d\n", errno);
|
ompi_output(0, "orte_pls_poe: execv failed with errno=%d\n", errno);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
waitpid(pid,&status,0);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
while(NULL != (item = ompi_list_remove_first(&nodes))) {
|
while(NULL != (item = ompi_list_remove_first(&nodes))) {
|
||||||
OBJ_RELEASE(item);
|
OBJ_RELEASE(item);
|
||||||
}
|
}
|
||||||
OBJ_DESTRUCT(&nodes);
|
OBJ_DESTRUCT(&nodes);
|
||||||
|
if (mca_pls_poe_component.verbose > 10) ompi_output(0, "%s: --- END rc(%d) ---\n", __FUNCTION__, rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int orte_pls_poe_launch_create_cmd_file(
|
||||||
|
FILE *cfp,
|
||||||
|
orte_app_context_t* context,
|
||||||
|
orte_rmaps_base_proc_t* proc,
|
||||||
|
orte_vpid_t vpid_start,
|
||||||
|
orte_vpid_t vpid_range)
|
||||||
|
{
|
||||||
|
pid_t pid;
|
||||||
|
int rc;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
char* param;
|
||||||
|
char* uri;
|
||||||
|
char **environ_copy;
|
||||||
|
|
||||||
|
/* setup base environment */
|
||||||
|
environ_copy = NULL;
|
||||||
|
param = mca_base_param_environ_variable("rmgr","bootproxy","jobid");
|
||||||
|
ompi_unsetenv(param, &environ_copy);
|
||||||
|
|
||||||
|
/* setup universe info */
|
||||||
|
if (NULL != orte_universe_info.name) {
|
||||||
|
param = mca_base_param_environ_variable("universe", NULL, NULL);
|
||||||
|
asprintf(&uri, "%s@%s:%s", orte_universe_info.uid,
|
||||||
|
orte_universe_info.host,
|
||||||
|
orte_universe_info.name);
|
||||||
|
ompi_setenv(param, uri, true, &environ_copy);
|
||||||
|
free(param);
|
||||||
|
free(uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* setup ns contact info */
|
||||||
|
if(NULL != orte_process_info.ns_replica_uri) {
|
||||||
|
uri = strdup(orte_process_info.ns_replica_uri);
|
||||||
|
} else {
|
||||||
|
uri = orte_rml.get_uri();
|
||||||
|
}
|
||||||
|
param = mca_base_param_environ_variable("ns","replica","uri");
|
||||||
|
ompi_setenv(param, uri, true, &environ_copy);
|
||||||
|
free(param);
|
||||||
|
free(uri);
|
||||||
|
|
||||||
|
/* setup gpr contact info */
|
||||||
|
if(NULL != orte_process_info.gpr_replica_uri) {
|
||||||
|
uri = strdup(orte_process_info.gpr_replica_uri);
|
||||||
|
} else {
|
||||||
|
uri = orte_rml.get_uri();
|
||||||
|
}
|
||||||
|
param = mca_base_param_environ_variable("gpr","replica","uri");
|
||||||
|
ompi_setenv(param, uri, true, &environ_copy);
|
||||||
|
free(param);
|
||||||
|
free(uri);
|
||||||
|
|
||||||
|
/* push name into environment */
|
||||||
|
orte_ns_nds_env_put(&proc->proc_name, vpid_start, vpid_range, &environ_copy);
|
||||||
|
|
||||||
|
if (context->argv == NULL) {
|
||||||
|
context->argv = malloc(sizeof(char*)*2);
|
||||||
|
context->argv[0] = strdup(context->app);
|
||||||
|
context->argv[1] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
fprintf(cfp,"%s",mca_pls_poe_component.env);
|
||||||
|
while(environ_copy[i]!=NULL) {
|
||||||
|
fprintf(cfp," %s",environ_copy[i++]);
|
||||||
|
}
|
||||||
|
ompi_argv_free(environ_copy);
|
||||||
|
fprintf(cfp," %s",context->app);
|
||||||
|
i=1;
|
||||||
|
while(context->argv[i]!=NULL) {
|
||||||
|
fprintf(cfp," %s",context->argv[i++]);
|
||||||
|
}
|
||||||
|
fprintf(cfp,"\n"); /* POE will upset if you don't have end line. */
|
||||||
|
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int orte_pls_poe_launch_interactive(orte_jobid_t jobid)
|
||||||
|
{
|
||||||
|
ompi_list_t map;
|
||||||
|
ompi_list_item_t* item;
|
||||||
|
orte_vpid_t vpid_start;
|
||||||
|
orte_vpid_t vpid_range;
|
||||||
|
size_t num_nodes, num_procs;
|
||||||
|
ompi_list_t nodes;
|
||||||
|
char *tmp_string;
|
||||||
|
int rc;
|
||||||
|
FILE *hfp, *cfp;
|
||||||
|
char** argv;
|
||||||
|
int status;
|
||||||
|
int argc;
|
||||||
|
int pid;
|
||||||
|
|
||||||
|
if (mca_pls_poe_component.verbose > 10) ompi_output(0, "%s:--- BEGIN ---\n", __FUNCTION__);
|
||||||
|
|
||||||
|
if((mca_pls_poe_component.cmdfile=tempnam(NULL,NULL))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
|
if((cfp=fopen(mca_pls_poe_component.cmdfile,"w"))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
|
|
||||||
|
OBJ_CONSTRUCT(&nodes, ompi_list_t);
|
||||||
|
rc = orte_ras_base_node_query_alloc(&nodes, jobid);
|
||||||
|
if(ORTE_SUCCESS != rc) {
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
num_nodes = ompi_list_get_size(&nodes);
|
||||||
|
if(0 < num_nodes) {
|
||||||
|
/* If user specify hosts */
|
||||||
|
if((mca_pls_poe_component.hostfile=tempnam(NULL,NULL))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
|
if((hfp=fopen(mca_pls_poe_component.hostfile,"w"))==NULL) return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
|
for(item = ompi_list_get_first(&nodes);
|
||||||
|
item != ompi_list_get_end(&nodes);
|
||||||
|
item = ompi_list_get_next(item)) {
|
||||||
|
orte_ras_base_node_t* node = (orte_ras_base_node_t*)item;
|
||||||
|
fprintf(hfp,"%s\n",node->node_name);
|
||||||
|
}
|
||||||
|
fclose(hfp);
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = orte_rmgr_base_get_job_slots(jobid, &num_procs);
|
||||||
|
if(ORTE_SUCCESS != rc) {
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* query allocation for the job */
|
||||||
|
OBJ_CONSTRUCT(&map, ompi_list_t);
|
||||||
|
rc = orte_rmaps_base_get_map(jobid,&map);
|
||||||
|
if (ORTE_SUCCESS != rc) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = orte_rmaps_base_get_vpid_range(jobid, &vpid_start, &vpid_range);
|
||||||
|
if (ORTE_SUCCESS != rc) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* setup a POE command file */
|
||||||
|
for(item = ompi_list_get_first(&map);
|
||||||
|
item != ompi_list_get_end(&map);
|
||||||
|
item = ompi_list_get_next(item)) {
|
||||||
|
orte_rmaps_base_map_t* map2 = (orte_rmaps_base_map_t*)item;
|
||||||
|
size_t i;
|
||||||
|
for(i=0; i<map2->num_procs; i++) {
|
||||||
|
rc = orte_pls_poe_launch_create_cmd_file(cfp,map2->app, map2->procs[i], vpid_start, vpid_range);
|
||||||
|
if(ORTE_SUCCESS != rc) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(cfp);
|
||||||
|
|
||||||
|
/********************/
|
||||||
|
/* POE Command line */
|
||||||
|
/********************/
|
||||||
|
argv = ompi_argv_copy(mca_pls_poe_component.argv);
|
||||||
|
argc = mca_pls_poe_component.argc;
|
||||||
|
|
||||||
|
if(num_nodes > 0) {
|
||||||
|
ompi_argv_append(&argc, &argv, "-hostfile");
|
||||||
|
ompi_argv_append(&argc, &argv, mca_pls_poe_component.hostfile);
|
||||||
|
ompi_argv_append(&argc, &argv, "-nodes");
|
||||||
|
asprintf(&tmp_string, "%d", num_nodes);
|
||||||
|
ompi_argv_append(&argc, &argv, tmp_string);
|
||||||
|
free(tmp_string);
|
||||||
|
ompi_argv_append(&argc, &argv, "-resd");
|
||||||
|
ompi_argv_append(&argc, &argv, "no");
|
||||||
|
}
|
||||||
|
|
||||||
|
ompi_argv_append(&argc, &argv, "-cmdfile");
|
||||||
|
ompi_argv_append(&argc, &argv, mca_pls_poe_component.cmdfile);
|
||||||
|
ompi_argv_append(&argc, &argv, "-procs");
|
||||||
|
asprintf(&tmp_string, "%d", num_procs);
|
||||||
|
ompi_argv_append(&argc, &argv, tmp_string);
|
||||||
|
free(tmp_string);
|
||||||
|
ompi_argv_append(&argc, &argv, "-pgmmodel");
|
||||||
|
ompi_argv_append(&argc, &argv, "mpmd");
|
||||||
|
rc=__poe_argv_append_int(&argc, &argv, mca_pls_poe_component.retry, 0, "-retry");
|
||||||
|
if(ORTE_SUCCESS!=rc) { ORTE_ERROR_LOG(rc); goto cleanup; }
|
||||||
|
rc=__poe_argv_append_int(&argc, &argv, mca_pls_poe_component.retrycount, 0, "-retrycount");
|
||||||
|
if(ORTE_SUCCESS!=rc) { ORTE_ERROR_LOG(rc); goto cleanup; }
|
||||||
|
|
||||||
|
/* FIXME: Debugging only! */
|
||||||
|
ompi_argv_append(&argc, &argv, "-labelio");
|
||||||
|
ompi_argv_append(&argc, &argv, "yes");
|
||||||
|
ompi_argv_append(&argc, &argv, "-infolevel");
|
||||||
|
ompi_argv_append(&argc, &argv, "6");
|
||||||
|
ompi_argv_append(&argc, &argv, "-stdoutmode");
|
||||||
|
ompi_argv_append(&argc, &argv, "ordered");
|
||||||
|
|
||||||
|
if (mca_pls_poe_component.verbose) {
|
||||||
|
ompi_output(0, "%s:cmdline %s\n", __FUNCTION__, ompi_argv_join(argv, ' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
pid = fork();
|
||||||
|
if(pid < 0) {
|
||||||
|
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
|
||||||
|
return ORTE_ERR_OUT_OF_RESOURCE;
|
||||||
|
}
|
||||||
|
if(pid == 0) {
|
||||||
|
execv(mca_pls_poe_component.path, argv);
|
||||||
|
ompi_output(0, "orte_pls_poe: execv failed with errno=%d\n", errno);
|
||||||
|
exit(-1);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
ompi_output(0, "\n\nBEFORE WAIT!!\n\n");
|
||||||
|
orte_waitpid(pid,&status,0);
|
||||||
|
ompi_output(0, "\n\nAFTER WAIT!!\n\n");
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
/*
|
||||||
|
while(NULL != (item = ompi_list_remove_first(&map))) {
|
||||||
|
OBJ_RELEASE(item);
|
||||||
|
}
|
||||||
|
OBJ_DESTRUCT(&map);
|
||||||
|
*/
|
||||||
|
if (mca_pls_poe_component.verbose>10) ompi_output(0, "%s: --- END rc(%d) ---\n", __FUNCTION__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,7 +507,7 @@ cleanup:
|
|||||||
static int pls_poe_launch(orte_jobid_t jobid)
|
static int pls_poe_launch(orte_jobid_t jobid)
|
||||||
{
|
{
|
||||||
if(!strncmp(mca_pls_poe_component.class,"interactive",11)) {
|
if(!strncmp(mca_pls_poe_component.class,"interactive",11)) {
|
||||||
return pls_poe_launch_interactive(jobid);
|
return orte_pls_poe_launch_interactive(jobid);
|
||||||
}
|
}
|
||||||
return ORTE_ERR_NOT_IMPLEMENTED;
|
return ORTE_ERR_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
@ -275,5 +526,9 @@ static int pls_poe_terminate_proc(const orte_process_name_t *name)
|
|||||||
|
|
||||||
static int pls_poe_finalize(void)
|
static int pls_poe_finalize(void)
|
||||||
{
|
{
|
||||||
return ORTE_ERR_NOT_IMPLEMENTED;
|
if (mca_pls_poe_component.verbose > 10) ompi_output(0, "%s: --- BEGIN ---\n", __FUNCTION__);
|
||||||
|
unlink(mca_pls_poe_component.cmdfile);
|
||||||
|
unlink(mca_pls_poe_component.hostfile);
|
||||||
|
if (mca_pls_poe_component.verbose > 10) ompi_output(0, "%s: --- END ---\n", __FUNCTION__);
|
||||||
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user