Sync to PMIx v3. Ensure prun uses the ess/tool component.
Signed-off-by: Ralph Castain <rhc@open-mpi.org>
Этот коммит содержится в:
родитель
ba4ec735e0
Коммит
60b338e857
@ -83,6 +83,28 @@ Master (not on release branches yet)
|
|||||||
and to themselves
|
and to themselves
|
||||||
|
|
||||||
|
|
||||||
|
1.2.4 -- 13 Oct. 2017
|
||||||
|
----------------------
|
||||||
|
- Silence some unnecessary warning messages (PR #487)
|
||||||
|
- Coverity fix - TOCTOU (PR #465)
|
||||||
|
- automake 1.13 configure fix (PR #486)
|
||||||
|
- Update RPM spec file (rpmbuild -ta, and --rebuild fixes) (PR #523)
|
||||||
|
- Support singletons in PMI-1/PMI-2 (PR #537)
|
||||||
|
|
||||||
|
|
||||||
|
1.2.3 -- 24 Aug. 2017
|
||||||
|
----------------------
|
||||||
|
- Resolve visibility issues for public APIs (PR #451)
|
||||||
|
- Atomics update - remove custom ASM atomics (PR #458)
|
||||||
|
- Fix job-fence test (PR #423)
|
||||||
|
- Replace stale PMIX_DECLSPEC with PMIX_EXPORT (PR #448)
|
||||||
|
- Memory barrier fixes for thread shifting (PR #387)
|
||||||
|
- Fix race condition in dmodex (PR #346)
|
||||||
|
- Allow disable backward compatability for PMI-1/2 (PR #350)
|
||||||
|
- Fix segv in PMIx_server_deregister_nspace (PR #343)
|
||||||
|
- Fix possible hang in PMIx_Abort (PR #339)
|
||||||
|
|
||||||
|
|
||||||
1.2.2 -- 21 March 2017
|
1.2.2 -- 21 March 2017
|
||||||
----------------------
|
----------------------
|
||||||
- Compiler fix for Sun/Oracle CC (PR #322)
|
- Compiler fix for Sun/Oracle CC (PR #322)
|
||||||
|
@ -128,6 +128,32 @@ INSTALLATION OPTIONS
|
|||||||
--disable-shared; enabling static libraries and disabling shared
|
--disable-shared; enabling static libraries and disabling shared
|
||||||
libraries are two independent options.
|
libraries are two independent options.
|
||||||
|
|
||||||
|
--disable-show-load-errors-by-default
|
||||||
|
Set the default value of the mca_base_component_show_load_errors MCA
|
||||||
|
variable: the --enable form of this option sets the MCA variable to
|
||||||
|
true, the --disable form sets the MCA variable to false. The MCA
|
||||||
|
mca_base_component_show_load_errors variable can still be overridden
|
||||||
|
at run time via the usual MCA-variable-setting mechanisms; this
|
||||||
|
configure option simply sets the default value.
|
||||||
|
|
||||||
|
The --disable form of this option is intended for PMIx packagers
|
||||||
|
who tend to enable support for many different types of networks and
|
||||||
|
systems in their packages. For example, consider a packager who
|
||||||
|
includes support for both the FOO and BAR networks in their PMIx
|
||||||
|
package, both of which require support libraries (libFOO.so and
|
||||||
|
libBAR.so). If an end user only has BAR hardware, they likely only
|
||||||
|
have libBAR.so available on their systems -- not libFOO.so.
|
||||||
|
Disabling load errors by default will prevent the user from seeing
|
||||||
|
potentially confusing warnings about the FOO components failing to
|
||||||
|
load because libFOO.so is not available on their systems.
|
||||||
|
|
||||||
|
Conversely, system administrators tend to build a PMIx that is
|
||||||
|
targeted at their specific environment, and contains few (if any)
|
||||||
|
components that are not needed. In such cases, they might want
|
||||||
|
their users to be warned that the FOO network components failed to
|
||||||
|
load (e.g., if libFOO.so was mistakenly unavailable), and thus
|
||||||
|
some PMIx calls might unexpectedly return "not supported".
|
||||||
|
|
||||||
--with-platform=FILE
|
--with-platform=FILE
|
||||||
Load configure options for the build from FILE. Options on the
|
Load configure options for the build from FILE. Options on the
|
||||||
command line that are not in FILE are also used. Options on the
|
command line that are not in FILE are also used. Options on the
|
||||||
|
@ -30,7 +30,7 @@ greek=
|
|||||||
# command, or with the date (if "git describe" fails) in the form of
|
# command, or with the date (if "git describe" fails) in the form of
|
||||||
# "date<date>".
|
# "date<date>".
|
||||||
|
|
||||||
repo_rev=git6001265
|
repo_rev=gitd74c321
|
||||||
|
|
||||||
# If tarball_version is not empty, it is used as the version string in
|
# If tarball_version is not empty, it is used as the version string in
|
||||||
# the tarball filename, regardless of all other versions listed in
|
# the tarball filename, regardless of all other versions listed in
|
||||||
@ -44,7 +44,7 @@ tarball_version=
|
|||||||
|
|
||||||
# The date when this release was created
|
# The date when this release was created
|
||||||
|
|
||||||
date="Oct 09, 2017"
|
date="Oct 14, 2017"
|
||||||
|
|
||||||
# The shared library version of each of PMIx's public libraries.
|
# The shared library version of each of PMIx's public libraries.
|
||||||
# These versions are maintained in accordance with the "Library
|
# These versions are maintained in accordance with the "Library
|
||||||
|
@ -705,6 +705,32 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
|||||||
|
|
||||||
pmix_show_title "Modular Component Architecture (MCA) setup"
|
pmix_show_title "Modular Component Architecture (MCA) setup"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Do we want to show component load error messages by default?
|
||||||
|
#
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for default value of mca_base_component_show_load_errors])
|
||||||
|
AC_ARG_ENABLE([show-load-errors-by-default],
|
||||||
|
[AC_HELP_STRING([--enable-show-load-errors-by-default],
|
||||||
|
[Set the default value for the MCA parameter
|
||||||
|
mca_base_component_show_load_errors (but can be
|
||||||
|
overridden at run time by the usual
|
||||||
|
MCA-variable-setting mechansism). This MCA variable
|
||||||
|
controls whether warnings are displayed when an MCA
|
||||||
|
component fails to load at run time due to an error.
|
||||||
|
(default: enabled, meaning that
|
||||||
|
mca_base_component_show_load_errors is enabled
|
||||||
|
by default])])
|
||||||
|
if test "$enable_show_load_errors_by_default" = "no" ; then
|
||||||
|
PMIX_SHOW_LOAD_ERRORS_DEFAULT=0
|
||||||
|
AC_MSG_RESULT([disabled by default])
|
||||||
|
else
|
||||||
|
PMIX_SHOW_LOAD_ERRORS_DEFAULT=1
|
||||||
|
AC_MSG_RESULT([enabled by default])
|
||||||
|
fi
|
||||||
|
AC_DEFINE_UNQUOTED(PMIX_SHOW_LOAD_ERRORS_DEFAULT, $PMIX_SHOW_LOAD_ERRORS_DEFAULT,
|
||||||
|
[Default value for mca_base_component_show_load_errors MCA variable])
|
||||||
|
|
||||||
AC_MSG_CHECKING([for subdir args])
|
AC_MSG_CHECKING([for subdir args])
|
||||||
PMIX_CONFIG_SUBDIR_ARGS([pmix_subdir_args])
|
PMIX_CONFIG_SUBDIR_ARGS([pmix_subdir_args])
|
||||||
AC_MSG_RESULT([$pmix_subdir_args])
|
AC_MSG_RESULT([$pmix_subdir_args])
|
||||||
|
@ -959,8 +959,8 @@ AC_DEFUN([PMIX_CONFIG_ASM],[
|
|||||||
|
|
||||||
ia64-*)
|
ia64-*)
|
||||||
pmix_cv_asm_arch="IA64"
|
pmix_cv_asm_arch="IA64"
|
||||||
PMIX_ASM_SUPPORT_64BIT=1
|
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||||
PMIX_GCC_INLINE_ASSIGN='"mov %0=r0\n;;\n" : "=&r"(ret)'
|
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||||
;;
|
;;
|
||||||
aarch64*)
|
aarch64*)
|
||||||
pmix_cv_asm_arch="ARM64"
|
pmix_cv_asm_arch="ARM64"
|
||||||
@ -993,20 +993,16 @@ AC_DEFUN([PMIX_CONFIG_ASM],[
|
|||||||
armv5*linux*|armv4*linux*|arm-*-linux-gnueabi)
|
armv5*linux*|armv4*linux*|arm-*-linux-gnueabi)
|
||||||
# uses Linux kernel helpers for some atomic operations
|
# uses Linux kernel helpers for some atomic operations
|
||||||
pmix_cv_asm_arch="ARM"
|
pmix_cv_asm_arch="ARM"
|
||||||
PMIX_ASM_SUPPORT_64BIT=0
|
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||||
PMIX_ASM_ARM_VERSION=5
|
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||||
CCASFLAGS="$CCASFLAGS -march=armv7-a"
|
|
||||||
AC_DEFINE_UNQUOTED([PMIX_ASM_ARM_VERSION], [$PMIX_ASM_ARM_VERSION],
|
|
||||||
[What ARM assembly version to use])
|
|
||||||
PMIX_GCC_INLINE_ASSIGN='"mov %0, #0" : "=&r"(ret)'
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
mips-*|mips64*)
|
mips-*|mips64*)
|
||||||
# Should really find some way to make sure that we are on
|
# Should really find some way to make sure that we are on
|
||||||
# a MIPS III machine (r4000 and later)
|
# a MIPS III machine (r4000 and later)
|
||||||
pmix_cv_asm_arch="MIPS"
|
pmix_cv_asm_arch="MIPS"
|
||||||
PMIX_ASM_SUPPORT_64BIT=1
|
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||||
PMIX_GCC_INLINE_ASSIGN='"or %0,[$]0,[$]0" : "=&r"(ret)'
|
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||||
;;
|
;;
|
||||||
|
|
||||||
powerpc-*|powerpc64-*|powerpcle-*|powerpc64le-*|rs6000-*|ppc-*)
|
powerpc-*|powerpc64-*|powerpcle-*|powerpc64le-*|rs6000-*|ppc-*)
|
||||||
|
@ -36,8 +36,6 @@ include atomics/sys/x86_64/Makefile.include
|
|||||||
include atomics/sys/arm/Makefile.include
|
include atomics/sys/arm/Makefile.include
|
||||||
include atomics/sys/arm64/Makefile.include
|
include atomics/sys/arm64/Makefile.include
|
||||||
include atomics/sys/ia32/Makefile.include
|
include atomics/sys/ia32/Makefile.include
|
||||||
include atomics/sys/ia64/Makefile.include
|
|
||||||
include atomics/sys/mips/Makefile.include
|
|
||||||
include atomics/sys/powerpc/Makefile.include
|
include atomics/sys/powerpc/Makefile.include
|
||||||
include atomics/sys/sparcv9/Makefile.include
|
include atomics/sys/sparcv9/Makefile.include
|
||||||
include atomics/sys/sync_builtin/Makefile.include
|
include atomics/sys/sync_builtin/Makefile.include
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
# University Research and Technology
|
|
||||||
# Corporation. All rights reserved.
|
|
||||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
# of Tennessee Research Foundation. All rights
|
|
||||||
# reserved.
|
|
||||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
||||||
# University of Stuttgart. All rights reserved.
|
|
||||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
# All rights reserved.
|
|
||||||
# Copyright (c) 2017 Intel, Inc. All rights reserved.
|
|
||||||
# $COPYRIGHT$
|
|
||||||
#
|
|
||||||
# Additional copyrights may follow
|
|
||||||
#
|
|
||||||
# $HEADER$
|
|
||||||
#
|
|
||||||
|
|
||||||
# This makefile.am does not stand on its own - it is included from pmix/include/Makefile.am
|
|
||||||
|
|
||||||
headers += \
|
|
||||||
atomics/sys/ia64/atomic.h \
|
|
||||||
atomics/sys/ia64/timer.h
|
|
@ -1,146 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
* University Research and Technology
|
|
||||||
* Corporation. All rights reserved.
|
|
||||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
* of Tennessee Research Foundation. All rights
|
|
||||||
* reserved.
|
|
||||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
||||||
* University of Stuttgart. All rights reserved.
|
|
||||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
* All rights reserved.
|
|
||||||
* Copyright (c) 2017 Intel, Inc. All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PMIX_SYS_ARCH_ATOMIC_H
|
|
||||||
#define PMIX_SYS_ARCH_ATOMIC_H 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* On ia64, we use cmpxchg, which supports acquire/release semantics natively.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#define PMIXMB() __asm__ __volatile__("mf": : :"memory")
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
*
|
|
||||||
* Define constants for IA64
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
#define PMIX_HAVE_ATOMIC_MEM_BARRIER 1
|
|
||||||
|
|
||||||
#define PMIX_HAVE_ATOMIC_CMPSET_32 1
|
|
||||||
#define PMIX_HAVE_ATOMIC_CMPSET_64 1
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
*
|
|
||||||
* Memory Barriers
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
#if PMIX_GCC_INLINE_ASSEMBLY
|
|
||||||
|
|
||||||
static inline void pmix_atomic_mb(void)
|
|
||||||
{
|
|
||||||
PMIXMB();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline void pmix_atomic_rmb(void)
|
|
||||||
{
|
|
||||||
PMIXMB();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline void pmix_atomic_wmb(void)
|
|
||||||
{
|
|
||||||
PMIXMB();
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void pmix_atomic_isync(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* PMIX_GCC_INLINE_ASSEMBLY */
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
*
|
|
||||||
* Atomic math operations
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
#if PMIX_GCC_INLINE_ASSEMBLY
|
|
||||||
|
|
||||||
#define ia64_cmpxchg4_acq(ptr, new, old) \
|
|
||||||
({ \
|
|
||||||
__u64 ia64_intri_res; \
|
|
||||||
ia64_intri_res; \
|
|
||||||
})
|
|
||||||
|
|
||||||
static inline int pmix_atomic_cmpset_acq_32( volatile int32_t *addr,
|
|
||||||
int32_t oldval, int32_t newval)
|
|
||||||
{
|
|
||||||
int64_t ret;
|
|
||||||
|
|
||||||
__asm__ __volatile__ ("mov ar.ccv=%0;;" :: "rO"(oldval));
|
|
||||||
__asm__ __volatile__ ("cmpxchg4.acq %0=[%1],%2,ar.ccv":
|
|
||||||
"=r"(ret) : "r"(addr), "r"(newval) : "memory");
|
|
||||||
|
|
||||||
return ((int32_t)ret == oldval);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline int pmix_atomic_cmpset_rel_32( volatile int32_t *addr,
|
|
||||||
int32_t oldval, int32_t newval)
|
|
||||||
{
|
|
||||||
int64_t ret;
|
|
||||||
|
|
||||||
__asm__ __volatile__ ("mov ar.ccv=%0;;" :: "rO"(oldval));
|
|
||||||
__asm__ __volatile__ ("cmpxchg4.rel %0=[%1],%2,ar.ccv":
|
|
||||||
"=r"(ret) : "r"(addr), "r"(newval) : "memory");
|
|
||||||
|
|
||||||
return ((int32_t)ret == oldval);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* PMIX_GCC_INLINE_ASSEMBLY */
|
|
||||||
|
|
||||||
|
|
||||||
#define pmix_atomic_cmpset_32 pmix_atomic_cmpset_acq_32
|
|
||||||
|
|
||||||
#if PMIX_GCC_INLINE_ASSEMBLY
|
|
||||||
|
|
||||||
static inline int pmix_atomic_cmpset_acq_64( volatile int64_t *addr,
|
|
||||||
int64_t oldval, int64_t newval)
|
|
||||||
{
|
|
||||||
int64_t ret;
|
|
||||||
|
|
||||||
__asm__ __volatile__ ("mov ar.ccv=%0;;" :: "rO"(oldval));
|
|
||||||
__asm__ __volatile__ ("cmpxchg8.acq %0=[%1],%2,ar.ccv":
|
|
||||||
"=r"(ret) : "r"(addr), "r"(newval) : "memory");
|
|
||||||
|
|
||||||
return (ret == oldval);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline int pmix_atomic_cmpset_rel_64( volatile int64_t *addr,
|
|
||||||
int64_t oldval, int64_t newval)
|
|
||||||
{
|
|
||||||
int64_t ret;
|
|
||||||
|
|
||||||
__asm__ __volatile__ ("mov ar.ccv=%0;;" :: "rO"(oldval));
|
|
||||||
__asm__ __volatile__ ("cmpxchg8.rel %0=[%1],%2,ar.ccv":
|
|
||||||
"=r"(ret) : "r"(addr), "r"(newval) : "memory");
|
|
||||||
|
|
||||||
return (ret == oldval);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* PMIX_GCC_INLINE_ASSEMBLY */
|
|
||||||
|
|
||||||
#define pmix_atomic_cmpset_64 pmix_atomic_cmpset_acq_64
|
|
||||||
|
|
||||||
#endif /* ! PMIX_SYS_ARCH_ATOMIC_H */
|
|
@ -1,48 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
* University Research and Technology
|
|
||||||
* Corporation. All rights reserved.
|
|
||||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
* of Tennessee Research Foundation. All rights
|
|
||||||
* reserved.
|
|
||||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
||||||
* University of Stuttgart. All rights reserved.
|
|
||||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
* All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PMIX_SYS_ARCH_TIMER_H
|
|
||||||
#define PMIX_SYS_ARCH_TIMER_H 1
|
|
||||||
|
|
||||||
|
|
||||||
typedef uint64_t pmix_timer_t;
|
|
||||||
|
|
||||||
|
|
||||||
#if PMIX_GCC_INLINE_ASSEMBLY
|
|
||||||
|
|
||||||
static inline pmix_timer_t
|
|
||||||
pmix_sys_timer_get_cycles(void)
|
|
||||||
{
|
|
||||||
pmix_timer_t ret;
|
|
||||||
|
|
||||||
__asm__ __volatile__ ("mov %0=ar.itc" : "=r"(ret));
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define PMIX_HAVE_SYS_TIMER_GET_CYCLES 1
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
pmix_timer_t pmix_sys_timer_get_cycles(void);
|
|
||||||
|
|
||||||
#define PMIX_HAVE_SYS_TIMER_GET_CYCLES 1
|
|
||||||
|
|
||||||
#endif /* PMIX_GCC_INLINE_ASSEMBLY */
|
|
||||||
|
|
||||||
#endif /* ! PMIX_SYS_ARCH_TIMER_H */
|
|
@ -1,24 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
# University Research and Technology
|
|
||||||
# Corporation. All rights reserved.
|
|
||||||
# Copyright (c) 2004-2008 The University of Tennessee and The University
|
|
||||||
# of Tennessee Research Foundation. All rights
|
|
||||||
# reserved.
|
|
||||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
||||||
# University of Stuttgart. All rights reserved.
|
|
||||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
# All rights reserved.
|
|
||||||
# Copyright (c) 2017 Intel, Inc. All rights reserved.
|
|
||||||
# $COPYRIGHT$
|
|
||||||
#
|
|
||||||
# Additional copyrights may follow
|
|
||||||
#
|
|
||||||
# $HEADER$
|
|
||||||
#
|
|
||||||
|
|
||||||
# This makefile.am does not stand on its own - it is included from pmix/include/Makefile.am
|
|
||||||
|
|
||||||
headers += \
|
|
||||||
atomics/sys/mips/atomic.h \
|
|
||||||
atomics/sys/mips/timer.h
|
|
@ -1,199 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
* University Research and Technology
|
|
||||||
* Corporation. All rights reserved.
|
|
||||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
* of Tennessee Research Foundation. All rights
|
|
||||||
* reserved.
|
|
||||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
||||||
* University of Stuttgart. All rights reserved.
|
|
||||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
* All rights reserved.
|
|
||||||
* Copyright (c) 2017 Intel, Inc. All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PMIX_SYS_ARCH_ATOMIC_H
|
|
||||||
#define PMIX_SYS_ARCH_ATOMIC_H 1
|
|
||||||
|
|
||||||
|
|
||||||
/* BWB - FIX ME! */
|
|
||||||
#ifdef __linux__
|
|
||||||
#define PMIXMB() __asm__ __volatile__(".set mips2; sync; .set mips0": : :"memory")
|
|
||||||
#define PMIXRMB() __asm__ __volatile__(".set mips2; sync; .set mips0": : :"memory")
|
|
||||||
#define PMIXWMB() __asm__ __volatile__(".set mips2; sync; .set mips0": : :"memory")
|
|
||||||
#define PMIXSMP_SYNC ".set mips2; sync; .set mips0"
|
|
||||||
#else
|
|
||||||
#define PMIXMB() __asm__ __volatile__("sync": : :"memory")
|
|
||||||
#define PMIXRMB() __asm__ __volatile__("sync": : :"memory")
|
|
||||||
#define PMIXWMB() __asm__ __volatile__("sync": : :"memory")
|
|
||||||
#define PMIXSMP_SYNC "sync"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
*
|
|
||||||
* Define constants for MIPS
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
#define PMIX_HAVE_ATOMIC_MEM_BARRIER 1
|
|
||||||
|
|
||||||
#define PMIX_HAVE_ATOMIC_CMPSET_32 1
|
|
||||||
|
|
||||||
#ifdef __mips64
|
|
||||||
#define PMIX_HAVE_ATOMIC_CMPSET_64 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
*
|
|
||||||
* Memory Barriers
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
#if PMIX_GCC_INLINE_ASSEMBLY
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void pmix_atomic_mb(void)
|
|
||||||
{
|
|
||||||
PMIXMB();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void pmix_atomic_rmb(void)
|
|
||||||
{
|
|
||||||
PMIXRMB();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void pmix_atomic_wmb(void)
|
|
||||||
{
|
|
||||||
PMIXWMB();
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline
|
|
||||||
void pmix_atomic_isync(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
*
|
|
||||||
* Atomic math operations
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
#if PMIX_GCC_INLINE_ASSEMBLY
|
|
||||||
|
|
||||||
static inline int pmix_atomic_cmpset_32(volatile int32_t *addr,
|
|
||||||
int32_t oldval, int32_t newval)
|
|
||||||
{
|
|
||||||
int32_t ret;
|
|
||||||
|
|
||||||
__asm__ __volatile__ (".set noreorder \n"
|
|
||||||
".set noat \n"
|
|
||||||
"1: \n"
|
|
||||||
#ifdef __linux__
|
|
||||||
".set mips2 \n\t"
|
|
||||||
#endif
|
|
||||||
"ll %0, %2 \n" /* load *addr into ret */
|
|
||||||
"bne %0, %z3, 2f \n" /* done if oldval != ret */
|
|
||||||
"or $1, %z4, 0 \n" /* tmp = newval (delay slot) */
|
|
||||||
"sc $1, %2 \n" /* store tmp in *addr */
|
|
||||||
#ifdef __linux__
|
|
||||||
".set mips0 \n\t"
|
|
||||||
#endif
|
|
||||||
/* note: ret will be 0 if failed, 1 if succeeded */
|
|
||||||
"beqz $1, 1b \n" /* if 0 jump back to 1b */
|
|
||||||
"nop \n" /* fill delay slots */
|
|
||||||
"2: \n"
|
|
||||||
".set reorder \n"
|
|
||||||
: "=&r"(ret), "=m"(*addr)
|
|
||||||
: "m"(*addr), "r"(oldval), "r"(newval)
|
|
||||||
: "cc", "memory");
|
|
||||||
return (ret == oldval);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* these two functions aren't inlined in the non-gcc case because then
|
|
||||||
there would be two function calls (since neither cmpset_32 nor
|
|
||||||
atomic_?mb can be inlined). Instead, we "inline" them by hand in
|
|
||||||
the assembly, meaning there is one function call overhead instead
|
|
||||||
of two */
|
|
||||||
static inline int pmix_atomic_cmpset_acq_32(volatile int32_t *addr,
|
|
||||||
int32_t oldval, int32_t newval)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = pmix_atomic_cmpset_32(addr, oldval, newval);
|
|
||||||
pmix_atomic_rmb();
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline int pmix_atomic_cmpset_rel_32(volatile int32_t *addr,
|
|
||||||
int32_t oldval, int32_t newval)
|
|
||||||
{
|
|
||||||
pmix_atomic_wmb();
|
|
||||||
return pmix_atomic_cmpset_32(addr, oldval, newval);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef PMIX_HAVE_ATOMIC_CMPSET_64
|
|
||||||
static inline int pmix_atomic_cmpset_64(volatile int64_t *addr,
|
|
||||||
int64_t oldval, int64_t newval)
|
|
||||||
{
|
|
||||||
int64_t ret;
|
|
||||||
|
|
||||||
__asm__ __volatile__ (".set noreorder \n"
|
|
||||||
".set noat \n"
|
|
||||||
"1: \n\t"
|
|
||||||
"lld %0, %2 \n\t" /* load *addr into ret */
|
|
||||||
"bne %0, %z3, 2f \n\t" /* done if oldval != ret */
|
|
||||||
"or $1, %4, 0 \n\t" /* tmp = newval (delay slot) */
|
|
||||||
"scd $1, %2 \n\t" /* store tmp in *addr */
|
|
||||||
/* note: ret will be 0 if failed, 1 if succeeded */
|
|
||||||
"beqz $1, 1b \n\t" /* if 0 jump back to 1b */
|
|
||||||
"nop \n\t" /* fill delay slot */
|
|
||||||
"2: \n\t"
|
|
||||||
".set reorder \n"
|
|
||||||
: "=&r" (ret), "=m" (*addr)
|
|
||||||
: "m" (*addr), "r" (oldval), "r" (newval)
|
|
||||||
: "cc", "memory");
|
|
||||||
|
|
||||||
return (ret == oldval);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* these two functions aren't inlined in the non-gcc case because then
|
|
||||||
there would be two function calls (since neither cmpset_64 nor
|
|
||||||
atomic_?mb can be inlined). Instead, we "inline" them by hand in
|
|
||||||
the assembly, meaning there is one function call overhead instead
|
|
||||||
of two */
|
|
||||||
static inline int pmix_atomic_cmpset_acq_64(volatile int64_t *addr,
|
|
||||||
int64_t oldval, int64_t newval)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = pmix_atomic_cmpset_64(addr, oldval, newval);
|
|
||||||
pmix_atomic_rmb();
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline int pmix_atomic_cmpset_rel_64(volatile int64_t *addr,
|
|
||||||
int64_t oldval, int64_t newval)
|
|
||||||
{
|
|
||||||
pmix_atomic_wmb();
|
|
||||||
return pmix_atomic_cmpset_64(addr, oldval, newval);
|
|
||||||
}
|
|
||||||
#endif /* PMIX_HAVE_ATOMIC_CMPSET_64 */
|
|
||||||
|
|
||||||
#endif /* PMIX_GCC_INLINE_ASSEMBLY */
|
|
||||||
|
|
||||||
#endif /* ! PMIX_SYS_ARCH_ATOMIC_H */
|
|
@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2008 The University of Tennessee and The University
|
|
||||||
* of Tennessee Research Foundation. All rights
|
|
||||||
* reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PMIX_SYS_ARCH_TIMER_H
|
|
||||||
#define PMIX_SYS_ARCH_TIMER_H 1
|
|
||||||
|
|
||||||
#include <sys/times.h>
|
|
||||||
|
|
||||||
typedef uint64_t pmix_timer_t;
|
|
||||||
|
|
||||||
static inline pmix_timer_t
|
|
||||||
pmix_sys_timer_get_cycles(void)
|
|
||||||
{
|
|
||||||
pmix_timer_t ret;
|
|
||||||
struct tms accurate_clock;
|
|
||||||
|
|
||||||
times(&accurate_clock);
|
|
||||||
ret = accurate_clock.tms_utime + accurate_clock.tms_stime;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define PMIX_HAVE_SYS_TIMER_GET_CYCLES 1
|
|
||||||
|
|
||||||
#endif /* ! PMIX_SYS_ARCH_TIMER_H */
|
|
@ -48,7 +48,7 @@ char *pmix_mca_base_component_path = NULL;
|
|||||||
int pmix_mca_base_opened = 0;
|
int pmix_mca_base_opened = 0;
|
||||||
char *pmix_mca_base_system_default_path = NULL;
|
char *pmix_mca_base_system_default_path = NULL;
|
||||||
char *pmix_mca_base_user_default_path = NULL;
|
char *pmix_mca_base_user_default_path = NULL;
|
||||||
bool pmix_mca_base_component_show_load_errors = true;
|
bool pmix_mca_base_component_show_load_errors = (bool) PMIX_SHOW_LOAD_ERRORS_DEFAULT;
|
||||||
bool pmix_mca_base_component_disable_dlopen = false;
|
bool pmix_mca_base_component_disable_dlopen = false;
|
||||||
|
|
||||||
static char *pmix_mca_base_verbose = NULL;
|
static char *pmix_mca_base_verbose = NULL;
|
||||||
@ -109,7 +109,7 @@ int pmix_mca_base_open(void)
|
|||||||
PMIX_MCA_BASE_VAR_SYN_FLAG_DEPRECATED);
|
PMIX_MCA_BASE_VAR_SYN_FLAG_DEPRECATED);
|
||||||
free(value);
|
free(value);
|
||||||
|
|
||||||
pmix_mca_base_component_show_load_errors = true;
|
pmix_mca_base_component_show_load_errors = (bool) PMIX_SHOW_LOAD_ERRORS_DEFAULT;;
|
||||||
var_id = pmix_mca_base_var_register("pmix", "mca", "base", "component_show_load_errors",
|
var_id = pmix_mca_base_var_register("pmix", "mca", "base", "component_show_load_errors",
|
||||||
"Whether to show errors for components that failed to load or not",
|
"Whether to show errors for components that failed to load or not",
|
||||||
PMIX_MCA_BASE_VAR_TYPE_BOOL, NULL, 0, 0,
|
PMIX_MCA_BASE_VAR_TYPE_BOOL, NULL, 0, 0,
|
||||||
|
@ -436,7 +436,7 @@ int pmix_mca_base_var_cache_files(bool rel_path_search)
|
|||||||
#if PMIX_WANT_HOME_CONFIG_FILES
|
#if PMIX_WANT_HOME_CONFIG_FILES
|
||||||
ret = asprintf(&pmix_mca_base_var_files, "%s"PMIX_PATH_SEP".pmix" PMIX_PATH_SEP
|
ret = asprintf(&pmix_mca_base_var_files, "%s"PMIX_PATH_SEP".pmix" PMIX_PATH_SEP
|
||||||
"mca-params.conf%c%s" PMIX_PATH_SEP "pmix-mca-params.conf",
|
"mca-params.conf%c%s" PMIX_PATH_SEP "pmix-mca-params.conf",
|
||||||
home, PMIX_ENV_SEP, pmix_pinstall_dirs.sysconfdir);
|
home, ',', pmix_pinstall_dirs.sysconfdir);
|
||||||
#else
|
#else
|
||||||
ret = asprintf(&pmix_mca_base_var_files, "%s" PMIX_PATH_SEP "pmix-mca-params.conf",
|
ret = asprintf(&pmix_mca_base_var_files, "%s" PMIX_PATH_SEP "pmix-mca-params.conf",
|
||||||
pmix_pinstall_dirs.sysconfdir);
|
pmix_pinstall_dirs.sysconfdir);
|
||||||
|
@ -410,6 +410,7 @@ pmix_status_t pmix_bfrops_base_copy_darray(pmix_data_array_t **dest,
|
|||||||
p->type = src->type;
|
p->type = src->type;
|
||||||
p->size = src->size;
|
p->size = src->size;
|
||||||
if (0 == p->size || NULL == src->array) {
|
if (0 == p->size || NULL == src->array) {
|
||||||
|
*dest = p;
|
||||||
return PMIX_SUCCESS;
|
return PMIX_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1061,6 +1061,7 @@ pmix_status_t pmix20_bfrop_copy_darray(pmix_data_array_t **dest,
|
|||||||
p->type = src->type;
|
p->type = src->type;
|
||||||
p->size = src->size;
|
p->size = src->size;
|
||||||
if (0 == p->size || NULL == src->array) {
|
if (0 == p->size || NULL == src->array) {
|
||||||
|
*dest = p;
|
||||||
return PMIX_SUCCESS;
|
return PMIX_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2958,7 +2958,8 @@ static pmix_status_t _store_job_info(pmix_proc_t *proc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
PMIX_LIST_FOREACH(kv, &cb.kvs, pmix_kval_t) {
|
PMIX_LIST_FOREACH(kv, &cb.kvs, pmix_kval_t) {
|
||||||
if (!PMIX_PROC_IS_V21(_client_peer()) && 0 != strncmp("pmix.", kv->key, 4) &&
|
if ((PMIX_PROC_IS_V1(_client_peer()) || PMIX_PROC_IS_V20(_client_peer())) &&
|
||||||
|
0 != strncmp("pmix.", kv->key, 4) &&
|
||||||
kv->value->type == PMIX_DATA_ARRAY) {
|
kv->value->type == PMIX_DATA_ARRAY) {
|
||||||
pmix_info_t *info;
|
pmix_info_t *info;
|
||||||
size_t size, i;
|
size_t size, i;
|
||||||
|
@ -70,6 +70,7 @@ typedef uint16_t pmix_proc_type_t;
|
|||||||
#define PMIX_PROC_V1 0x0008
|
#define PMIX_PROC_V1 0x0008
|
||||||
#define PMIX_PROC_V20 0x0010
|
#define PMIX_PROC_V20 0x0010
|
||||||
#define PMIX_PROC_V21 0x0020
|
#define PMIX_PROC_V21 0x0020
|
||||||
|
#define PMIX_PROC_V3 0x0040
|
||||||
|
|
||||||
/* defins some convenience macros for testing proc type */
|
/* defins some convenience macros for testing proc type */
|
||||||
#define PMIX_PROC_IS_CLIENT(p) (PMIX_PROC_CLIENT & (p)->proc_type)
|
#define PMIX_PROC_IS_CLIENT(p) (PMIX_PROC_CLIENT & (p)->proc_type)
|
||||||
@ -78,6 +79,7 @@ typedef uint16_t pmix_proc_type_t;
|
|||||||
#define PMIX_PROC_IS_V1(p) (PMIX_PROC_V1 & (p)->proc_type)
|
#define PMIX_PROC_IS_V1(p) (PMIX_PROC_V1 & (p)->proc_type)
|
||||||
#define PMIX_PROC_IS_V20(p) (PMIX_PROC_V20 & (p)->proc_type)
|
#define PMIX_PROC_IS_V20(p) (PMIX_PROC_V20 & (p)->proc_type)
|
||||||
#define PMIX_PROC_IS_V21(p) (PMIX_PROC_V21 & (p)->proc_type)
|
#define PMIX_PROC_IS_V21(p) (PMIX_PROC_V21 & (p)->proc_type)
|
||||||
|
#define PMIX_PROC_IS_V3(p) (PMIX_PROC_V3 & (p)->proc_type)
|
||||||
|
|
||||||
|
|
||||||
/**** MESSAGING STRUCTURES ****/
|
/**** MESSAGING STRUCTURES ****/
|
||||||
|
@ -249,12 +249,19 @@ static pmix_status_t connect_to_peer(struct pmix_peer_t *peer,
|
|||||||
} else {
|
} else {
|
||||||
/* we need to extract the nspace/rank of the server from the string */
|
/* we need to extract the nspace/rank of the server from the string */
|
||||||
p = strchr(mca_ptl_tcp_component.super.uri, ';');
|
p = strchr(mca_ptl_tcp_component.super.uri, ';');
|
||||||
|
if (NULL == p) {
|
||||||
|
return PMIX_ERR_BAD_PARAM;
|
||||||
|
}
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
p++;
|
p++;
|
||||||
suri = strdup(p); // save the uri portion
|
suri = strdup(p); // save the uri portion
|
||||||
/* the '.' in the first part of the original string separates
|
/* the '.' in the first part of the original string separates
|
||||||
* nspace from rank */
|
* nspace from rank */
|
||||||
p = strchr(mca_ptl_tcp_component.super.uri, '.');
|
p = strchr(mca_ptl_tcp_component.super.uri, '.');
|
||||||
|
if (NULL == p) {
|
||||||
|
free(suri);
|
||||||
|
return PMIX_ERR_BAD_PARAM;
|
||||||
|
}
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
p++;
|
p++;
|
||||||
nspace = strdup(mca_ptl_tcp_component.super.uri);
|
nspace = strdup(mca_ptl_tcp_component.super.uri);
|
||||||
|
@ -1000,7 +1000,15 @@ static void connection_handler(int sd, short args, void *cbdata)
|
|||||||
bftype = pmix_bfrops_globals.default_type; // we can't know any better
|
bftype = pmix_bfrops_globals.default_type; // we can't know any better
|
||||||
gds = NULL;
|
gds = NULL;
|
||||||
} else {
|
} else {
|
||||||
|
if (0 == strncmp(version, "2.1", 3)) {
|
||||||
proc_type = PMIX_PROC_V21;
|
proc_type = PMIX_PROC_V21;
|
||||||
|
} else if (0 == strncmp(version, "3", 1)) {
|
||||||
|
proc_type = PMIX_PROC_V3;
|
||||||
|
} else {
|
||||||
|
free(msg);
|
||||||
|
rc = PMIX_ERR_NOT_SUPPORTED;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
/* extract the name of the bfrops module they used */
|
/* extract the name of the bfrops module they used */
|
||||||
PMIX_STRNLEN(msglen, mg, cnt);
|
PMIX_STRNLEN(msglen, mg, cnt);
|
||||||
if (msglen < cnt) {
|
if (msglen < cnt) {
|
||||||
|
@ -1933,6 +1933,7 @@ static void _cnct(int sd, short args, void *cbdata)
|
|||||||
if (PMIX_SUCCESS != rc) {
|
if (PMIX_SUCCESS != rc) {
|
||||||
PMIX_ERROR_LOG(rc);
|
PMIX_ERROR_LOG(rc);
|
||||||
PMIX_RELEASE(reply);
|
PMIX_RELEASE(reply);
|
||||||
|
PMIX_DESTRUCT(&pbkt);
|
||||||
PMIX_DESTRUCT(&cb);
|
PMIX_DESTRUCT(&cb);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@ -1941,29 +1942,34 @@ static void _cnct(int sd, short args, void *cbdata)
|
|||||||
if (PMIX_SUCCESS != rc) {
|
if (PMIX_SUCCESS != rc) {
|
||||||
PMIX_ERROR_LOG(rc);
|
PMIX_ERROR_LOG(rc);
|
||||||
PMIX_RELEASE(reply);
|
PMIX_RELEASE(reply);
|
||||||
|
PMIX_DESTRUCT(&pbkt);
|
||||||
PMIX_DESTRUCT(&cb);
|
PMIX_DESTRUCT(&cb);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PMIX_DESTRUCT(&cb);
|
PMIX_DESTRUCT(&cb);
|
||||||
if (PMIX_PROC_IS_V21(cd->peer)) {
|
|
||||||
|
if (PMIX_PROC_IS_V1(cd->peer) || PMIX_PROC_IS_V20(cd->peer)) {
|
||||||
|
PMIX_BFROPS_PACK(rc, cd->peer, reply, &pbkt, 1, PMIX_BUFFER);
|
||||||
|
if (PMIX_SUCCESS != rc) {
|
||||||
|
PMIX_ERROR_LOG(rc);
|
||||||
|
PMIX_RELEASE(reply);
|
||||||
|
PMIX_DESTRUCT(&pbkt);
|
||||||
|
PMIX_DESTRUCT(&cb);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
PMIX_UNLOAD_BUFFER(&pbkt, bo.bytes, bo.size);
|
PMIX_UNLOAD_BUFFER(&pbkt, bo.bytes, bo.size);
|
||||||
PMIX_BFROPS_PACK(rc, cd->peer, reply, &bo, 1, PMIX_BYTE_OBJECT);
|
PMIX_BFROPS_PACK(rc, cd->peer, reply, &bo, 1, PMIX_BYTE_OBJECT);
|
||||||
if (PMIX_SUCCESS != rc) {
|
if (PMIX_SUCCESS != rc) {
|
||||||
PMIX_ERROR_LOG(rc);
|
PMIX_ERROR_LOG(rc);
|
||||||
PMIX_RELEASE(reply);
|
PMIX_RELEASE(reply);
|
||||||
PMIX_DESTRUCT(&pbkt);
|
PMIX_DESTRUCT(&pbkt);
|
||||||
goto cleanup;
|
PMIX_DESTRUCT(&cb);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
PMIX_BFROPS_PACK(rc, cd->peer, reply, &pbkt, 1, PMIX_BUFFER);
|
|
||||||
if (PMIX_SUCCESS != rc) {
|
|
||||||
PMIX_ERROR_LOG(rc);
|
|
||||||
PMIX_RELEASE(reply);
|
|
||||||
PMIX_DESTRUCT(&pbkt);
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PMIX_DESTRUCT(&pbkt);
|
PMIX_DESTRUCT(&pbkt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -352,6 +352,8 @@ int prun(int argc, char *argv[])
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ensure we ONLY take the ess/tool component */
|
||||||
|
opal_setenv(OPAL_MCA_PREFIX"ess", "tool", true, &environ);
|
||||||
/* tell the ess/tool component how we want to connect */
|
/* tell the ess/tool component how we want to connect */
|
||||||
if (myoptions.system_server_only) {
|
if (myoptions.system_server_only) {
|
||||||
opal_setenv(OPAL_MCA_PREFIX"ess_tool_system_server_only", "1", true, &environ);
|
opal_setenv(OPAL_MCA_PREFIX"ess_tool_system_server_only", "1", true, &environ);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user