The old PLS is now called a ODLS. However, the real name is not windows but process. This
change will follow shortly... This commit was SVN r11663.
Этот коммит содержится в:
родитель
a3ad4a7fc8
Коммит
4fe39a4e7d
@ -12,33 +12,33 @@
|
||||
# Use the top-level Makefile.options
|
||||
|
||||
|
||||
dist_pkgdata_DATA = help-orte-pls-process.txt
|
||||
dist_pkgdata_DATA = help-orte-odls-process.txt
|
||||
|
||||
sources = \
|
||||
pls_process.h \
|
||||
pls_process_component.c \
|
||||
pls_process_module.c
|
||||
odls_process.h \
|
||||
odls_process_component.c \
|
||||
odls_process_module.c
|
||||
|
||||
# Make the output library in this directory, and name it either
|
||||
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
||||
# (for static builds).
|
||||
|
||||
if OMPI_BUILD_pls_process_DSO
|
||||
if OMPI_BUILD_odls_process_DSO
|
||||
component_noinst =
|
||||
component_install = mca_pls_process.la
|
||||
component_install = mca_odls_process.la
|
||||
else
|
||||
component_noinst = libmca_pls_process.la
|
||||
component_noinst = libmca_odls_process.la
|
||||
component_install =
|
||||
endif
|
||||
|
||||
mcacomponentdir = $(libdir)/openmpi
|
||||
mcacomponent_LTLIBRARIES = $(component_install)
|
||||
mca_pls_process_la_SOURCES = $(sources)
|
||||
mca_pls_process_la_LDFLAGS = -module -avoid-version
|
||||
mca_pls_process_la_LIBADD = \
|
||||
mca_odls_process_la_SOURCES = $(sources)
|
||||
mca_odls_process_la_LDFLAGS = -module -avoid-version
|
||||
mca_odls_process_la_LIBADD = \
|
||||
$(top_ompi_builddir)/orte/liborte.la \
|
||||
$(top_ompi_builddir)/opal/libopal.la
|
||||
|
||||
noinst_LTLIBRARIES = $(component_noinst)
|
||||
libmca_pls_process_la_SOURCES =$(sources)
|
||||
libmca_pls_process_la_LDFLAGS = -module -avoid-version
|
||||
libmca_odls_process_la_SOURCES =$(sources)
|
||||
libmca_odls_process_la_LDFLAGS = -module -avoid-version
|
||||
|
@ -11,34 +11,34 @@
|
||||
#
|
||||
# This is the US/English general help file for Open RTE's orterun.
|
||||
#
|
||||
[orte-pls-process:chdir-error]
|
||||
[orte-odls-process:chdir-error]
|
||||
Failed to change to the working directory:
|
||||
|
||||
Host: %s
|
||||
Directory: %s
|
||||
|
||||
The error returned was "%s". Execution will now abort.
|
||||
[orte-pls-process:argv0-not-found]
|
||||
[orte-odls-process:argv0-not-found]
|
||||
Failed to find the following executable:
|
||||
|
||||
Host: %s
|
||||
Executable: %s
|
||||
|
||||
Cannot continue.
|
||||
[orte-pls-process:argv0-not-accessible]
|
||||
[orte-odls-process:argv0-not-accessible]
|
||||
Failed to find or execute the following executable:
|
||||
|
||||
Host: %s
|
||||
Executable: %s
|
||||
|
||||
Cannot continue.
|
||||
[orte-pls-process:execv-error]
|
||||
[orte-odls-process:execv-error]
|
||||
Could not execute the executable "%s": %s
|
||||
|
||||
This could mean that your PATH or executable name is wrong, or that you do not
|
||||
have the necessary permissions. Please ensure that the executable is able to be
|
||||
found and executed.
|
||||
[orte-pls-process:could-not-kill]
|
||||
[orte-odls-process:could-not-kill]
|
||||
WARNING: A process refused to die!
|
||||
|
||||
Host: %s
|
||||
@ -46,7 +46,7 @@ PID: %d
|
||||
|
||||
This process may still be running and/or consuming resources.
|
||||
|
||||
[orte-pls-process:could-not-kill]
|
||||
[orte-odls-process:could-not-kill]
|
||||
WARNING: A process refused the kill SIGTERM signal!
|
||||
This should never happen unless the application is changing the
|
||||
parent/child relationship permissions.
|
||||
|
@ -9,14 +9,14 @@
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#ifndef ORTE_PLS_PROCESS_EXPORT_H
|
||||
#define ORTE_PLS_PROCESS_EXPORT_H
|
||||
#ifndef ORTE_ODLS_PROCESS_EXPORT_H
|
||||
#define ORTE_ODLS_PROCESS_EXPORT_H
|
||||
|
||||
#include "orte_config.h"
|
||||
|
||||
#include "opal/threads/condition.h"
|
||||
#include "opal/mca/mca.h"
|
||||
#include "orte/mca/pls/pls.h"
|
||||
#include "orte/mca/odls/odls.h"
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
extern "C" {
|
||||
@ -25,30 +25,30 @@ extern "C" {
|
||||
/*
|
||||
* Module open / close
|
||||
*/
|
||||
int orte_pls_process_component_open(void);
|
||||
int orte_pls_process_component_close(void);
|
||||
orte_pls_base_module_t* orte_pls_process_component_init(int *priority);
|
||||
int orte_odls_process_component_open(void);
|
||||
int orte_odls_process_component_close(void);
|
||||
orte_odls_base_module_t* orte_odls_process_component_init(int *priority);
|
||||
|
||||
/*
|
||||
* Startup / Shutdown
|
||||
*/
|
||||
int orte_pls_process_finalize(void);
|
||||
int orte_odls_process_finalize(void);
|
||||
|
||||
|
||||
/*
|
||||
* Interface
|
||||
*/
|
||||
int orte_pls_process_launch(orte_jobid_t);
|
||||
int orte_pls_process_terminate_job(orte_jobid_t);
|
||||
int orte_pls_process_terminate_proc(const orte_process_name_t* proc_name);
|
||||
int orte_pls_process_signal_job(orte_jobid_t, int32_t);
|
||||
int orte_pls_process_signal_proc(const orte_process_name_t* proc_name, int32_t signal);
|
||||
int orte_odls_process_launch(orte_jobid_t);
|
||||
int orte_odls_process_terminate_job(orte_jobid_t);
|
||||
int orte_odls_process_terminate_proc(const orte_process_name_t* proc_name);
|
||||
int orte_odls_process_signal_job(orte_jobid_t, int32_t);
|
||||
int orte_odls_process_signal_proc(const orte_process_name_t* proc_name, int32_t signal);
|
||||
|
||||
/**
|
||||
* PLS Component
|
||||
* ODLS Component
|
||||
*/
|
||||
struct orte_pls_process_component_t {
|
||||
orte_pls_base_component_t super;
|
||||
struct orte_odls_process_component_t {
|
||||
orte_odls_base_component_t super;
|
||||
int debug;
|
||||
int priority;
|
||||
int reap;
|
||||
@ -57,14 +57,14 @@ struct orte_pls_process_component_t {
|
||||
opal_mutex_t lock;
|
||||
opal_condition_t cond;
|
||||
};
|
||||
typedef struct orte_pls_process_component_t orte_pls_process_component_t;
|
||||
typedef struct orte_odls_process_component_t orte_odls_process_component_t;
|
||||
|
||||
|
||||
ORTE_MODULE_DECLSPEC extern orte_pls_process_component_t mca_pls_process_component;
|
||||
extern orte_pls_base_module_t orte_pls_process_module;
|
||||
ORTE_MODULE_DECLSPEC extern orte_odls_process_component_t mca_odls_process_component;
|
||||
extern orte_odls_base_module_t orte_odls_process_module;
|
||||
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
#endif /* ORTE_PLS_PROCESS_EXPORT_H */
|
||||
#endif /* ORTE_ODLS_PROCESS_EXPORT_H */
|
||||
|
@ -8,11 +8,6 @@
|
||||
*
|
||||
* $HEADER$
|
||||
*
|
||||
* These symbols are in a file by themselves to provide nice linker
|
||||
* semantics. Since linkers generally pull in symbols by object
|
||||
* files, keeping these symbols as the only symbols in this file
|
||||
* prevents utility programs such as "ompi_info" from having to import
|
||||
* entire components just to query their version and parameters.
|
||||
*/
|
||||
|
||||
#include "orte_config.h"
|
||||
@ -26,15 +21,15 @@
|
||||
#include "opal/mca/base/mca_base_param.h"
|
||||
#include "orte/util/proc_info.h"
|
||||
#include "orte/orte_constants.h"
|
||||
#include "orte/mca/pls/pls.h"
|
||||
#include "orte/mca/pls/process/pls_process.h"
|
||||
#include "orte/mca/odls/odls.h"
|
||||
#include "orte/mca/odls/process/odls_process.h"
|
||||
|
||||
|
||||
/*
|
||||
* Public string showing the pls ompi_process component version number
|
||||
* Public string showing the odls ompi_process component version number
|
||||
*/
|
||||
const char *mca_pls_process_component_version_string =
|
||||
"Open MPI process pls MCA component version " ORTE_VERSION;
|
||||
const char *mca_odls_process_component_version_string =
|
||||
"Open MPI process odls MCA component version " ORTE_VERSION;
|
||||
|
||||
|
||||
/*
|
||||
@ -42,16 +37,16 @@ const char *mca_pls_process_component_version_string =
|
||||
* and pointers to our public functions in it
|
||||
*/
|
||||
|
||||
orte_pls_process_component_t mca_pls_process_component = {
|
||||
orte_odls_process_component_t mca_odls_process_component = {
|
||||
{
|
||||
/* First, the mca_component_t struct containing meta information
|
||||
about the component itself */
|
||||
|
||||
{
|
||||
/* Indicate that we are a pls v1.0.0 component (which also
|
||||
/* Indicate that we are a odls v1.0.0 component (which also
|
||||
implies a specific MCA version) */
|
||||
|
||||
ORTE_PLS_BASE_VERSION_1_0_0,
|
||||
ORTE_ODLS_BASE_VERSION_1_0_0,
|
||||
|
||||
/* Component name and version */
|
||||
|
||||
@ -62,8 +57,8 @@ orte_pls_process_component_t mca_pls_process_component = {
|
||||
|
||||
/* Component open and close functions */
|
||||
|
||||
orte_pls_process_component_open,
|
||||
orte_pls_process_component_close
|
||||
orte_odls_process_component_open,
|
||||
orte_odls_process_component_close
|
||||
},
|
||||
|
||||
/* Next the MCA v1.0.0 component meta data */
|
||||
@ -76,63 +71,63 @@ orte_pls_process_component_t mca_pls_process_component = {
|
||||
|
||||
/* Initialization / querying functions */
|
||||
|
||||
orte_pls_process_component_init
|
||||
orte_odls_process_component_init
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
int orte_pls_process_component_open(void)
|
||||
int orte_odls_process_component_open(void)
|
||||
{
|
||||
mca_base_component_t *c = &mca_pls_process_component.super.pls_version;
|
||||
mca_base_component_t *c = &mca_odls_process_component.super.odls_version;
|
||||
|
||||
/* initialize globals */
|
||||
OBJ_CONSTRUCT(&mca_pls_process_component.lock, opal_mutex_t);
|
||||
OBJ_CONSTRUCT(&mca_pls_process_component.cond, opal_condition_t);
|
||||
OBJ_CONSTRUCT(&mca_odls_process_component.lock, opal_mutex_t);
|
||||
OBJ_CONSTRUCT(&mca_odls_process_component.cond, opal_condition_t);
|
||||
|
||||
/* lookup parameters */
|
||||
mca_base_param_reg_int(c, "reap",
|
||||
"Whether to wait to reap all children before finalizing or not",
|
||||
false, false, 1, &mca_pls_process_component.reap);
|
||||
false, false, 1, &mca_odls_process_component.reap);
|
||||
mca_base_param_reg_int(c, "reap_timeout",
|
||||
"When killing children processes, first send a SIGTERM, then wait at least this timeout (in seconds), then send a SIGKILL",
|
||||
false, false, 0, &mca_pls_process_component.timeout_before_sigkill);
|
||||
false, false, 0, &mca_odls_process_component.timeout_before_sigkill);
|
||||
mca_base_param_reg_int(c, "priority",
|
||||
"Priority of this component",
|
||||
false, false, 1, &mca_pls_process_component.priority);
|
||||
false, false, 1, &mca_odls_process_component.priority);
|
||||
mca_base_param_reg_int(c, "debug",
|
||||
"Whether to enable debugging output or not",
|
||||
false, false, 0, &mca_pls_process_component.debug);
|
||||
if (mca_pls_process_component.debug == 0) {
|
||||
false, false, 0, &mca_odls_process_component.debug);
|
||||
if (mca_odls_process_component.debug == 0) {
|
||||
int id = mca_base_param_register_int("debug",NULL,NULL,NULL,0);
|
||||
int value;
|
||||
mca_base_param_lookup_int(id,&value);
|
||||
mca_pls_process_component.debug = (value > 0) ? 1 : 0;
|
||||
mca_odls_process_component.debug = (value > 0) ? 1 : 0;
|
||||
}
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
orte_pls_base_module_t *orte_pls_process_component_init(int *priority)
|
||||
orte_odls_base_module_t *orte_odls_process_component_init(int *priority)
|
||||
{
|
||||
/* Only return a module if we're in the orted */
|
||||
#if 0
|
||||
if (orte_process_info.daemon) {
|
||||
*priority = mca_pls_process_component.priority;
|
||||
return &orte_pls_process_module;
|
||||
*priority = mca_odls_process_component.priority;
|
||||
return &orte_odls_process_module;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
*priority = mca_pls_process_component.priority;
|
||||
return &orte_pls_process_module;
|
||||
*priority = mca_odls_process_component.priority;
|
||||
return &orte_odls_process_module;
|
||||
}
|
||||
|
||||
|
||||
int orte_pls_process_component_close(void)
|
||||
int orte_odls_process_component_close(void)
|
||||
{
|
||||
OBJ_DESTRUCT(&mca_pls_process_component.lock);
|
||||
OBJ_DESTRUCT(&mca_pls_process_component.cond);
|
||||
OBJ_DESTRUCT(&mca_odls_process_component.lock);
|
||||
OBJ_DESTRUCT(&mca_odls_process_component.cond);
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -8,11 +8,6 @@
|
||||
*
|
||||
* $HEADER$
|
||||
*
|
||||
* These symbols are in a file by themselves to provide nice linker
|
||||
* semantics. Since linkers generally pull in symbols by object
|
||||
* files, keeping these symbols as the only symbols in this file
|
||||
* prevents utility programs such as "ompi_info" from having to import
|
||||
* entire components just to query their version and parameters.
|
||||
*/
|
||||
|
||||
#include "orte_config.h"
|
||||
@ -58,42 +53,42 @@
|
||||
#include "opal/mca/base/mca_base_param.h"
|
||||
#include "orte/mca/ns/ns.h"
|
||||
#include "orte/mca/sds/base/base.h"
|
||||
#include "orte/mca/pls/pls.h"
|
||||
#include "orte/mca/pls/base/base.h"
|
||||
#include "orte/mca/odls/odls.h"
|
||||
#include "orte/mca/odls/base/base.h"
|
||||
#include "orte/mca/rml/rml.h"
|
||||
#include "orte/mca/gpr/gpr.h"
|
||||
#include "orte/mca/rmaps/base/base.h"
|
||||
#include "orte/mca/rmaps/base/rmaps_base_map.h"
|
||||
#include "orte/mca/smr/smr.h"
|
||||
#include "orte/mca/smr/base/base.h"
|
||||
#include "orte/mca/pls/process/pls_process.h"
|
||||
#include "orte/mca/odls/process/odls_process.h"
|
||||
|
||||
#if !defined(__WINDOWS__)
|
||||
extern char **environ;
|
||||
#endif /* !defined(__WINDOWS__) */
|
||||
|
||||
#if OMPI_HAVE_POSIX_THREADS && OMPI_THREADS_HAVE_DIFFERENT_PIDS && OMPI_ENABLE_PROGRESS_THREADS
|
||||
static int orte_pls_process_launch_threaded(orte_jobid_t);
|
||||
static int orte_odls_process_launch_threaded(orte_jobid_t);
|
||||
#endif
|
||||
|
||||
|
||||
orte_pls_base_module_1_0_0_t orte_pls_process_module = {
|
||||
orte_odls_base_module_1_0_0_t orte_odls_process_module = {
|
||||
#if OMPI_HAVE_POSIX_THREADS && OMPI_THREADS_HAVE_DIFFERENT_PIDS && OMPI_ENABLE_PROGRESS_THREADS
|
||||
orte_pls_process_launch_threaded,
|
||||
orte_odls_process_launch_threaded,
|
||||
#else
|
||||
orte_pls_process_launch,
|
||||
orte_odls_process_launch,
|
||||
#endif
|
||||
orte_pls_process_terminate_job,
|
||||
orte_pls_process_terminate_proc,
|
||||
orte_pls_process_signal_job,
|
||||
orte_pls_process_signal_proc,
|
||||
orte_pls_process_finalize
|
||||
orte_odls_process_terminate_job,
|
||||
orte_odls_process_terminate_proc,
|
||||
orte_odls_process_signal_job,
|
||||
orte_odls_process_signal_proc,
|
||||
orte_odls_process_finalize
|
||||
};
|
||||
|
||||
static void set_handler_default(int sig);
|
||||
|
||||
|
||||
static bool orte_pls_process_child_died(pid_t pid, unsigned int timeout)
|
||||
static bool orte_odls_process_child_died(pid_t pid, unsigned int timeout)
|
||||
{
|
||||
#if NOT_YET_AVAILABLE
|
||||
time_t end;
|
||||
@ -126,7 +121,7 @@ static bool orte_pls_process_child_died(pid_t pid, unsigned int timeout)
|
||||
return false;
|
||||
}
|
||||
|
||||
static void orte_pls_process_kill_processes(opal_value_array_t *pids)
|
||||
static void orte_odls_process_kill_processes(opal_value_array_t *pids)
|
||||
{
|
||||
size_t i;
|
||||
pid_t pid;
|
||||
@ -146,8 +141,8 @@ static void orte_pls_process_kill_processes(opal_value_array_t *pids)
|
||||
char hostname[MAXHOSTNAMELEN];
|
||||
gethostname(hostname, sizeof(hostname));
|
||||
|
||||
opal_show_help("help-orte-pls-process.txt",
|
||||
"orte-pls-process:could-not-send-kill",
|
||||
opal_show_help("help-orte-odls-process.txt",
|
||||
"orte-odls-process:could-not-send-kill",
|
||||
true, hostname, pid, err);
|
||||
|
||||
continue;
|
||||
@ -156,29 +151,29 @@ static void orte_pls_process_kill_processes(opal_value_array_t *pids)
|
||||
/* The kill succeeded. Wait up to timeout_before_sigkill
|
||||
seconds to see if it died. */
|
||||
|
||||
if (!orte_pls_process_child_died(pid, mca_pls_process_component.timeout_before_sigkill)) {
|
||||
if (!orte_odls_process_child_died(pid, mca_odls_process_component.timeout_before_sigkill)) {
|
||||
char hostname[MAXHOSTNAMELEN];
|
||||
gethostname(hostname, sizeof(hostname));
|
||||
|
||||
opal_show_help("help-orte-pls-process.txt",
|
||||
"orte-pls-process:could-not-kill",
|
||||
opal_show_help("help-orte-odls-process.txt",
|
||||
"orte-odls-process:could-not-kill",
|
||||
true, hostname, pid);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Release any waiting threads from this process */
|
||||
OPAL_THREAD_LOCK(&mca_pls_process_component.lock);
|
||||
mca_pls_process_component.num_children = 0;
|
||||
opal_condition_signal(&mca_pls_process_component.cond);
|
||||
OPAL_THREAD_UNLOCK(&mca_pls_process_component.lock);
|
||||
OPAL_THREAD_LOCK(&mca_odls_process_component.lock);
|
||||
mca_odls_process_component.num_children = 0;
|
||||
opal_condition_signal(&mca_odls_process_component.cond);
|
||||
OPAL_THREAD_UNLOCK(&mca_odls_process_component.lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Wait for a callback indicating the child has completed.
|
||||
*/
|
||||
|
||||
static void orte_pls_process_wait_proc(pid_t pid, int status, void* cbdata)
|
||||
static void orte_odls_process_wait_proc(pid_t pid, int status, void* cbdata)
|
||||
{
|
||||
orte_rmaps_base_proc_t* proc = (orte_rmaps_base_proc_t*)cbdata;
|
||||
int rc;
|
||||
@ -201,17 +196,17 @@ static void orte_pls_process_wait_proc(pid_t pid, int status, void* cbdata)
|
||||
OBJ_RELEASE(proc);
|
||||
|
||||
/* release any waiting threads */
|
||||
OPAL_THREAD_LOCK(&mca_pls_process_component.lock);
|
||||
mca_pls_process_component.num_children--;
|
||||
opal_condition_signal(&mca_pls_process_component.cond);
|
||||
OPAL_THREAD_UNLOCK(&mca_pls_process_component.lock);
|
||||
OPAL_THREAD_LOCK(&mca_odls_process_component.lock);
|
||||
mca_odls_process_component.num_children--;
|
||||
opal_condition_signal(&mca_odls_process_component.cond);
|
||||
OPAL_THREAD_UNLOCK(&mca_odls_process_component.lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fork/exec the specified processes
|
||||
*/
|
||||
|
||||
static int orte_pls_process_proc(
|
||||
static int orte_odls_process_proc(
|
||||
orte_app_context_t* context,
|
||||
orte_rmaps_base_proc_t* proc,
|
||||
orte_vpid_t vpid_start,
|
||||
@ -244,9 +239,9 @@ static int orte_pls_process_proc(
|
||||
/* Try to change to the context cwd and check that the app
|
||||
* exists and is executable
|
||||
*/
|
||||
if (ORTE_SUCCESS != orte_pls_base_check_context_cwd(context, true) ||
|
||||
ORTE_SUCCESS != orte_pls_base_check_context_app(context)) {
|
||||
opal_show_help("help-orte-pls-process.txt", "orte-pls-process:execv-error",
|
||||
if (ORTE_SUCCESS != orte_odls_base_check_context_cwd(context, true) ||
|
||||
ORTE_SUCCESS != orte_odls_base_check_context_app(context)) {
|
||||
opal_show_help("help-orte-odls-process.txt", "orte-odls-process:execv-error",
|
||||
true, context->app, strerror(errno));
|
||||
return ORTE_ERR_FATAL;
|
||||
}
|
||||
@ -263,7 +258,7 @@ static int orte_pls_process_proc(
|
||||
but at least some users do this. :-\ It is possible that
|
||||
when using --prefix, the user will also "-x PATH" and/or
|
||||
"-x LD_LIBRARY_PATH", which would therefore clobber the
|
||||
work that was done in the prior pls to ensure that we have
|
||||
work that was done in the prior odls to ensure that we have
|
||||
the prefix at the beginning of the PATH and
|
||||
LD_LIBRARY_PATH. So examine the context->env and see if we
|
||||
find PATH or LD_LIBRARY_PATH. If found, that means the
|
||||
@ -349,7 +344,7 @@ static int orte_pls_process_proc(
|
||||
}
|
||||
|
||||
/* save the pid in the registry */
|
||||
if (ORTE_SUCCESS != (rc = orte_pls_base_set_proc_pid(&proc->proc_name, pid))) {
|
||||
if (ORTE_SUCCESS != (rc = orte_odls_base_set_proc_pid(&proc->proc_name, pid))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
@ -359,11 +354,11 @@ static int orte_pls_process_proc(
|
||||
* otherwise can receive the wait callback before the above is
|
||||
* ever completed
|
||||
*/
|
||||
OPAL_THREAD_LOCK(&mca_pls_process_component.lock);
|
||||
mca_pls_process_component.num_children++;
|
||||
OPAL_THREAD_UNLOCK(&mca_pls_process_component.lock);
|
||||
OPAL_THREAD_LOCK(&mca_odls_process_component.lock);
|
||||
mca_odls_process_component.num_children++;
|
||||
OPAL_THREAD_UNLOCK(&mca_odls_process_component.lock);
|
||||
OBJ_RETAIN(proc);
|
||||
orte_wait_cb(pid, orte_pls_process_wait_proc, proc);
|
||||
orte_wait_cb(pid, orte_odls_process_wait_proc, proc);
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -372,7 +367,7 @@ static int orte_pls_process_proc(
|
||||
* Launch all processes allocated to the current node.
|
||||
*/
|
||||
|
||||
int orte_pls_process_launch(orte_jobid_t jobid)
|
||||
int orte_odls_process_launch(orte_jobid_t jobid)
|
||||
{
|
||||
opal_list_t map;
|
||||
opal_list_item_t* item;
|
||||
@ -413,7 +408,7 @@ int orte_pls_process_launch(orte_jobid_t jobid)
|
||||
orte_rmaps_base_map_t* map = (orte_rmaps_base_map_t*)item;
|
||||
orte_std_cntr_t i;
|
||||
for (i=0; i<map->num_procs; i++) {
|
||||
rc = orte_pls_process_proc(map->app, map->procs[i], vpid_start,
|
||||
rc = orte_odls_process_proc(map->app, map->procs[i], vpid_start,
|
||||
vpid_range,
|
||||
(num_processes > num_processors) ?
|
||||
false : true, i);
|
||||
@ -447,7 +442,7 @@ cleanup:
|
||||
* those on the current node.
|
||||
*/
|
||||
|
||||
int orte_pls_process_terminate_job(orte_jobid_t jobid)
|
||||
int orte_odls_process_terminate_job(orte_jobid_t jobid)
|
||||
{
|
||||
/* query for the pids allocated on this node */
|
||||
char *segment;
|
||||
@ -511,7 +506,7 @@ int orte_pls_process_terminate_job(orte_jobid_t jobid)
|
||||
|
||||
/* If we have processes to kill, go kill them */
|
||||
if (opal_value_array_get_size(&pids) > 0) {
|
||||
orte_pls_process_kill_processes(&pids);
|
||||
orte_odls_process_kill_processes(&pids);
|
||||
}
|
||||
OBJ_DESTRUCT(&pids);
|
||||
|
||||
@ -523,7 +518,7 @@ int orte_pls_process_terminate_job(orte_jobid_t jobid)
|
||||
}
|
||||
|
||||
|
||||
int orte_pls_process_terminate_proc(const orte_process_name_t* proc)
|
||||
int orte_odls_process_terminate_proc(const orte_process_name_t* proc)
|
||||
{
|
||||
return ORTE_ERR_NOT_IMPLEMENTED;
|
||||
}
|
||||
@ -533,7 +528,7 @@ int orte_pls_process_terminate_proc(const orte_process_name_t* proc)
|
||||
* those on the current node.
|
||||
*/
|
||||
|
||||
int orte_pls_process_signal_job(orte_jobid_t jobid, int32_t signal)
|
||||
int orte_odls_process_signal_job(orte_jobid_t jobid, int32_t signal)
|
||||
{
|
||||
/* query for the pids allocated on this node */
|
||||
char *segment;
|
||||
@ -633,20 +628,20 @@ int orte_pls_process_signal_job(orte_jobid_t jobid, int32_t signal)
|
||||
}
|
||||
|
||||
|
||||
int orte_pls_process_signal_proc(const orte_process_name_t* proc, int32_t signal)
|
||||
int orte_odls_process_signal_proc(const orte_process_name_t* proc, int32_t signal)
|
||||
{
|
||||
return ORTE_ERR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
int orte_pls_process_finalize(void)
|
||||
int orte_odls_process_finalize(void)
|
||||
{
|
||||
if(mca_pls_process_component.reap) {
|
||||
OPAL_THREAD_LOCK(&mca_pls_process_component.lock);
|
||||
while(mca_pls_process_component.num_children > 0) {
|
||||
opal_condition_wait(&mca_pls_process_component.cond,
|
||||
&mca_pls_process_component.lock);
|
||||
if(mca_odls_process_component.reap) {
|
||||
OPAL_THREAD_LOCK(&mca_odls_process_component.lock);
|
||||
while(mca_odls_process_component.num_children > 0) {
|
||||
opal_condition_wait(&mca_odls_process_component.cond,
|
||||
&mca_odls_process_component.lock);
|
||||
}
|
||||
OPAL_THREAD_UNLOCK(&mca_pls_process_component.lock);
|
||||
OPAL_THREAD_UNLOCK(&mca_odls_process_component.lock);
|
||||
}
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
@ -658,16 +653,16 @@ int orte_pls_process_finalize(void)
|
||||
|
||||
#if OMPI_HAVE_POSIX_THREADS && OMPI_THREADS_HAVE_DIFFERENT_PIDS && OMPI_ENABLE_PROGRESS_THREADS
|
||||
|
||||
struct orte_pls_process_stack_t {
|
||||
struct orte_odls_process_stack_t {
|
||||
opal_condition_t cond;
|
||||
opal_mutex_t mutex;
|
||||
bool complete;
|
||||
orte_jobid_t jobid;
|
||||
int rc;
|
||||
};
|
||||
typedef struct orte_pls_process_stack_t orte_pls_process_stack_t;
|
||||
typedef struct orte_odls_process_stack_t orte_odls_process_stack_t;
|
||||
|
||||
static void orte_pls_process_stack_construct(orte_pls_process_stack_t* stack)
|
||||
static void orte_odls_process_stack_construct(orte_odls_process_stack_t* stack)
|
||||
{
|
||||
OBJ_CONSTRUCT(&stack->mutex, opal_mutex_t);
|
||||
OBJ_CONSTRUCT(&stack->cond, opal_condition_t);
|
||||
@ -675,40 +670,40 @@ static void orte_pls_process_stack_construct(orte_pls_process_stack_t* stack)
|
||||
stack->complete = false;
|
||||
}
|
||||
|
||||
static void orte_pls_process_stack_destruct(orte_pls_process_stack_t* stack)
|
||||
static void orte_odls_process_stack_destruct(orte_odls_process_stack_t* stack)
|
||||
{
|
||||
OBJ_DESTRUCT(&stack->mutex);
|
||||
OBJ_DESTRUCT(&stack->cond);
|
||||
}
|
||||
|
||||
static OBJ_CLASS_INSTANCE(
|
||||
orte_pls_process_stack_t,
|
||||
orte_odls_process_stack_t,
|
||||
opal_object_t,
|
||||
orte_pls_process_stack_construct,
|
||||
orte_pls_process_stack_destruct);
|
||||
orte_odls_process_stack_construct,
|
||||
orte_odls_process_stack_destruct);
|
||||
|
||||
|
||||
static void orte_pls_process_launch_cb(int fd, short event, void* args)
|
||||
static void orte_odls_process_launch_cb(int fd, short event, void* args)
|
||||
{
|
||||
orte_pls_process_stack_t *stack = (orte_pls_process_stack_t*)args;
|
||||
orte_odls_process_stack_t *stack = (orte_odls_process_stack_t*)args;
|
||||
OPAL_THREAD_LOCK(&stack->mutex);
|
||||
stack->rc = orte_pls_process_launch(stack->jobid);
|
||||
stack->rc = orte_odls_process_launch(stack->jobid);
|
||||
stack->complete = true;
|
||||
opal_condition_signal(&stack->cond);
|
||||
OPAL_THREAD_UNLOCK(&stack->mutex);
|
||||
}
|
||||
|
||||
static int orte_pls_process_launch_threaded(orte_jobid_t jobid)
|
||||
static int orte_odls_process_launch_threaded(orte_jobid_t jobid)
|
||||
{
|
||||
|
||||
struct timeval tv = { 0, 0 };
|
||||
struct opal_event event;
|
||||
struct orte_pls_process_stack_t stack;
|
||||
struct orte_odls_process_stack_t stack;
|
||||
|
||||
OBJ_CONSTRUCT(&stack, orte_pls_process_stack_t);
|
||||
OBJ_CONSTRUCT(&stack, orte_odls_process_stack_t);
|
||||
|
||||
stack.jobid = jobid;
|
||||
opal_evtimer_set(&event, orte_pls_process_launch_cb, &stack);
|
||||
opal_evtimer_set(&event, orte_odls_process_launch_cb, &stack);
|
||||
opal_evtimer_add(&event, &tv);
|
||||
|
||||
OPAL_THREAD_LOCK(&stack.mutex);
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user