1
1

Merge pull request #7026 from ggouaillardet/topic/openpmix_refresh

pmix/pmix4x: refresh to the latest open PMIx master
Этот коммит содержится в:
Gilles Gouaillardet 2019-10-01 18:15:53 +09:00 коммит произвёл GitHub
родитель f4371f7f94 1c4a3598d0
Коммит 280856928a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
723 изменённых файлов: 9293 добавлений и 1265 удалений

90
.gitignore поставляемый
Просмотреть файл

@ -373,51 +373,51 @@ opal/mca/hwloc/base/static-components.h.new.struct
opal/mca/installdirs/config/install_dirs.h
!opal/mca/pmix/pmix*/pmix/AUTHORS
!opal/mca/pmix/pmix*/pmix/contrib/perf_tools/Makefile
opal/mca/pmix/pmix*/pmix/include/pmix/autogen/config.h
opal/mca/pmix/pmix*/pmix/include/pmix/autogen/config.h.in
opal/mca/pmix/pmix*/pmix/src/include/private/autogen/config.h.in
opal/mca/pmix/pmix*/pmix/src/include/private/autogen/config.h
opal/mca/pmix/pmix*/pmix/src/include/frameworks.h
opal/mca/pmix/pmix*/pmix/src/mca/pinstalldirs/config/pinstall_dirs.h
opal/mca/pmix/pmix*/pmix/config/autogen_found_items.m4
opal/mca/pmix/pmix*/pmix/config/mca_library_paths.txt
opal/mca/pmix/pmix*/pmix/config/test-driver
opal/mca/pmix/pmix*/pmix/src/include/pmix_config.h
opal/mca/pmix/pmix*/pmix/src/include/pmix_config.h.in
opal/mca/pmix/pmix*/pmix/include/pmix_common.h
opal/mca/pmix/pmix*/pmix/include/pmix_rename.h
opal/mca/pmix/pmix*/pmix/include/pmix_version.h
opal/mca/pmix/pmix*/pmix/src/util/keyval/keyval_lex.c
opal/mca/pmix/pmix*/pmix/src/util/show_help_lex.c
opal/mca/pmix/pmix*/pmix/examples/alloc
opal/mca/pmix/pmix*/pmix/examples/client
opal/mca/pmix/pmix*/pmix/examples/debugger
opal/mca/pmix/pmix*/pmix/examples/debuggerd
opal/mca/pmix/pmix*/pmix/examples/dmodex
opal/mca/pmix/pmix*/pmix/examples/dynamic
opal/mca/pmix/pmix*/pmix/examples/fault
opal/mca/pmix/pmix*/pmix/examples/jctrl
opal/mca/pmix/pmix*/pmix/examples/pub
opal/mca/pmix/pmix*/pmix/examples/server
opal/mca/pmix/pmix*/pmix/examples/tool
opal/mca/pmix/pmix*/pmix/test/run_tests00.pl
opal/mca/pmix/pmix*/pmix/test/run_tests01.pl
opal/mca/pmix/pmix*/pmix/test/run_tests02.pl
opal/mca/pmix/pmix*/pmix/test/run_tests03.pl
opal/mca/pmix/pmix*/pmix/test/run_tests04.pl
opal/mca/pmix/pmix*/pmix/test/run_tests05.pl
opal/mca/pmix/pmix*/pmix/test/run_tests06.pl
opal/mca/pmix/pmix*/pmix/test/run_tests07.pl
opal/mca/pmix/pmix*/pmix/test/run_tests08.pl
opal/mca/pmix/pmix*/pmix/test/run_tests09.pl
opal/mca/pmix/pmix*/pmix/test/run_tests10.pl
opal/mca/pmix/pmix*/pmix/test/run_tests11.pl
opal/mca/pmix/pmix*/pmix/test/run_tests12.pl
opal/mca/pmix/pmix*/pmix/test/run_tests13.pl
opal/mca/pmix/pmix*/pmix/test/run_tests14.pl
opal/mca/pmix/pmix*/pmix/test/run_tests15.pl
!opal/mca/pmix/pmix*/openpmix/AUTHORS
!opal/mca/pmix/pmix*/openpmix/contrib/perf_tools/Makefile
opal/mca/pmix/pmix*/openpmix/include/pmix/autogen/config.h
opal/mca/pmix/pmix*/openpmix/include/pmix/autogen/config.h.in
opal/mca/pmix/pmix*/openpmix/src/include/private/autogen/config.h.in
opal/mca/pmix/pmix*/openpmix/src/include/private/autogen/config.h
opal/mca/pmix/pmix*/openpmix/src/include/frameworks.h
opal/mca/pmix/pmix*/openpmix/src/mca/pinstalldirs/config/pinstall_dirs.h
opal/mca/pmix/pmix*/openpmix/config/autogen_found_items.m4
opal/mca/pmix/pmix*/openpmix/config/mca_library_paths.txt
opal/mca/pmix/pmix*/openpmix/config/test-driver
opal/mca/pmix/pmix*/openpmix/src/include/pmix_config.h
opal/mca/pmix/pmix*/openpmix/src/include/pmix_config.h.in
opal/mca/pmix/pmix*/openpmix/include/pmix_common.h
opal/mca/pmix/pmix*/openpmix/include/pmix_rename.h
opal/mca/pmix/pmix*/openpmix/include/pmix_version.h
opal/mca/pmix/pmix*/openpmix/src/util/keyval/keyval_lex.c
opal/mca/pmix/pmix*/openpmix/src/util/show_help_lex.c
opal/mca/pmix/pmix*/openpmix/examples/alloc
opal/mca/pmix/pmix*/openpmix/examples/client
opal/mca/pmix/pmix*/openpmix/examples/debugger
opal/mca/pmix/pmix*/openpmix/examples/debuggerd
opal/mca/pmix/pmix*/openpmix/examples/dmodex
opal/mca/pmix/pmix*/openpmix/examples/dynamic
opal/mca/pmix/pmix*/openpmix/examples/fault
opal/mca/pmix/pmix*/openpmix/examples/jctrl
opal/mca/pmix/pmix*/openpmix/examples/pub
opal/mca/pmix/pmix*/openpmix/examples/server
opal/mca/pmix/pmix*/openpmix/examples/tool
opal/mca/pmix/pmix*/openpmix/test/run_tests00.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests01.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests02.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests03.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests04.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests05.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests06.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests07.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests08.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests09.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests10.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests11.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests12.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests13.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests14.pl
opal/mca/pmix/pmix*/openpmix/test/run_tests15.pl
opal/mca/pmix/ext4x/ext4x.c

Просмотреть файл

@ -15,7 +15,7 @@ EXTRA_DIST = autogen.subdirs
dist_opaldata_DATA = help-pmix-pmix4x.txt
SUBDIRS = pmix
SUBDIRS = openpmix
sources = \
pmix4x.h \
@ -43,7 +43,7 @@ mcacomponent_LTLIBRARIES = $(component_install)
mca_pmix_pmix4x_la_SOURCES = $(sources)
mca_pmix_pmix4x_la_CFLAGS = $(opal_pmix_pmix4x_CFLAGS)
mca_pmix_pmix4x_la_CPPFLAGS = \
-I$(srcdir)/pmix/include $(opal_pmix_pmix4x_CPPFLAGS)
-I$(srcdir)/openpmix/include $(opal_pmix_pmix4x_CPPFLAGS)
mca_pmix_pmix4x_la_LDFLAGS = -module -avoid-version $(opal_pmix_pmix4x_LDFLAGS)
mca_pmix_pmix4x_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la \
$(opal_pmix_pmix4x_LIBS)

Просмотреть файл

@ -1 +1 @@
pmix
openpmix

Просмотреть файл

@ -59,7 +59,7 @@ AC_DEFUN([MCA_opal_pmix_pmix4x_CONFIG],[
[opal_pmix_pmix4x_args="--with-devel-headers $opal_pmix_pmix4x_args"])
CPPFLAGS="-I$OPAL_TOP_SRCDIR -I$OPAL_TOP_BUILDDIR -I$OPAL_TOP_SRCDIR/opal/include -I$OPAL_TOP_BUILDDIR/opal/include $CPPFLAGS"
OPAL_CONFIG_SUBDIR([$opal_pmix_pmix4x_basedir/pmix],
OPAL_CONFIG_SUBDIR([$opal_pmix_pmix4x_basedir/openpmix],
[$opal_pmix_pmix4x_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'],
[opal_pmix_pmix4x_happy=1], [opal_pmix_pmix4x_happy=0])
@ -83,9 +83,9 @@ AC_DEFUN([MCA_opal_pmix_pmix4x_CONFIG],[
AC_MSG_ERROR([CANNOT CONTINUE])])
# Build flags for our Makefile.am
opal_pmix_pmix4x_LDFLAGS=
opal_pmix_pmix4x_LIBS="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix/src/libpmix.la"
opal_pmix_pmix4x_CPPFLAGS="-I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix/include -I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix4x_basedir/pmix/include -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix4x_basedir/pmix"
opal_pmix_pmix4x_DEPENDENCIES="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix/src/libpmix.la"])
opal_pmix_pmix4x_LIBS="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix/src/libpmix.la"
opal_pmix_pmix4x_CPPFLAGS="-I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix/include -I$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix4x_basedir/openpmix/include -I$OPAL_TOP_SRCDIR/$opal_pmix_pmix4x_basedir/openpmix"
opal_pmix_pmix4x_DEPENDENCIES="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix/src/libpmix.la"])
AC_SUBST([opal_pmix_pmix4x_LIBS])
AC_SUBST([opal_pmix_pmix4x_CPPFLAGS])
@ -94,7 +94,7 @@ AC_DEFUN([MCA_opal_pmix_pmix4x_CONFIG],[
# Finally, add some flags to the wrapper compiler so that our
# headers can be found.
pmix_pmix4x_status_filename="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/pmix/config.status"
pmix_pmix4x_status_filename="$OPAL_TOP_BUILDDIR/$opal_pmix_pmix4x_basedir/openpmix/config.status"
pmix_pmix4x_WRAPPER_EXTRA_CPPFLAGS=`egrep PMIX_EMBEDDED_CPPFLAGS $pmix_pmix4x_status_filename | cut -d\" -f4`
pmix_pmix4x_WRAPPER_EXTRA_LDFLAGS=`egrep PMIX_EMBEDDED_LDFLAGS $pmix_pmix4x_status_filename | cut -d\" -f4`
pmix_pmix4x_WRAPPER_EXTRA_LIBS=`egrep PMIX_EMBEDDED_LIBS $pmix_pmix4x_status_filename | cut -d\" -f4`

Просмотреть файл

@ -11,7 +11,7 @@
# All rights reserved.
# Copyright (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2012-2013 Los Alamos National Security, Inc. All rights reserved.
# Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
# Copyright (c) 2019 Amazon.com, Inc. or its affiliates. All Rights
# reserved.
# $COPYRIGHT$
@ -32,7 +32,7 @@ AM_DISTCHECK_CONFIGURE_FLAGS = --disable-dlopen
headers =
sources =
nodist_headers =
EXTRA_DIST = AUTHORS README HACKING INSTALL VERSION LICENSE autogen.pl
EXTRA_DIST = AUTHORS README HACKING INSTALL VERSION LICENSE autogen.pl Makefile.pmix-rules
# Only install the valgrind suppressions file and man pages
# if we're building in standalone mode

Просмотреть файл

@ -0,0 +1,37 @@
# -*- makefile -*-
# Copyright (c) 2008-2018 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
# Copyright (c) 2019 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
TRIM_OPTIONS=
.1in.1:
$(PMIX_V_GEN) $(top_srcdir)/contrib/make_manpage.pl \
--package-name='@PACKAGE_NAME@' \
--package-version='@PACKAGE_VERSION@' \
--pmix-date='@PMIX_RELEASE_DATE@' \
--input=$< \
--output=$@
.3in.3:
$(PMIX_V_GEN) $(top_srcdir)/contrib/make_manpage.pl \
--package-name='@PACKAGE_NAME@' \
--package-version='@PACKAGE_VERSION@' \
--pmix-date='@PMIX_RELEASE_DATE@' \
$(TRIM_OPTIONS) \
--input=$< \
--output=$@
.7in.7:
$(PMIX_V_GEN) $(top_srcdir)/contrib/make_manpage.pl \
--package-name='@PACKAGE_NAME@' \
--package-version='@PACKAGE_VERSION@' \
--pmix-date='@PMIX_RELEASE_DATE@' \
--input=$< \
--output=$@

Просмотреть файл

@ -23,6 +23,89 @@ multiple release branches.
Master (not on release branches yet)
------------------------------------
3.1.5 -- TBD
----------------------
NOTE: The signature of the PMIx_Allocation_request has changed
in accordance with an Errata update of the PMIx v3 Standard
- PR #1382: dstore: fixed truncate key-names while restoring
- PR #1405: Fix xnspace dmodex and add verbose debug
- PR #1406: Resolve request for job-level data
- PR #1407/#1409/#1411: Fix xnspace get yet again
- PR #1434/#1436: Cleanup handling of info arrays
- PR #1435: Cleanup example and remove debug
- PR #1437: Update blocking Allocation_request signature
- PR #1440: Fix 'get' of data for unknown namespace
- PR #1442: Fix fences with namespaces where no local processes are running
3.1.4 -- 9 Aug 2019
----------------------
- PR #1342: Fix if_linux_ipv6_open interface filter
- PR #1344: Remove unnecessary libtool init for c++
- PR #1346: Fix incorrect pointer casts/deref
- PR #1347/#1348: Fix use of gethostname
- PR #1353/#1357: util/environ: use setenv() if available
- PR #1354: Plug a misc memory leak in the pmix_query_caddy_t destructor
- PR #1356: Fix another pointer cast/deref in test suite
- PR #1358: Implement support for class-based info arrays
- PR #1359: Plug misc minor memory leaks
- PR #1368: Backport support for libev
- PR #1369: Fix legacy support for PMI-1
- PR #1370: Cleanup handling of data requests for different nspaces
- PR #1193: Resolve get of proc-specific job-level info from another nspace
- PR #1376: Fix problems in the Log code path, updates to simple test suite
- PR #1377: Skip fastpath/dstore for NULL keys
- PR #1379: Change IF_NAMESIZE to PMIX_IF_NAMESIZE and set to safe size
- PR #1385: Check for EINVAL return from posix_fallocate
- PR #1389: Plug misc memory leaks in configure
3.1.3 -- 2 July 2019
----------------------
- PR #1096: Restore PMIX_NUM_SLOTS for backward compatibility
- PR #1106: Automatically generate PMIX_NUMERIC_VERSION
- PR #1143: Fix tool connection handshake for tools that are registered
clients
- PR #1163: Fix a compiler warning in atomics on POWER arch
- PR #1162: Fix race condition when clients fail while in a PMIx
collective operation
- PR #1166: Fix a regression in spinlock atomics
- PR #1159: Fix missing pointer update when shared memory segment
was re-attached
- PR #1180: Remove dependency on C++ compiler for thread detection
- PR #1180: Add detection for Flex when building in non-tarball situations
- PR #1165: Add dependency on libevent-devel to rpm spec file
- PR #1188: Link libpmix.so to MCA component libraries
- PR #1194: Ensure any cached notifications arrive after registration completes
- PR #1205: Add "make check" support
- PR #1209: Update configure logic for clock_gettime
- PR #1213/#1217/#1221: Add configure option "--enable-nonglobal-dlopen"
If the MCA component libraries should link back to libpmix.so
- PR #1231: SPEC: Allow splitting PMIx in pmix and pmix-libpmi packages
- PR #1222: Fix case of multiple launcher calls in job script
- PR #1237: Avoid double-free of collective tracker
- PR #1237: Ensure all participants are notified of fence complete
- PR #1237: Ensure all participants are notified of connect and disconnect complete
- PR #1250: Fix PMIx_server_finalize hang (rare)
- PR #1271: PTL/usock doesn't support tools
- PR #1280: Fix the PTL connection establishment protocol
- PR #1280: Fix tool connection in psec/handshake mode
- PR #1289: Avoid output_verbose overhead when it won't print
- PR #1296: Allow setup_fork to proceed even if gdds and pnet don't contribute
- PR #1296: Allow servers to pass NULL module
- PR #1297: Provide internal blocking ability to the register/deregister fns
- PR #1298: Add dummy handshake component to psec framework for testing
- PR #1303: Allow jobs to not specify proc-level info
- PR #1304: Provide proc data in cases where host does not
- PR #1305: Add some more values that can be computed
- PR #1308: Add missing tool rendezvous file
- PR #1309: Fix potential integer overflow in regex
- PR #1311: Work around memory bug in older gcc compilers
- PR #1321: Provide memory op hooks in user-facing macros
- PR #1329: Add -fPIC to static builds
- PR #1340: Do not use '==' in m4 test statements
3.1.2 -- 24 Jan 2019
----------------------
- Fix a bug in macro identifying system events
@ -183,6 +266,57 @@ Master (not on release branches yet)
- Fix several memory and file descriptor leaks
2.2.3 -- 15 Aug 2019
----------------------
- PR #1162: Fix race condition when clients fail while in a PMIx
collective operation
- PR #1163: Fix a compiler warning in atomics on POWER arch
- PR #1165: Add BuildRequires: libevent-devel to spec file
- PR #1180: Remove dependency on C++ compiler for thread detection
- PR #1180: Add detection for Flex when building in non-tarball situations
- PR #1182: configury: use PMIX_ENABLE_DLOPEN_SUPPORT instead of enable_dlopen
- PR #1188: Link libpmix.so to MCA component libraries
- PR #1190: Ensure any cached notifications arrive after reg completes
- PR #1194: Ensure any cached notifications arrive after registration completes
- PR #1209: Update configure logic for clock_gettime
- PR #1213/#1217/#1221: Add configure option "--enable-nonglobal-dlopen"
If the MCA component libraries should link back to libpmix.so
- PR #1231: SPEC: Allow splitting PMIx in pmix and pmix-libpmi packages
- PR #1253: Preserve user-provided CFLAGS to protect autotools
- PR #1267: Correct dmodex example
- PR #1275: IPv6 IF Read: Buffer Overflow
- PR #1295: Fix comment: IPv6 IF_NAMESIZE
- PR #1296: Allow setup_fork to proceed even if gdds and pnet don't contribute
- PR #1296: Allow servers to pass NULL module
- PR #1297: Provide internal blocking ability to the register/deregister fns
- PR #1298: Add dummy handshake component to psec framework for testing
- PR #1303: Allow jobs to not specify proc-level info
- PR #1304: Provide proc data in cases where host does not
- PR #1305: Add some more values that can be computed
- PR #1308: Add missing tool rendezvous file
- PR #1309: Fix potential integer overflow in regex
- PR #1311: Work around memory bug in older gcc compilers
- PR #1329: Add -fPIC to static builds
- PR #1334: Cache only -W CFLAG entries to fix 32-bit builds
- PR #1341: Do not use '==' in m4 test statements
- PR #1342: Fix if_linux_ipv6_open interface filter
- PR #1344: Remove unnecessary libtool init for c++
- PR #1346: Fix incorrect pointer casts/deref
- PR #1347/#1348: Fix use of gethostname
- PR #1353/#1357: util/environ: use setenv() if available
- PR #1354: Plug a misc memory leak in the pmix_query_caddy_t destructor
- PR #1356: Fix another pointer cast/deref in test suite
- PR #1358: Implement support for class-based info arrays
- PR #1359: Plug misc minor memory leaks
- PR #1369: Fix legacy support for PMI-1
- PR #1370: Cleanup handling of data requests for different nspaces
- PR #1193: Resolve get of proc-specific job-level info from another nspace
- PR #1377: Skip fastpath/dstore for NULL keys
- PR #1379: Change IF_NAMESIZE to PMIX_IF_NAMESIZE and set to safe size
- PR #1385: Check for EINVAL return from posix_fallocate
- PR #1389: Plug misc memory leaks in configure
2.2.2 -- 24 Jan 2019
----------------------
- Fix a bug in macro identifying system events

Просмотреть файл

Просмотреть файл

@ -23,14 +23,14 @@ release=0
# The only requirement is that it must be entirely printable ASCII
# characters and have no white space.
greek=
greek=a1
# If repo_rev is empty, then the repository version number will be
# obtained during "make dist" via the "git describe --tags --always"
# command, or with the date (if "git describe" fails) in the form of
# "date<date>".
repo_rev=gitf87459fe
repo_rev=gitea3b29b1
# 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="Sep 03, 2019"
date="Oct 01, 2019"
# The shared library version of each of PMIx's public libraries.
# These versions are maintained in accordance with the "Library

Просмотреть файл

@ -23,6 +23,8 @@
helpers = setup.py pmix.pyx pmix.pxi construct.py
EXTRA_DIST = $(helpers)
if WANT_PYTHON_BINDINGS
install-exec-local: $(helpers)

Просмотреть файл

@ -0,0 +1,520 @@
#!/usr/bin/env python3
import os, os.path, sys, shutil, signal
from optparse import OptionParser, OptionGroup
takeconst = False
takeapis = False
takedtypes = False
def signal_handler(signal, frame):
print("Ctrl-C received")
sys.exit(0)
def harvest_constants(options, src, constants, definitions):
global takeconst, takeapis, takedtypes
path = os.path.join(options.src, src)
# open the file
try:
inputfile = open(path, "r")
except:
print("File", path, "could not be opened")
return
# read the file - these files aren't too large
# so ingest the whole thing at one gulp
lines = inputfile.readlines()
# cache the string constants, numeric, and typedef constants
# in separate lists
strconsts = []
strconstlen = 0
errconsts = []
nconsts = []
nconstlen = 0
typedefs = []
apis = []
# loop over the lines
for n in range(len(lines)):
line = lines[n]
# remove white space at front and back
myline = line.strip()
# remove comment lines
if "/*" in myline or "*/" in myline or myline.startswith("*"):
n += 1
continue
# if the line starts with #define, then we want it
if takeconst and myline.startswith("#define"):
value = myline[8:]
# skip some well-known unwanted values
if value.startswith("PMIx"):
continue
if value.startswith("PMIX_HAVE_VISIB"):
continue
tokens = value.split()
if len(tokens) >= 2:
if tokens[1][0] == '"':
strconsts.append(tokens[0])
if len(tokens[0]) > strconstlen:
strconstlen = len(tokens[0])
elif "PMIX_ERR_" in value or tokens[1].startswith("-"):
# numerical constant that looks just like a
# string constant - i.e., PMIX_ERR_FOO...1
# we output them in a separate section, but
# consider them string constants
errconsts.append(tokens[0])
if len(tokens[0]) > strconstlen:
strconstlen = len(tokens[0])
elif tokens[1].isdigit() or tokens[1].startswith("UINT") or tokens[1].startswith("0x"):
# values that were defined as UINT32_MAX need to be converted
# to hex values as Python otherwise gets confused
if tokens[1] == "UINT32_MAX":
tokens[1] = "0xffffffff"
elif "UINT32_MAX-1" in tokens[1]:
tokens[1] = "0xfffffffe"
elif "UINT32_MAX-2" in tokens[1]:
tokens[1] = "0xfffffffd"
elif "UINT32_MAX-3" in tokens[1]:
tokens[1] = "0xfffffffc"
elif "UINT8_MAX" in tokens[1]:
tokens[1] = "0xff"
nconsts.append([tokens[0], tokens[1]])
if len(tokens[0]) > nconstlen:
nconstlen = len(tokens[0])
elif takeapis and myline.startswith("PMIX_EXPORT"):
value = myline[12:].strip()
# this is the name of an API - these
# are frequently multi-line, so collect
# all of them
if ";" in value:
value = value[:-1]
# check for bool type - must be converted to bint
value = value.replace("bool ", "bint ")
# a single-line API might have a "void" arg
# Python doesn't accept "void" as an arg, so
# we have to "snip" it out
start = value.find("(") + 1
end = value.find(")")
snip = value[start:end]
if snip == "void":
value = value[0:start] + value[end:]
newapi = [value]
apis.append(newapi)
else:
value = value.replace("bool ", "bint ")
newapi = [value]
apirunning = True
while apirunning:
n += 1
value = lines[n].strip()
# check for bool type - must be converted to bint
value = value.replace("bool ", "bint ")
if ";" in value:
apirunning = False
value = value[:-1]
newapi.append(value)
apis.append(newapi)
elif takedtypes and myline.startswith("typedef"):
# there are three types of typedef's in PMIx:
#
# 1. simple one-line typedef - e.g., "typedef int foo"
#
# 2. multi-line struct types
#
# 3. function definitions - by PMIx convention, these
# always have an "fn_t" in the name
#
# 4. enum definitions
#
# start with the fourth option by looking for "enum"
if "enum" in myline:
# each line after this one should contain a name
# so we just assign a value sequentially.
counter = 0
n += 1
value = lines[n].strip()
if ',' in value:
value = value[:-1]
while '}' not in value and n < len(lines):
tokens[0] = value
tokens[1] = str(counter)
counter += 1
nconsts.append([tokens[0], tokens[1]])
if len(tokens[0]) > nconstlen:
nconstlen = len(tokens[0])
n += 1
value = lines[n].strip()
if ',' in value:
value = value[:-1]
# the termination line contains the type name
# for this enum - declare it as integer here
value = "typedef int " + value[2:]
typedefs.append([value])
# now address the first option - detectable by
# having a semi-colon at the end of the line and
# no "fn_t" or "cbfunc_t" in it
elif ";" in myline and not "fn_t" in myline and not "cbfunc_t" in myline:
value = myline[:-1]
# check for bool type - must be converted to bint
if "bool" in value:
value.replace("bool ", "bint ")
# check for pre-declaration statements of form
# typedef struct foo foo
ck = value.split()
if len(ck) == 4 and ck[1] == "struct" and ck[2] == ck[3]:
n += 1
continue
else:
# check for a typedef that includes a named value
# of either PMIX_MAX_NSLEN or PMIX_MAX_KEYLEN
if "PMIX_MAX_NSLEN+1" in value:
value = value.replace("PMIX_MAX_NSLEN+1", str(256))
elif "PMIX_MAX_NSLEN" in value:
value = value.replace("PMIX_MAX_NSLEN", str(255))
elif "PMIX_MAX_KEYLEN+1" in value:
value = value.replace("PMIX_MAX_KEYLEN+1", str(512))
elif "PMIX_MAX_KEYLEN" in value:
value = value.replace("PMIX_MAX_KEYLEN", str(511))
typedefs.append([value])
# now check the third option by looking for
# "fn_t" or "cbfunc_t" in it
elif "fn_t" in myline or "cbfunc_t" in myline:
if ";" in myline:
# this is a one-line function definition
value = myline[:-1]
# check for bool type - must be converted to bint
if "bool" in value:
value.replace("bool ", "bint ")
typedefs.append([value])
else:
# this is a multi-line function definition
# check for bool type - must be converted to bint
if "bool" in myline:
myline.replace("bool ", "bint ")
newdef = [myline]
defrunning = True
while defrunning:
n += 1
value = lines[n].strip()
# check for bool type - must be converted to bint
if "bool" in value:
value.replace("bool ", "bint ")
if ";" in value:
defrunning = False
value = value[:-1]
newdef.append(value)
typedefs.append(newdef)
# must be a multi-line struct type definition
# we capture these in the typedef list
# so we output their type definition
else:
# check for pre-declaration statements of form
# typedef struct foo foo
value = myline
ck = value.split()
if len(ck) == 4 and ck[1] == "struct" and ck[2] == ck[3]:
n += 1
continue
else:
newdef = []
n += 1
value = lines[n].strip()
nbrk = 1
while nbrk > 0:
# avoid comments
if "/*" in value or "*/" in value or value.startswith("*"):
n += 1
value = lines[n].strip()
continue
if "}" in value:
nbrk -= 1
if nbrk > 0:
n += 1
value = lines[n].strip()
continue
if "union" in value:
# we have to create another definition that contains
# just the union and then add that back into the
# current typedef
uniondef = []
n += 1
value = lines[n].strip()
while "}" not in value:
# terminate at the semi-colon
idx = value.rfind(';')
value = " " + value[:idx]
# check for bool type - must be converted to bint
if "bool" in value:
value = value.replace("bool ", "bint ")
elif "struct timeval " in value:
value = value.replace("struct timeval", "timeval")
# add it to the union def
uniondef.append(value)
n += 1
value = lines[n].strip()
# terminate at the semi-colon
idx = value.rfind(';')
value = value[:idx]
# extract the name of the union
idx = value.rfind(' ')
value = value[idx+1:]
# save this name
lowname = value
# capitalize the first letter
value = value.title()
# create the union definition - the output
# routine will prepend a 'c'
myvalue = "def union " + value + ":"
uniondef.insert(0, myvalue)
typedefs.append(uniondef)
# add the union to the struct
value = " " + value + " " + lowname
newdef.append(value)
nbrk -= 1
n += 1
value = lines[n].strip()
continue
# terminate at the semi-colon
idx = value.rfind(';')
value = " " + value[:idx]
# check for bool type - must be converted to bint
if "bool" in value:
value = value.replace("bool ", "bint ")
elif "struct timeval " in value:
value = value.replace("struct timeval", "timeval")
# we don't want any dimensions - if given, convert
# to the corresponding value
idx = value.find('[')
if idx >= 0:
# find the end of the dimension
dim = value.rfind(']')
dimstr = value[idx+1:dim]
# have to do this manually
if "MAX_KEYLEN" in dimstr:
value = value[:idx] + "[512]" + value[dim+1:]
elif "MAX_NSLEN" in dimstr:
value = value[:idx] + "[256]" + value[dim+1:]
else:
print("BAD DIMENSION " + dimstr)
exit(1)
newdef.append(value)
n += 1
value = lines[n].strip()
# we need to extract the type name
value = "typedef struct " + value[2:]
value = value[:-1] + ":"
newdef.insert(0, value)
typedefs.append(newdef)
# only write the data sources once per file
defsrc = False
constsrc = False
# start by pretty-printing the string constants
# prepended with an underscore to avoid conflicts
# with the Python version of the name
if takeconst and len(strconsts) > 0:
if not defsrc:
definitions.write("cdef extern from \"" + src + "\":\n")
defsrc = True
if not constsrc:
constants.write("# " + src + "\n")
constsrc = True
definitions.write("\n # STRING CONSTANTS\n")
for const in strconsts:
defname = "_" + const
definitions.write(" cdef const char* " + defname)
for i in range (4 + strconstlen - len(const)):
definitions.write(" ")
definitions.write("\"" + const + "\"\n")
# now output it into the constants file
constants.write(const)
for i in range (4 + strconstlen - len(const)):
constants.write(" ")
constants.write("= " + defname + "\n")
# add some space
definitions.write("\n")
constants.write("\n")
if takeconst and len(errconsts) > 0:
if not defsrc:
definitions.write("cdef extern from \"" + src + "\":\n")
defsrc = True
if not constsrc:
constants.write("# " + src + "\n")
constsrc = True
definitions.write("\n # ERROR CONSTANTS\n")
for const in errconsts:
defname = "_" + const
definitions.write(" cdef int " + defname)
for i in range (4 + strconstlen - len(const)):
definitions.write(" ")
definitions.write("\"" + const + "\"\n")
# now output it into the constants file
constants.write(const)
for i in range (4 + strconstlen - len(const)):
constants.write(" ")
constants.write("= " + defname + "\n")
# add some space
definitions.write("\n")
constants.write("\n")
if takeconst and len(nconsts) > 0:
if not constsrc:
constants.write("# " + src + "\n")
constsrc = True
# pretty-print the numeric constants
for num in nconsts:
constants.write(num[0])
for i in range (4 + strconstlen - len(num[0])):
constants.write(" ")
constants.write("= " + num[1] + "\n")
# add some space
constants.write("\n")
# pretty-print any typedefs
if takedtypes and len(typedefs) > 0:
if not defsrc:
definitions.write("cdef extern from \"" + src + "\":\n")
defsrc = True
definitions.write("\n # TYPEDEFS\n")
for t in typedefs:
if len(t) > 1:
definitions.write("\n")
definitions.write(" c" + t[0] + "\n")
if len(t) > 1:
# find the 2nd opening paren
idx = t[0].find("(") + 1
idx = t[0].find("(", idx) + 2
for n in range(1, len(t)):
definitions.write(" ")
for m in range(idx):
definitions.write(" ")
definitions.write(t[n] + "\n")
# add some space
definitions.write("\n")
# pretty-print any APIs
if takeapis and len(apis) > 0:
if not defsrc:
definitions.write("cdef extern from \"" + src + "\":\n")
defsrc = True
definitions.write("\n # APIS\n")
for api in apis:
definitions.write(" " + api[0] + "\n")
if len(api) > 1:
# find the opening paren
idx = api[0].find("(") + 1
for n in range(1, len(api)):
definitions.write(" ")
for m in range(idx):
definitions.write(" ")
definitions.write(api[n] + "\n")
definitions.write("\n")
return
def main():
global takeconst, takeapis, takedtypes
signal.signal(signal.SIGINT, signal_handler)
parser = OptionParser("usage: %prog [options]")
debugGroup = OptionGroup(parser, "Debug Options")
debugGroup.add_option("--debug",
action="store_true", dest="debug", default=False,
help="Output lots of debug messages while processing")
debugGroup.add_option("--dryrun",
action="store_true", dest="dryrun", default=False,
help="Show commands, but do not execute them")
parser.add_option_group(debugGroup)
execGroup = OptionGroup(parser, "Execution Options")
execGroup.add_option("--src", dest="src",
help="The directory where the PMIx header files will be found")
execGroup.add_option("--constants",
action="store_true", dest="constants", default=False,
help="Translate constants")
execGroup.add_option("--apis",
action="store_true", dest="apis", default=False,
help="Translate APIs")
execGroup.add_option("--datatypes",
action="store_true", dest="datatypes", default=False,
help="Translate datatypes")
parser.add_option_group(execGroup)
(options, args) = parser.parse_args()
if not options.constants and not options.apis and not options.datatypes:
takeconst = True
takeapis = True
takedtypes = True
if options.constants:
takeconst = True
if options.apis:
takeapis = True
if options.datatypes:
takedtypes = True
if options.dryrun or options.debug:
debug = True
else:
debug = False
if options.src:
# see if the source directory exists
if not os.path.exists(options.src):
print("SOURCE directory",options.src,"does not exist")
sys.exit(1)
if options.dryrun:
constants = sys.stdout
definitions = sys.stdout
else:
# open the .pxd file for the definitions
# if the output file exists, remove it
if os.path.exists("pmix_constants.pxd"):
if debug:
print("Remove pmix_constants.pxd")
if not options.dryrun:
os.remove("pmix_constants.pxd")
elif debug:
print("File pmix_constants.pxd not found")
definitions = open("pmix_constants.pxd", "w+")
# add the necessary imports
definitions.write("from posix.types cimport *\n")
definitions.write("from posix.time cimport *\n")
definitions.write("from libc.stdint cimport *\n\n")
# open the .pxi file for the Python-level constants
if os.path.exists("pmix_constants.pxi"):
if debug:
print("Remove pmix_constants.pxi")
if not options.dryrun:
os.remove("pmix_constants.pxi")
elif debug:
print("File pmix_constants.pxi not found")
constants = open("pmix_constants.pxi", "w+")
# add the necessary import and provide a little space for neatness
constants.write("from pmix_constants cimport *\n\n")
# scan across the header files in the src directory
# looking for constants and typedefs
# add some space
harvest_constants(options, "pmix_common.h", constants, definitions)
definitions.write("\n\n")
constants.write("\n\n")
harvest_constants(options, "pmix.h", constants, definitions)
# add some space
definitions.write("\n\n")
constants.write("\n\n")
harvest_constants(options, "pmix_server.h", constants, definitions)
# add some space
definitions.write("\n\n")
constants.write("\n\n")
harvest_constants(options, "pmix_tool.h", constants, definitions)
# add some space
definitions.write("\n\n")
constants.write("\n\n")
harvest_constants(options, "pmix_sched.h", constants, definitions)
if __name__ == '__main__':
main()

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

47
opal/mca/pmix/pmix4x/openpmix/bindings/python/setup.py Исполняемый файл
Просмотреть файл

@ -0,0 +1,47 @@
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from sys import platform, maxsize, version_info
import os
from subprocess import check_output, CalledProcessError
def getVersion():
dir = os.path.dirname(__file__)
vers_path = os.path.join(dir, '../../include', 'pmix_version.h')
with open(vers_path) as verFile:
lines = verFile.readlines()
for l in lines:
if 'MAJOR' in l:
major = l.split()[2]
major = major[:-1]
elif 'MINOR' in l:
minor = l.split()[2]
minor = minor[:-1]
elif 'RELEASE' in l:
release = l.split()[2]
release = release[:-1]
vers = [major, minor, release]
version = ".".join(vers)
return version
setup(
name = 'pypmix',
version = getVersion(),
url = 'https://pmix.org',
license = '3-clause BSD',
author = 'Ralph H. Castain',
author_email = 'ralph.h.castain@intel.com',
description = 'Python bindings for PMIx',
classifiers = [
'Development Status :: 1 - Under Construction',
'Intended Audience :: Developers',
'Topic :: HPC :: Parallel Programming :: System Management',
'License :: 3-clause BSD',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6'],
keywords = 'PMI PMIx HPC MPI SHMEM',
platforms = 'any',
ext_modules = cythonize([Extension("pmix", ["pmix.pyx"], libraries=["pmix"])],
compiler_directives={'language_level': 3})
)

Просмотреть файл

@ -11,7 +11,7 @@ dnl University of Stuttgart. All rights reserved.
dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
dnl Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
dnl Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
dnl Copyright (c) 2015-2019 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl $COPYRIGHT$

Просмотреть файл

@ -664,7 +664,7 @@ AC_DEFUN([PMIX_SETUP_CORE],[
# -lrt might be needed for clock_gettime
PMIX_SEARCH_LIBS_CORE([clock_gettime], [rt])
AC_CHECK_FUNCS([asprintf snprintf vasprintf vsnprintf strsignal socketpair strncpy_s usleep statfs statvfs getpeereid getpeerucred strnlen posix_fallocate tcgetpgrp setpgid ptsname openpty setenv])
AC_CHECK_FUNCS([asprintf snprintf vasprintf vsnprintf strsignal socketpair strncpy_s usleep statfs statvfs getpeereid getpeerucred strnlen posix_fallocate tcgetpgrp setpgid ptsname openpty setenv fork execve waitpid])
# On some hosts, htonl is a define, so the AC_CHECK_FUNC will get
# confused. On others, it's in the standard library, but stubbed with
@ -729,6 +729,9 @@ AC_DEFUN([PMIX_SETUP_CORE],[
LDFLAGS="$LDFLAGS $THREAD_LDFLAGS"
LIBS="$LIBS $THREAD_LIBS"
PMIX_WRAPPER_FLAGS_ADD([CFLAGS], [$THREAD_CFLAGS])
PMIX_WRAPPER_FLAGS_ADD([LDFLAGS], [$THREAD_LDFLAGS])
#
# What is the local equivalent of "ln -s"
#
@ -851,6 +854,18 @@ AC_DEFUN([PMIX_SETUP_CORE],[
CPPFLAGS="-I$PMIX_top_srcdir -I$PMIX_top_srcdir/src -I$PMIX_top_srcdir/include $CPPFLAGS"
fi
############################################################################
# final wrapper compiler config
############################################################################
opal_show_subtitle "Wrapper compiler final setup"
# The PMIx wrapper script (i.e., not the C-compiled
# executables) need perl.
AC_PATH_PROG(PERL, perl, perl)
PMIX_SETUP_WRAPPER_FINAL
############################################################################
# pmixdatadir, pmixlibdir, and pmixinclude are essentially the same as
# pkg*dir, but will always be */pmix.
pmixdatadir='${datadir}/pmix'
@ -913,6 +928,9 @@ AC_DEFUN([PMIX_SETUP_CORE],[
pmix_config_prefix[src/tools/plookup/Makefile]
pmix_config_prefix[src/tools/pps/Makefile]
pmix_config_prefix[src/tools/pattrs/Makefile]
pmix_config_prefix[src/tools/wrapper/Makefile]
pmix_config_prefix[src/tools/wrapper/pmixcc-wrapper-data.txt]
pmix_config_prefix[src/tools/wrapper/pmix.pc]
)
# publish any embedded flags so external wrappers can use them

Просмотреть файл

@ -1,7 +1,7 @@
dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
dnl Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
dnl Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
dnl Copyright (c) 2019 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl

Просмотреть файл

@ -10,7 +10,7 @@ dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
dnl Copyright (c) 2014 Intel, Inc. All rights reserved.
dnl Copyright (c) 2016-2019 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl $COPYRIGHT$

Просмотреть файл

@ -16,7 +16,7 @@ dnl Copyright (c) 2012-2017 Los Alamos National Security, LLC. All rights
dnl reserved.
dnl Copyright (c) 2015-2019 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl Copyright (c) 2018 Intel, Inc. All rights reserved.
dnl Copyright (c) 2018-2019 Intel, Inc. All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
@ -135,6 +135,11 @@ AC_DEFUN([PMIX_SETUP_CC],[
PMIX_VAR_SCOPE_PUSH([pmix_prog_cc_c11_helper__Thread_local_available pmix_prog_cc_c11_helper_atomic_var_available pmix_prog_cc_c11_helper__Atomic_available pmix_prog_cc_c11_helper__static_assert_available pmix_prog_cc_c11_helper__Generic_available pmix_prog_cc__thread_available pmix_prog_cc_c11_helper_atomic_fetch_xor_explicit_available])
# AC_PROG_CC_C99 changes CC (instead of CFLAGS) so save CC (without c99
# flags) for use in our wrappers.
WRAPPER_CC="$CC"
AC_SUBST([WRAPPER_CC])
PMIX_PROG_CC_C11
if test $pmix_cv_c11_supported = no ; then

Просмотреть файл

@ -108,11 +108,14 @@ AC_DEFUN([_PMIX_HWLOC_EXTERNAL],[
[pmix_hwloc_support=0])
AS_IF([test "$pmix_hwloc_standard_header_location" != "yes"],
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_hwloc_CPPFLAGS)])
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_hwloc_CPPFLAGS)
PMIX_WRAPPER_FLAGS_ADD(CPPFLAGS, $pmix_hwloc_CPPFLAGS)])
AS_IF([test "$pmix_hwloc_standard_lib_location" != "yes"],
[PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_hwloc_LDFLAGS)])
[PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_hwloc_LDFLAGS)
PMIX_WRAPPER_FLAGS_ADD(LDFLAGS, $pmix_hwloc_LDFLAGS)])
PMIX_FLAGS_APPEND_UNIQ(LIBS, $pmix_hwloc_LIBS)
PMIX_WRAPPER_FLAGS_ADD(LIBS, $pmix_hwloc_LIBS)
fi
if test ! -z "$with_hwloc" && test "$with_hwloc" != "no" && test "$pmix_hwloc_support" != "1"; then

Просмотреть файл

@ -72,12 +72,15 @@ AC_DEFUN([PMIX_LIBEV_CONFIG],[
LIBS="$pmix_check_libev_save_LIBS"])
AS_IF([test $pmix_libev_support -eq 1],
[LIBS="$LIBS $pmix_libev_LIBS"
[PMIX_FLAGS_APPEND_UNIQ(LIBS, $pmix_libev_LIBS)
PMIX_WRAPPER_FLAGS_ADD(LIBS, $pmix_libev_LIBS)
AS_IF([test "$pmix_libev_standard_header_location" != "yes"],
[CPPFLAGS="$CPPFLAGS $pmix_libev_CPPFLAGS"])
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_libev_CPPFLAGS)
PMIX_WRAPPER_FLAGS_ADD(CPPFLAGS, $pmix_libev_CPPFLAGS)])
AS_IF([test "$pmix_libev_standard_lib_location" != "yes"],
[LDFLAGS="$LDFLAGS $pmix_libev_LDFLAGS"])])
[PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_libevent_LDFLAGS)
PMIX_WRAPPER_FLAGS_ADD(LDFLAGS, $pmix_libevent_LDFLAGS)])])
AC_MSG_CHECKING([will libev support be built])
if test $pmix_libev_support -eq 1; then

Просмотреть файл

@ -118,8 +118,11 @@ AC_DEFUN([_PMIX_LIBEVENT_EXTERNAL],[
AS_IF([test "$pmix_event_defaults" = "no"],
[PMIX_FLAGS_APPEND_UNIQ(CPPFLAGS, $pmix_libevent_CPPFLAGS)
PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_libevent_LDFLAGS)])
PMIX_WRAPPER_FLAGS_ADD(CPPFLAGS, $pmix_libevent_CPPFLAGS)
PMIX_FLAGS_APPEND_UNIQ(LDFLAGS, $pmix_libevent_LDFLAGS)
PMIX_WRAPPER_FLAGS_ADD(LDFLAGS, $pmix_libevent_LDFLAGS)])
PMIX_FLAGS_APPEND_UNIQ(LIBS, $pmix_libevent_LIBS)
PMIX_WRAPPER_FLAGS_ADD(LIBS, $pmix_libevent_LIBS)
if test $pmix_libevent_support -eq 1; then
# Ensure that this libevent has the symbol

Просмотреть файл

@ -0,0 +1,311 @@
dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
dnl Corporation. All rights reserved.
dnl Copyright (c) 2004-2005 The University of Tennessee and The University
dnl of Tennessee Research Foundation. All rights
dnl reserved.
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright (c) 2006-2010 Oracle and/or its affiliates. All rights reserved.
dnl Copyright (c) 2009-2016 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2015-2017 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl Copyright (c) 2016 IBM Corporation. All rights reserved.
dnl Copyright (c) 2017-2019 Intel, Inc. All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
# PMIX_WRAPPER_FLAGS_ADD(variable, new_argument)
# ----------------------------------------------
# Add new_argument to the list of arguments for variable in the
# wrapper compilers, if it's not already there. For example:
# PMIX_WRAPPER_FLAGS_ADD(CFLAGS, "-pthread")
# will add -pthread to the list of CFLAGS the wrappers use when invoked.
#
# This macro MAY NOT be invoked from configure macros for MCA components.
# See the comment in SETUP_WRAPPER_INIT (below) for more information.
AC_DEFUN([PMIX_WRAPPER_FLAGS_ADD], [
m4_ifdef([mca_component_configure_active],
[m4_fatal([PMIX_WRAPPER_FLAGS_ADD can not be called from a component configure])])
m4_if([$1], [CPPFLAGS], [PMIX_FLAGS_APPEND_UNIQ([wrapper_extra_cppflags], [$2])],
[$1], [CFLAGS], [PMIX_FLAGS_APPEND_UNIQ([wrapper_extra_cflags], [$2])],
[$1], [LDFLAGS], [PMIX_FLAGS_APPEND_UNIQ([wrapper_extra_ldflags], [$2])],
[$1], [LIBS], [PMIX_FLAGS_APPEND_UNIQ([wrapper_extra_libs], [$2])],
[m4_fatal([Unknown wrapper flag type $1])])
])
# PMIX_SETUP_WRAPPER_INIT()
# -------------------------
# Setup wrapper compiler configuration information. Should be called early to
# prevent lots of calculations and then an abort for a silly user typo. This
# macro works in pair with PMIX_SETUP_WRAPPER_FINAL, which should be called
# almost at the end of configure (after the last call to PMIX_WRAPPER_FLAGS_ADD
# and after the MCA system has been setup).
#
# The wrapper compiler arguments are a little fragile and should NOT
# be edited by configure directly. Instead, main configure should use
# PMIX_WRAPPER_FLAGS_ADD.
#
# When building statically, the MCA system will add
# <framework>_<component>_WRAPPER_EXTRA_{LDFLAGS, LIBS} if set and try
# to add <framework>_<component>_{LDFLAGS, LIBS} (if not an external
# configure) to the wrapper LDFLAGS and LIBS. Any arguments in
# <framework>_<component>_WRAPPER_EXTRA_CPPFLAGS are passed to the
# wrapper compilers IF AND ONLY IF the framework was a STOP_AT_FIRST
# framework, the component is a static component, and devel headers
# are installed. Note that MCA components are ONLY allowed to
# (indirectly) influence the wrapper CPPFLAGS, LDFLAGS, and LIBS.
# That is, a component may not influence CFLAGS, CXXFLAGS, or FCFLAGS.
#
# Notes:
# * Keep user flags separate as 1) they should have no influence
# over build and 2) they don't go through the uniqification we do
# with the other wrapper compiler options
# * While the user (the person who runs configure) is allowed to set
# <flag>_prefix, configure is not. There's no known use case for
# doing so, and we'd like to force the issue.
AC_DEFUN([PMIX_SETUP_WRAPPER_INIT],[
AC_ARG_WITH([wrapper-cflags],
[AC_HELP_STRING([--with-wrapper-cflags],
[Extra flags to add to CFLAGS when using mpicc])])
AS_IF([test "$with_wrapper_cflags" = "yes" || test "$with_wrapper_cflags" = "no"],
[AC_MSG_ERROR([--with-wrapper-cflags must have an argument.])])
AC_ARG_WITH([wrapper-cflags-prefix],
[AC_HELP_STRING([--with-wrapper-cflags-prefix],
[Extra flags (before user flags) to add to CFLAGS when using mpicc])])
AS_IF([test "$with_wrapper_cflags_prefix" = "yes" || test "$with_wrapper_cflags_prefix" = "no"],
[AC_MSG_ERROR([--with-wrapper-cflags-prefix must have an argument.])])
AC_ARG_WITH([wrapper-ldflags],
[AC_HELP_STRING([--with-wrapper-ldflags],
[Extra flags to add to LDFLAGS when using wrapper compilers])])
AS_IF([test "$with_wrapper_ldflags" = "yes" || test "$with_wrapper_ldflags" = "no"],
[AC_MSG_ERROR([--with-wrapper-ldflags must have an argument.])])
AC_ARG_WITH([wrapper-libs],
[AC_HELP_STRING([--with-wrapper-libs],
[Extra flags to add to LIBS when using wrapper compilers])])
AS_IF([test "$with_wrapper_libs" = "yes" || test "$with_wrapper_libs" = "no"],
[AC_MSG_ERROR([--with-wrapper-libs must have an argument.])])
AC_MSG_CHECKING([if want wrapper compiler rpath support])
AC_ARG_ENABLE([wrapper-rpath],
[AS_HELP_STRING([--enable-wrapper-rpath],
[enable rpath/runpath support in the wrapper compilers (default=yes)])])
AS_IF([test "$enable_wrapper_rpath" != "no"], [enable_wrapper_rpath=yes])
AC_MSG_RESULT([$enable_wrapper_rpath])
AC_MSG_CHECKING([if want wrapper compiler runpath support])
AC_ARG_ENABLE([wrapper-runpath],
[AS_HELP_STRING([--enable-wrapper-runpath],
[enable runpath in the wrapper compilers if linker supports it (default: enabled, unless wrapper-rpath is disabled).])])
AS_IF([test "$enable_wrapper_runpath" != "no"], [enable_wrapper_runpath=yes])
AC_MSG_RESULT([$enable_wrapper_runpath])
AS_IF([test "$enable_wrapper_rpath" = "no" && test "$enable_wrapper_runpath" = "yes"],
[AC_MSG_ERROR([--enable-wrapper-runpath cannot be selected with --disable-wrapper-rpath])])
])
# PMIX_LIBTOOL_CONFIG(libtool-variable, result-variable,
# libtool-tag, extra-code)
# Retrieve information from the generated libtool
AC_DEFUN([PMIX_LIBTOOL_CONFIG],[
PMIX_VAR_SCOPE_PUSH([rpath_script rpath_outfile])
# Output goes into globally-visible variable. Run this in a
# sub-process so that we don't pollute the current process
# environment.
rpath_script=conftest.$$.sh
rpath_outfile=conftest.$$.out
rm -f $rpath_script $rpath_outfile
cat > $rpath_script <<EOF
#!/bin/sh
# Slurp in the libtool config into my environment
# Apparently, "libtoool --config" calls "exit", so we can't source it
# (because if script A sources script B, and B calls "exit", then both
# B and A will exit). Instead, we have to send the output to a file
# and then source that.
$PMIX_TOP_BUILDDIR/libtool $3 --config > $rpath_outfile
chmod +x $rpath_outfile
. ./$rpath_outfile
rm -f $rpath_outfile
# Evaluate \$$1, and substitute in LIBDIR for \$libdir
$4
flags="\`eval echo \$$1\`"
echo \$flags
# Done
exit 0
EOF
chmod +x $rpath_script
$2=`./$rpath_script`
rm -f $rpath_script
PMIX_VAR_SCOPE_POP
])
# Check to see whether the linker supports DT_RPATH. We'll need to
# use config.rpath to find the flags that it needs, if it does (see
# comments in config.rpath for an explanation of where it came from).
AC_DEFUN([PMIX_SETUP_RPATH],[
PMIX_VAR_SCOPE_PUSH([rpath_libdir_save])
AC_MSG_CHECKING([if linker supports RPATH])
PMIX_LIBTOOL_CONFIG([hardcode_libdir_flag_spec],[rpath_args],[],[libdir=LIBDIR])
AS_IF([test -n "$rpath_args"],
[WRAPPER_RPATH_SUPPORT=rpath
PMIX_LIBTOOL_CONFIG([hardcode_libdir_flag_spec],[rpath_fc_args],[--tag=FC],[libdir=LIBDIR])
AC_MSG_RESULT([yes ($rpath_args + $rpath_fc_args)])],
[WRAPPER_RPATH_SUPPORT=unnecessary
AC_MSG_RESULT([yes (no extra flags needed)])])
PMIX_VAR_SCOPE_POP
# If we found RPATH support, check for RUNPATH support, too
AS_IF([test "$WRAPPER_RPATH_SUPPORT" = "rpath"],
[PMIX_SETUP_RUNPATH])
])
# Check to see if the linker supports the DT_RUNPATH flags via
# --enable-new-dtags (a GNU ld-specific option). These flags are more
# social than DT_RPATH -- they can be overridden by LD_LIBRARY_PATH
# (where a regular DT_RPATH cannot).
#
# If DT_RUNPATH is supported, then we'll use *both* the RPATH and
# RUNPATH flags in the LDFLAGS.
AC_DEFUN([PMIX_SETUP_RUNPATH],[
PMIX_VAR_SCOPE_PUSH([LDFLAGS_save wl_fc])
# Set the output in $runpath_args
runpath_args=
LDFLAGS_save=$LDFLAGS
LDFLAGS="$LDFLAGS -Wl,--enable-new-dtags"
AS_IF([test x"$enable_wrapper_runpath" = x"yes"],
[AC_LANG_PUSH([C])
AC_MSG_CHECKING([if linker supports RUNPATH])
AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 7;])],
[WRAPPER_RPATH_SUPPORT=runpath
runpath_args="-Wl,--enable-new-dtags"
AC_MSG_RESULT([yes (-Wl,--enable-new-dtags)])],
[AC_MSG_RESULT([no])])
AC_LANG_POP([C])])
LDFLAGS=$LDFLAGS_save
PMIX_VAR_SCOPE_POP
])
# Called to find all -L arguments in the LDFLAGS and add in RPATH args
# for each of them. Then also add in an RPATH for @{libdir} (which
# will be replaced by the wrapper compile to the installdir libdir at
# runtime), and the RUNPATH args, if we have them.
AC_DEFUN([RPATHIFY_LDFLAGS_INTERNAL],[
PMIX_VAR_SCOPE_PUSH([rpath_out rpath_dir rpath_tmp])
AS_IF([test "$enable_wrapper_rpath" = "yes" && test "$WRAPPER_RPATH_SUPPORT" != "disabled" && test "$WRAPPER_RPATH_SUPPORT" != "unnecessary"], [
rpath_out=""
for val in ${$1}; do
case $val in
-L*)
rpath_dir=`echo $val | cut -c3-`
rpath_tmp=`echo ${$2} | sed -e s@LIBDIR@$rpath_dir@`
rpath_out="$rpath_out $rpath_tmp"
;;
esac
done
# Now add in the RPATH args for @{libdir}, and the RUNPATH args
rpath_tmp=`echo ${$2} | sed -e s/LIBDIR/@{libdir}/`
$1="${$1} $rpath_out $rpath_tmp ${$3}"
])
PMIX_VAR_SCOPE_POP
])
AC_DEFUN([RPATHIFY_LDFLAGS],[RPATHIFY_LDFLAGS_INTERNAL([$1], [rpath_args], [runpath_args])])
AC_DEFUN([RPATHIFY_FC_LDFLAGS],[RPATHIFY_LDFLAGS_INTERNAL([$1], [rpath_fc_args], [runpath_fc_args])])
dnl
dnl Avoid some repetitive code below
dnl
AC_DEFUN([_PMIX_SETUP_WRAPPER_FINAL_PKGCONFIG],[
AC_MSG_CHECKING([for $1 pkg-config LDFLAGS])
$1_PKG_CONFIG_LDFLAGS=`echo "$$1_WRAPPER_EXTRA_LDFLAGS" | sed -e 's/@{libdir}/\${libdir}/g'`
AC_SUBST([$1_PKG_CONFIG_LDFLAGS])
AC_MSG_RESULT([$$1_PKG_CONFIG_LDFLAGS])
])
# PMIX_SETUP_WRAPPER_FINAL()
# ---------------------------
AC_DEFUN([PMIX_SETUP_WRAPPER_FINAL],[
# Setup RPATH support, if desired
WRAPPER_RPATH_SUPPORT=disabled
AS_IF([test "$enable_wrapper_rpath" = "yes"],
[PMIX_SETUP_RPATH])
AS_IF([test "$enable_wrapper_rpath" = "yes" && test "$WRAPPER_RPATH_SUPPORT" = "disabled"],
[AC_MSG_WARN([RPATH support requested but not available])
AC_MSG_ERROR([Cannot continue])])
# Note that we have to setup <package>_PKG_CONFIG_LDFLAGS for the
# pkg-config files to parallel the
# <package>_WRAPPER_EXTRA_LDFLAGS. This is because pkg-config
# will not understand the @{libdir} notation in
# *_WRAPPER_EXTRA_LDFLAGS; we have to translate it to ${libdir}.
# We now have all relevant flags. Substitute them in everywhere.
AC_MSG_CHECKING([for PMIX CPPFLAGS])
if test "$WANT_INSTALL_HEADERS" = "1" ; then
PMIX_WRAPPER_EXTRA_CPPFLAGS='-I${includedir}'
fi
PMIX_WRAPPER_EXTRA_CPPFLAGS="$PMIX_WRAPPER_EXTRA_CPPFLAGS $pmix_mca_wrapper_extra_cppflags $wrapper_extra_cppflags $with_wrapper_cppflags"
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_CPPFLAGS)
AC_SUBST([PMIX_WRAPPER_EXTRA_CPPFLAGS])
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_CPPFLAGS])
AC_MSG_CHECKING([for PMIX CFLAGS])
PMIX_WRAPPER_EXTRA_CFLAGS="$wrapper_extra_cflags $with_wrapper_cflags"
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_CFLAGS)
AC_SUBST([PMIX_WRAPPER_EXTRA_CFLAGS])
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_CFLAGS])
AC_MSG_CHECKING([for PMIX CFLAGS_PREFIX])
PMIX_WRAPPER_EXTRA_CFLAGS_PREFIX="$with_wrapper_cflags_prefix"
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_CFLAGS_PREFIX)
AC_SUBST([PMIX_WRAPPER_EXTRA_CFLAGS_PREFIX])
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_CFLAGS_PREFIX])
AC_MSG_CHECKING([for PMIX LDFLAGS])
PMIX_WRAPPER_EXTRA_LDFLAGS="$pmix_mca_wrapper_extra_ldflags $wrapper_extra_ldflags $with_wrapper_ldflags"
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_LDFLAGS)
RPATHIFY_LDFLAGS([PMIX_WRAPPER_EXTRA_LDFLAGS])
AC_SUBST([PMIX_WRAPPER_EXTRA_LDFLAGS])
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_LDFLAGS])
# Convert @{libdir} to ${libdir} for pkg-config
_PMIX_SETUP_WRAPPER_FINAL_PKGCONFIG([PMIX])
# wrapper_extra_libs doesn't really get populated until after the mca system runs
# since most of the libs come from libtool. So this is the first time we can
# uniq them. ROMIO in particular adds lots of things already in wrapper_extra_libs,
# and this cleans the duplication up a bunch. Always add everything the user
# asked for, as they know better than us.
AC_MSG_CHECKING([for PMIX LIBS])
PMIX_WRAPPER_EXTRA_LIBS="$pmix_mca_wrapper_extra_libs"
PMIX_FLAGS_APPEND_UNIQ([PMIX_WRAPPER_EXTRA_LIBS], [$wrapper_extra_libs])
PMIX_WRAPPER_EXTRA_LIBS="$PMIX_WRAPPER_EXTRA_LIBS $with_wrapper_libs"
PMIX_FLAGS_UNIQ(PMIX_WRAPPER_EXTRA_LIBS)
AC_SUBST([PMIX_WRAPPER_EXTRA_LIBS])
AC_MSG_RESULT([$PMIX_WRAPPER_EXTRA_LIBS])
])

Просмотреть файл

@ -176,6 +176,7 @@ AS_IF([test ! -z "$enable_static" && test "$enable_static" = "yes"],
AM_ENABLE_SHARED
AM_DISABLE_STATIC
PMIX_SETUP_WRAPPER_INIT
# This did not exist pre AM 1.11.x (where x is somewhere >0 and <3),
# but it is necessary in AM 1.12.x.

Просмотреть файл

@ -14,7 +14,7 @@
# Copyright (c) 2010-2011 Oak Ridge National Labs. All rights reserved.
# Copyright (c) 2013-2016 Los Alamos National Security, Inc. All rights
# reserved.
# Copyright (c) 2013-2016 Intel, Inc. All rights reserved.
# Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -30,7 +30,8 @@ EXTRA_DIST = \
pmix-release.sh \
pmix.spec \
update-my-copyright.pl \
whitespace-purge.sh
whitespace-purge.sh \
make_manpage.pl
include perf_tools/Makefile.include

56
opal/mca/pmix/pmix4x/openpmix/contrib/make_manpage.pl Исполняемый файл
Просмотреть файл

@ -0,0 +1,56 @@
#!/usr/bin/env perl
#
# Copyright (c) 2015 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2016-2019 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Subroutine to generate a bunch of Fortran declarations and symbols
#
use strict;
use Getopt::Long;
my $package_name;
my $package_version;
my $pmix_date;
my $input;
my $output;
my $help_arg = 0;
&Getopt::Long::Configure("bundling");
my $ok = Getopt::Long::GetOptions("package-name=s" => \$package_name,
"package-version=s" => \$package_version,
"pmix-date=s" => \$pmix_date,
"input=s" => \$input,
"output=s" => \$output);
if ($help_arg || !$ok ||
!defined($input) ||
!defined($output) ||
!defined($package_name) ||
!defined($package_version) ||
!defined($pmix_date)) {
print "Usage: $0 --package-name=<package name> --package-version=<package version> --pmix-date=<pmix date> --input=<input file> --output=<output file>\n";
exit(1 - $ok);
}
open(FILE, $input) ||
die "Can't open $input";
my $file;
$file .= $_
while(<FILE>);
close(FILE);
$file =~ s/#PACKAGE_NAME#/$package_name/g;
$file =~ s/#PACKAGE_VERSION#/$package_version/g;
$file =~ s/#PMIX_DATE#/$pmix_date/g;
open(FILE, ">$output") ||
die "Can't open $output";
print FILE $file;
close(FILE);
exit(0);

Просмотреть файл

@ -12,7 +12,7 @@
# Copyright (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2013 Mellanox Technologies, Inc.
# All rights reserved.
# Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
# Copyright (c) 2015-2018 Intel, Inc. All rights reserved.
# Copyright (c) 2015 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# $COPYRIGHT$
@ -192,7 +192,7 @@
Summary: An extended/exascale implementation of PMI
Name: %{?_name:%{_name}}%{!?_name:pmix}
Version: 4.0.0
Version: 4.0.0a1
Release: 1%{?dist}
License: BSD
Group: Development/Libraries

Просмотреть файл

@ -0,0 +1,215 @@
/*
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2011 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) 2006-2013 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Mellanox Technologies, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*
*/
#include <src/include/pmix_config.h>
#include <pmix.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
static uint32_t nprocs;
static pmix_proc_t myproc;
int main(int argc, char **argv)
{
int rc;
pmix_value_t value;
pmix_value_t *val = &value;
char *tmp;
pmix_proc_t proc;
uint32_t n, k, nlocal;
bool local, all_local;
char **peers;
pmix_rank_t *locals;
uint8_t j;
/* init us */
if (PMIX_SUCCESS != (rc = PMIx_Init(&myproc, NULL, 0))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Init failed: %d\n", myproc.nspace, myproc.rank, rc);
exit(0);
}
fprintf(stderr, "Client ns %s rank %d: Running\n", myproc.nspace, myproc.rank);
/* get our job size */
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
proc.rank = PMIX_RANK_WILDCARD;
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_JOB_SIZE, NULL, 0, &val))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Get job size failed: %s\n",
myproc.nspace, myproc.rank, PMIx_Error_string(rc));
goto done;
}
nprocs = val->data.uint32;
PMIX_VALUE_RELEASE(val);
fprintf(stderr, "Client %s:%d job size %d\n", myproc.nspace, myproc.rank, nprocs);
/* put a few values */
(void)asprintf(&tmp, "%s-%d-internal", myproc.nspace, myproc.rank);
value.type = PMIX_UINT32;
value.data.uint32 = 1234;
if (PMIX_SUCCESS != (rc = PMIx_Store_internal(&myproc, tmp, &value))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Store_internal failed: %d\n", myproc.nspace, myproc.rank, rc);
goto done;
}
(void)asprintf(&tmp, "%s-%d-local", myproc.nspace, myproc.rank);
value.type = PMIX_UINT64;
value.data.uint64 = 1234;
if (PMIX_SUCCESS != (rc = PMIx_Put(PMIX_LOCAL, tmp, &value))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Put internal failed: %d\n", myproc.nspace, myproc.rank, rc);
goto done;
}
(void)asprintf(&tmp, "%s-%d-remote", myproc.nspace, myproc.rank);
value.type = PMIX_STRING;
value.data.string = "1234";
if (PMIX_SUCCESS != (rc = PMIx_Put(PMIX_GLOBAL, tmp, &value))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Put internal failed: %d\n", myproc.nspace, myproc.rank, rc);
goto done;
}
value.type = PMIX_BYTE_OBJECT;
value.data.bo.bytes = (char*)malloc(128);
for (j=0; j < 128; j++) {
value.data.bo.bytes[j] = j;
}
value.data.bo.size = 128;
if (PMIX_SUCCESS != (rc = PMIx_Put(PMIX_GLOBAL, "ghex", &value))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Put ghex failed: %d\n", myproc.nspace, myproc.rank, rc);
PMIX_VALUE_DESTRUCT(&value);
goto done;
}
PMIX_VALUE_DESTRUCT(&value);
/* commit the data to the server */
if (PMIX_SUCCESS != (rc = PMIx_Commit())) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Commit failed: %d\n", myproc.nspace, myproc.rank, rc);
goto done;
}
/* get a list of our local peers */
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_LOCAL_PEERS, NULL, 0, &val))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Get local peers failed: %s\n",
myproc.nspace, myproc.rank, PMIx_Error_string(rc));
goto done;
}
/* split the returned string to get the rank of each local peer */
peers = pmix_argv_split(val->data.string, ',');
PMIX_VALUE_RELEASE(val);
nlocal = pmix_argv_count(peers);
if (nprocs == nlocal) {
all_local = true;
} else {
all_local = false;
locals = (pmix_rank_t*)malloc(pmix_argv_count(peers) * sizeof(pmix_rank_t));
for (n=0; NULL != peers[n]; n++) {
locals[n] = strtoul(peers[n], NULL, 10);
}
}
pmix_argv_free(peers);
/* get the committed data - ask for someone who doesn't exist as well */
for (n=0; n < nprocs; n++) {
if (all_local) {
local = true;
} else {
local = false;
/* see if this proc is local to us */
for (k=0; k < nlocal; k++) {
if (proc.rank == locals[k]) {
local = true;
break;
}
}
}
if (local) {
(void)asprintf(&tmp, "%s-%d-local", myproc.nspace, n);
proc.rank = n;
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, tmp, NULL, 0, &val))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Get %s failed: %d\n", myproc.nspace, n, tmp, rc);
goto done;
}
if (PMIX_UINT64 != val->type) {
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong type: %d\n", myproc.nspace, myproc.rank, tmp, val->type);
goto done;
}
if (1234 != val->data.uint64) {
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong value: %d\n", myproc.nspace, myproc.rank, tmp, (int)val->data.uint64);
goto done;
}
fprintf(stderr, "%s:%d Local value for %s:%d successfully retrieved\n", myproc.nspace, myproc.rank, proc.nspace, proc.rank);
} else {
(void)asprintf(&tmp, "%s-%d-remote", myproc.nspace, n);
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, tmp, NULL, 0, &val))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Get %s failed: %d\n", myproc.nspace, n, tmp, rc);
goto done;
}
if (PMIX_STRING != val->type) {
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong type: %d\n", myproc.nspace, myproc.rank, tmp, val->type);
goto done;
}
if (0 != strcmp(val->data.string, "1234")) {
fprintf(stderr, "%s:%d: PMIx_Get Key %s returned wrong value: %s\n", myproc.nspace, myproc.rank, tmp, val->data.string);
goto done;
}
fprintf(stderr, "%s:%d Remote value for %s:%d successfully retrieved\n", myproc.nspace, myproc.rank, proc.nspace, proc.rank);
}
/* if this isn't us, then get the ghex key */
if (n != myproc.rank) {
if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, "ghex", NULL, 0, &val))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Get ghex failed: %d\n", myproc.nspace, n, rc);
goto done;
}
if (PMIX_BYTE_OBJECT != val->type) {
fprintf(stderr, "%s:%d: PMIx_Get ghex returned wrong type: %d\n", myproc.nspace, myproc.rank, val->type);
goto done;
}
if (128 != val->data.bo.size) {
fprintf(stderr, "%s:%d: PMIx_Get ghex returned wrong size: %d\n", myproc.nspace, myproc.rank, (int)val->data.bo.size);
goto done;
}
fprintf(stderr, "%s:%d Ghex for %s:%d successfully retrieved\n", myproc.nspace, myproc.rank, proc.nspace, proc.rank);
}
}
/* call fence so everyone waits before leaving */
proc.rank = PMIX_RANK_WILDCARD;
if (PMIX_SUCCESS != (rc = PMIx_Fence(&proc, 1, NULL, 0))) {
fprintf(stderr, "Client ns %s rank %d: PMIx_Fence failed: %d\n", myproc.nspace, myproc.rank, rc);
goto done;
}
done:
/* finalize us */
fprintf(stderr, "Client ns %s rank %d: Finalizing\n", myproc.nspace, myproc.rank);
if (PMIX_SUCCESS != (rc = PMIx_Finalize(NULL, 0))) {
fprintf(stderr, "Client ns %s rank %d:PMIx_Finalize failed: %d\n", myproc.nspace, myproc.rank, rc);
} else {
fprintf(stderr, "Client ns %s rank %d:PMIx_Finalize successfully completed\n", myproc.nspace, myproc.rank);
}
fflush(stderr);
return(0);
}

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше