Merge pull request #4340 from rhc54/topic/update
Sync to PMIx v3. Ensure prun uses the ess/tool component.
Этот коммит содержится в:
Коммит
b75ed83d4b
@ -83,6 +83,28 @@ Master (not on release branches yet)
|
||||
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
|
||||
----------------------
|
||||
- Compiler fix for Sun/Oracle CC (PR #322)
|
||||
|
@ -128,6 +128,32 @@ INSTALLATION OPTIONS
|
||||
--disable-shared; enabling static libraries and disabling shared
|
||||
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
|
||||
Load configure options for the build from FILE. 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
|
||||
# "date<date>".
|
||||
|
||||
repo_rev=git6001265
|
||||
repo_rev=gitd74c321
|
||||
|
||||
# If tarball_version is not empty, it is used as the version string in
|
||||
# the tarball filename, regardless of all other versions listed in
|
||||
@ -44,7 +44,7 @@ tarball_version=
|
||||
|
||||
# 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.
|
||||
# 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"
|
||||
|
||||
#
|
||||
# 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])
|
||||
PMIX_CONFIG_SUBDIR_ARGS([pmix_subdir_args])
|
||||
AC_MSG_RESULT([$pmix_subdir_args])
|
||||
|
@ -959,8 +959,8 @@ AC_DEFUN([PMIX_CONFIG_ASM],[
|
||||
|
||||
ia64-*)
|
||||
pmix_cv_asm_arch="IA64"
|
||||
PMIX_ASM_SUPPORT_64BIT=1
|
||||
PMIX_GCC_INLINE_ASSIGN='"mov %0=r0\n;;\n" : "=&r"(ret)'
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
aarch64*)
|
||||
pmix_cv_asm_arch="ARM64"
|
||||
@ -993,20 +993,16 @@ AC_DEFUN([PMIX_CONFIG_ASM],[
|
||||
armv5*linux*|armv4*linux*|arm-*-linux-gnueabi)
|
||||
# uses Linux kernel helpers for some atomic operations
|
||||
pmix_cv_asm_arch="ARM"
|
||||
PMIX_ASM_SUPPORT_64BIT=0
|
||||
PMIX_ASM_ARM_VERSION=5
|
||||
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)'
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
|
||||
mips-*|mips64*)
|
||||
# Should really find some way to make sure that we are on
|
||||
# a MIPS III machine (r4000 and later)
|
||||
pmix_cv_asm_arch="MIPS"
|
||||
PMIX_ASM_SUPPORT_64BIT=1
|
||||
PMIX_GCC_INLINE_ASSIGN='"or %0,[$]0,[$]0" : "=&r"(ret)'
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
|
||||
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/arm64/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/sparcv9/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;
|
||||
char *pmix_mca_base_system_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;
|
||||
|
||||
static char *pmix_mca_base_verbose = NULL;
|
||||
@ -109,7 +109,7 @@ int pmix_mca_base_open(void)
|
||||
PMIX_MCA_BASE_VAR_SYN_FLAG_DEPRECATED);
|
||||
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",
|
||||
"Whether to show errors for components that failed to load or not",
|
||||
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
|
||||
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",
|
||||
home, PMIX_ENV_SEP, pmix_pinstall_dirs.sysconfdir);
|
||||
home, ',', pmix_pinstall_dirs.sysconfdir);
|
||||
#else
|
||||
ret = asprintf(&pmix_mca_base_var_files, "%s" PMIX_PATH_SEP "pmix-mca-params.conf",
|
||||
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->size = src->size;
|
||||
if (0 == p->size || NULL == src->array) {
|
||||
*dest = p;
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -1061,6 +1061,7 @@ pmix_status_t pmix20_bfrop_copy_darray(pmix_data_array_t **dest,
|
||||
p->type = src->type;
|
||||
p->size = src->size;
|
||||
if (0 == p->size || NULL == src->array) {
|
||||
*dest = p;
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -2958,8 +2958,9 @@ static pmix_status_t _store_job_info(pmix_proc_t *proc)
|
||||
}
|
||||
|
||||
PMIX_LIST_FOREACH(kv, &cb.kvs, pmix_kval_t) {
|
||||
if (!PMIX_PROC_IS_V21(_client_peer()) && 0 != strncmp("pmix.", kv->key, 4) &&
|
||||
kv->value->type == PMIX_DATA_ARRAY) {
|
||||
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) {
|
||||
pmix_info_t *info;
|
||||
size_t size, i;
|
||||
info = kv->value->data.darray->array;
|
||||
|
@ -70,6 +70,7 @@ typedef uint16_t pmix_proc_type_t;
|
||||
#define PMIX_PROC_V1 0x0008
|
||||
#define PMIX_PROC_V20 0x0010
|
||||
#define PMIX_PROC_V21 0x0020
|
||||
#define PMIX_PROC_V3 0x0040
|
||||
|
||||
/* defins some convenience macros for testing 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_V20(p) (PMIX_PROC_V20 & (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 ****/
|
||||
|
@ -249,12 +249,19 @@ static pmix_status_t connect_to_peer(struct pmix_peer_t *peer,
|
||||
} else {
|
||||
/* we need to extract the nspace/rank of the server from the string */
|
||||
p = strchr(mca_ptl_tcp_component.super.uri, ';');
|
||||
if (NULL == p) {
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
*p = '\0';
|
||||
p++;
|
||||
suri = strdup(p); // save the uri portion
|
||||
/* the '.' in the first part of the original string separates
|
||||
* nspace from rank */
|
||||
p = strchr(mca_ptl_tcp_component.super.uri, '.');
|
||||
if (NULL == p) {
|
||||
free(suri);
|
||||
return PMIX_ERR_BAD_PARAM;
|
||||
}
|
||||
*p = '\0';
|
||||
p++;
|
||||
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
|
||||
gds = NULL;
|
||||
} else {
|
||||
proc_type = PMIX_PROC_V21;
|
||||
if (0 == strncmp(version, "2.1", 3)) {
|
||||
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 */
|
||||
PMIX_STRNLEN(msglen, mg, cnt);
|
||||
if (msglen < cnt) {
|
||||
|
@ -1933,6 +1933,7 @@ static void _cnct(int sd, short args, void *cbdata)
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(reply);
|
||||
PMIX_DESTRUCT(&pbkt);
|
||||
PMIX_DESTRUCT(&cb);
|
||||
goto cleanup;
|
||||
}
|
||||
@ -1941,29 +1942,34 @@ static void _cnct(int sd, short args, void *cbdata)
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(reply);
|
||||
PMIX_DESTRUCT(&pbkt);
|
||||
PMIX_DESTRUCT(&cb);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
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_BFROPS_PACK(rc, cd->peer, reply, &bo, 1, PMIX_BYTE_OBJECT);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_RELEASE(reply);
|
||||
PMIX_DESTRUCT(&pbkt);
|
||||
goto cleanup;
|
||||
}
|
||||
} 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);
|
||||
PMIX_DESTRUCT(&cb);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
PMIX_DESTRUCT(&pbkt);
|
||||
}
|
||||
}
|
||||
|
@ -352,6 +352,8 @@ int prun(int argc, char *argv[])
|
||||
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 */
|
||||
if (myoptions.system_server_only) {
|
||||
opal_setenv(OPAL_MCA_PREFIX"ess_tool_system_server_only", "1", true, &environ);
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user