* Added 2 new MCA parameters
- mca_base_param_file_prefix (Default: NULL) This is the fullname of the "-am" mpirun option. Used to specify a ':' separated list of AMCA parameter set files. - mca_base_param_file_path (Default: $SYSCONFDIR/amca-param-sets/:$CWD) The path to search for AMCA files with relative paths. A warning will be printed if the AMCA file cannot be found. * Added a new function "mca_base_param_recache_files" the re-reads the file configurations. This is used internally to help bootstrap the MCA system. * Added a new orterun/mpirun command line option '-am' that aliases for the mca_base_param_file_prefix MCA parameter * Exposed the opal_path_access function as it is generally useful in other places in the code. * New function "opal_cmd_line_make_opt_mca" which will allow you to append a new command line option with MCA parameter identifiers to set at the same time. Previously this could only be done at command line declaration time. * Added a new directory under the $pkgdatadir named "amca-param-sets" where all the 'shipped with' Open MPI AMCA parameter sets are placed. This is the first place to search for AMCA sets with relative paths. * An example.conf AMCA parameter set file is located in contrib/amca-param-sets/. * Jeff Squyres contributed an OpenIB AMCA set for benchmarking. Note: You will need to autogen with this commit as it adds a configure param. Sorry :( This commit was SVN r13867.
Этот коммит содержится в:
родитель
74555cda51
Коммит
0404444dbe
@ -1114,6 +1114,11 @@ AC_SUBST(CXXCPPFLAGS)
|
|||||||
AC_SUBST(FFLAGS)
|
AC_SUBST(FFLAGS)
|
||||||
AC_SUBST(FCFLAGS)
|
AC_SUBST(FCFLAGS)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Aggregate MCA parameters directory
|
||||||
|
#
|
||||||
|
AC_SUBST([AMCA_PARAM_SETS_DIR], ['$(pkgdatadir)/amca-param-sets'])
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
# final wrapper compiler config
|
# final wrapper compiler config
|
||||||
############################################################################
|
############################################################################
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
# Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
|
||||||
# University Research and Technology
|
# University Research and Technology
|
||||||
# Corporation. All rights reserved.
|
# Corporation. All rights reserved.
|
||||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||||
@ -16,7 +16,8 @@
|
|||||||
# $HEADER$
|
# $HEADER$
|
||||||
#
|
#
|
||||||
|
|
||||||
|
amca_paramdir = $(AMCA_PARAM_SETS_DIR)
|
||||||
|
dist_amca_param_DATA = amca-param-sets/example.conf
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
dist/make_dist_tarball \
|
dist/make_dist_tarball \
|
||||||
|
5
contrib/amca-param-sets/example.conf
Обычный файл
5
contrib/amca-param-sets/example.conf
Обычный файл
@ -0,0 +1,5 @@
|
|||||||
|
#
|
||||||
|
# This is an example file illustrating how to setup an Aggregate MCA parameters
|
||||||
|
# file.
|
||||||
|
#
|
||||||
|
#
|
@ -9,6 +9,7 @@
|
|||||||
# University of Stuttgart. All rights reserved.
|
# University of Stuttgart. All rights reserved.
|
||||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
|
# Copyright (c) 2007 Cisco, Inc. All rights reserved.
|
||||||
# $COPYRIGHT$
|
# $COPYRIGHT$
|
||||||
#
|
#
|
||||||
# Additional copyrights may follow
|
# Additional copyrights may follow
|
||||||
@ -22,6 +23,9 @@ AM_CPPFLAGS = $(btl_openib_CPPFLAGS) -DPKGDATADIR=\"$(pkgdatadir)\"
|
|||||||
AM_LFLAGS = -Pbtl_openib_ini_yy
|
AM_LFLAGS = -Pbtl_openib_ini_yy
|
||||||
LEX_OUTPUT_ROOT = lex.btl_openib_ini_yy
|
LEX_OUTPUT_ROOT = lex.btl_openib_ini_yy
|
||||||
|
|
||||||
|
amca_paramdir = $(AMCA_PARAM_SETS_DIR)
|
||||||
|
dist_amca_param_DATA = btl-openib-benchmark
|
||||||
|
|
||||||
dist_pkgdata_DATA = \
|
dist_pkgdata_DATA = \
|
||||||
help-mpi-btl-openib.txt \
|
help-mpi-btl-openib.txt \
|
||||||
mca-btl-openib-hca-params.ini
|
mca-btl-openib-hca-params.ini
|
||||||
|
19
ompi/mca/btl/openib/btl-openib-benchmark
Обычный файл
19
ompi/mca/btl/openib/btl-openib-benchmark
Обычный файл
@ -0,0 +1,19 @@
|
|||||||
|
#
|
||||||
|
# These values are suitable for benchmarking with the openib and sm
|
||||||
|
# btls with a small number of MPI processes. If you're only going to
|
||||||
|
# use one process per node, remove "sm". These values are *NOT*
|
||||||
|
# scalable to large numbers of processes!
|
||||||
|
#
|
||||||
|
btl=openib,self,sm
|
||||||
|
btl_openib_max_btls=20
|
||||||
|
btl_openib_rd_num=128
|
||||||
|
btl_openib_rd_low=75
|
||||||
|
btl_openib_rd_win=50
|
||||||
|
btl_openib_max_eager_rdma=32
|
||||||
|
mpool_base_use_mem_hooks=1
|
||||||
|
mpi_leave_pinned=1
|
||||||
|
#
|
||||||
|
# Note that we are not limiting the max free list size, so for netpipe
|
||||||
|
# (for example), this is no problem. But we may want to explore the
|
||||||
|
# parameter space for other popular benchmarks.
|
||||||
|
#
|
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
# Use the top-level Makefile.options
|
# Use the top-level Makefile.options
|
||||||
|
|
||||||
|
amca_paramdir = $(AMCA_PARAM_SETS_DIR)
|
||||||
|
dist_amca_param_DATA = netpipe-btl-template.txt
|
||||||
|
|
||||||
|
|
||||||
sources = \
|
sources = \
|
||||||
|
5
ompi/mca/btl/template/sample-btl-template.conf
Обычный файл
5
ompi/mca/btl/template/sample-btl-template.conf
Обычный файл
@ -0,0 +1,5 @@
|
|||||||
|
#
|
||||||
|
# To use:
|
||||||
|
# -am sample-btl-template.conf
|
||||||
|
#
|
||||||
|
btl_template_verbose=42
|
@ -23,3 +23,6 @@ WARNING: A user-supplied value attempted to override the read-only MCA
|
|||||||
parameter named "%s".
|
parameter named "%s".
|
||||||
|
|
||||||
The user-supplied value was ignored.
|
The user-supplied value was ignored.
|
||||||
|
[missing-param-file]
|
||||||
|
Process %d Unable to locate the parameter file "%s" in the following search path:
|
||||||
|
%s
|
||||||
|
@ -45,7 +45,8 @@ static void add_to_env(char **params, char **values, char ***env);
|
|||||||
*/
|
*/
|
||||||
int mca_base_cmd_line_setup(opal_cmd_line_t *cmd)
|
int mca_base_cmd_line_setup(opal_cmd_line_t *cmd)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = OPAL_SUCCESS;
|
||||||
|
|
||||||
ret = opal_cmd_line_make_opt3(cmd, '\0', "mca", "mca", 2,
|
ret = opal_cmd_line_make_opt3(cmd, '\0', "mca", "mca", 2,
|
||||||
"Pass context-specific MCA parameters; they are considered global if --gmca is not used and only one context is specified (arg0 is the parameter name; arg1 is the parameter value)");
|
"Pass context-specific MCA parameters; they are considered global if --gmca is not used and only one context is specified (arg0 is the parameter name; arg1 is the parameter value)");
|
||||||
if (OPAL_SUCCESS != ret) {
|
if (OPAL_SUCCESS != ret) {
|
||||||
@ -54,6 +55,23 @@ int mca_base_cmd_line_setup(opal_cmd_line_t *cmd)
|
|||||||
|
|
||||||
ret = opal_cmd_line_make_opt3(cmd, '\0', "gmca", "gmca", 2,
|
ret = opal_cmd_line_make_opt3(cmd, '\0', "gmca", "gmca", 2,
|
||||||
"Pass global MCA parameters that are applicable to all contexts (arg0 is the parameter name; arg1 is the parameter value)");
|
"Pass global MCA parameters that are applicable to all contexts (arg0 is the parameter name; arg1 is the parameter value)");
|
||||||
|
|
||||||
|
if (OPAL_SUCCESS != ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
opal_cmd_line_init_t entry =
|
||||||
|
{"mca", "base", "param_file_prefix", '\0', "am", NULL, 1,
|
||||||
|
NULL, OPAL_CMD_LINE_TYPE_STRING,
|
||||||
|
"Aggregate MCA parameter set file list"
|
||||||
|
};
|
||||||
|
ret = opal_cmd_line_make_opt_mca(cmd, entry);
|
||||||
|
if (OPAL_SUCCESS != ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,9 +21,16 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_PARAM_H
|
||||||
|
#include <sys/param.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "opal/install_dirs.h"
|
#include "opal/install_dirs.h"
|
||||||
#include "opal/util/os_path.h"
|
#include "opal/util/os_path.h"
|
||||||
|
#include "opal/util/path.h"
|
||||||
#include "opal/class/opal_value_array.h"
|
#include "opal/class/opal_value_array.h"
|
||||||
#include "opal/util/show_help.h"
|
#include "opal/util/show_help.h"
|
||||||
#include "opal/class/opal_hash_table.h"
|
#include "opal/class/opal_hash_table.h"
|
||||||
@ -40,6 +47,16 @@
|
|||||||
#include "opal/constants.h"
|
#include "opal/constants.h"
|
||||||
#include "opal/util/output.h"
|
#include "opal/util/output.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A boolean to temporarily skip over the Aggregate MCA Paramater Set
|
||||||
|
* reading.
|
||||||
|
* We need to do this as a global variable since all other entry
|
||||||
|
* functions to the _param_ funcitons make sure that the init function
|
||||||
|
* has been called. By calling init the system will pick up the
|
||||||
|
* wrong files
|
||||||
|
*/
|
||||||
|
bool opal_mca_base_param_use_amca_sets = true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Public variables
|
* Public variables
|
||||||
*
|
*
|
||||||
@ -55,6 +72,7 @@ opal_list_t mca_base_param_file_values;
|
|||||||
static opal_value_array_t mca_base_params;
|
static opal_value_array_t mca_base_params;
|
||||||
static const char *mca_prefix = "OMPI_MCA_";
|
static const char *mca_prefix = "OMPI_MCA_";
|
||||||
static char *home = NULL;
|
static char *home = NULL;
|
||||||
|
static char *cwd = NULL;
|
||||||
static bool initialized = false;
|
static bool initialized = false;
|
||||||
|
|
||||||
|
|
||||||
@ -64,6 +82,7 @@ static bool initialized = false;
|
|||||||
#if defined(__WINDOWS__)
|
#if defined(__WINDOWS__)
|
||||||
static int read_keys_from_registry(HKEY hKey, char *sub_key, char *current_key);
|
static int read_keys_from_registry(HKEY hKey, char *sub_key, char *current_key);
|
||||||
#endif /* defined(__WINDOWS__) */
|
#endif /* defined(__WINDOWS__) */
|
||||||
|
static int fixup_files(char **file_list, char * path, bool rel_path_search);
|
||||||
static int read_files(char *file_list);
|
static int read_files(char *file_list);
|
||||||
static int param_register(const char *type_name,
|
static int param_register(const char *type_name,
|
||||||
const char *component_name,
|
const char *component_name,
|
||||||
@ -117,9 +136,6 @@ OBJ_CLASS_INSTANCE(mca_base_param_info_t, opal_list_item_t,
|
|||||||
*/
|
*/
|
||||||
int mca_base_param_init(void)
|
int mca_base_param_init(void)
|
||||||
{
|
{
|
||||||
int id;
|
|
||||||
char *files, *new_files = NULL;
|
|
||||||
|
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
|
|
||||||
/* Init the value array for the param storage */
|
/* Init the value array for the param storage */
|
||||||
@ -135,25 +151,82 @@ int mca_base_param_init(void)
|
|||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
|
|
||||||
|
mca_base_param_recache_files(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return OPAL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mca_base_param_recache_files(bool rel_path_search)
|
||||||
|
{
|
||||||
|
int id;
|
||||||
|
char *files, *new_files = NULL, *new_agg_files = NULL;
|
||||||
|
char * new_agg_path = NULL, *agg_default_path = NULL;
|
||||||
|
|
||||||
/* We may need this later */
|
/* We may need this later */
|
||||||
#if !defined(__WINDOWS__)
|
#if !defined(__WINDOWS__)
|
||||||
home = getenv("HOME");
|
home = getenv("HOME");
|
||||||
asprintf(&files,
|
|
||||||
"%s"OPAL_PATH_SEP".openmpi"OPAL_PATH_SEP"mca-params.conf:%s"OPAL_PATH_SEP"openmpi-mca-params.conf",
|
|
||||||
home, OPAL_SYSCONFDIR);
|
|
||||||
#else
|
#else
|
||||||
home = getenv("USERPROFILE");
|
home = getenv("USERPROFILE");
|
||||||
asprintf(&files,
|
|
||||||
"%s"OPAL_PATH_SEP".openmpi"OPAL_PATH_SEP"mca-params.conf;%s"OPAL_PATH_SEP"openmpi-mca-params.conf",
|
|
||||||
home, OPAL_SYSCONFDIR);
|
|
||||||
#endif /* !defined(__WINDOWS__) */
|
#endif /* !defined(__WINDOWS__) */
|
||||||
|
|
||||||
|
cwd = (char *) malloc(sizeof(char) * MAXPATHLEN);
|
||||||
|
if( NULL == (cwd = getcwd(cwd, MAXPATHLEN) )) {
|
||||||
|
opal_output(0, "Error: Unable to get the current working directory\n");
|
||||||
|
cwd = strdup(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
asprintf(&files,
|
||||||
|
"%s"OPAL_PATH_SEP".openmpi"OPAL_PATH_SEP"mca-params.conf%c%s"OPAL_PATH_SEP"openmpi-mca-params.conf",
|
||||||
|
home, OPAL_ENV_SEP, OPAL_SYSCONFDIR);
|
||||||
|
|
||||||
|
|
||||||
/* Initialize a parameter that says where MCA param files can
|
/* Initialize a parameter that says where MCA param files can
|
||||||
be found */
|
be found */
|
||||||
|
|
||||||
id = mca_base_param_reg_string_name("mca", "param_files",
|
id = mca_base_param_reg_string_name("mca", "param_files",
|
||||||
"Path for MCA configuration files containing default parameter values",
|
"Path for MCA configuration files containing default parameter values",
|
||||||
false, false, files, &new_files);
|
false, false, files, &new_files);
|
||||||
|
|
||||||
|
/* Aggregate MCA parameter files
|
||||||
|
* A prefix search path to look up aggregate MCA parameter file
|
||||||
|
* requests that do not specify an absolute path
|
||||||
|
*/
|
||||||
|
id = mca_base_param_reg_string_name("mca", "base_param_file_prefix",
|
||||||
|
"Aggregate MCA parameter file sets",
|
||||||
|
false, false, NULL, &new_agg_files);
|
||||||
|
|
||||||
|
asprintf(&agg_default_path,
|
||||||
|
"%s"OPAL_PATH_SEP"amca-param-sets%c%s",
|
||||||
|
OPAL_PKGDATADIR, OPAL_ENV_SEP, cwd);
|
||||||
|
id = mca_base_param_reg_string_name("mca", "base_param_file_path",
|
||||||
|
"Aggregate MCA parameter Search path",
|
||||||
|
false, false, agg_default_path, &new_agg_path);
|
||||||
|
|
||||||
|
if( opal_mca_base_param_use_amca_sets && NULL != new_agg_files ) {
|
||||||
|
char *tmp_str = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Resolve all relative paths.
|
||||||
|
* the file list returned will contain only absolute paths
|
||||||
|
*/
|
||||||
|
if( OPAL_SUCCESS != fixup_files(&new_agg_files, new_agg_path, rel_path_search) ) {
|
||||||
|
#if 0
|
||||||
|
/* JJH We need to die! */
|
||||||
|
abort();
|
||||||
|
#else
|
||||||
|
;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* Prepend the files to the search list */
|
||||||
|
asprintf(&tmp_str, "%s%c%s", new_agg_files, OPAL_ENV_SEP, new_files);
|
||||||
|
free(new_files);
|
||||||
|
new_files = strdup(tmp_str);
|
||||||
|
free(tmp_str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
read_files(new_files);
|
read_files(new_files);
|
||||||
|
|
||||||
#if defined(__WINDOWS__)
|
#if defined(__WINDOWS__)
|
||||||
@ -162,6 +235,8 @@ int mca_base_param_init(void)
|
|||||||
|
|
||||||
free(files);
|
free(files);
|
||||||
free(new_files);
|
free(new_files);
|
||||||
|
if( NULL != new_agg_files ) {
|
||||||
|
free(new_agg_files);
|
||||||
}
|
}
|
||||||
|
|
||||||
return OPAL_SUCCESS;
|
return OPAL_SUCCESS;
|
||||||
@ -786,6 +861,93 @@ int mca_base_param_finalize(void)
|
|||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
static int fixup_files(char **file_list, char * path, bool rel_path_search) {
|
||||||
|
int exit_status = OPAL_SUCCESS;
|
||||||
|
char **files = NULL;
|
||||||
|
char **search_path = NULL;
|
||||||
|
char * tmp_file = NULL;
|
||||||
|
char **argv = NULL;
|
||||||
|
int mode = R_OK; /* The file exists, and we can read it */
|
||||||
|
int count, i, argc = 0;
|
||||||
|
|
||||||
|
search_path = opal_argv_split(path, OPAL_ENV_SEP);
|
||||||
|
files = opal_argv_split(*file_list, OPAL_ENV_SEP);
|
||||||
|
count = opal_argv_count(files);
|
||||||
|
|
||||||
|
/* Read in reverse order, so we can preserve the original ordering */
|
||||||
|
for (i = 0 ; i < count; ++i) {
|
||||||
|
/* Absolute paths preserved */
|
||||||
|
if ( opal_path_is_absolute(files[i]) ) {
|
||||||
|
if( NULL == opal_path_access(files[i], NULL, mode) ) {
|
||||||
|
opal_show_help("help-mca-param.txt", "missing-param-file",
|
||||||
|
true, getpid(), files[i], path);
|
||||||
|
exit_status = OPAL_ERROR;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
opal_argv_append(&argc, &argv, files[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Resolve all relative paths:
|
||||||
|
* - If filename contains a "/" (e.g., "./foo" or "foo/bar")
|
||||||
|
* - look for it relative to cwd
|
||||||
|
* - if exists, use it
|
||||||
|
* - ow warn/error
|
||||||
|
*/
|
||||||
|
else if (!rel_path_search && NULL != strchr(files[i], OPAL_PATH_SEP[0]) ) {
|
||||||
|
if( NULL == (tmp_file = opal_path_access(files[i], cwd, mode) ) ) {
|
||||||
|
opal_show_help("help-mca-param.txt", "missing-param-file",
|
||||||
|
true, getpid(), files[i], cwd);
|
||||||
|
exit_status = OPAL_ERROR;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
opal_argv_append(&argc, &argv, tmp_file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Resolve all relative paths:
|
||||||
|
* - Use path resolution
|
||||||
|
* - if found and readable, use it
|
||||||
|
* - otherwise, warn/error
|
||||||
|
*/
|
||||||
|
else {
|
||||||
|
if( NULL != (tmp_file = opal_path_find(files[i], search_path, mode, NULL)) ) {
|
||||||
|
opal_argv_append(&argc, &argv, tmp_file);
|
||||||
|
free(tmp_file);
|
||||||
|
tmp_file = NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
opal_show_help("help-mca-param.txt", "missing-param-file",
|
||||||
|
true, getpid(), files[i], path);
|
||||||
|
exit_status = OPAL_ERROR;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(*file_list);
|
||||||
|
*file_list = opal_argv_join(argv, OPAL_ENV_SEP);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if( NULL != files ) {
|
||||||
|
opal_argv_free(files);
|
||||||
|
files = NULL;
|
||||||
|
}
|
||||||
|
if( NULL != argv ) {
|
||||||
|
opal_argv_free(argv);
|
||||||
|
argv = NULL;
|
||||||
|
}
|
||||||
|
if( NULL != search_path ) {
|
||||||
|
opal_argv_free(search_path);
|
||||||
|
search_path = NULL;
|
||||||
|
}
|
||||||
|
if( NULL != tmp_file ) {
|
||||||
|
free(tmp_file);
|
||||||
|
tmp_file = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return exit_status;
|
||||||
|
}
|
||||||
|
|
||||||
static int read_files(char *file_list)
|
static int read_files(char *file_list)
|
||||||
{
|
{
|
||||||
|
@ -119,6 +119,14 @@ typedef struct mca_base_param_info_t mca_base_param_info_t;
|
|||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Whether or not to temporarily skip over the Aggregate MCA Paramater Set
|
||||||
|
* reading. This is useful when we know the MCA parameters it will use
|
||||||
|
* are incorrect which occurs with some support tools.
|
||||||
|
*/
|
||||||
|
OPAL_DECLSPEC extern bool opal_mca_base_param_use_amca_sets;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make a real object for the info
|
* Make a real object for the info
|
||||||
*/
|
*/
|
||||||
@ -135,6 +143,16 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
OPAL_DECLSPEC int mca_base_param_init(void);
|
OPAL_DECLSPEC int mca_base_param_init(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recache the MCA param files
|
||||||
|
*
|
||||||
|
* @param rel_path_search If a relative path is found, search the path even
|
||||||
|
* if the relative path in pointing to the current working directory.
|
||||||
|
* @retval OPAL_SUCCESS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
OPAL_DECLSPEC int mca_base_param_recache_files(bool rel_path_search);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register an integer MCA parameter.
|
* Register an integer MCA parameter.
|
||||||
*
|
*
|
||||||
|
@ -178,6 +178,26 @@ int opal_cmd_line_create(opal_cmd_line_t *cmd,
|
|||||||
return OPAL_SUCCESS;
|
return OPAL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Append a command line entry to the previously constructed command line
|
||||||
|
*/
|
||||||
|
int opal_cmd_line_make_opt_mca(opal_cmd_line_t *cmd,
|
||||||
|
opal_cmd_line_init_t entry)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Ensure we got an entry */
|
||||||
|
if ('\0' == entry.ocl_cmd_short_name &&
|
||||||
|
NULL == entry.ocl_cmd_single_dash_name &&
|
||||||
|
NULL == entry.ocl_cmd_long_name) {
|
||||||
|
return OPAL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = make_opt(cmd, &entry);
|
||||||
|
|
||||||
|
return OPAL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a command line option, --long-name and/or -s (short name).
|
* Create a command line option, --long-name and/or -s (short name).
|
||||||
|
@ -277,6 +277,18 @@ extern "C" {
|
|||||||
OPAL_DECLSPEC int opal_cmd_line_create(opal_cmd_line_t *cmd,
|
OPAL_DECLSPEC int opal_cmd_line_create(opal_cmd_line_t *cmd,
|
||||||
opal_cmd_line_init_t *table);
|
opal_cmd_line_init_t *table);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a command line option.
|
||||||
|
*
|
||||||
|
* @param cmd OPAL command line handle.
|
||||||
|
* @param entry Command line entry to add to the command line.
|
||||||
|
*
|
||||||
|
* @retval OPAL_SUCCESS Upon success.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
OPAL_DECLSPEC int opal_cmd_line_make_opt_mca(opal_cmd_line_t *cmd,
|
||||||
|
opal_cmd_line_init_t entry);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \deprecated
|
* \deprecated
|
||||||
*
|
*
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include "opal/util/output.h"
|
#include "opal/util/output.h"
|
||||||
|
|
||||||
static void path_env_load(char *path, int *pargc, char ***pargv);
|
static void path_env_load(char *path, int *pargc, char ***pargv);
|
||||||
static char *path_access(char *fname, char *path, int mode);
|
|
||||||
static char *list_env_get(char *var, char **list);
|
static char *list_env_get(char *var, char **list);
|
||||||
|
|
||||||
bool opal_path_is_absolute( const char *path )
|
bool opal_path_is_absolute( const char *path )
|
||||||
@ -60,7 +59,7 @@ char *opal_path_find(char *fname, char **pathv, int mode, char **envv)
|
|||||||
|
|
||||||
/* If absolute path is given, return it without searching. */
|
/* If absolute path is given, return it without searching. */
|
||||||
if( opal_path_is_absolute(fname) ) {
|
if( opal_path_is_absolute(fname) ) {
|
||||||
return path_access(fname, "", mode);
|
return opal_path_access(fname, "", mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize. */
|
/* Initialize. */
|
||||||
@ -85,7 +84,7 @@ char *opal_path_find(char *fname, char **pathv, int mode, char **envv)
|
|||||||
}
|
}
|
||||||
if (NULL != env) {
|
if (NULL != env) {
|
||||||
if (!delimit) {
|
if (!delimit) {
|
||||||
fullpath = path_access(fname, env, mode);
|
fullpath = opal_path_access(fname, env, mode);
|
||||||
} else {
|
} else {
|
||||||
pfix = (char*) malloc(strlen(env) + strlen(delimit) + 1);
|
pfix = (char*) malloc(strlen(env) + strlen(delimit) + 1);
|
||||||
if (NULL == pfix) {
|
if (NULL == pfix) {
|
||||||
@ -93,13 +92,13 @@ char *opal_path_find(char *fname, char **pathv, int mode, char **envv)
|
|||||||
}
|
}
|
||||||
strcpy(pfix, env);
|
strcpy(pfix, env);
|
||||||
strcat(pfix, delimit);
|
strcat(pfix, delimit);
|
||||||
fullpath = path_access(fname, pfix, mode);
|
fullpath = opal_path_access(fname, pfix, mode);
|
||||||
free(pfix);
|
free(pfix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fullpath = path_access(fname, pathv[i], mode);
|
fullpath = opal_path_access(fname, pathv[i], mode);
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -170,12 +169,17 @@ char *opal_path_findv(char *fname, int mode, char **envv, char *wrkdir)
|
|||||||
* -Full pathname of located file Success
|
* -Full pathname of located file Success
|
||||||
* -NULL Failure
|
* -NULL Failure
|
||||||
*/
|
*/
|
||||||
static char *path_access(char *fname, char *path, int mode)
|
char *opal_path_access(char *fname, char *path, int mode)
|
||||||
{
|
{
|
||||||
char *fullpath;
|
char *fullpath = NULL;
|
||||||
|
|
||||||
/* Allocate space for the full pathname. */
|
/* Allocate space for the full pathname. */
|
||||||
|
if( NULL == path ) {
|
||||||
|
fullpath = opal_os_path( false, fname, NULL );
|
||||||
|
}
|
||||||
|
else {
|
||||||
fullpath = opal_os_path( false, path, fname, NULL );
|
fullpath = opal_os_path( false, path, fname, NULL );
|
||||||
|
}
|
||||||
if( NULL == fullpath )
|
if( NULL == fullpath )
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -83,6 +83,19 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
OPAL_DECLSPEC bool opal_path_is_absolute( const char *path );
|
OPAL_DECLSPEC bool opal_path_is_absolute( const char *path );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forms a complete pathname and checks it for existance and
|
||||||
|
* permissions
|
||||||
|
*
|
||||||
|
* @param fname File name
|
||||||
|
* @param path Path prefix, if NULL then fname is an absolute path
|
||||||
|
* @param mode Target permissions which must be satisfied (see access(2))
|
||||||
|
*
|
||||||
|
* @retval NULL Failure
|
||||||
|
* @retval Full pathname of the located file on Success
|
||||||
|
*/
|
||||||
|
OPAL_DECLSPEC char *opal_path_access(char *fname, char *path, int mode);
|
||||||
|
|
||||||
#if defined(c_plusplus) || defined(__cplusplus)
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -712,6 +712,52 @@ int orte_pls_rsh_launch(orte_jobid_t jobid)
|
|||||||
free(uri);
|
free(uri);
|
||||||
free(param);
|
free(param);
|
||||||
|
|
||||||
|
/* pass along the Aggregate MCA Parameter Sets */
|
||||||
|
{
|
||||||
|
int loc_id;
|
||||||
|
char * amca_param_path = NULL;
|
||||||
|
char * amca_param_prefix = NULL;
|
||||||
|
|
||||||
|
/* Add the 'prefix' param */
|
||||||
|
loc_id = mca_base_param_find("mca", NULL, "base_param_file_prefix");
|
||||||
|
mca_base_param_lookup_string(loc_id, &amca_param_prefix);
|
||||||
|
if( NULL != amca_param_prefix ) {
|
||||||
|
/* Could also use the short version '-am'
|
||||||
|
* but being verbose has some value
|
||||||
|
*/
|
||||||
|
opal_argv_append(&argc, &argv, "-mca");
|
||||||
|
opal_argv_append(&argc, &argv, "mca_base_param_file_prefix");
|
||||||
|
opal_argv_append(&argc, &argv, amca_param_prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add the 'path' param */
|
||||||
|
loc_id = mca_base_param_find("mca", NULL, "base_param_file_path");
|
||||||
|
mca_base_param_lookup_string(loc_id, &amca_param_path);
|
||||||
|
if( NULL != amca_param_path ) {
|
||||||
|
opal_argv_append(&argc, &argv, "-mca");
|
||||||
|
opal_argv_append(&argc, &argv, "mca_base_param_file_path");
|
||||||
|
opal_argv_append(&argc, &argv, amca_param_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add the ORTED hint 'path' param */
|
||||||
|
loc_id = mca_base_param_find("mca", NULL, "base_param_file_path_orted");
|
||||||
|
mca_base_param_lookup_string(loc_id, &amca_param_path);
|
||||||
|
if( NULL != amca_param_path ) {
|
||||||
|
opal_argv_append(&argc, &argv, "-mca");
|
||||||
|
opal_argv_append(&argc, &argv, "mca_base_param_file_path_orted");
|
||||||
|
opal_argv_append(&argc, &argv, amca_param_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( NULL != amca_param_path ) {
|
||||||
|
free(amca_param_path);
|
||||||
|
amca_param_path = NULL;
|
||||||
|
}
|
||||||
|
if( NULL != amca_param_prefix ) {
|
||||||
|
free(amca_param_prefix);
|
||||||
|
amca_param_prefix = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
local_exec_index_end = argc;
|
local_exec_index_end = argc;
|
||||||
if (!(remote_csh || remote_sh)) {
|
if (!(remote_csh || remote_sh)) {
|
||||||
opal_argv_append(&argc, &argv, ")");
|
opal_argv_append(&argc, &argv, ")");
|
||||||
|
@ -200,6 +200,7 @@ int main(int argc, char *argv[])
|
|||||||
char *segment;
|
char *segment;
|
||||||
int i;
|
int i;
|
||||||
orte_buffer_t answer;
|
orte_buffer_t answer;
|
||||||
|
char * orted_amca_param_path = NULL;
|
||||||
|
|
||||||
/* initialize the globals */
|
/* initialize the globals */
|
||||||
memset(&orted_globals, 0, sizeof(orted_globals_t));
|
memset(&orted_globals, 0, sizeof(orted_globals_t));
|
||||||
@ -207,12 +208,17 @@ int main(int argc, char *argv[])
|
|||||||
/* save the environment for use when launching application processes */
|
/* save the environment for use when launching application processes */
|
||||||
orted_globals.saved_environ = opal_argv_copy(environ);
|
orted_globals.saved_environ = opal_argv_copy(environ);
|
||||||
|
|
||||||
/* setup mca param system */
|
/* setup mca param system
|
||||||
|
* Do not parse the Aggregate Parameter Sets in this pass.
|
||||||
|
* we will get to them in a moment
|
||||||
|
*/
|
||||||
|
opal_mca_base_param_use_amca_sets = false;
|
||||||
mca_base_param_init();
|
mca_base_param_init();
|
||||||
|
|
||||||
/* setup to check common command line options that just report and die */
|
/* setup to check common command line options that just report and die */
|
||||||
cmd_line = OBJ_NEW(opal_cmd_line_t);
|
cmd_line = OBJ_NEW(opal_cmd_line_t);
|
||||||
opal_cmd_line_create(cmd_line, orte_cmd_line_opts);
|
opal_cmd_line_create(cmd_line, orte_cmd_line_opts);
|
||||||
|
mca_base_cmd_line_setup(cmd_line);
|
||||||
if (ORTE_SUCCESS != (ret = opal_cmd_line_parse(cmd_line, false,
|
if (ORTE_SUCCESS != (ret = opal_cmd_line_parse(cmd_line, false,
|
||||||
argc, argv))) {
|
argc, argv))) {
|
||||||
char *args = NULL;
|
char *args = NULL;
|
||||||
@ -223,6 +229,64 @@ int main(int argc, char *argv[])
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Since this process can now handle MCA/GMCA parameters, make sure to
|
||||||
|
* process them.
|
||||||
|
*/
|
||||||
|
mca_base_cmd_line_process_args(cmd_line, &environ, &environ);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* orterun may have given us an additional path to use when looking for
|
||||||
|
* Aggregate MCA parameter sets. Look it up, and prepend it to the
|
||||||
|
* search list.
|
||||||
|
*/
|
||||||
|
mca_base_param_reg_string_name("mca", "base_param_file_path_orted",
|
||||||
|
"[INTERNAL] Current working directory from MPIRUN to help in finding Aggregate MCA parameters",
|
||||||
|
true, false,
|
||||||
|
NULL,
|
||||||
|
&orted_amca_param_path);
|
||||||
|
|
||||||
|
if( NULL != orted_amca_param_path ) {
|
||||||
|
int loc_id;
|
||||||
|
char * amca_param_path = NULL;
|
||||||
|
char * tmp_str = NULL;
|
||||||
|
|
||||||
|
/* Lookup the current Aggregate MCA Parameter set path */
|
||||||
|
loc_id = mca_base_param_find("mca", NULL, "base_param_file_path");
|
||||||
|
mca_base_param_lookup_string(loc_id, &amca_param_path);
|
||||||
|
|
||||||
|
asprintf(&tmp_str, "%s%c%s", orted_amca_param_path, OPAL_ENV_SEP, amca_param_path);
|
||||||
|
|
||||||
|
mca_base_param_set_string(loc_id, tmp_str);
|
||||||
|
|
||||||
|
loc_id = mca_base_param_find("mca", NULL, "base_param_file_path");
|
||||||
|
mca_base_param_lookup_string(loc_id, &amca_param_path);
|
||||||
|
|
||||||
|
if( NULL != amca_param_path) {
|
||||||
|
free(amca_param_path);
|
||||||
|
amca_param_path = NULL;
|
||||||
|
}
|
||||||
|
if( NULL != orted_amca_param_path) {
|
||||||
|
free(orted_amca_param_path);
|
||||||
|
orted_amca_param_path = NULL;
|
||||||
|
}
|
||||||
|
if( NULL != tmp_str) {
|
||||||
|
free(tmp_str);
|
||||||
|
tmp_str = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Need to recache the files since the user might have given us
|
||||||
|
* Aggregate MCA parameters that need to be reinitalized.
|
||||||
|
*/
|
||||||
|
opal_mca_base_param_use_amca_sets = true;
|
||||||
|
mca_base_param_recache_files(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
opal_mca_base_param_use_amca_sets = true;
|
||||||
|
mca_base_param_recache_files(false);
|
||||||
|
}
|
||||||
|
|
||||||
/* check for help request */
|
/* check for help request */
|
||||||
if (orted_globals.help) {
|
if (orted_globals.help) {
|
||||||
char *args = NULL;
|
char *args = NULL;
|
||||||
|
@ -317,9 +317,13 @@ int orterun(int argc, char *argv[])
|
|||||||
opal_list_t attributes;
|
opal_list_t attributes;
|
||||||
opal_list_item_t *item;
|
opal_list_item_t *item;
|
||||||
uint8_t flow;
|
uint8_t flow;
|
||||||
|
char * cwd = NULL;
|
||||||
|
|
||||||
/* Setup MCA params */
|
/* Setup MCA params
|
||||||
|
* Do not parse the Aggregate Parameter Sets in this pass.
|
||||||
|
* we will get to them in a moment
|
||||||
|
*/
|
||||||
|
opal_mca_base_param_use_amca_sets = true;
|
||||||
mca_base_param_init();
|
mca_base_param_init();
|
||||||
orte_register_params(false);
|
orte_register_params(false);
|
||||||
|
|
||||||
@ -335,6 +339,29 @@ int orterun(int argc, char *argv[])
|
|||||||
|
|
||||||
parse_locals(argc, argv);
|
parse_locals(argc, argv);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the current working directory
|
||||||
|
*/
|
||||||
|
cwd = (char *) malloc(sizeof(char) * MAXPATHLEN);
|
||||||
|
if( NULL == (cwd = getcwd(cwd, MAXPATHLEN) )) {
|
||||||
|
cwd = strdup("");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Need to recache the files since the user might have given us
|
||||||
|
* Aggregate MCA parameters that need to be reinitalized.
|
||||||
|
* In addition we need to let the orted know about the current working
|
||||||
|
* directory so that it has another place to look for any Aggregate MCA
|
||||||
|
* parameter set files
|
||||||
|
*/
|
||||||
|
mca_base_param_reg_string_name("mca", "base_param_file_path_orted",
|
||||||
|
"[INTERNAL] Current working directory from MPIRUN to help in finding Aggregate MCA parameters",
|
||||||
|
true, false,
|
||||||
|
cwd,
|
||||||
|
&cwd);
|
||||||
|
opal_mca_base_param_use_amca_sets = true;
|
||||||
|
mca_base_param_recache_files(false);
|
||||||
|
|
||||||
/* Convert the list of apps to an array of orte_app_context_t
|
/* Convert the list of apps to an array of orte_app_context_t
|
||||||
pointers */
|
pointers */
|
||||||
array_size = orte_pointer_array_get_size(apps_pa);
|
array_size = orte_pointer_array_get_size(apps_pa);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user