1
1
Will be replaced by PRRTE. Ensure that OMPI and OPAL layers build
without reference to ORTE. Setup opal/pmix framework to be static.
Remove support for all PMI-1 and PMI-2 libraries. Add support for
"external" pmix component as well as internal v4 one.

remove orte: misc fixes

 - UCX fixes
 - VPATH issue
 - oshmem fixes
 - remove useless definition
 - Add PRRTE submodule
 - Get autogen.pl to traverse PRRTE submodule
 - Remove stale orcm reference
 - Configure embedded PRRTE
 - Correctly pass the prefix to PRRTE
 - Correctly set the OMPI_WANT_PRRTE am_conditional
 - Move prrte configuration to the end of OMPI's configure.ac
 - Make mpirun a symlink to prun, when available
 - Fix makedist with --no-orte/--no-prrte option
 - Add a `--no-prrte` option which is the same as the legacy
   `--no-orte` option.
 - Remove embedded PMIx tarball. Replace it with new submodule
   pointing to OpenPMIx master repo's master branch
 - Some cleanup in PRRTE integration and add config summary entry
 - Correctly set the hostname
 - Fix locality
 - Fix singleton operations
 - Fix support for "tune" and "am" options

Signed-off-by: Ralph Castain <rhc@pmix.org>
Signed-off-by: Gilles Gouaillardet <gilles@rist.or.jp>
Signed-off-by: Joshua Hursey <jhursey@us.ibm.com>
Этот коммит содержится в:
Gilles Gouaillardet 2019-12-12 11:52:28 +09:00 коммит произвёл Ralph Castain
родитель dc0d6a5e1b
Коммит 174e967dbc
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B63B630167D26BB5
1759 изменённых файлов: 2898 добавлений и 368132 удалений

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

@ -1,3 +1,11 @@
[submodule "hwloc-20x"]
path = opal/mca/hwloc/hwloc2/hwloc
url = https://github.com/open-mpi/hwloc.git
[submodule "prrte"]
path = prrte
url = https://github.com/openpmix/prrte
branch = master
[submodule "openpmix"]
path = opal/mca/pmix/pmix4x/openpmix
url = https://github.com/openpmix/openpmix.git
branch = master

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

@ -11,9 +11,10 @@
# All rights reserved.
# Copyright (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2012-2015 Los Alamos National Security, Inc. All rights reserved.
# Copyright (c) 2014 Intel, Inc. All rights reserved.
# Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
# Copyright (c) 2017-2018 Amazon.com, Inc. or its affiliates.
# All Rights reserved.
# Copyright (c) 2020 IBM Corporation. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -22,7 +23,14 @@
#
SUBDIRS = config contrib $(MCA_PROJECT_SUBDIRS) test
if OMPI_WANT_PRRTE
SUBDIRS += prrte
endif
DIST_SUBDIRS = config contrib $(MCA_PROJECT_DIST_SUBDIRS) test
if OMPI_WANT_PRRTE
DIST_SUBDIRS += prrte
endif
EXTRA_DIST = README INSTALL VERSION Doxyfile LICENSE autogen.pl README.JAVA.txt AUTHORS
include examples/Makefile.include

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

@ -90,7 +90,6 @@ libmpi_mpifh_so_version=0:0:0
libmpi_usempi_tkr_so_version=0:0:0
libmpi_usempi_ignore_tkr_so_version=0:0:0
libmpi_usempif08_so_version=0:0:0
libopen_rte_so_version=0:0:0
libopen_pal_so_version=0:0:0
libmpi_java_so_version=0:0:0
liboshmem_so_version=0:0:0
@ -105,9 +104,6 @@ libompitrace_so_version=0:0:0
libmca_ompi_common_ompio_so_version=0:0:0
libmca_ompi_common_monitoring_so_version=0:0:0
# ORTE layer
libmca_orte_common_alps_so_version=0:0:0
# OPAL layer
libmca_opal_common_cuda_so_version=0:0:0
libmca_opal_common_ofi_so_version=0:0:0

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

@ -7,7 +7,7 @@
# Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
# Copyright (c) 2015-2019 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2015 IBM Corporation. All rights reserved.
# Copyright (c) 2015-2020 IBM Corporation. All rights reserved.
#
# $COPYRIGHT$
#
@ -47,6 +47,7 @@ my @subdirs;
# Command line parameters
my $no_ompi_arg = 0;
my $no_orte_arg = 0;
my $no_prrte_arg = 0;
my $no_oshmem_arg = 0;
my $quiet_arg = 0;
my $debug_arg = 0;
@ -1121,6 +1122,7 @@ sub in_tarball {
my $ok = Getopt::Long::GetOptions("no-ompi" => \$no_ompi_arg,
"no-orte" => \$no_orte_arg,
"no-prrte" => \$no_prrte_arg,
"no-oshmem" => \$no_oshmem_arg,
"quiet|q" => \$quiet_arg,
"debug|d" => \$debug_arg,
@ -1136,7 +1138,8 @@ if (!$ok || $help_arg) {
if (!$ok);
print "Options:
--no-ompi | -no-ompi Do not build the Open MPI layer
--no-orte | -no-orte Do not build the ORTE layer
--no-orte | -no-orte Do not build Open MPI's runtime support (alias for --no-prrte)
--no-prrte | -no-prrte Do not build Open MPI's runtime support
--no-oshmem | -no-oshmem Do not build the OSHMEM layer
--quiet | -q Do not display normal verbose output
--debug | -d Output lots of debug information
@ -1164,31 +1167,22 @@ if (! -e "ompi") {
$no_ompi_arg = 1;
debug "No ompi subdirectory found - will not build MPI layer\n";
}
if (! -e "orte") {
$no_orte_arg = 1;
debug "No orte subdirectory found - will not build ORTE\n";
if (! -e "prrte") {
$no_prrte_arg = 1;
debug "No prrte subdirectory found - will not build PRRTE\n";
}
if (! -e "oshmem") {
$no_oshmem_arg = 1;
debug "No oshmem subdirectory found - will not build OSHMEM\n";
}
# alias --no-orte to --no-prrte
if ($no_orte_arg == 1) {
$no_prrte_arg = 1;
}
if (-e "orcm") {
# bozo check - ORCM requires ORTE
if ($no_orte_arg == 1) {
print "Cannot build ORCM without ORTE\n";
my_exit(1);
}
$project_name_long = "Open Resilient Cluster Manager";
$project_name_short = "open-rcm";
} elsif ($no_ompi_arg == 1) {
if ($no_orte_arg == 0) {
$project_name_long = "Open MPI Run Time Environment";
$project_name_short = "open-rte";
} else {
$project_name_long = "Open Portability Access Layer";
$project_name_short = "open-pal";
}
if ($no_ompi_arg == 1) {
$project_name_long = "Open Portability Access Layer";
$project_name_short = "open-pal";
}
#---------------------------------------------------------------------------
@ -1393,19 +1387,18 @@ if (! (-f "VERSION" && -f "configure.ac" && -f $topdir_file)) {
# Top-level projects to examine
my $projects;
push(@{$projects}, { name => "opal", dir => "opal", need_base => 1 });
push(@{$projects}, { name => "orte", dir => "orte", need_base => 1 })
if (!$no_orte_arg);
push(@{$projects}, { name => "ompi", dir => "ompi", need_base => 1 })
if (!$no_ompi_arg);
push(@{$projects}, { name => "oshmem", dir => "oshmem", need_base => 1 })
if (!$no_ompi_arg && !$no_oshmem_arg);
push(@{$projects}, { name => "orcm", dir => "orcm", need_base => 1 })
if (-e "orcm");
$m4 .= "dnl Separate m4 define for each project\n";
foreach my $p (@$projects) {
$m4 .= "m4_define([project_$p->{name}], [1])\n";
}
if (!$no_prrte_arg) {
$m4 .= "m4_define([project_prrte], [1])\n";
}
$m4 .= "\ndnl Project names
m4_define([project_name_long], [$project_name_long])
@ -1433,6 +1426,10 @@ if (!$no_ompi_arg) {
++$step;
verbose "\n$step. Processing autogen.subdirs directories\n";
if (!$no_prrte_arg) {
process_autogen_subdirs(".");
}
if ($#subdirs >= 0) {
foreach my $d (@subdirs) {
process_subdir($d);

1
autogen.subdirs Обычный файл
Просмотреть файл

@ -0,0 +1 @@
prrte

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

@ -57,5 +57,6 @@ AC_DEFUN([OMPI_CONFIG_FILES],[
ompi/tools/wrappers/ompi-fort.pc
ompi/tools/wrappers/mpijavac.pl
ompi/tools/mpisync/Makefile
ompi/tools/mpirun/Makefile
])
])

103
config/ompi_setup_prrte.m4 Обычный файл
Просмотреть файл

@ -0,0 +1,103 @@
# -*- shell-script -*-
#
# Copyright (c) 2004-2009 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-2007 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-2009 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2006-2008 Sun Microsystems, Inc. All rights reserved.
# Copyright (c) 2006-2007 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
# Copyright (c) 2019-2020 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
AC_DEFUN([OMPI_SETUP_PRRTE],[
OPAL_VAR_SCOPE_PUSH([opal_prrte_save_CPPFLAGS opal_prrte_save_CFLAGS opal_prrte_save_LDFLAGS opal_prrte_save_LIBS opal_prrte_args opal_prrte_save_enable_dlopen opal_prrte_save_enable_mca_dso opal_prrte_save_enable_mca_static])
opal_prrte_save_CFLAGS=$CFLAGS
opal_prrte_save_CPPFLAGS=$CPPFLAGS
opal_prrte_save_LDFLAGS=$LDFLAGS
opal_prrte_save_LIBS=$LIBS
opal_prrte_save_enable_dlopen=enable_dlopen
opal_prrte_save_enable_mca_dso=enable_mca_dso
opal_prrte_save_enable_mca_static=enable_mca_static
AC_ARG_ENABLE([internal-rte],
[AC_HELP_STRING([--enable-internal-rte],
[Enable internal runtime support and provide mpiexec/mpirun (default: enabled)])])
AC_MSG_CHECKING([if RTE support is enabled])
if test "$enable_internal_rte" != "no"; then
AC_MSG_RESULT([yes])
if test -z $with_libevent || test "$with_libevent" = "internal" || test "$with_libevent" = "yes"; then
opal_prrte_libevent_arg="--with-libevent-header=$OMPI_TOP_SRCDIR/opal/mca/event/event.h"
elif test "$with_libevent" = "external"; then
opal_prrte_libevent_arg=""
else
opal_prrte_libevent_arg="--with-libevent=$with_libevent"
fi
if test -z $with_hwloc || test "$with_hwloc" = "internal" || test "$with_hwloc" = "yes"; then
opal_prrte_hwloc_arg="--with-hwloc-header=$OMPI_TOP_SRCDIR/opal/mca/hwloc/hwloc-internal.h"
elif test "$with_hwloc" = "external"; then
opal_prrte_hwloc_arg=""
else
opal_prrte_hwloc_arg="--with-hwloc=$with_hwloc"
fi
if test -z $with_pmix || test "$with_pmix" = "internal" || test "$with_pmix" = "yes"; then
opal_prrte_pmix_arg="--with-pmix-header=$OMPI_TOP_SRCDIR/opal/mca/pmix/pmix-internal.h"
elif test "$with_pmix" = "external"; then
opal_prrte_pmix_arg=""
else
opal_prrte_pmix_arg="--with-pmix=$with_pmix"
fi
opal_prrte_args="--prefix=$prefix --disable-dlopen $opal_prrte_libevent_arg $opal_prrte_hwloc_arg $opal_prrte_pmix_arg"
AS_IF([test "$enable_debug" = "yes"],
[opal_prrte_args="--enable-debug $opal_prrte_args"
CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS -g"],
[opal_prrte_args="--disable-debug $opal_prrte_args"
CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS"])
AS_IF([test "$with_devel_headers" = "yes"],
[opal_prrte_args="--with-devel-headers $opal_prrte_args"])
# add the extra libs
opal_prrte_args="$opal_prrte_args --with-prrte-extra-lib=$OMPI_TOP_BUILDDIR/opal/libopen-pal.la --with-prrte-extra-ltlib=$OMPI_TOP_BUILDDIR/opal/libopen-pal.la"
AC_MSG_CHECKING([final prrte configure args])
AC_MSG_RESULT([$opal_prrte_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([prrte],
[$opal_prrte_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'],
[opal_prrte_happy=1], [opal_prrte_happy=0])
OPAL_SUMMARY_ADD([[Miscellaneous]],[[PRRTE]],[prrte],[yes])
else
OPAL_SUMMARY_ADD([[Miscellaneous]],[[PRRTE]],[prrte],[no (disabled)])
AC_MSG_RESULT([no (disabled)])
fi
CFLAGS=$opal_prrte_save_CFLAGS
CPPFLAGS=$opal_prrte_save_CPPFLAGS
LDFLAGS=$opal_prrte_save_LDFLAGS
LIBS=$opal_prrte_save_LIBS
enable_dlopen=$opal_prrte_save_enable_dlopen
enable_mca_dso=$opal_prrte_save_enable_mca_dso
enable_mca_static=$opal_prrte_save_enable_mca_static
OPAL_VAR_SCOPE_POP
])

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

@ -24,219 +24,6 @@
# $HEADER$
#
# define an internal function for checking the existence
# and validity of a PMI library
#
# OPAL_CHECK_PMI_LIB(installdir, libdir, pmi, function, [action-if-slurm], [action-if-valid], [action-if-not-valid])
# --------------------------------------------------------
AC_DEFUN([OPAL_CHECK_PMI_LIB],
[
# save flags
opal_check_$3_save_CPPFLAGS=$CPPFLAGS
opal_check_$3_save_LDFLAGS=$LDFLAGS
opal_check_$3_save_LIBS=$LIBS
opal_check_$3_hdr_happy=
opal_check_$3_mycppflags=
# check for the header
AS_IF([test -n "$1"],
[AC_MSG_CHECKING([for $3.h in $1])
AS_IF([test -f $1/$3.h && test -r $1/$3.h],
[AC_MSG_RESULT([found])
opal_check_$3_mycppflags="-I$1"],
[AC_MSG_RESULT([not found])
AC_MSG_CHECKING([for $3.h in $1/include])
AS_IF([test -f $1/include/$3.h && test -r $1/include/$3.h],
[AC_MSG_RESULT([found])
opal_check_$3_mycppflags="-I$1/include"],
[AC_MSG_RESULT([not found])
AC_MSG_CHECKING([for $3.h in $1/include/slurm])
AS_IF([test -f $1/include/slurm/$3.h && test -r $1/include/slurm/$3.h],
[AC_MSG_RESULT([found])
opal_check_$3_mycppflags="-I$1/include/slurm"
$5],
[AC_MSG_RESULT([not found])
opal_check_$3_hdr_happy=no])])])],
[AC_MSG_CHECKING([for $3.h in /usr/include])
AS_IF([test -f /usr/include/$3.h && test -r /usr/include/$3.h],
[AC_MSG_RESULT([found])],
[AC_MSG_RESULT([not found])
AC_MSG_CHECKING([for $3.h in /usr/include/slurm])
AS_IF([test -f /usr/include/slurm/$3.h && test -r /usr/include/slurm/$3.h],
[AC_MSG_RESULT([found])
opal_check_$3_mycppflags="-I/usr/include/slurm"
$5],
[AC_MSG_RESULT([not found])
opal_check_$3_hdr_happy=no])])])
AS_IF([test "$opal_check_$3_hdr_happy" != "no"],
[CPPFLAGS="$CPPFLAGS $opal_check_$3_mycppflags"
AC_CHECK_HEADER([$3.h],
[opal_check_$3_hdr_happy=yes
$3_CPPFLAGS="$opal_check_$3_mycppflags"],
[opal_check_$3_hdr_happy=no])])
# check for library and function
opal_check_$3_lib_happy=
LIBS="$LIBS -l$3"
# check for the library in the given location in case
# an exact path was given
AS_IF([test -z "$1" && test -z "$2"],
[AC_CHECK_LIB([$3], [$4],
[opal_check_$3_lib_happy=yes],
[opal_check_$3_lib_happy=no])],
[AS_IF([test -n "$2"],
[AC_MSG_CHECKING([for lib$3 in $2])
files=`ls $2/lib$3.* 2> /dev/null | wc -l`
AS_IF([test "$files" -gt "0"],
[AC_MSG_RESULT([found])
LDFLAGS="$LDFLAGS -L$2"
AC_CHECK_LIB([$3], [$4],
[opal_check_$3_lib_happy=yes
$3_LDFLAGS=-L$2
$3_rpath=$2],
[opal_check_$3_lib_happy=no])],
[opal_check_$3_lib_happy=no
AC_MSG_RESULT([not found])])],
[AC_MSG_CHECKING([for lib$3 in $1/lib])
files=`ls $1/lib/lib$3.* 2> /dev/null | wc -l`
AS_IF([test "$files" -gt "0"],
[AC_MSG_RESULT([found])
LDFLAGS="$LDFLAGS -L$1/lib"
AC_CHECK_LIB([$3], [$4],
[opal_check_$3_lib_happy=yes
$3_LDFLAGS=-L$1/lib
$3_rpath=$1/lib],
[opal_check_$3_lib_happy=no])],
[# check for presence of lib64 directory - if found, see if the
# desired library is present and matches our build requirements
AC_MSG_CHECKING([for lib$3 in $1/lib64])
files=`ls $1/lib64/lib$3.* 2> /dev/null | wc -l`
AS_IF([test "$files" -gt "0"],
[AC_MSG_RESULT([found])
LDFLAGS="$LDFLAGS -L$1/lib64"
AC_CHECK_LIB([$3], [$4],
[opal_check_$3_lib_happy=yes
$3_LDFLAGS=-L$1/lib64
$3_rpath=$1/lib64],
[opal_check_$3_lib_happy=no])],
[opal_check_$3_lib_happy=no
AC_MSG_RESULT([not found])])])])])
# restore flags
CPPFLAGS=$opal_check_$3_save_CPPFLAGS
LDFLAGS=$opal_check_$3_save_LDFLAGS
LIBS=$opal_check_$3_save_LIBS
AS_IF([test "$opal_check_$3_hdr_happy" = "yes" && test "$opal_check_$3_lib_happy" = "yes"],
[$6], [$7])
])
# OPAL_CHECK_PMI()
# --------------------------------------------------------
AC_DEFUN([OPAL_CHECK_PMI],[
OPAL_VAR_SCOPE_PUSH([check_pmi_install_dir check_pmi_lib_dir default_pmi_libloc slurm_pmi_found])
AC_ARG_WITH([pmi],
[AC_HELP_STRING([--with-pmi(=DIR)],
[Build PMI support, optionally adding DIR to the search path (default: no)])],
[], with_pmi=no)
AC_ARG_WITH([pmi-libdir],
[AC_HELP_STRING([--with-pmi-libdir=DIR],
[Look for libpmi or libpmi2 in the given directory DIR, DIR/lib or DIR/lib64])])
check_pmi_install_dir=
check_pmi_lib_dir=
default_pmi_libloc=
slurm_pmi_found=
opal_enable_pmix=no
AC_MSG_CHECKING([if user requested PMI support])
AS_IF([test "$with_pmi" = "no"],
[AC_MSG_RESULT([no])
$3],
[AC_MSG_RESULT([yes])
# cannot use OPAL_CHECK_PACKAGE as its backend header
# support appends "include" to the path, which won't
# work with slurm :-(
AS_IF([test -n "$with_pmi" && test "$with_pmi" != "yes"],
[check_pmi_install_dir=$with_pmi])
AS_IF([test -n "$with_pmi_libdir"],
[check_pmi_lib_dir=$with_pmi_libdir])
# check for pmi-1 lib */
slurm_pmi_found=no
OPAL_CHECK_PMI_LIB([$check_pmi_install_dir],
[$check_pmi_lib_dir],
[pmi], [PMI_Init],
[slurm_pmi_found=yes],
[opal_enable_pmi1=yes
opal_pmi1_LIBS="-lpmi"
AC_SUBST(opal_pmi1_LIBS)],
[opal_enable_pmi1=no])
AS_IF([test "$opal_enable_pmi1" = "yes"],
[AS_IF([test "$slurm_pmi_found" = "yes"],
[opal_pmi1_CPPFLAGS="$pmi_CPPFLAGS"
AC_SUBST(opal_pmi1_CPPFLAGS)])
AS_IF([test "$slurm_pmi_found" = "yes"],
[opal_pmi1_LDFLAGS="$pmi_LDFLAGS"
AC_SUBST(opal_pmi1_LDFLAGS)
opal_pmi1_rpath="$pmi_rpath"
AC_SUBST(opal_pmi1_rpath)])])
# check for pmi2 lib */
slurm_pmi_found=no
OPAL_CHECK_PMI_LIB([$check_pmi_install_dir],
[$check_pmi_lib_dir],
[pmi2], [PMI2_Init],
[slurm_pmi_found=yes],
[opal_enable_pmi2=yes
opal_pmi2_LIBS="-lpmi2"
AC_SUBST(opal_pmi2_LIBS)],
[opal_enable_pmi2=no])
AS_IF([test "$opal_enable_pmi2" = "yes"],
[AS_IF([test "$slurm_pmi_found" = "yes"],
[opal_pmi2_CPPFLAGS="$pmi2_CPPFLAGS"
AC_SUBST(opal_pmi2_CPPFLAGS)])
AS_IF([test "$slurm_pmi_found" = "yes"],
[opal_pmi2_LDFLAGS="$pmi2_LDFLAGS"
AC_SUBST(opal_pmi2_LDFLAGS)
opal_pmi2_rpath="$pmi2_rpath"
AC_SUBST(opal_pmi2_rpath)])])
# check for pmix lib installed by slurm */
slurm_pmix_found=no
OPAL_CHECK_PMIX_LIB([$check_pmi_install_dir],
[$check_pmi_lib_dir],
[opal_enable_pmix=yes],
[opal_enable_pmix=no])
# since support was explicitly requested, then we should error out
# if we didn't find the required support
AC_MSG_CHECKING([can PMI support be built])
AS_IF([test "$opal_enable_pmi1" != "yes" && test "$opal_enable_pmi2" != "yes" && test "$opal_enable_pmix" != "yes"],
[AC_MSG_RESULT([no])
AC_MSG_WARN([PMI support requested (via --with-pmi) but neither pmi.h,])
AC_MSG_WARN([pmi2.h or pmix.h were found under locations:])
AC_MSG_WARN([ $check_pmi_install_dir])
AC_MSG_WARN([ $check_pmi_install_dir/slurm])
AC_MSG_WARN([Specified path: $with_pmi])
AC_MSG_WARN([OR neither libpmi, libpmi2, or libpmix were found under:])
AC_MSG_WARN([ $check_pmi_lib_dir/lib])
AC_MSG_WARN([ $check_pmi_lib_dir/lib64])
AC_MSG_WARN([Specified path: $with_pmi_libdir])
AC_MSG_ERROR([Aborting])],
[AC_MSG_RESULT([yes])])
])
OPAL_VAR_SCOPE_POP
])
# define an internal function for checking the existence
# and validity of an external PMIx library
#
@ -251,12 +38,14 @@ AC_DEFUN([OPAL_CHECK_PMIX_LIB],[
files=`ls $1/pmix.h 2> /dev/null | wc -l`
AS_IF([test "$files" -gt 0],
[AC_MSG_RESULT([found])
pmix_ext_install_incdir=$1
opal_external_pmix_header_happy=yes],
[AC_MSG_RESULT([not found])
AC_MSG_CHECKING([for pmix.h in $1/include])
files=`ls $1/include/pmix.h 2> /dev/null | wc -l`
AS_IF([test "$files" -gt 0],
[AC_MSG_RESULT([found])
pmix_ext_install_incdir=$1/include
opal_external_pmix_header_happy=yes],
[AC_MSG_RESULT([not found])
opal_external_pmix_header_happy=no])])
@ -307,7 +96,12 @@ AC_DEFUN([OPAL_CHECK_PMIX_LIB],[
# this must be from a pre-1.1.5 version OMPI does
# NOT support anything older than v1.2.5
AC_MSG_CHECKING([PMIx version])
CPPFLAGS="-I$1/include $CPPFLAGS"
AS_IF([test "$pmix_ext_install_incdir" != "/usr" && test "$pmix_ext_install_incdir" != "/usr/include"],
[CPPFLAGS="-I$pmix_ext_install_incdir $CPPFLAGS"])
AS_IF([test "$pmix_ext_install_libdir" != "/usr" && test "$pmix_ext_install_libdir" != "/usr/include"],
[LDFLAGS="-L$pmix_ext_install_libdir $LDFLAGS"])
LIBS="$LIBS -lpmix"
AS_IF([test "x`ls $1/include/pmix_version.h 2> /dev/null`" = "x"],
[AC_MSG_RESULT([version file not found - assuming v1.1.4])
opal_external_pmix_version_found=1
@ -381,12 +175,19 @@ AC_DEFUN([OPAL_CHECK_PMIX_LIB],[
AC_MSG_WARN([be detected])
opal_external_pmix_happy=no])
CPPFLAGS=$opal_external_pmix_save_CPPFLAGS
LDFLAGS=$opal_external_pmix_save_LDFLAGS
LIBS=$opal_external_pmix_save_LIBS
])
AS_IF([test "$opal_external_pmix_happy" = "yes"],
[$3], [$4])
[$3
# add the new flags to our wrapper compilers
AS_IF([test "$pmix_ext_install_incdir" != "/usr" && test "$pmix_ext_install_incdir" != "/usr/include"],
[pmix_pmix4x_WRAPPER_EXTRA_CPPFLAGS="-I$pmix_ext_install_incdir"])
AS_IF([test "$pmix_ext_install_libdir" != "/usr" && test "$pmix_ext_install_libdir" != "/usr/include"],
[pmix_external_WRAPPER_EXTRA_LDFLAGS="-L$pmix_ext_install_libdir"])
pmix_external_WRAPPER_EXTRA_LIBS=-lpmix],
[CPPFLAGS=$opal_external_pmix_save_CPPFLAGS
LDFLAGS=$opal_external_pmix_save_LDFLAGS
LIBS=$opal_external_pmix_save_LIBS
$4])
OPAL_VAR_SCOPE_POP
])
@ -400,7 +201,7 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
AC_ARG_WITH([pmix-libdir],
[AC_HELP_STRING([--with-pmix-libdir=DIR],
[Look for libpmix the given directory DIR, DIR/lib or DIR/lib64])])
[Look for libpmix in the given directory DIR, DIR/lib or DIR/lib64])])
AS_IF([test "$with_pmix" = "no"],
[AC_MSG_WARN([Open MPI requires PMIx support. It can be built])
@ -409,58 +210,55 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
AC_MSG_ERROR([Cannot continue])])
opal_external_have_pmix1=0
AS_IF([test "$opal_enable_pmix" = "no"],
[AC_MSG_CHECKING([if user requested internal PMIx support($with_pmix)])
AC_MSG_CHECKING([if user requested internal PMIx support($with_pmix)])
opal_external_pmix_happy=no
pmix_ext_install_libdir=
pmix_ext_install_dir=
AS_IF([test "$with_pmix" = "internal"],
[AC_MSG_RESULT([yes])
opal_external_pmix_happy=no
pmix_ext_install_libdir=
pmix_ext_install_dir=
opal_external_pmix_version=internal
opal_enable_pmix=yes],
AS_IF([test "$with_pmix" = "internal"],
[AC_MSG_RESULT([yes])
opal_external_pmix_happy=no
[AC_MSG_RESULT([no])
# check for external pmix lib */
AS_IF([test -z "$with_pmix" || test "$with_pmix" = "yes" || test "$with_pmix" = "external"],
[pmix_ext_install_dir=/usr],
[pmix_ext_install_dir=$with_pmix])
AS_IF([test -n "$with_pmix_libdir"],
[pmix_ext_install_libdir=$with_pmix_libdir])
OPAL_CHECK_PMIX_LIB([$pmix_ext_install_dir],
[$pmix_ext_install_libdir],
[opal_external_pmix_happy=yes
opal_enable_pmix=yes],
[opal_external_pmix_happy=no])])
# Final check - if they explicitly pointed us at an external
# installation that wasn't acceptable, then error out
AS_IF([test -n "$with_pmix" && test "$with_pmix" != "yes" && test "$with_pmix" != "external" && test "$with_pmix" != "internal" && test "$opal_external_pmix_happy" = "no"],
[AC_MSG_WARN([External PMIx support requested, but either the version])
AC_MSG_WARN([of the external lib was not supported or the required])
AC_MSG_WARN([header/library files were not found])
AC_MSG_ERROR([Cannot continue])])
# Final check - if they didn't point us explicitly at an external version
# but we found one anyway, use the internal version if it is higher
AS_IF([test "$opal_external_pmix_version" != "internal" && (test -z "$with_pmix" || test "$with_pmix" = "yes")],
[AS_IF([test "$opal_external_pmix_version" != "4x"],
[AC_MSG_WARN([discovered external PMIx version is less than internal version 4.x])
AC_MSG_WARN([using internal PMIx])
opal_external_pmix_version=internal
opal_enable_pmix=yes],
opal_external_pmix_happy=no])])
[AC_MSG_RESULT([no])
# check for external pmix lib */
AS_IF([test -z "$with_pmix" || test "$with_pmix" = "yes" || test "$with_pmix" = "external"],
[pmix_ext_install_dir=/usr],
[pmix_ext_install_dir=$with_pmix])
AS_IF([test -n "$with_pmix_libdir"],
[pmix_ext_install_libdir=$with_pmix_libdir])
OPAL_CHECK_PMIX_LIB([$pmix_ext_install_dir],
[$pmix_ext_install_libdir],
[opal_external_pmix_happy=yes
opal_enable_pmix=yes],
[opal_external_pmix_happy=no])])
# Final check - if they explicitly pointed us at an external
# installation that wasn't acceptable, then error out
AS_IF([test -n "$with_pmix" && test "$with_pmix" != "yes" && test "$with_pmix" != "external" && test "$with_pmix" != "internal" && test "$opal_external_pmix_happy" = "no"],
[AC_MSG_WARN([External PMIx support requested, but either the version])
AC_MSG_WARN([of the external lib was not supported or the required])
AC_MSG_WARN([header/library files were not found])
AC_MSG_ERROR([Cannot continue])])
# Final check - if they didn't point us explicitly at an external version
# but we found one anyway, use the internal version if it is higher
AS_IF([test "$opal_external_pmix_version" != "internal" && (test -z "$with_pmix" || test "$with_pmix" = "yes")],
[AS_IF([test "$opal_external_pmix_version" != "3x"],
[AC_MSG_WARN([discovered external PMIx version is less than internal version 3.x])
AC_MSG_WARN([using internal PMIx])
opal_external_pmix_version=internal
opal_external_pmix_happy=no])])
])
AS_IF([test "$opal_enable_pmix" = "yes"],
[AC_MSG_CHECKING([PMIx version to be used])
AS_IF([test "$opal_external_pmix_happy" = "yes"],
[AC_MSG_RESULT([external($opal_external_pmix_version)])
AS_IF([test "$pmix_ext_install_dir" != "/usr"],
[opal_external_pmix_CPPFLAGS="-I$pmix_ext_install_dir/include"
opal_external_pmix_LDFLAGS=-L$pmix_ext_install_libdir])
opal_external_pmix_LIBS=-lpmix],
[AC_MSG_RESULT([internal])])])
AC_MSG_CHECKING([PMIx version to be used])
AS_IF([test "$opal_external_pmix_happy" = "yes"],
[AC_MSG_RESULT([external($opal_external_pmix_version)])
AS_IF([test "$pmix_ext_install_dir" != "/usr"],
[opal_external_pmix_CPPFLAGS="-I$pmix_ext_install_dir/include"
opal_external_pmix_LDFLAGS=-L$pmix_ext_install_libdir])
opal_external_pmix_LIBS=-lpmix],
[AC_MSG_RESULT([internal])])
AC_DEFINE_UNQUOTED([OPAL_PMIX_V1],[$opal_external_have_pmix1],
[Whether the external PMIx library is v1])

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

@ -1,144 +0,0 @@
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) 2007-2016 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2015 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl Copyright (c) 2016 Los Alamos National Security, LLC. All rights
dnl reserved.
dnl Copyright (c) 2017 IBM Corporation. All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
# check for lsf
# ORTE_CHECK_LSF(prefix, [action-if-found], [action-if-not-found])
# --------------------------------------------------------
AC_DEFUN([ORTE_CHECK_LSF],[
AS_IF([test -z "$orte_check_lsf_happy"],[
AC_ARG_WITH([lsf],
[AC_HELP_STRING([--with-lsf(=DIR)],
[Build LSF support])])
OPAL_CHECK_WITHDIR([lsf], [$with_lsf], [include/lsf/lsbatch.h])
AC_ARG_WITH([lsf-libdir],
[AC_HELP_STRING([--with-lsf-libdir=DIR],
[Search for LSF libraries in DIR])])
OPAL_CHECK_WITHDIR([lsf-libdir], [$with_lsf_libdir], [libbat.*])
AS_IF([test "$with_lsf" != "no"],[
# Defaults
orte_check_lsf_dir_msg="compiler default"
orte_check_lsf_libdir_msg="linker default"
# Save directory names if supplied
AS_IF([test ! -z "$with_lsf" && test "$with_lsf" != "yes"],
[orte_check_lsf_dir="$with_lsf"
orte_check_lsf_dir_msg="$orte_check_lsf_dir (from --with-lsf)"])
AS_IF([test ! -z "$with_lsf_libdir" && test "$with_lsf_libdir" != "yes"],
[orte_check_lsf_libdir="$with_lsf_libdir"
orte_check_lsf_libdir_msg="$orte_check_lsf_libdir (from --with-lsf-libdir)"])
# If no directories were specified, look for LSF_LIBDIR,
# LSF_INCLUDEDIR, and/or LSF_ENVDIR.
AS_IF([test -z "$orte_check_lsf_dir" && test -z "$orte_check_lsf_libdir"],
[AS_IF([test ! -z "$LSF_ENVDIR" && test -z "$LSF_LIBDIR" && test -f "$LSF_ENVDIR/lsf.conf"],
[LSF_LIBDIR=`egrep ^LSF_LIBDIR= $LSF_ENVDIR/lsf.conf | cut -d= -f2-`])
AS_IF([test ! -z "$LSF_ENVDIR" && test -z "$LSF_INCLUDEDIR" && test -f "$LSF_ENVDIR/lsf.conf"],
[LSF_INCLUDEDIR=`egrep ^LSF_INCLUDEDIR= $LSF_ENVDIR/lsf.conf | cut -d= -f2-`])
AS_IF([test ! -z "$LSF_LIBDIR"],
[orte_check_lsf_libdir=$LSF_LIBDIR
orte_check_lsf_libdir_msg="$LSF_LIBDIR (from \$LSF_LIBDIR)"])
AS_IF([test ! -z "$LSF_INCLUDEDIR"],
[orte_check_lsf_dir=`dirname $LSF_INCLUDEDIR`
orte_check_lsf_dir_msg="$orte_check_lsf_dir (from \$LSF_INCLUDEDIR)"])])
AS_IF([test "$with_lsf" = "no"],
[orte_check_lsf_happy="no"],
[orte_check_lsf_happy="yes"])
orte_check_lsf_$1_save_CPPFLAGS="$CPPFLAGS"
orte_check_lsf_$1_save_LDFLAGS="$LDFLAGS"
orte_check_lsf_$1_save_LIBS="$LIBS"
# liblsf requires yp_all, yp_get_default_domain, and ypprot_err
# on Linux, Solaris, NEC, and Sony NEWSs these are found in libnsl
# on AIX it should be in libbsd
# on HP-UX it should be in libBSD
# on IRIX < 6 it should be in libsun (IRIX 6 and later it is in libc)
OPAL_SEARCH_LIBS_COMPONENT([yp_all_nsl], [yp_all], [nsl bsd BSD sun],
[yp_all_nsl_happy="yes"],
[yp_all_nsl_happy="no"])
AS_IF([test "$yp_all_nsl_happy" = "no"],
[orte_check_lsf_happy="no"],
[orte_check_lsf_happy="yes"])
# liblsb requires liblsf - using ls_info as a test for liblsf presence
OPAL_CHECK_PACKAGE([ls_info_lsf],
[lsf/lsf.h],
[lsf],
[ls_info],
[$yp_all_nsl_LIBS],
[$orte_check_lsf_dir],
[$orte_check_lsf_libdir],
[ls_info_lsf_happy="yes"],
[ls_info_lsf_happy="no"])
AS_IF([test "$ls_info_lsf_happy" = "no"],
[orte_check_lsf_happy="no"],
[orte_check_lsf_happy="yes"])
# test function of liblsb LSF package
AS_IF([test "$orte_check_lsf_happy" = "yes"],
[AC_MSG_CHECKING([for LSF dir])
AC_MSG_RESULT([$orte_check_lsf_dir_msg])
AC_MSG_CHECKING([for LSF library dir])
AC_MSG_RESULT([$orte_check_lsf_libdir_msg])
AC_MSG_CHECKING([for liblsf function])
AC_MSG_RESULT([$ls_info_lsf_happy])
AC_MSG_CHECKING([for liblsf yp requirements])
AC_MSG_RESULT([$yp_all_nsl_happy])
OPAL_CHECK_PACKAGE([orte_check_lsf],
[lsf/lsbatch.h],
[bat],
[lsb_launch],
[$ls_info_lsf_LIBS $yp_all_nsl_LIBS],
[$orte_check_lsf_dir],
[$orte_check_lsf_libdir],
[orte_check_lsf_happy="yes"],
[orte_check_lsf_happy="no"])])
CPPFLAGS="$orte_check_lsf_$1_save_CPPFLAGS"
LDFLAGS="$orte_check_lsf_$1_save_LDFLAGS"
LIBS="$orte_check_lsf_$1_save_LIBS"
],[orte_check_lsf_happy=no])
OPAL_SUMMARY_ADD([[Resource Managers]],[[LSF]],[$1],[$orte_check_lsf_happy])
])
AS_IF([test "$orte_check_lsf_happy" = "yes"],
[$1_LIBS="[$]$1_LIBS $orte_check_lsf_LIBS"
$1_LDFLAGS="[$]$1_LDFLAGS $orte_check_lsf_LDFLAGS"
$1_CPPFLAGS="[$]$1_CPPFLAGS $orte_check_lsf_CPPFLAGS"
# add the LSF libraries to static builds as they are required
$1_WRAPPER_EXTRA_LDFLAGS=[$]$1_LDFLAGS
$1_WRAPPER_EXTRA_LIBS=[$]$1_LIBS
$2],
[AS_IF([test ! -z "$with_lsf" && test "$with_lsf" != "no"],
[AC_MSG_WARN([LSF support requested (via --with-lsf) but not found.])
AC_MSG_ERROR([Aborting.])])
$3])
])

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

@ -1,91 +0,0 @@
# -*- shell-script -*-
#
# 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) 2009-2016 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2016 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2017 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
# ORTE_CHECK_MOAB(prefix, [action-if-found], [action-if-not-found])
# --------------------------------------------------------
AC_DEFUN([ORTE_CHECK_MOAB],[
if test -z "$orte_check_moab_happy" ; then
OPAL_VAR_SCOPE_PUSH([orte_check_moab_$1_save_CPPFLAGS orte_check_moab_$1_save_LDFLAGS orte_check_moab_$1_save_LIBS])
AC_ARG_WITH([moab],
[AC_HELP_STRING([--with-moab],
[Build MOAB scheduler component (default: yes)])])
OPAL_CHECK_WITHDIR([moab], [$with_moab], [mapi.h])
AC_ARG_WITH([moab-libdir],
[AC_HELP_STRING([--with-moab-libdir=DIR],
[Search for Moab libraries in DIR])])
OPAL_CHECK_WITHDIR([moab-libdir], [$with_moab_libdir], [libmoab.*])
orte_check_moab_happy="yes"
AS_IF([test "$with_moab" = "no"],
[orte_check_moab_happy=no])
AS_IF([test $orte_check_moab_happy = yes],
[AC_MSG_CHECKING([looking for moab in])
AS_IF([test "$with_moab" != "yes"],
[orte_moab_dir=$with_moab
AC_MSG_RESULT([($orte_moab_dir)])],
[AC_MSG_RESULT([(default search paths)])])
AS_IF([test ! -z "$with_moab_libdir" && \
test "$with_moab_libdir" != "yes"],
[orte_moab_libdir=$with_moab_libdir])
])
orte_check_moab_$1_save_CPPFLAGS=$CPPFLAGS
orte_check_moab_$1_save_LDFLAGS=$LDFLAGS
orte_check_moab_$1_save_LIBS=$LIBS
AS_IF([test $orte_check_moab_happy = yes],
[OPAL_CHECK_PACKAGE([orte_check_moab],
[mapi.h],
[cmoab],
[MCCJobGetRemainingTime],
[],
[$orte_moab_dir],
[$orte_moab_libdir],
[],
[orte_check_moab_happy=no])])
CPPFLAGS=$orte_check_moab_$1_save_CPPFLAGS
LDFLAGS=$orte_check_moab_$1_save_LDFLAGS
LIBS=$orte_check_moab_$1_save_LIBS
OPAL_SUMMARY_ADD([[Resource Managers]],[[Moab]],[$1],[$orte_check_moab_happy])
OPAL_VAR_SCOPE_POP
fi
if test $orte_check_moab_happy = yes ; then
$1_CPPFLAGS="[$]$1_CPPFLAGS $orte_check_moab_CPPFLAGS"
$1_LIBS="[$]$1_LIBS $orte_check_moab_LIBS"
$1_LDFLAGS="[$]$1_LDFLAGS $orte_check_moab_LDFLAGS"
AC_SUBST($1_CPPFLAGS)
AC_SUBST($1_LDFLAGS)
AC_SUBST($1_LIBS)
fi
AS_IF([test "$orte_check_moab_happy" = "yes"],
[$2],
[$3])
])

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

@ -1,59 +0,0 @@
# -*- shell-script -*-
#
# 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) 2006-2016 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2016 Los Alamos National Security, LLC. All rights
# reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
# 1. if --with-sge is given, always build
# 2. if --without-sge is given, never build
# 3. if neither is given, build if-and-only-if you find either qrsh in path or
# sge_root in environment
# ORTE_CHECK_GRIDENGINE(prefix, [action-if-found], [action-if-not-found])
# --------------------------------------------------------
AC_DEFUN([ORTE_CHECK_GRIDENGINE],[
if test -z "$orte_gridengine_build" ; then
AC_ARG_WITH([sge],
[AC_HELP_STRING([--with-sge],
[Build SGE or Grid Engine support (default: no)])])
AC_MSG_CHECKING([if user requested SGE build])
orte_gridengine_build="no"
AS_IF([test "$with_sge" = "yes"],
[AC_MSG_RESULT([yes])
orte_gridengine_build=yes],
[AS_IF([test "$with_sge" = "no"],
[AC_MSG_RESULT([no])],
[AC_MSG_RESULT([not specified; checking environment])
AC_CHECK_PROG([QRSH], [qrsh], [qrsh])
AS_IF([test "$QRSH" != ""],
[orte_gridengine_build=yes],
[AC_MSG_CHECKING([for SGE_ROOT environment variable])
AS_IF([test "$SGE_ROOT" != ""],
[AC_MSG_RESULT([found])
orte_gridengine_build=yes],
[AC_MSG_RESULT([not found])])])])])
OPAL_SUMMARY_ADD([[Resource Managers]],[[Grid Engine]],[$1],[$orte_gridengine_build])
fi
AS_IF([test "$orte_gridengine_build" = "yes"],
[$2],
[$3])
])

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

@ -1,87 +0,0 @@
# -*- shell-script -*-
#
# 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) 2009-2016 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2016 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2017 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
# ORTE_CHECK_SLURM(prefix, [action-if-found], [action-if-not-found])
# --------------------------------------------------------
AC_DEFUN([ORTE_CHECK_SLURM],[
if test -z "$orte_check_slurm_happy" ; then
AC_ARG_WITH([slurm],
[AC_HELP_STRING([--with-slurm],
[Build SLURM scheduler component (default: yes)])])
if test "$with_slurm" = "no" ; then
orte_check_slurm_happy="no"
elif test "$with_slurm" = "" ; then
# unless user asked, only build slurm component on linux, AIX,
# and OS X systems (these are the platforms that SLURM
# supports)
case $host in
*-linux*|*-aix*|*-apple-darwin*)
orte_check_slurm_happy="yes"
;;
*)
AC_MSG_CHECKING([for SLURM srun in PATH])
OPAL_WHICH([srun], [ORTE_CHECK_SLURM_SRUN])
if test "$ORTE_CHECK_SLURM_SRUN" = ""; then
orte_check_slurm_happy="no"
else
orte_check_slurm_happy="yes"
fi
AC_MSG_RESULT([$orte_check_slurm_happy])
;;
esac
else
orte_check_slurm_happy="yes"
fi
AS_IF([test "$orte_check_slurm_happy" = "yes"],
[AC_CHECK_FUNC([fork],
[orte_check_slurm_happy="yes"],
[orte_check_slurm_happy="no"])])
AS_IF([test "$orte_check_slurm_happy" = "yes"],
[AC_CHECK_FUNC([execve],
[orte_check_slurm_happy="yes"],
[orte_check_slurm_happy="no"])])
AS_IF([test "$orte_check_slurm_happy" = "yes"],
[AC_CHECK_FUNC([setpgid],
[orte_check_slurm_happy="yes"],
[orte_check_slurm_happy="no"])])
# check to see if this is a Cray nativized slurm env.
slurm_cray_env=0
OPAL_CHECK_ALPS([orte_slurm_cray],
[slurm_cray_env=1])
AC_DEFINE_UNQUOTED([SLURM_CRAY_ENV],[$slurm_cray_env],
[defined to 1 if slurm cray env, 0 otherwise])
OPAL_SUMMARY_ADD([[Resource Managers]],[[Slurm]],[$1],[$orte_check_slurm_happy])
fi
AS_IF([test "$orte_check_slurm_happy" = "yes"],
[$2],
[$3])
])

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

@ -1,173 +0,0 @@
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-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 Los Alamos National Security, LLC. All rights
dnl reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
# ORTE_CHECK_TM_LIBS_FLAGS(prefix, [LIBS or LDFLAGS])
# ---------------------------------------------------
AC_DEFUN([ORTE_CHECK_TM_LIBS_FLAGS],[
OPAL_VAR_SCOPE_PUSH([orte_check_tm_flags])
orte_check_tm_flags=`$orte_check_tm_pbs_config --libs`
for orte_check_tm_val in $orte_check_tm_flags; do
if test "`echo $orte_check_tm_val | cut -c1-2`" = "-l"; then
if test "$2" = "LIBS"; then
$1_$2="$$1_$2 $orte_check_tm_val"
fi
else
if test "$2" = "LDFLAGS"; then
$1_$2="$$1_$2 $orte_check_tm_val"
fi
fi
done
OPAL_VAR_SCOPE_POP
])
# ORTE_CHECK_TM(prefix, [action-if-found], [action-if-not-found])
# --------------------------------------------------------
AC_DEFUN([ORTE_CHECK_TM],[
if test -z $orte_check_tm_happy ; then
OPAL_VAR_SCOPE_PUSH([orte_check_tm_found orte_check_tm_dir orte_check_tm_pbs_config orte_check_tm_LDFLAGS_save orte_check_tm_CPPFLAGS_save orte_check_tm_LIBS_save])
AC_ARG_WITH([tm],
[AC_HELP_STRING([--with-tm(=DIR)],
[Build TM (Torque, PBSPro, and compatible) support, optionally adding DIR/include, DIR/lib, and DIR/lib64 to the search path for headers and libraries])])
OPAL_CHECK_WITHDIR([tm], [$with_tm], [include/tm.h])
orte_check_tm_found=no
AS_IF([test "$with_tm" = "no"],
[orte_check_tm_happy="no"],
[orte_check_tm_happy="yes"
AS_IF([test ! -z "$with_tm" && test "$with_tm" != "yes"],
[orte_check_tm_dir="$with_tm"],
[orte_check_tm_dir=""])])
AS_IF([test "$orte_check_tm_happy" = "yes"],
[AC_MSG_CHECKING([for pbs-config])
orte_check_tm_pbs_config="not found"
AS_IF([test "$orte_check_tm_dir" != "" && test -d "$orte_check_tm_dir" && test -x "$orte_check_tm_dir/bin/pbs-config"],
[orte_check_tm_pbs_config="$orte_check_tm_dir/bin/pbs-config"],
[AS_IF([pbs-config --prefix >/dev/null 2>&1],
[orte_check_tm_pbs_config="pbs-config"])])
AC_MSG_RESULT([$orte_check_tm_pbs_config])])
# If we have pbs-config, get the flags we need from there and then
# do simplistic tests looking for the tm headers and symbols
AS_IF([test "$orte_check_tm_happy" = "yes" && test "$orte_check_tm_pbs_config" != "not found"],
[orte_check_tm_CPPFLAGS=`$orte_check_tm_pbs_config --cflags`
OPAL_LOG_MSG([orte_check_tm_CPPFLAGS from pbs-config: $orte_check_tm_CPPFLAGS], 1)
ORTE_CHECK_TM_LIBS_FLAGS([orte_check_tm], [LDFLAGS])
OPAL_LOG_MSG([orte_check_tm_LDFLAGS from pbs-config: $orte_check_tm_LDFLAGS], 1)
ORTE_CHECK_TM_LIBS_FLAGS([orte_check_tm], [LIBS])
OPAL_LOG_MSG([orte_check_tm_LIBS from pbs-config: $orte_check_tm_LIBS], 1)
# Now that we supposedly have the right flags, try them out.
orte_check_tm_CPPFLAGS_save="$CPPFLAGS"
orte_check_tm_LDFLAGS_save="$LDFLAGS"
orte_check_tm_LIBS_save="$LIBS"
CPPFLAGS="$CPPFLAGS $orte_check_tm_CPPFLAGS"
LIBS="$LIBS $orte_check_tm_LIBS"
LDFLAGS="$LDFLAGS $orte_check_tm_LDFLAGS"
AC_CHECK_HEADER([tm.h],
[AC_CHECK_FUNC([tm_finalize],
[orte_check_tm_found="yes"])])
CPPFLAGS="$orte_check_tm_CPPFLAGS_save"
LDFLAGS="$orte_check_tm_LDFLAGS_save"
LIBS="$orte_check_tm_LIBS_save"])
# If we don't have pbs-config, then we have to look around
# manually.
# Note that Torque 2.1.0 changed the name of their back-end
# library to "libtorque". So we have to check for both libpbs and
# libtorque. First, check for libpbs.
orte_check_package_$1_save_CPPFLAGS="$CPPFLAGS"
orte_check_package_$1_save_LDFLAGS="$LDFLAGS"
orte_check_package_$1_save_LIBS="$LIBS"
AS_IF([test "$orte_check_tm_found" = "no"],
[AS_IF([test "$orte_check_tm_happy" = "yes"],
[_OPAL_CHECK_PACKAGE_HEADER([orte_check_tm],
[tm.h],
[$orte_check_tm_dir],
[orte_check_tm_found="yes"],
[orte_check_tm_found="no"])])
AS_IF([test "$orte_check_tm_found" = "yes"],
[_OPAL_CHECK_PACKAGE_LIB([orte_check_tm],
[pbs],
[tm_init],
[],
[$orte_check_tm_dir],
[$orte_check_tm_libdir],
[orte_check_tm_found="yes"],
[_OPAL_CHECK_PACKAGE_LIB([orte_check_tm],
[pbs],
[tm_init],
[-lcrypto],
[$orte_check_tm_dir],
[$orte_check_tm_libdir],
[orte_check_tm_found="yes"],
[_OPAL_CHECK_PACKAGE_LIB([orte_check_tm],
[torque],
[tm_init],
[],
[$orte_check_tm_dir],
[$orte_check_tm_libdir],
[orte_check_tm_found="yes"],
[orte_check_tm_found="no"])])])])])
CPPFLAGS="$orte_check_package_$1_save_CPPFLAGS"
LDFLAGS="$orte_check_package_$1_save_LDFLAGS"
LIBS="$orte_check_package_$1_save_LIBS"
if test "$orte_check_tm_found" = "no" ; then
orte_check_tm_happy=no
fi
OPAL_SUMMARY_ADD([[Resource Managers]],[[Torque]],[$1],[$orte_check_tm_happy])
OPAL_VAR_SCOPE_POP
fi
# Did we find the right stuff?
AS_IF([test "$orte_check_tm_happy" = "yes"],
[$1_LIBS="[$]$1_LIBS $orte_check_tm_LIBS"
$1_LDFLAGS="[$]$1_LDFLAGS $orte_check_tm_LDFLAGS"
$1_CPPFLAGS="[$]$1_CPPFLAGS $orte_check_tm_CPPFLAGS"
# add the TM libraries to static builds as they are required
$1_WRAPPER_EXTRA_LDFLAGS=[$]$1_LDFLAGS
$1_WRAPPER_EXTRA_LIBS=[$]$1_LIBS
$2],
[AS_IF([test ! -z "$with_tm" && test "$with_tm" != "no"],
[AC_MSG_ERROR([TM support requested but not found. Aborting])])
orte_check_tm_happy="no"
$3])
])

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

@ -1,32 +0,0 @@
# -*- shell-script -*-
#
# Copyright (c) 2009-2010 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2009-2010 The Trustees of Indiana University and Indiana
# University Research and Technology
# Corporation. All rights reserved.
# Copyright (c) 2011-2012 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2015-2018 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
AC_DEFUN([ORTE_CONFIG_FILES],[
AC_CONFIG_FILES([
orte/Makefile
orte/include/Makefile
orte/etc/Makefile
orte/tools/orted/Makefile
orte/tools/orterun/Makefile
orte/tools/wrappers/Makefile
orte/tools/wrappers/ortecc-wrapper-data.txt
orte/tools/wrappers/orte.pc
orte/tools/orte-clean/Makefile
orte/tools/orte-info/Makefile
orte/tools/orte-server/Makefile
])
])

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

@ -1,57 +0,0 @@
dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2004-2007 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 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
dnl Copyright (c) 2009 IBM Corporation. All rights reserved.
dnl Copyright (c) 2009-2013 Los Alamos National Security, LLC. All rights
dnl reserved.
dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
dnl
dnl Copyright (c) 2016 Intel, Inc. All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
AC_DEFUN([ORTE_CONFIGURE_OPTIONS],[
opal_show_subtitle "ORTE Configuration options"
#
# Do we want orterun's --prefix behavior to be enabled by default?
#
AC_MSG_CHECKING([if want orterun "--prefix" behavior to be enabled by default])
AC_ARG_ENABLE([orterun-prefix-by-default],
[AC_HELP_STRING([--enable-orterun-prefix-by-default],
[Make "orterun ..." behave exactly the same as "orterun --prefix \$prefix" (where \$prefix is the value given to --prefix in configure)])])
AC_ARG_ENABLE([mpirun-prefix-by-default],
[AC_HELP_STRING([--enable-mpirun-prefix-by-default],
[Synonym for --enable-orterun-prefix-by-default])])
if test "$enable_orterun_prefix_by_default" = ""; then
enable_orterun_prefix_by_default=$enable_mpirun_prefix_by_default
fi
if test "$enable_orterun_prefix_by_default" = "yes"; then
AC_MSG_RESULT([yes])
orte_want_orterun_prefix_by_default=1
else
AC_MSG_RESULT([no])
orte_want_orterun_prefix_by_default=0
fi
AC_DEFINE_UNQUOTED([ORTE_WANT_ORTERUN_PREFIX_BY_DEFAULT],
[$orte_want_orterun_prefix_by_default],
[Whether we want orterun to effect "--prefix $prefix" by default])
])dnl

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

@ -1,96 +0,0 @@
dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2004-2009 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-2007 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-2019 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2006-2009 Sun Microsystems, Inc. All rights reserved.
dnl Copyright (c) 2006-2007 Los Alamos National Security, LLC. All rights
dnl reserved.
dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
dnl Copyright (c) 2015 Research Organization for Information Science
dnl and Technology (RIST). All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
dnl Check to see if specific CFLAGS work
dnl $1: compiler flags to check
dnl $2: Action if the flags work
dnl $3: Action if the flags do not work
AC_DEFUN([_ORTE_SETUP_DEBUGGER_FLAGS_TRY_CFLAGS],[
OPAL_VAR_SCOPE_PUSH([ORTE_SETUP_DEBUGGER_FLAGS_CFLAGS_save])
ORTE_SETUP_DEBUGGER_FLAGS_CFLAGS_save=$CFLAGS
AC_MSG_CHECKING([if $1 compiler flag works])
CFLAGS="$CFLAGS $1"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[int i = 3;])],
[ORTE_SETUP_DEBUGGER_FLAGS_HAPPY=yes],
[ORTE_SETUP_DEBUGGER_FLAGS_HAPPY=no])
AC_MSG_RESULT([$ORTE_SETUP_DEBUGGER_FLAGS_HAPPY])
CFLAGS=$ORTE_SETUP_DEBUGGER_FLAGS_CFLAGS_save
OPAL_VAR_SCOPE_POP
AS_IF([test $ORTE_SETUP_DEBUGGER_FLAGS_HAPPY = yes],
[$2], [$3])
])
AC_DEFUN([ORTE_SETUP_DEBUGGER_FLAGS],[
#
# Do a final process of the CFLAGS to make a WITHOUT_OPTFLAGS
# version. We need this so that we can guarantee to build the
# debugger-sensitive files with -g and nothing else.
#
OPAL_STRIP_OPTFLAGS($CFLAGS)
CFLAGS_WITHOUT_OPTFLAGS="$s_result"
# Tweak the compiler flags passed to orterun for Sun Studio SPARC
# https://svn.open-mpi.org/trac/ompi/ticket/1448
if test "x$opal_cv_c_compiler_vendor" = "xsun" && test -n "`echo $host | $GREP sparc`"; then
DEBUGGER_CFLAGS="-g -xO0"
else
# Tweak the compiler flags passed for intel
# to stop its aggressive inlining of functions
if test "x$opal_cv_c_compiler_vendor" = "xintel"; then
DEBUGGER_CFLAGS="-g -O0"
else
DEBUGGER_CFLAGS="-g"
fi
fi
AC_MSG_CHECKING([which of CFLAGS are ok for debugger modules])
AC_MSG_RESULT([$CFLAGS_WITHOUT_OPTFLAGS])
AC_MSG_CHECKING([for debugger extra CFLAGS])
AC_MSG_RESULT([$DEBUGGER_CFLAGS])
AC_SUBST(CFLAGS_WITHOUT_OPTFLAGS)
AC_SUBST(DEBUGGER_CFLAGS)
# Check for compiler specific flag to add in unwind information.
# This is needed when attaching using MPIR to unwind back to the
# user's main function. Certain optimisations can prevent GDB from
# producing a stack when explicit unwind information is unavailable.
# This is implied by -g, but we want to save space and don't need
# full debug symbols.
_ORTE_SETUP_DEBUGGER_FLAGS_TRY_CFLAGS([-fasynchronous-unwind-tables],
[MPIR_UNWIND_CFLAGS="-fasynchronous-unwind-tables"],
[_ORTE_SETUP_DEBUGGER_FLAGS_TRY_CFLAGS([-Meh_frame -Mframe],
[MPIR_UNWIND_CFLAGS="-Meh_frame -Mframe"],
[MPIR_UNWIND_CFLAGS=-g])
])
AC_MSG_CHECKING([for final compiler unwind flags])
AC_MSG_RESULT([$MPIR_UNWIND_CFLAGS])
AC_SUBST(MPIR_UNWIND_CFLAGS)
])

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

@ -120,11 +120,6 @@ m4_ifdef([project_ompi],
[OPAL_SAVE_VERSION([OMPI], [Open MPI], [$srcdir/VERSION],
[ompi/include/ompi/version.h])])
m4_ifdef([project_orte],
[OPAL_SAVE_VERSION([ORTE], [Open MPI Run-Time Environment],
[$srcdir/VERSION],
[orte/include/orte/version.h])])
m4_ifdef([project_oshmem],
[OPAL_SAVE_VERSION([OSHMEM], [Open SHMEM],
[$srcdir/VERSION],
@ -145,8 +140,6 @@ m4_ifdef([project_ompi],
AC_SUBST(libmpi_usempif08_so_version)
AC_SUBST(libmpi_java_so_version)
AC_SUBST(libompitrace_so_version)])
m4_ifdef([project_orte],
[AC_SUBST(libopen_rte_so_version)])
m4_ifdef([project_oshmem],
[AC_SUBST(liboshmem_so_version)])
AC_SUBST(libopen_pal_so_version)
@ -159,7 +152,6 @@ AC_SUBST(libmca_opal_common_ofi_so_version)
AC_SUBST(libmca_opal_common_cuda_so_version)
AC_SUBST(libmca_opal_common_sm_so_version)
AC_SUBST(libmca_opal_common_ugni_so_version)
AC_SUBST(libmca_orte_common_alps_so_version)
AC_SUBST(libmca_ompi_common_ompio_so_version)
AC_SUBST(libmca_ompi_common_monitoring_so_version)
AC_SUBST(libmca_opal_common_ucx_so_version)
@ -242,12 +234,6 @@ OPAL_TOP_BUILDDIR="$OMPI_TOP_BUILDDIR"
AC_SUBST(OPAL_TOP_SRCDIR)
AC_SUBST(OPAL_TOP_BUILDDIR)
m4_ifdef([project_orte],
[ORTE_TOP_SRCDIR="$OMPI_TOP_SRCDIR"
ORTE_TOP_BUILDDIR="$OMPI_TOP_BUILDDIR"
AC_SUBST(ORTE_TOP_SRCDIR)
AC_SUBST(ORTE_TOP_BUILDDIR)])
m4_ifdef([project_oshmem],
[OSHMEM_TOP_SRCDIR="$OMPI_TOP_SRCDIR"
OSHMEM_TOP_BUILDDIR="$OMPI_TOP_BUILDDIR"
@ -261,9 +247,7 @@ m4_ifdef([project_oshmem],
OPAL_CONFIGURE_OPTIONS
OPAL_CHECK_OS_FLAVORS
OPAL_CHECK_CUDA
OPAL_CHECK_PMI
OPAL_CHECK_PMIX
m4_ifdef([project_orte], [ORTE_CONFIGURE_OPTIONS])
m4_ifdef([project_ompi], [OMPI_CONFIGURE_OPTIONS])
m4_ifdef([project_oshmem], [OSHMEM_CONFIGURE_OPTIONS])
@ -271,9 +255,6 @@ m4_ifdef([project_oshmem], [OSHMEM_CONFIGURE_OPTIONS])
AS_IF([test "$enable_ompi" != "no"], [project_ompi_amc=true], [project_ompi_amc=false])
m4_ifndef([project_ompi], [project_ompi_amc=false])
AS_IF([test "$enable_orte" != "no"], [project_orte_amc=true], [project_orte_amc=false])
m4_ifndef([project_orte], [project_orte_amc=false])
AS_IF([test "$enable_oshmem" != "no"], [project_oshmem_amc=true], [project_oshmem_amc="no (disabled)"])
m4_ifndef([project_oshmem], [project_oshmem_amc="no (not available)"])
@ -303,8 +284,6 @@ fi
# The library prefixes must be set before we call OPAL MCA. Here is
# as good a place as any.
OPAL_SET_LIB_PREFIX([])
m4_ifdef([project_orte],
[ORTE_SET_LIB_PREFIX([])])
m4_ifdef([project_ompi],
[OMPI_SET_LIB_NAME([])])
@ -554,7 +533,7 @@ OPAL_CHECK_OFFSETOF
# C++ compiler characteristics
##################################
# We don't need C++ unless we're building Open MPI; ORTE and OPAL do
# We don't need C++ unless we're building Open MPI and OPAL do
# not use C++ at all. The OPAL macro name appears to be a bit of a
# misnomer; I'm not sure why it was split into a second macro and put
# into OPAL...? All it does is setup the C++ compiler (the OMPI macro
@ -1022,11 +1001,6 @@ if test -z "$LEX" || \
fi
fi
#
# Look for ps command and arguments for orte-clean
#
m4_ifdef([project_orte], [OPAL_PS_FLAVOR_CHECK])
#
# File system case sensitivity
#
@ -1209,7 +1183,6 @@ opal_show_title "Symbol visibility feature"
OPAL_CHECK_VISIBILITY
############################################################################
# Final top-level OMPI configuration
############################################################################
@ -1283,8 +1256,7 @@ LT_OUTPUT
# final compiler config
############################################################################
m4_ifdef([project_ompi], [opal_show_subtitle "Compiler flags"],
[m4_ifdef([project_orte], [opal_show_subtitle "Compiler flags"])])
m4_ifdef([project_ompi], [opal_show_subtitle "Compiler flags"])
#
# This is needed for VPATH builds, so that it will -I the appropriate
@ -1293,31 +1265,23 @@ m4_ifdef([project_ompi], [opal_show_subtitle "Compiler flags"],
# purely aesthetic.
#
# Because opal_config.h and mpi.h are created by AC_CONFIG_HEADERS, we
# don't need to -I the builddir for <opal,ompi>/include. However, we do
# need to add it for orte as it doesn't have an AC_CONFIG_HEADERS that
# will install it for us. If we VPATH building, we do need to include the
# source directories, however.
# don't need to -I the builddir for <opal,ompi>/include. If we VPATH
# building, we do need to include the source directories, however.
#
if test "$OMPI_TOP_BUILDDIR" != "$OMPI_TOP_SRCDIR"; then
# Note the embedded m4 directives here -- we must embed them
# rather than have successive assignments to these shell
# variables, lest the $(foo) names try to get evaluated here.
# Yuck!
CPPFLAGS='-I$(top_srcdir) -I$(top_builddir) -I$(top_srcdir)/opal/include m4_ifdef([project_orte], [-I$(top_srcdir)/orte/include -I$(top_builddir)/orte/include]) m4_ifdef([project_ompi], [-I$(top_srcdir)/ompi/include]) m4_ifdef([project_oshmem], [-I$(top_srcdir)/oshmem/include])'" $CPPFLAGS"
CPPFLAGS='-I$(top_srcdir) -I$(top_builddir) -I$(top_srcdir)/opal/include m4_ifdef([project_ompi], [-I$(top_srcdir)/ompi/include]) m4_ifdef([project_oshmem], [-I$(top_srcdir)/oshmem/include])'" $CPPFLAGS"
# C++ is only relevant if we're building OMPI
m4_ifdef([project_ompi], [CXXCPPFLAGS='-I$(top_srcdir) -I$(top_builddir) -I$(top_srcdir)/opal/include -I$(top_srcdir)/orte/include -I$(top_srcdir)/ompi/include'" $CXXCPPFLAGS"])
m4_ifdef([project_ompi], [CXXCPPFLAGS='-I$(top_srcdir) -I$(top_builddir) -I$(top_srcdir)/opal/include -I$(top_srcdir)/ompi/include'" $CXXCPPFLAGS"])
else
CPPFLAGS='-I$(top_srcdir) m4_ifdef([project_orte], [-I$(top_srcdir)/orte/include])'" $CPPFLAGS"
CPPFLAGS='-I$(top_srcdir)'" $CPPFLAGS"
# C++ is only relevant if we're building OMPI
m4_ifdef([project_ompi], [CXXCPPFLAGS='-I$(top_srcdir)'" $CXXCPPFLAGS"])
fi
# OMPI/ORTE wants some additional processing of the flags (e.g., get
# versions without optimization for debugger modules).
m4_ifdef([project_orte], [ORTE_SETUP_DEBUGGER_FLAGS],
[m4_ifdef([project_ompi], [ORTE_SETUP_DEBUGGER_FLAGS])])
#
# Delayed the substitution of CFLAGS and CXXFLAGS until now because
# they may have been modified throughout the course of this script.
@ -1343,7 +1307,7 @@ AC_SUBST([AMCA_PARAM_SETS_DIR], ['$(opaldatadir)/amca-param-sets'])
############################################################################
opal_show_subtitle "Wrapper compiler final setup"
# The ORTE and OMPI wrapper scripts (i.e., not the C-compiled
# The OMPI wrapper scripts (i.e., not the C-compiled
# executables) need perl.
AC_PATH_PROG(PERL, perl, perl)
@ -1371,8 +1335,8 @@ if test $ac_cv_header_sys_synch_h = yes ; then
fi
# If there is a local hook for each project, call it. This allows 3rd
# parties to add configuration steps to OPAL, ORTE, and/or OMPI simply
# by placing a file in [opal|orte|ompi]/config/whatever.m4 that
# parties to add configuration steps to OPAL and/or OMPI simply
# by placing a file in [opal|ompi]/config/whatever.m4 that
# AC_DEFUN's the appropriate macro name -- no patching is necessary.
# If that macro is defined, we'll run it here.
#
@ -1392,8 +1356,6 @@ fi
# :-\
m4_ifdef([opal_CONFIG_LOCAL], [opal_CONFIG_LOCAL])
m4_ifdef([project_orte],
[m4_ifdef([orte_CONFIG_LOCAL], [orte_CONFIG_LOCAL])])
m4_ifdef([project_ompi],
[m4_ifdef([ompi_CONFIG_LOCAL], [ompi_CONFIG_LOCAL])])
@ -1406,7 +1368,6 @@ m4_ifdef([project_ompi],
# MCA tests. If a project is to be disabled, also remove it from
# MCA_PROJECT_SUBDIRS to actually disable building.
AM_CONDITIONAL([PROJECT_OMPI], [test "$project_ompi_amc" = "true"])
AM_CONDITIONAL([PROJECT_ORTE], [test "$project_orte_amc" = "true"])
AM_CONDITIONAL([PROJECT_OSHMEM], [test "$project_oshmem_amc" = "true"])
AC_MSG_CHECKING([if libtool needs -no-undefined flag to build shared libraries])
@ -1424,7 +1385,7 @@ esac
# opaldatadir, opallibdir, and opalinclude are essentially the same as
# pkg*dir, but will always be */openmpi. This is to make it a bit
# easier to deal with the problem of opal, orte, and ompi built from
# easier to deal with the problem of opal and ompi built from
# their own tarballs, with their own PACKAGE variables.
opaldatadir='${datadir}/openmpi'
opallibdir='${libdir}/openmpi'
@ -1435,13 +1396,6 @@ AC_SUBST(opalincludedir)
OPAL_SET_MCA_PREFIX([OMPI_MCA_])
OPAL_SET_MCA_CMD_LINE_ID([mca])
m4_ifdef([project_orte],
[ortedatadir="$opaldatadir"
AC_SUBST(ortedatadir)
ortelibdir="$opallibdir"
AC_SUBST(ortelibdir)
orteincludedir="$opalincludedir"
AC_SUBST(orteincludedir)])
m4_ifdef([project_ompi],
[ompidatadir="$opaldatadir"
AC_SUBST(ompidatadir)
@ -1459,6 +1413,13 @@ m4_ifdef([project_oshmem],
opal_show_subtitle "Final output"
AC_MSG_CHECKING([OMPI final CPPFLAGS])
AC_MSG_RESULT([$CPPFLAGS])
AC_MSG_CHECKING([OMPI final LDFLAGS])
AC_MSG_RESULT([$LDFLAGS])
AC_MSG_CHECKING([OMPI final LIBS])
AC_MSG_RESULT([$LIBS])
AC_CONFIG_FILES([
Makefile
@ -1490,12 +1451,26 @@ AC_CONFIG_FILES([contrib/dist/mofed/compile_debian_mlnx_example],
[chmod +x contrib/dist/mofed/compile_debian_mlnx_example])
OPAL_CONFIG_FILES
m4_ifdef([project_orte], [ORTE_CONFIG_FILES])
m4_ifdef([project_ompi], [OMPI_CONFIG_FILES])
m4_ifdef([project_oshmem], [OSHMEM_CONFIG_FILES])
OPAL_CHECK_LIBNL_SUMMARY
##################################
# PRRTE support
##################################
opal_show_title "Setup PRRTE support"
m4_ifdef([project_prrte],
[OMPI_SETUP_PRRTE
ompi_want_prrte=yes],
[ompi_want_prrte=no])
AM_CONDITIONAL(OMPI_WANT_PRRTE, test "$ompi_want_prrte" = "yes")
# checkpoint results
AC_CACHE_SAVE
AC_OUTPUT
OPAL_SUMMARY_PRINT

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

@ -9,7 +9,7 @@
#include <stdio.h>
#include "mpi.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/argv.h"
#include "opal/util/printf.h"
#include "orte/runtime/runtime.h"

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

@ -14,7 +14,7 @@
# Copyright (c) 2010-2011 Sandia National Laboratories. All rights reserved.
# Copyright (c) 2013-2015 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2015-2017 Intel, Inc. All rights reserved.
# Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
# Copyright (c) 2015-2018 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2016 IBM Corporation. All rights reserved.
@ -152,10 +152,6 @@ lib@OMPI_LIBMPI_NAME@_la_LIBADD = \
$(OMPI_LIBMPI_EXTRA_LIBS)
if OMPI_RTE_ORTE
lib@OMPI_LIBMPI_NAME@_la_LIBADD += \
$(OMPI_TOP_BUILDDIR)/orte/lib@ORTE_LIB_PREFIX@open-rte.la
endif
lib@OMPI_LIBMPI_NAME@_la_LIBADD += \
$(OMPI_TOP_BUILDDIR)/opal/lib@OPAL_LIB_PREFIX@open-pal.la
lib@OMPI_LIBMPI_NAME@_la_DEPENDENCIES = $(lib@OMPI_LIBMPI_NAME@_la_LIBADD)

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

@ -20,7 +20,7 @@
* All rights reserved.
* Copyright (c) 2014-2017 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Mellanox Technologies. All rights reserved.
* Copyright (c) 2017 IBM Corporation. All rights reserved.
* $COPYRIGHT$
@ -37,7 +37,7 @@
#include "ompi/constants.h"
#include "opal/mca/hwloc/base/base.h"
#include "opal/dss/dss.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/string_copy.h"
#include "ompi/proc/proc.h"
@ -673,7 +673,7 @@ static int ompi_comm_split_type_get_part (ompi_group_t *group, const int split_t
u16ptr = &locality;
OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_LOCALITY, &proc_name, &u16ptr, OPAL_UINT16);
OPAL_MODEX_RECV_VALUE(ret, PMIX_LOCALITY, &proc_name, &u16ptr, PMIX_UINT16);
if (OPAL_SUCCESS != ret) {
continue;
}
@ -1655,7 +1655,7 @@ int ompi_comm_get_rprocs ( ompi_communicator_t *local_comm,
* to provide this information at startup */
uint16_t *u16ptr, u16;
u16ptr = &u16;
OPAL_MODEX_RECV_VALUE(rc, OPAL_PMIX_LOCALITY, &rprocs[i]->super.proc_name, &u16ptr, OPAL_UINT16);
OPAL_MODEX_RECV_VALUE(rc, PMIX_LOCALITY, &rprocs[i]->super.proc_name, &u16ptr, PMIX_UINT16);
if (OPAL_SUCCESS == rc) {
rprocs[i]->super.proc_flags = u16;
} else {

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

@ -17,7 +17,7 @@
* Copyright (c) 2012-2016 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2012 Oak Ridge National Labs. All rights reserved.
* Copyright (c) 2013-2016 Intel, Inc. All rights reserved.
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2016 IBM Corporation. All rights reserved.
@ -33,7 +33,7 @@
#include "ompi_config.h"
#include "opal/dss/dss.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/base/base.h"
#include "opal/util/printf.h"
#include "ompi/proc/proc.h"
@ -43,7 +43,7 @@
#include "opal/class/opal_pointer_array.h"
#include "opal/class/opal_list.h"
#include "ompi/mca/pml/pml.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/mca/coll/base/base.h"
#include "ompi/request/request.h"
#include "ompi/runtime/mpiruntime.h"
@ -891,11 +891,12 @@ static int ompi_comm_allreduce_pmix_reduce_complete (ompi_comm_request_t *reques
ompi_comm_allreduce_context_t *context = (ompi_comm_allreduce_context_t *) request->context;
ompi_comm_cid_context_t *cid_context = context->cid_context;
int32_t size_count = context->count;
opal_value_t info;
opal_pmix_pdata_t pdat;
pmix_info_t info;
pmix_pdata_t pdat;
opal_buffer_t sbuf;
int rc;
int bytes_written;
char *key;
const int output_id = 0;
const int verbosity_level = 1;
@ -907,32 +908,34 @@ static int ompi_comm_allreduce_pmix_reduce_complete (ompi_comm_request_t *reques
return rc;
}
OBJ_CONSTRUCT(&info, opal_value_t);
OBJ_CONSTRUCT(&pdat, opal_pmix_pdata_t);
PMIX_PDATA_CONSTRUCT(&pdat);
info.type = OPAL_BYTE_OBJECT;
info.value.type = OPAL_BYTE_OBJECT;
pdat.value.type = OPAL_BYTE_OBJECT;
opal_dss.unload(&sbuf, (void**)&info.data.bo.bytes, &info.data.bo.size);
opal_dss.unload(&sbuf, (void**)&info.value.data.bo.bytes, &rc);
info.value.data.bo.size = rc;
OBJ_DESTRUCT(&sbuf);
bytes_written = opal_asprintf(&info.key,
bytes_written = opal_asprintf(&key,
cid_context->send_first ? "%s:%s:send:%d"
: "%s:%s:recv:%d",
cid_context->port_string,
cid_context->pmix_tag,
cid_context->iter);
PMIX_LOAD_KEY(&info, key);
free(key);
if (bytes_written == -1) {
opal_output_verbose (verbosity_level, output_id, "writing info.key failed\n");
} else {
bytes_written = opal_asprintf(&pdat.value.key,
bytes_written = opal_asprintf(&key,
cid_context->send_first ? "%s:%s:recv:%d"
: "%s:%s:send:%d",
cid_context->port_string,
cid_context->pmix_tag,
cid_context->iter);
PMIX_LOAD_KEY(&pdat.key, key);
free(key);
if (bytes_written == -1) {
opal_output_verbose (verbosity_level, output_id, "writing pdat.value.key failed\n");
}
@ -950,8 +953,8 @@ static int ompi_comm_allreduce_pmix_reduce_complete (ompi_comm_request_t *reques
/* this macro is not actually non-blocking. if a non-blocking version becomes available this function
* needs to be reworked to take advantage of it. */
OPAL_PMIX_EXCHANGE(rc, &info, &pdat, 600); // give them 10 minutes
OBJ_DESTRUCT(&info);
rc = opal_pmix_base_exchange(&info, &pdat, 600); // give them 10 minutes
PMIX_INFO_DESTRUCT(&info);
if (OPAL_SUCCESS != rc) {
OBJ_DESTRUCT(&pdat);
return rc;
@ -959,9 +962,6 @@ static int ompi_comm_allreduce_pmix_reduce_complete (ompi_comm_request_t *reques
OBJ_CONSTRUCT(&sbuf, opal_buffer_t);
opal_dss.load(&sbuf, pdat.value.data.bo.bytes, pdat.value.data.bo.size);
pdat.value.data.bo.bytes = NULL;
pdat.value.data.bo.size = 0;
OBJ_DESTRUCT(&pdat);
rc = opal_dss.unpack (&sbuf, context->outbuf, &size_count, OPAL_INT);
OBJ_DESTRUCT(&sbuf);

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

@ -20,7 +20,7 @@
* All rights reserved.
* Copyright (c) 2015-2017 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2016-2017 IBM Corporation. All rights reserved.
* $COPYRIGHT$
*
@ -36,7 +36,7 @@
#include "opal/util/bit_ops.h"
#include "opal/util/info_subscriber.h"
#include "opal/util/string_copy.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "ompi/constants.h"
#include "ompi/mca/pml/pml.h"
#include "ompi/mca/coll/base/base.h"
@ -162,7 +162,7 @@ int ompi_comm_init(void)
char *str=NULL;
int rc;
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, OPAL_PMIX_MAPBY, &wildcard, &str, OPAL_STRING);
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_MAPBY, &wildcard, &str, PMIX_STRING);
if ( 0 == rc && NULL != str) {
if ( strstr ( str, "BYNODE") ) {
OMPI_COMM_SET_MAPBY_NODE(&ompi_mpi_comm_world.comm);

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

@ -14,6 +14,7 @@
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved.
* Copyright (c) 2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -52,7 +53,7 @@
#include "opal/util/printf.h"
#include "opal/mca/installdirs/installdirs.h"
#include "debuggers.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
/**
* BEWARE: The following headers are required by optimized builds in order
* to get access to the type information. Some compilers remove all type

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

@ -45,13 +45,13 @@
#include "opal/util/printf.h"
#include "opal/dss/dss.h"
#include "opal/mca/hwloc/base/base.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/base/base.h"
#include "ompi/communicator/communicator.h"
#include "ompi/group/group.h"
#include "ompi/proc/proc.h"
#include "ompi/mca/pml/pml.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/info/info.h"
#include "ompi/dpm/dpm.h"
@ -95,12 +95,16 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
ompi_communicator_t **newcomm)
{
int k, size, rsize, rank, rc, rportlen=0;
char **members = NULL, *nstring, *rport=NULL;
char **members = NULL, *nstring, *rport=NULL, *key, *pkey;
bool dense, isnew;
opal_process_name_t pname;
opal_list_t ilist, mlist, rlist;
opal_value_t info;
opal_pmix_pdata_t pdat;
pmix_info_t info;
pmix_value_t pval;
pmix_pdata_t pdat;
pmix_proc_t *procs, pxproc;
size_t nprocs, n;
pmix_status_t pret;
opal_namelist_t *nm;
opal_jobid_t jobid;
@ -112,18 +116,6 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
ompi_group_t *new_group_pointer;
ompi_dpm_proct_caddy_t *cd;
if (NULL == opal_pmix.publish || NULL == opal_pmix.connect ||
NULL == opal_pmix.unpublish ||
(NULL == opal_pmix.lookup && NULL == opal_pmix.lookup_nb)) {
/* print a nice message explaining we don't have support */
opal_show_help("help-mpi-runtime.txt", "noconxcpt", true);
return OMPI_ERR_NOT_SUPPORTED;
}
if (!ompi_rte_connect_accept_support(port_string)) {
/* they will have printed the help message */
return OMPI_ERR_NOT_SUPPORTED;
}
/* set default error return */
*newcomm = MPI_COMM_NULL;
@ -150,9 +142,10 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
/* have to add the number of procs in the job so the remote side
* can correctly add the procs by computing their names, and our nspace
* so they can update their records */
if (NULL == (nstring = (char*)opal_pmix.get_nspace(OMPI_PROC_MY_NAME->jobid))) {
nstring = opal_jobid_print(pname.jobid);
if (NULL == nstring) {
opal_argv_free(members);
return OMPI_ERR_NOT_SUPPORTED;
return OMPI_ERROR;
}
opal_argv_append_nosize(&members, nstring);
(void)opal_asprintf(&nstring, "%d", size);
@ -192,10 +185,10 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
}
opal_argv_append_nosize(&members, nstring);
free(nstring);
if (NULL == (nstring = (char*)opal_pmix.get_nspace(proc_name.jobid))) {
nstring = opal_jobid_print(pname.jobid);
if (OPAL_SUCCESS != rc) {
opal_argv_free(members);
free (proc_list);
return OMPI_ERR_NOT_SUPPORTED;
return OMPI_ERROR;
}
opal_argv_append_nosize(&members, nstring);
}
@ -207,30 +200,31 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
if (rank == root) {
/* the roots for each side exchange their list of participants */
OBJ_CONSTRUCT(&info, opal_value_t);
OBJ_CONSTRUCT(&pdat, opal_pmix_pdata_t);
if (send_first) {
(void)opal_asprintf(&info.key, "%s:connect", port_string);
(void)opal_asprintf(&pdat.value.key, "%s:accept", port_string);
(void)opal_asprintf(&key, "%s:connect", port_string);
(void)opal_asprintf(&pkey, "%s:accept", port_string);
} else {
(void)opal_asprintf(&info.key, "%s:accept", port_string);
(void)opal_asprintf(&pdat.value.key, "%s:connect", port_string);
(void)opal_asprintf(&key, "%s:accept", port_string);
(void)opal_asprintf(&pkey, "%s:connect", port_string);
}
info.type = OPAL_STRING;
info.data.string = opal_argv_join(members, ':');
pdat.value.type = OPAL_STRING;
nstring = opal_argv_join(members, ':');
PMIX_INFO_LOAD(&info, key, nstring, PMIX_STRING);
PMIX_LOAD_KEY(pdat.key, pkey);
free(nstring);
free(key);
free(pkey);
OPAL_PMIX_EXCHANGE(rc, &info, &pdat, 600); // give them 10 minutes
OBJ_DESTRUCT(&info);
rc = opal_pmix_base_exchange(&info, &pdat, 600); // give them 10 minutes
PMIX_INFO_DESTRUCT(&info);
if (OPAL_SUCCESS != rc) {
OBJ_DESTRUCT(&pdat);
PMIX_PDATA_DESTRUCT(&pdat);
return rc;
}
/* save the result */
rport = strdup(pdat.value.data.string); // need this later
rportlen = strlen(rport) + 1; // retain the NULL terminator
OBJ_DESTRUCT(&pdat);
PMIX_PDATA_DESTRUCT(&pdat);
}
/* if we aren't in a comm_spawn, the non-root members won't have
@ -313,6 +307,16 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
opal_argv_free(members);
members = NULL;
/* convert the list of members to a pmix_proc_t array */
nprocs = opal_list_get_size(&mlist);
PMIX_PROC_CREATE(procs, nprocs);
n = 0;
OPAL_LIST_FOREACH(nm, &mlist, opal_namelist_t) {
OPAL_PMIX_CONVERT_NAME(&procs[n], &nm->name);
++n;
}
OPAL_LIST_DESTRUCT(&mlist);
/* rport contains a colon-delimited list
* of process names for the remote procs - convert it
* into an argv array */
@ -331,6 +335,7 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
opal_argv_free(members);
OPAL_LIST_DESTRUCT(&ilist);
OPAL_LIST_DESTRUCT(&rlist);
PMIX_PROC_FREE(procs, nprocs);
goto exit;
}
/* next entry is the nspace - register it */
@ -340,9 +345,9 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
opal_argv_free(members);
OPAL_LIST_DESTRUCT(&ilist);
OPAL_LIST_DESTRUCT(&rlist);
PMIX_PROC_FREE(procs, nprocs);
goto exit;
}
opal_pmix.register_jobid(nm->name.jobid, members[i]);
if (OPAL_VPID_WILDCARD == nm->name.vpid) {
jobid = nm->name.jobid;
OBJ_RELEASE(nm);
@ -356,6 +361,7 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
OPAL_LIST_DESTRUCT(&ilist);
OPAL_LIST_DESTRUCT(&rlist);
rc = OMPI_ERR_BAD_PARAM;
PMIX_PROC_FREE(procs, nprocs);
goto exit;
}
rsize = strtoul(members[i+1], NULL, 10);
@ -397,8 +403,9 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
/* tell the host RTE to connect us - this will download
* all known data for the nspace's of participating procs
* so that add_procs will not result in a slew of lookups */
rc = opal_pmix.connect(&mlist);
OPAL_LIST_DESTRUCT(&mlist);
pret = PMIx_Connect(procs, nprocs, NULL, 0);
PMIX_PROC_FREE(procs, nprocs);
rc = opal_pmix_convert_status(pret);
if (OPAL_SUCCESS != rc) {
OMPI_ERROR_LOG(rc);
OPAL_LIST_DESTRUCT(&ilist);
@ -420,8 +427,8 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
wildcard_rank.jobid = proc->super.proc_name.jobid;
wildcard_rank.vpid = OMPI_NAME_WILDCARD->vpid;
/* retrieve the local peers */
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, OPAL_PMIX_LOCAL_PEERS,
&wildcard_rank, &val, OPAL_STRING);
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_LOCAL_PEERS,
&wildcard_rank, &val, PMIX_STRING);
if (OPAL_SUCCESS == rc && NULL != val) {
char **peers = opal_argv_split(val, ',');
free(val);
@ -435,8 +442,8 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
/* get my locality string */
val = NULL;
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, OPAL_PMIX_LOCALITY_STRING,
OMPI_PROC_MY_NAME, &val, OPAL_STRING);
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_LOCALITY_STRING,
OMPI_PROC_MY_NAME, &val, PMIX_STRING);
if (OPAL_SUCCESS == rc && NULL != val) {
mycpuset = val;
} else {
@ -445,7 +452,6 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
i = 0;
OPAL_LIST_FOREACH(cd, &ilist, ompi_dpm_proct_caddy_t) {
opal_value_t *kv;
proc = cd->p;
new_proc_list[i] = proc ;
/* ompi_proc_complete_init_single() initializes and optionally retrieves
@ -458,7 +464,7 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
if (peer_ranks[prn] == proc->super.proc_name.vpid) {
/* get their locality string */
val = NULL;
OPAL_MODEX_RECV_VALUE_IMMEDIATE(rc, OPAL_PMIX_LOCALITY_STRING,
OPAL_MODEX_RECV_VALUE_IMMEDIATE(rc, PMIX_LOCALITY_STRING,
&proc->super.proc_name, &val, OPAL_STRING);
if (OPAL_SUCCESS == rc && NULL != val) {
u16 = opal_hwloc_compute_relative_locality(mycpuset, val);
@ -469,12 +475,10 @@ int ompi_dpm_connect_accept(ompi_communicator_t *comm, int root,
}
proc->super.proc_flags = u16;
/* save the locality for later */
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_LOCALITY);
kv->type = OPAL_UINT16;
kv->data.uint16 = proc->super.proc_flags;
opal_pmix.store_local(&proc->super.proc_name, kv);
OBJ_RELEASE(kv); // maintain accounting
OPAL_PMIX_CONVERT_NAME(&pxproc, &proc->super.proc_name);
pval.type = PMIX_UINT16;
pval.data.uint16 = proc->super.proc_flags;
PMIx_Store_internal(&pxproc, PMIX_LOCALITY, &pval);
break;
}
}
@ -623,8 +627,12 @@ static int construct_peers(ompi_group_t *group, opal_list_t *peers)
int ompi_dpm_disconnect(ompi_communicator_t *comm)
{
int ret;
pmix_status_t rc;
ompi_group_t *group;
opal_list_t coll;
opal_namelist_t *nm;
pmix_proc_t *procs;
size_t nprocs, n;
/* Note that we explicitly use an RTE-based barrier (vs. an MPI
barrier). See a lengthy comment in
@ -648,15 +656,24 @@ int ompi_dpm_disconnect(ompi_communicator_t *comm)
OPAL_LIST_DESTRUCT(&coll);
return ret;
}
nprocs = opal_list_get_size(&coll);
PMIX_PROC_CREATE(procs, nprocs);
n = 0;
OPAL_LIST_FOREACH(nm, &coll, opal_namelist_t) {
OPAL_PMIX_CONVERT_NAME(&procs[n], &nm->name);
++n;
}
OPAL_LIST_DESTRUCT(&coll);
/* ensure we tell the host RM to disconnect us - this
* is a blocking operation so just use a fence */
if (OMPI_SUCCESS != (ret = opal_pmix.fence(&coll, false))) {
if (PMIX_SUCCESS != (rc = PMIx_Fence(procs, nprocs, NULL, 0))) {
ret = opal_pmix_convert_status(rc);
OMPI_ERROR_LOG(ret);
OPAL_LIST_DESTRUCT(&coll);
PMIX_PROC_FREE(procs, nprocs);
return ret;
}
OPAL_LIST_DESTRUCT(&coll);
PMIX_PROC_FREE(procs, nprocs);
return ret;
}
@ -679,14 +696,17 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
char slot_list[OPAL_MAX_INFO_VAL];
uint32_t ui32;
bool personality = false;
opal_jobid_t jobid;
opal_list_t apps;
char *tmp;
pmix_app_t *apps, *app;
opal_list_t job_info;
opal_pmix_app_t *app;
opal_value_t *info;
opal_list_t app_info;
opal_info_item_t *info;
bool local_spawn, non_mpi;
char **envars;
size_t ninfo, n;
pmix_info_t *pinfo = NULL;
pmix_status_t pret;
pmix_nspace_t nspace;
/* parse the info object */
/* check potentially for:
@ -726,20 +746,12 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
/* setup the job object */
OBJ_CONSTRUCT(&job_info, opal_list_t);
OBJ_CONSTRUCT(&apps, opal_list_t);
PMIX_APP_CREATE(apps, count);
/* Convert the list of commands to list of opal_pmix_app_t */
/* Convert the list of commands to array of pmix_app_t */
for (i = 0; i < count; ++i) {
app = OBJ_NEW(opal_pmix_app_t);
if (NULL == app) {
OMPI_ERROR_LOG(OMPI_ERR_OUT_OF_RESOURCE);
OPAL_LIST_DESTRUCT(&apps);
opal_progress_event_users_decrement();
return OMPI_ERR_OUT_OF_RESOURCE;
}
/* add the app to the job data */
opal_list_append(&apps, &app->super);
app = &apps[i];
OBJ_CONSTRUCT(&app_info, opal_list_t);
/* copy over the name of the executable */
app->cmd = strdup(array_of_commands[i]);
opal_argv_append_nosize(&app->argv, app->cmd);
@ -773,46 +785,41 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
ompi_info_get (array_of_info[i], "personality", sizeof(host) - 1, host, &flag);
if ( flag ) {
personality = true;
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_PERSONALITY);
opal_value_load(info, host, OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_PERSONALITY, host, PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
/* check for 'host' */
ompi_info_get (array_of_info[i], "host", sizeof(host) - 1, host, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_HOST);
opal_value_load(info, host, OPAL_STRING);
opal_list_append(&app->info, &info->super);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_HOST, host, PMIX_STRING);
opal_list_append(&app_info, &info->super);
}
/* check for 'hostfile' */
ompi_info_get (array_of_info[i], "hostfile", sizeof(host) - 1, host, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_HOSTFILE);
opal_value_load(info, host, OPAL_STRING);
opal_list_append(&app->info, &info->super);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_HOSTFILE, host, PMIX_STRING);
opal_list_append(&app_info, &info->super);
}
/* check for 'add-hostfile' */
ompi_info_get (array_of_info[i], "add-hostfile", sizeof(host) - 1, host, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_ADD_HOSTFILE);
opal_value_load(info, host, OPAL_STRING);
opal_list_append(&app->info, &info->super);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOSTFILE, host, PMIX_STRING);
opal_list_append(&app_info, &info->super);
}
/* check for 'add-host' */
ompi_info_get (array_of_info[i], "add-host", sizeof(host) - 1, host, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_ADD_HOST);
opal_value_load(info, host, OPAL_STRING);
opal_list_append(&app->info, &info->super);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_ADD_HOST, host, PMIX_STRING);
opal_list_append(&app_info, &info->super);
}
/* check for env */
@ -834,106 +841,95 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
*/
ompi_info_get (array_of_info[i], "ompi_prefix", sizeof(prefix) - 1, prefix, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_PREFIX);
opal_value_load(info, prefix, OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_PREFIX, prefix, PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
/* check for 'wdir' */
ompi_info_get (array_of_info[i], "wdir", sizeof(cwd) - 1, cwd, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_WDIR);
opal_value_load(info, cwd, OPAL_STRING);
opal_list_append(&app->info, &info->super);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_WDIR, cwd, PMIX_STRING);
opal_list_append(&app_info, &info->super);
have_wdir = 1;
}
/* check for 'mapper' - a job-level key */
ompi_info_get(array_of_info[i], "mapper", sizeof(mapper) - 1, mapper, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_MAPPER);
opal_value_load(info, mapper, OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_MAPPER, mapper, PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
/* check for 'display_map' - a job-level key */
ompi_info_get_bool(array_of_info[i], "display_map", &local_spawn, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_DISPLAY_MAP);
opal_value_load(info, &local_spawn, OPAL_BOOL);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_DISPLAY_MAP, &local_spawn, PMIX_BOOL);
opal_list_append(&job_info, &info->super);
}
/* check for 'npernode' and 'ppr' - job-level key */
ompi_info_get (array_of_info[i], "npernode", sizeof(slot_list) - 1, slot_list, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_PPR);
info->type = OPAL_STRING;
(void)opal_asprintf(&(info->data.string), "%s:n", slot_list);
info = OBJ_NEW(opal_info_item_t);
(void)opal_asprintf(&tmp, "%s:n", slot_list);
PMIX_INFO_LOAD(&info->info, PMIX_PPR, tmp, PMIX_STRING);
free(tmp);
opal_list_append(&job_info, &info->super);
}
ompi_info_get (array_of_info[i], "pernode", sizeof(slot_list) - 1, slot_list, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_PPR);
opal_value_load(info, "1:n", OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_PPR, "1:n", PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
ompi_info_get (array_of_info[i], "ppr", sizeof(slot_list) - 1, slot_list, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_PPR);
opal_value_load(info, slot_list, OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_PPR, slot_list, PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
/* check for 'map_by' - job-level key */
ompi_info_get(array_of_info[i], "map_by", sizeof(slot_list) - 1, slot_list, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_MAPBY);
opal_value_load(info, slot_list, OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_MAPBY, slot_list, PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
/* check for 'rank_by' - job-level key */
ompi_info_get(array_of_info[i], "rank_by", sizeof(slot_list) - 1, slot_list, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_RANKBY);
opal_value_load(info, slot_list, OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_RANKBY, slot_list, PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
/* check for 'bind_to' - job-level key */
ompi_info_get(array_of_info[i], "bind_to", sizeof(slot_list) - 1, slot_list, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_BINDTO);
opal_value_load(info, slot_list, OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_BINDTO, slot_list, PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
/* check for 'preload_binary' - job-level key */
ompi_info_get_bool(array_of_info[i], "ompi_preload_binary", &local_spawn, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_PRELOAD_BIN);
opal_value_load(info, &local_spawn, OPAL_BOOL);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_BIN, &local_spawn, PMIX_BOOL);
opal_list_append(&job_info, &info->super);
}
/* check for 'preload_files' - job-level key */
ompi_info_get (array_of_info[i], "ompi_preload_files", sizeof(cwd) - 1, cwd, &flag);
if ( flag ) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_PRELOAD_FILES);
opal_value_load(info, cwd, OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_PRELOAD_BIN, cwd, PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
@ -942,9 +938,8 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
*/
ompi_info_get_bool(array_of_info[i], "ompi_non_mpi", &non_mpi, &flag);
if (flag && non_mpi) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_NON_PMI);
opal_value_load(info, &non_mpi, OPAL_BOOL);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_NON_PMI, &non_mpi, PMIX_BOOL);
opal_list_append(&job_info, &info->super);
}
@ -966,9 +961,8 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
} else {
ui32 = strtoul(stdin_target, NULL, 10);
}
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_STDIN_TGT);
opal_value_load(info, &ui32, OPAL_UINT32);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_STDIN_TGT, &ui32, PMIX_UINT32);
opal_list_append(&job_info, &info->super);
}
}
@ -979,33 +973,57 @@ int ompi_dpm_spawn(int count, const char *array_of_commands[],
if ( !have_wdir ) {
if (OMPI_SUCCESS != (rc = opal_getcwd(cwd, OPAL_PATH_MAX))) {
OMPI_ERROR_LOG(rc);
OPAL_LIST_DESTRUCT(&apps);
PMIX_APP_FREE(apps, (size_t)count);
opal_progress_event_users_decrement();
return rc;
}
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_WDIR);
opal_value_load(info, cwd, OPAL_STRING);
opal_list_append(&app->info, &info->super);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_WDIR, cwd, PMIX_STRING);
opal_list_append(&app_info, &info->super);
}
/* leave the map info alone - the launcher will
* decide where to put things
*/
ninfo = opal_list_get_size(&app_info);
if (0 < ninfo) {
PMIX_INFO_CREATE(app->info, ninfo);
app->ninfo = ninfo;
n = 0;
OPAL_LIST_FOREACH(info, &app_info, opal_info_item_t) {
PMIX_INFO_XFER(&app->info[n], &info->info);
++n;
}
}
OPAL_LIST_DESTRUCT(&app_info);
} /* for (i = 0 ; i < count ; ++i) */
/* default the personality - job-level key */
if (!personality) {
info = OBJ_NEW(opal_value_t);
info->key = strdup(OPAL_PMIX_PERSONALITY);
opal_value_load(info, "ompi", OPAL_STRING);
info = OBJ_NEW(opal_info_item_t);
PMIX_INFO_LOAD(&info->info, PMIX_PERSONALITY, "ompi", PMIX_STRING);
opal_list_append(&job_info, &info->super);
}
/* spawn procs */
rc = opal_pmix.spawn(&job_info, &apps, &jobid);
ninfo = opal_list_get_size(&job_info);
if (0 < ninfo) {
PMIX_INFO_CREATE(pinfo, ninfo);
n = 0;
OPAL_LIST_FOREACH(info, &job_info, opal_info_item_t) {
PMIX_INFO_XFER(&pinfo[n], &info->info);
++n;
}
}
OPAL_LIST_DESTRUCT(&job_info);
OPAL_LIST_DESTRUCT(&apps);
pret = PMIx_Spawn(pinfo, ninfo, apps, count, nspace);
rc = opal_pmix_convert_status(pret);
if (NULL != pinfo) {
PMIX_INFO_FREE(pinfo, ninfo);
}
PMIX_APP_FREE(apps, (size_t)count);
if (OPAL_SUCCESS != rc) {
opal_progress_event_users_decrement();

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

@ -14,7 +14,7 @@
* Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2016 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -31,7 +31,7 @@
#include "ompi/errhandler/errhandler.h"
#include "ompi/errhandler/errhandler_predefined.h"
#include "opal/class/opal_pointer_array.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/string_copy.h"
@ -165,7 +165,7 @@ int ompi_errhandler_finalize(void)
/* JMS Add stuff here checking for unreleased errorhandlers,
similar to communicators, info handles, etc. */
opal_pmix.deregister_evhandler(default_errhandler_id, NULL, NULL);
PMIx_Deregister_event_handler(default_errhandler_id, NULL, NULL);
/* Remove errhandler F2C table */
@ -237,16 +237,17 @@ void ompi_errhandler_registration_callback(int status,
/**
* Default errhandler callback
*/
void ompi_errhandler_callback(int status,
const opal_process_name_t *source,
opal_list_t *info, opal_list_t *results,
opal_pmix_notification_complete_fn_t cbfunc,
void ompi_errhandler_callback(size_t refid, pmix_status_t status,
const pmix_proc_t *source,
pmix_info_t *info, size_t ninfo,
pmix_info_t *results, size_t nresults,
pmix_event_notification_cbfunc_fn_t cbfunc,
void *cbdata)
{
/* tell the event chain engine to go no further - we
* will handle this */
if (NULL != cbfunc) {
cbfunc(OMPI_ERR_HANDLERS_COMPLETE, NULL, NULL, NULL, cbdata);
cbfunc(PMIX_EVENT_ACTION_COMPLETE, NULL, 0, NULL, NULL, cbdata);
}
/* our default action is to abort */
ompi_mpi_abort(MPI_COMM_WORLD, status);

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

@ -12,7 +12,7 @@
* All rights reserved.
* Copyright (c) 2008-2018 Cisco Systems, Inc. All rights reserved
* Copyright (c) 2008-2009 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2015-2016 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2016 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2016 Research Organization for Information Science
@ -35,7 +35,7 @@
#include "opal/prefetch.h"
#include "opal/class/opal_object.h"
#include "opal/class/opal_pointer_array.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "ompi/runtime/mpiruntime.h"
#include "ompi/errhandler/errhandler_predefined.h"
@ -392,10 +392,11 @@ typedef struct {
int status;
} ompi_errhandler_errtrk_t;
OMPI_DECLSPEC void ompi_errhandler_callback(int status,
const opal_process_name_t *source,
opal_list_t *info, opal_list_t *results,
opal_pmix_notification_complete_fn_t cbfunc,
OMPI_DECLSPEC void ompi_errhandler_callback(size_t refid, pmix_status_t status,
const pmix_proc_t *source,
pmix_info_t *info, size_t ninfo,
pmix_info_t *results, size_t nresults,
pmix_event_notification_cbfunc_fn_t cbfunc,
void *cbdata);
OMPI_DECLSPEC void ompi_errhandler_registration_callback(int status,

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

@ -15,7 +15,7 @@
* Copyright (c) 2010-2011 Oak Ridge National Labs. All rights reserved.
* Copyright (c) 2012 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2016 Intel, Inc. All rights reserved.
* Copyright (c) 2016-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved.
* $COPYRIGHT$
*
@ -35,7 +35,7 @@
#endif
#include "opal/util/show_help.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/errhandler/errhandler_predefined.h"
#include "ompi/errhandler/errcode.h"
#include "ompi/communicator/communicator.h"

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

@ -10,6 +10,8 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2016 Intel, Inc. All rights reserved.
* Copyright (c) 2019 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -20,13 +22,8 @@
#ifndef OMPI_CONSTANTS_H
#define OMPI_CONSTANTS_H
#if defined(OMPI_RTE_ORTE) && OMPI_RTE_ORTE
#include "orte/constants.h"
#define OMPI_ERR_BASE ORTE_ERR_MAX
#else
#include "opal/constants.h"
#define OMPI_ERR_BASE OPAL_ERR_MAX
#endif
/* error codes */
enum {

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

@ -14,7 +14,7 @@
* Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2017 IBM Corporation. All rights reserved.
* $COPYRIGHT$
*
@ -27,52 +27,32 @@
#include <string.h>
#include "opal/mca/pmix/pmix.h"
#include "ompi/mca/rte/rte.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/interlib/interlib.h"
#include "mpi.h"
typedef struct {
int status;
volatile bool active;
} myreg_t;
/*
* errhandler id
*/
static size_t interlibhandler_id = SIZE_MAX;
static void model_registration_callback(int status,
size_t errhandler_ref,
void *cbdata)
{
myreg_t *trk = (myreg_t*)cbdata;
trk->status = status;
interlibhandler_id = errhandler_ref;
trk->active = false;
}
static void model_callback(int status,
const opal_process_name_t *source,
opal_list_t *info, opal_list_t *results,
opal_pmix_notification_complete_fn_t cbfunc,
static void model_callback(size_t refid, pmix_status_t status,
const pmix_proc_t *source,
pmix_info_t *info, size_t ninfo,
pmix_info_t *results, size_t nresults,
pmix_event_notification_cbfunc_fn_t cbfunc,
void *cbdata)
{
opal_value_t *val;
size_t n;
if (NULL != getenv("OMPI_SHOW_MODEL_CALLBACK")) {
/* we can ignore our own callback as we obviously
* know that we are MPI */
if (NULL != info) {
OPAL_LIST_FOREACH(val, info, opal_value_t) {
if (0 == strcmp(val->key, OPAL_PMIX_PROGRAMMING_MODEL) &&
0 == strcmp(val->data.string, "MPI")) {
for (n=0; n < ninfo; n++) {
if (PMIX_CHECK_KEY(&info[n], PMIX_PROGRAMMING_MODEL) &&
0 == strcmp(info[n].value.data.string, "MPI")) {
goto cback;
}
if (OPAL_STRING == val->type) {
opal_output(0, "OMPI Model Callback Key: %s Val %s", val->key, val->data.string);
if (OPAL_STRING == info[n].value.type) {
opal_output(0, "OMPI Model Callback Key: %s Val %s", info[n].key, info[n].value.data.string);
}
}
}
@ -84,79 +64,49 @@ static void model_callback(int status,
* are the last step as that will prevent it from notifying
* anyone else that might be listening for declarations */
if (NULL != cbfunc) {
cbfunc(OMPI_SUCCESS, NULL, NULL, NULL, cbdata);
cbfunc(PMIX_SUCCESS, NULL, 0, NULL, NULL, cbdata);
}
}
int ompi_interlib_declare(int threadlevel, char *version)
{
opal_list_t info, directives;
opal_value_t *kv;
myreg_t trk;
pmix_info_t info[4], directives;
int ret;
pmix_status_t rc;
pmix_status_t code = PMIX_MODEL_DECLARED;
/* Register an event handler for library model declarations */
trk.status = OPAL_ERROR;
trk.active = true;
/* give it a name so we can distinguish it */
OBJ_CONSTRUCT(&directives, opal_list_t);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_EVENT_HDLR_NAME);
kv->type = OPAL_STRING;
kv->data.string = strdup("MPI-Model-Declarations");
opal_list_append(&directives, &kv->super);
/* specify the event code */
OBJ_CONSTRUCT(&info, opal_list_t);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup("status"); // the key here is irrelevant
kv->type = OPAL_INT;
kv->data.integer = OPAL_ERR_MODEL_DECLARED;
opal_list_append(&info, &kv->super);
PMIX_INFO_LOAD(&directives, PMIX_EVENT_HDLR_NAME, "MPI-Model-Declarations", PMIX_STRING);
/* we could constrain the range to proc_local - technically, this
* isn't required so long as the code that generates
* the event stipulates its range as proc_local. We rely
* on that here */
opal_pmix.register_evhandler(&info, &directives, model_callback,
model_registration_callback,
(void*)&trk);
OMPI_LAZY_WAIT_FOR_COMPLETION(trk.active);
OPAL_LIST_DESTRUCT(&directives);
OPAL_LIST_DESTRUCT(&info);
if (OPAL_SUCCESS != trk.status) {
return trk.status;
rc = PMIx_Register_event_handler(&code, 1, &directives, 1, model_callback, NULL, NULL);
PMIX_INFO_DESTRUCT(&directives);
if (rc < 0) {
PMIX_INFO_DESTRUCT(&directives);
return OMPI_ERROR;
}
/* declare that we are present and active */
OBJ_CONSTRUCT(&info, opal_list_t);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_PROGRAMMING_MODEL);
kv->type = OPAL_STRING;
kv->data.string = strdup("MPI");
opal_list_append(&info, &kv->super);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_MODEL_LIBRARY_NAME);
kv->type = OPAL_STRING;
kv->data.string = strdup("OpenMPI");
opal_list_append(&info, &kv->super);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_MODEL_LIBRARY_VERSION);
kv->type = OPAL_STRING;
kv->data.string = strdup(version);
opal_list_append(&info, &kv->super);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_THREADING_MODEL);
kv->type = OPAL_STRING;
PMIX_INFO_LOAD(&info[0], PMIX_PROGRAMMING_MODEL, "MPI", PMIX_STRING);
PMIX_INFO_LOAD(&info[1], PMIX_MODEL_LIBRARY_NAME, "OpenMPI", PMIX_STRING);
PMIX_INFO_LOAD(&info[2], PMIX_MODEL_LIBRARY_VERSION, version, PMIX_STRING);
if (MPI_THREAD_SINGLE == threadlevel) {
kv->data.string = strdup("NONE");
PMIX_INFO_LOAD(&info[3], PMIX_THREADING_MODEL, "NONE", PMIX_STRING);
} else {
kv->data.string = strdup("PTHREAD");
PMIX_INFO_LOAD(&info[3], PMIX_THREADING_MODEL, "PTHREAD", PMIX_STRING);
}
opal_list_append(&info, &kv->super);
/* call pmix to initialize these values */
ret = opal_pmix.init(&info);
OPAL_LIST_DESTRUCT(&info);
rc = PMIx_Init(NULL, info, 4);
PMIX_INFO_DESTRUCT(&info[0]);
PMIX_INFO_DESTRUCT(&info[1]);
PMIX_INFO_DESTRUCT(&info[2]);
PMIX_INFO_DESTRUCT(&info[3]);
/* account for our refcount on pmix_init */
opal_pmix.finalize();
PMIx_Finalize(NULL, 0);
ret = opal_pmix_convert_status(rc);
return ret;
}

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

@ -12,6 +12,7 @@
* Copyright (c) 2007-2012 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2008 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2019-2020 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -27,7 +28,7 @@
#include "opal/runtime/opal_progress.h"
#include "opal/mca/btl/base/base.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "ompi/runtime/ompi_cr.h"
#include "ompi/mca/bml/base/base.h"
@ -155,7 +156,7 @@ int mca_bml_r2_ft_event(int state)
* Barrier to make all processes have been successfully restarted before
* we try to remove some restart only files.
*/
if( OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if( OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0, NULL, 0))) {
opal_output(0, "bml:r2: ft_event(Restart): Failed to fence complete\n");
return ret;
}
@ -227,7 +228,7 @@ int mca_bml_r2_ft_event(int state)
* Barrier to make all processes have been successfully restarted before
* we try to remove some restart only files.
*/
if( OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if( OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0, NULL, 0))) {
opal_output(0, "bml:r2: ft_event(Restart): Failed to fence complete\n");
return ret;
}

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

@ -14,6 +14,7 @@
* All rights reserved.
* Copyright (c) 2014 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -36,7 +37,7 @@
#include "opal/mca/base/base.h"
#include "opal/mca/base/mca_base_component_repository.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/mca/coll/coll.h"
#include "ompi/mca/coll/base/base.h"

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

@ -21,8 +21,8 @@
#include "mpi.h"
#include "opal/util/show_help.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/constants.h"
#include "ompi/communicator/communicator.h"

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

@ -1,7 +1,7 @@
/**
Copyright (c) 2011 Mellanox Technologies. All rights reserved.
Copyright (c) 2015 Research Organization for Information Science
and Technology (RIST). All rights reserved.
Copyright (c) 2015-2019 Research Organization for Information Science
and Technology (RIST). All rights reserved.
$COPYRIGHT$
Additional copyrights may follow
@ -15,6 +15,7 @@
#include "ompi_config.h"
#include "mpi.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/mca/mca.h"
#include "opal/memoryhooks/memory.h"
#include "opal/mca/memory/base/base.h"
@ -26,8 +27,6 @@
#include "ompi/attribute/attribute.h"
#include "ompi/op/op.h"
#include "orte/runtime/orte_globals.h"
#include "hcoll/api/hcoll_api.h"
#include "hcoll/api/hcoll_constants.h"

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

@ -7,8 +7,8 @@
* reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2019 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -316,7 +316,7 @@ static rte_grp_handle_t get_world_group_handle(void)
}
static uint32_t jobid(void){
return ORTE_PROC_MY_NAME->jobid;
return OMPI_PROC_MY_NAME->jobid;
}
static int group_id(rte_grp_handle_t group){

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

@ -15,7 +15,7 @@
* All rights reserved.
* Copyright (c) 2014-2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved.
* $COPYRIGHT$
*
@ -58,7 +58,7 @@
#include "ompi/group/group.h"
#include "ompi/mca/coll/coll.h"
#include "ompi/mca/coll/base/base.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/proc/proc.h"
#include "coll_sm.h"

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

@ -12,7 +12,7 @@
* Copyright (c) 2009 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2018 Intel, Inc. All rights reserved.
* Copyright (c) 2018-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -32,7 +32,7 @@
#include "mpi.h"
#include "opal/util/show_help.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/constants.h"
#include "ompi/communicator/communicator.h"

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

@ -8,7 +8,7 @@
* Copyright (c) 2010-2012 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2015 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved.
* $COPYRIGHT$
*
@ -35,10 +35,10 @@
#include "opal/util/opal_environ.h"
#include "ompi/mca/mca.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "ompi/request/request.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/mca/pml/pml.h"
#include "ompi/mca/pml/base/base.h"
#include "ompi/mca/pml/base/pml_base_request.h"
@ -3030,7 +3030,7 @@ ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_ft_event(
if( opal_cr_timing_barrier_enabled ) {
OPAL_CR_SET_TIMER(OPAL_CR_TIMER_CRCPBR0);
if( OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if( OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
exit_status = ret;
goto DONE;
}
@ -3101,7 +3101,7 @@ ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_ft_event(
if( opal_cr_timing_barrier_enabled ) {
OPAL_CR_SET_TIMER(OPAL_CR_TIMER_COREBR1);
if( OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if( OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
exit_status = ret;
goto DONE;
}
@ -6222,7 +6222,7 @@ static void display_all_timers(int state) {
return;
}
else if( 2 == timing_enabled ) {
if( OPAL_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if( OPAL_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
OPAL_ERROR_LOG(ret);
}
return;
@ -6245,7 +6245,7 @@ static void display_all_timers(int state) {
if( timing_enabled >= 2) {
barrier_start = get_time();
if( OPAL_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if( OPAL_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
OPAL_ERROR_LOG(ret);
}
barrier_stop = get_time();

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

@ -10,9 +10,9 @@
# University of Stuttgart. All rights reserved.
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
# Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2017 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2017-2019 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -26,10 +26,6 @@ AM_CPPFLAGS = \
-I$(OMPI_TOP_BUILDDIR)/opal/include \
-I$(OMPI_TOP_SRCDIR)/opal \
-I$(OMPI_TOP_SRCDIR)/opal/include \
-I$(OMPI_TOP_BUILDDIR)/orte \
-I$(OMPI_TOP_BUILDDIR)/orte/include \
-I$(OMPI_TOP_SRCDIR)/orte \
-I$(OMPI_TOP_SRCDIR)/orte/include \
-I$(OMPI_TOP_BUILDDIR)/ompi \
-I$(OMPI_TOP_BUILDDIR)/ompi/include \
-I$(OMPI_TOP_SRCDIR)/ompi \

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

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
* $COPYRIGHT$
*
@ -20,15 +20,14 @@
#if (OPAL_MAJOR_VERSION >= 2)
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix_types.h"
#include "opal/mca/pmix/pmix-internal.h"
#define OFI_COMPAT_MODEX_RECV(ret, mtl_version, proc, ep_name, size) \
OPAL_MODEX_RECV((ret), (mtl_version), &(proc)->super.proc_name, (ep_name), (size));
#define OFI_COMPAT_MODEX_SEND(ret, mtl_version, ep_name, namelen) \
OPAL_MODEX_SEND((ret), \
OPAL_PMIX_GLOBAL, \
PMIX_GLOBAL, \
(mtl_version), \
(ep_name)[0], \
(namelen));

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

@ -10,7 +10,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2010-2019 Sandia National Laboratories. All rights reserved.
* Copyright (c) 2014 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -26,7 +26,7 @@
#include "ompi/proc/proc.h"
#include "ompi/mca/mtl/mtl.h"
#include "opal/class/opal_list.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "mtl_portals4.h"
#include "mtl_portals4_recv_short.h"

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

@ -11,7 +11,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2010-2012 Sandia National Laboratories. All rights reserved.
* Copyright (c) 2014 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$
@ -25,7 +25,7 @@
#include "opal/mca/event/event.h"
#include "opal/util/output.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "mtl_portals4.h"
#include "mtl_portals4_request.h"
@ -411,7 +411,7 @@ ompi_mtl_portals4_component_init(bool enable_progress_threads,
OPAL_OUTPUT_VERBOSE((90, ompi_mtl_base_framework.framework_output,
"PtlGetPhysId rank=%x nid=%x pid=%x\n", id.rank, id.phys.nid, id.phys.pid));
OPAL_MODEX_SEND(ret, OPAL_PMIX_GLOBAL,
OPAL_MODEX_SEND(ret, PMIX_GLOBAL,
&mca_mtl_portals4_component.mtl_version,
&id, sizeof(id));
if (OMPI_SUCCESS != ret) {

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

@ -11,7 +11,7 @@
* Copyright (c) 2004-2006 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2006 QLogic Corporation. All rights reserved.
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2014 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2016 Research Organization for Information Science
@ -25,7 +25,7 @@
#include "ompi_config.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "ompi/mca/mtl/mtl.h"
#include "ompi/mca/mtl/base/mtl_base_datatype.h"
#include "opal/util/show_help.h"
@ -159,7 +159,7 @@ int ompi_mtl_psm2_module_init(int local_rank, int num_local_procs) {
ompi_mtl_psm2.epid = epid;
ompi_mtl_psm2.mq = mq;
OPAL_MODEX_SEND(rc, OPAL_PMIX_GLOBAL,
OPAL_MODEX_SEND(rc, PMIX_GLOBAL,
&mca_mtl_psm2_component.super.mtl_version,
&ompi_mtl_psm2.epid,
sizeof(psm2_epid_t));

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

@ -12,7 +12,7 @@
* All rights reserved.
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2013-2014 Intel, Inc. All rights reserved
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
* $COPYRIGHT$
*
@ -32,7 +32,7 @@
#include "ompi/mca/mca.h"
#include "opal/mca/base/base.h"
#include "opal/runtime/opal.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "ompi/constants.h"
#include "ompi/mca/pml/pml.h"
@ -312,7 +312,7 @@ mca_pml_base_pml_selected(const char *name)
{
int rc;
OPAL_MODEX_SEND(rc, OPAL_PMIX_GLOBAL, &pml_base_component, name, strlen(name) + 1);
OPAL_MODEX_SEND(rc, PMIX_GLOBAL, &pml_base_component, name, strlen(name) + 1);
return rc;
}

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

@ -21,6 +21,7 @@
* Copyright (c) 2018 Sandia National Laboratories
* All rights reserved.
* Copyright (c) 2018 IBM Corporation. All rights reserved.
* Copyright (c) 2019-2020 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -44,7 +45,7 @@
#include "ompi/mca/pml/base/base.h"
#include "ompi/mca/pml/base/base.h"
#include "ompi/mca/bml/base/base.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "ompi/runtime/ompi_cr.h"
#include "pml_ob1.h"
@ -843,7 +844,7 @@ int mca_pml_ob1_ft_event( int state )
if(OPAL_CRS_CHECKPOINT == state) {
if( opal_cr_timing_barrier_enabled ) {
OPAL_CR_SET_TIMER(OPAL_CR_TIMER_CRCPBR1);
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if (OMPI_SUCCESS != (ret = pmix_fence(null, 0, NULL, 0))) {
opal_output(0, "pml:ob1: ft_event(Restart): Failed to fence complete");
return ret;
}
@ -857,7 +858,7 @@ int mca_pml_ob1_ft_event( int state )
if( !first_continue_pass ) {
if( opal_cr_timing_barrier_enabled ) {
OPAL_CR_SET_TIMER(OPAL_CR_TIMER_COREBR0);
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if (OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
opal_output(0, "pml:ob1: ft_event(Restart): Failed to fence complete");
return ret;
}
@ -960,7 +961,7 @@ int mca_pml_ob1_ft_event( int state )
if( !first_continue_pass ) {
if( opal_cr_timing_barrier_enabled ) {
OPAL_CR_SET_TIMER(OPAL_CR_TIMER_P2PBR1);
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if (OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
opal_output(0, "pml:ob1: ft_event(Restart): Failed to fence complete");
return ret;
}
@ -969,7 +970,7 @@ int mca_pml_ob1_ft_event( int state )
}
if (opal_cr_continue_like_restart && !first_continue_pass) {
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if (OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
opal_output(0, "pml:ob1: ft_event(Restart): Failed to fence complete");
return ret;
}
@ -984,7 +985,7 @@ int mca_pml_ob1_ft_event( int state )
}
/* Is this barrier necessary ? JJH */
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if (OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
opal_output(0, "pml:ob1: ft_event(Restart): Failed to fence complete");
return ret;
}
@ -1000,7 +1001,7 @@ int mca_pml_ob1_ft_event( int state )
if( !first_continue_pass ) {
if( opal_cr_timing_barrier_enabled ) {
OPAL_CR_SET_TIMER(OPAL_CR_TIMER_P2PBR2);
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if (OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
opal_output(0, "pml:ob1: ft_event(Restart): Failed to fence complete");
return ret;
}
@ -1016,7 +1017,7 @@ int mca_pml_ob1_ft_event( int state )
* Exchange the modex information once again.
* BTLs will have republished their modex information.
*/
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if (OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
opal_output(0, "pml:ob1: ft_event(Restart): Failed to fence complete");
return ret;
}
@ -1031,7 +1032,7 @@ int mca_pml_ob1_ft_event( int state )
}
/* Is this barrier necessary ? JJH */
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if (OMPI_SUCCESS != (ret = PMIx_Fence(NULL, 0,NULL, 0))) {
opal_output(0, "pml:ob1: ft_event(Restart): Failed to fence complete");
return ret;
}

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

@ -3,9 +3,10 @@
* Copyright (c) 2016 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2018 Research Organization for Information Science
* Copyright (c) 2018-2019 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2018 IBM Corporation. All rights reserved.
* Copyright (c) 2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -16,7 +17,7 @@
#include "pml_ucx.h"
#include "opal/runtime/opal.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "ompi/attribute/attribute.h"
#include "ompi/message/message.h"
#include "ompi/mca/pml/base/pml_base_bsend.h"
@ -111,7 +112,7 @@ static int mca_pml_ucx_send_worker_address_type(int addr_flags, int modex_scope)
}
PML_UCX_VERBOSE(2, "Pack %s worker address, size %ld",
(modex_scope == OPAL_PMIX_LOCAL) ? "local" : "remote",
(modex_scope == PMIX_LOCAL) ? "local" : "remote",
attrs.address_length);
return OMPI_SUCCESS;
@ -135,7 +136,7 @@ static int mca_pml_ucx_send_worker_address(void)
PML_UCX_VERBOSE(2, "Pack worker address, size %ld", addrlen);
OPAL_MODEX_SEND(rc, OPAL_PMIX_GLOBAL,
OPAL_MODEX_SEND(rc, PMIX_GLOBAL,
&mca_pml_ucx_component.pmlm_version, (void*)address, addrlen);
ucp_worker_release_address(ompi_pml_ucx.ucp_worker, address);
@ -146,12 +147,12 @@ static int mca_pml_ucx_send_worker_address(void)
#else
/* Pack just network device addresses for remote node peers */
status = mca_pml_ucx_send_worker_address_type(UCP_WORKER_ADDRESS_FLAG_NET_ONLY,
OPAL_PMIX_REMOTE);
PMIX_REMOTE);
if (UCS_OK != status) {
goto err;
}
status = mca_pml_ucx_send_worker_address_type(0, OPAL_PMIX_LOCAL);
status = mca_pml_ucx_send_worker_address_type(0, PMIX_LOCAL);
if (UCS_OK != status) {
goto err;
}

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

@ -1,27 +0,0 @@
#
# Copyright (c) 2012 Los Alamos National Security, LLC. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
# main library setup
noinst_LTLIBRARIES = libmca_rte.la
libmca_rte_la_SOURCES =
# local files
headers = rte.h
libmca_rte_la_SOURCES += $(headers)
# Conditionally install the header files
if WANT_INSTALL_HEADERS
ompidir = $(ompiincludedir)/$(subdir)
nobase_ompi_HEADERS = $(headers)
endif
include base/Makefile.am
distclean-local:
rm -f base/static-components.h

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

@ -1,15 +0,0 @@
#
# Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
headers += \
base/base.h
libmca_rte_la_SOURCES += \
base/rte_base_frame.c

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

@ -1,32 +0,0 @@
/*
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2012-2013 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2014 Intel, Inc. All rights reserved
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#ifndef OMPI_RTE_BASE_H
#define OMPI_RTE_BASE_H
#include "ompi_config.h"
#include "opal/class/opal_list.h"
#include "ompi/mca/rte/rte.h"
/*
* Global functions for MCA overall rte open and close
*/
BEGIN_C_DECLS
OMPI_DECLSPEC extern mca_base_framework_t ompi_rte_base_framework;
END_C_DECLS
#endif /* OMPI_BASE_RTE_H */

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

@ -1,57 +0,0 @@
/*
* Copyright (c) 2012-2013 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "ompi_config.h"
#include "ompi/constants.h"
#include "opal_stdint.h"
#include "opal/util/output.h"
#include "ompi/mca/mca.h"
#include "opal/mca/base/base.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/mca/rte/base/base.h"
/*
* The following file was created by configure. It contains extern
* statements and the definition of an array of pointers to each
* component's public mca_base_component_t struct.
*/
#include "ompi/mca/rte/base/static-components.h"
static int ompi_rte_base_close(void)
{
return mca_base_framework_components_close(&ompi_rte_base_framework, NULL);
}
static int ompi_rte_base_open(mca_base_open_flag_t flags)
{
/* Open up all available components */
int ret = mca_base_framework_components_open(&ompi_rte_base_framework, flags);
/* Sanity check. Many things will break if this is not true
(e.g., opal dstore needs this to be true). */
assert(sizeof(ompi_process_name_t) == sizeof(uint64_t));
return ret;
}
MCA_BASE_FRAMEWORK_DECLARE(ompi, rte, "OMPI Run-Time Environment Interface", NULL,
ompi_rte_base_open, ompi_rte_base_close,
mca_rte_base_static_components, 0);
OBJ_CLASS_INSTANCE(ompi_namelist_t,
opal_list_item_t,
NULL, NULL);

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

@ -1,34 +0,0 @@
dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2010-2011 Cisco Systems, Inc. All rights reserved.
dnl Copyright (c) 2012 Los Alamos National Security, LLC. All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
# There will only be one component used in this framework, and it will
# be selected at configure time by priority. If a component succeeds,
# it must also set the shell variable ompi_rte_base_include to the
# path from <top_srcdir>/ompi/mca/rte/ to the header containing the
# RTE interface.
dnl We only want one winning component.
m4_define(MCA_ompi_rte_CONFIGURE_MODE, STOP_AT_FIRST)
AC_DEFUN([MCA_ompi_rte_CONFIG],[
ompi_rte_base_include=
# configure all the components
MCA_CONFIGURE_FRAMEWORK($1, $2, 1)
AS_IF([test "$ompi_rte_base_include" = ""],
[AC_MSG_ERROR([Did not find a suitable rte component])])
AC_DEFINE_UNQUOTED([MCA_rte_IMPLEMENTATION_HEADER],
["ompi/mca/rte/$ompi_rte_base_include"],
[Header to include for rte implementation])
])

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

@ -1,76 +0,0 @@
#
# Copyright (c) 2012 Los Alamos National Security, LLC.
# All rights reserved.
# Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2016-2018 Intel, Inc. All rights reserved.
# Copyright (c) 2019 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
headers = rte_orte.h
sources = \
rte_orte_component.c \
rte_orte_module.c
# Conditionally install the header files
if WANT_INSTALL_HEADERS
ompidir = $(ompiincludedir)/$(subdir)
nobase_ompi_HEADERS = $(headers)
endif
# We only ever build this component statically
noinst_LTLIBRARIES = libmca_rte_orte.la
libmca_rte_orte_la_SOURCES =$(sources) $(headers)
libmca_rte_orte_la_LDFLAGS = -module -avoid-version
libmca_rte_orte_la_LIBADD = $(top_builddir)/orte/lib@ORTE_LIB_PREFIX@open-rte.la
man_pages = mpirun.1 mpiexec.1 ompi-clean.1 ompi-server.1
if OPAL_INSTALL_BINARIES
if PROJECT_ORTE
nodist_man_MANS = $(man_pages)
install-exec-hook:
(cd $(DESTDIR)$(bindir); rm -f mpirun$(EXEEXT); $(LN_S) orterun$(EXEEXT) mpirun$(EXEEXT))
(cd $(DESTDIR)$(bindir); rm -f mpiexec$(EXEEXT); $(LN_S) orterun$(EXEEXT) mpiexec$(EXEEXT))
(cd $(DESTDIR)$(bindir); rm -f ompi-clean$(EXEEXT); $(LN_S) orte-clean$(EXEEXT) ompi-clean$(EXEEXT))
(cd $(DESTDIR)$(bindir); rm -f ompi-server$(EXEEXT); $(LN_S) orte-server$(EXEEXT) ompi-server$(EXEEXT))
uninstall-local:
rm -f $(DESTDIR)$(bindir)/mpirun$(EXEEXT) \
$(DESTDIR)$(bindir)/mpiexec$(EXEEXT) \
$(DESTDIR)$(bindir)/ompi-clean$(EXEEXT) \
$(DESTDIR)$(bindir)/ompi-server$(EXEEXT)
endif # PROJECT_ORTE
endif # OPAL_INSTALL_BINARIES
$(top_builddir)/orte/tools/orterun/orterun.1:
(cd $(top_builddir)/orte/tools/orterun && $(MAKE) $(AM_MAKEFLAGS) orterun.1)
mpirun.1: $(top_builddir)/orte/tools/orterun/orterun.1
cp -f $(top_builddir)/orte/tools/orterun/orterun.1 mpirun.1
mpiexec.1: $(top_builddir)/orte/tools/orterun/orterun.1
cp -f $(top_builddir)/orte/tools/orterun/orterun.1 mpiexec.1
$(top_builddir)/orte/tools/orte-clean/orte-clean.1:
(cd $(top_builddir)/orte/tools/orte-clean && $(MAKE) $(AM_MAKEFLAGS) orte-clean.1)
ompi-clean.1: $(top_builddir)/orte/tools/orte-clean/orte-clean.1
cp -f $(top_builddir)/orte/tools/orte-clean/orte-clean.1 ompi-clean.1
$(top_builddir)/orte/tools/orte-server/orte-server.1:
(cd $(top_builddir)/orte/tools/orte-server && $(MAKE) $(AM_MAKEFLAGS) orte-server.1)
ompi-server.1: $(top_builddir)/orte/tools/orte-server/orte-server.1
cp -f $(top_builddir)/orte/tools/orte-server/orte-server.1 ompi-server.1
clean-local:
rm -f $(man_pages)

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

@ -1,52 +0,0 @@
# -*- shell-script -*-
#
# Copyright (c) 2012 Los Alamos National Security, LLC. All rights reserved.
# Copyright (c) 2013 Sandia National Laboratories. All rights reserved.
# Copyright (c) 2017 Intel, Inc. All rights reserved.
# Copyright (c) 2019 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
# Lowest priority, as it's the default and we want
# it to be able to be overridden
AC_DEFUN([MCA_ompi_rte_orte_PRIORITY], [10])
# Force this component to compile in static-only mode
AC_DEFUN([MCA_ompi_rte_orte_COMPILE_MODE], [
AC_MSG_CHECKING([for MCA component $2:$3 compile mode])
$4="static"
AC_MSG_RESULT([$$4])
])
# If component was selected, $1 will be 1 and we should set the base header
AC_DEFUN([MCA_ompi_rte_orte_POST_CONFIG],[
AS_IF([test "$1" = "1"], [ompi_rte_base_include="orte/rte_orte.h"])
AC_DEFINE_UNQUOTED([OMPI_RTE_ORTE], [$1],
[Defined to 1 if the OMPI runtime component is ORTE])
AM_CONDITIONAL([OMPI_RTE_ORTE], [test $1 = 1])
])dnl
# MCA_rte_orte_CONFIG([action-if-can-compile],
# [action-if-cant-compile])
# ------------------------------------------------
AC_DEFUN([MCA_ompi_rte_orte_CONFIG],[
AC_CONFIG_FILES([ompi/mca/rte/orte/Makefile])
m4_ifdef([project_orte],
[# This will need to get more complicated when we can build against
# an external ORTE.
AC_ARG_WITH([orte],
AC_HELP_STRING([--with-orte],
[Use ORTE run-time environment (default: yes)]))
AS_IF([test "$with_orte" != "no"],
[$1],
[AC_MSG_NOTICE([ORTE disabled by user])
$2])
],
[$2])
])

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

@ -1,103 +0,0 @@
/*
* Copyright (c) 2012-2013 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2014-2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Intel, Inc. All rights reserved.
* Copyright (c) 2016-2017 IBM Corporation. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*
* When this component is used, this file is included in the rest of
* the OPAL/ORTE/OMPI code base via ompi/mca/rte/rte.h. As such,
* this header represents the public interface to this static component.
*/
#ifndef MCA_OMPI_RTE_ORTE_H
#define MCA_OMPI_RTE_ORTE_H
#include "ompi_config.h"
#include "ompi/constants.h"
struct opal_proc_t;
#include "opal/threads/threads.h"
#include "orte/types.h"
#include "orte/mca/errmgr/errmgr.h"
#include "orte/mca/rml/base/rml_contact.h"
#include "orte/mca/rml/rml.h"
#include "orte/mca/routed/routed.h"
#include "orte/runtime/orte_data_server.h"
#include "orte/runtime/runtime.h"
#include "orte/util/name_fns.h"
#include "orte/util/proc_info.h"
struct ompi_proc_t;
struct ompi_communicator_t;
BEGIN_C_DECLS
/* Process name objects and operations */
typedef orte_process_name_t ompi_process_name_t;
typedef orte_jobid_t ompi_jobid_t;
typedef orte_vpid_t ompi_vpid_t;
typedef orte_ns_cmp_bitmask_t ompi_rte_cmp_bitmask_t;
#define OMPI_PROC_MY_NAME ORTE_PROC_MY_NAME
#define OMPI_NAME_PRINT(a) ORTE_NAME_PRINT((const orte_process_name_t*)a)
#define ompi_rte_compare_name_fields(a, b, c) orte_util_compare_name_fields(a, (const orte_process_name_t*)(b), (const orte_process_name_t*)(c))
#define ompi_rte_convert_string_to_process_name(a,b) orte_util_convert_string_to_process_name(a,b)
#define ompi_rte_convert_process_name_to_string(a,b) orte_util_convert_process_name_to_string(a,b)
#define OMPI_NAME_WILDCARD ORTE_NAME_WILDCARD
#define OMPI_NODE_RANK_INVALID ORTE_NODE_RANK_INVALID
#define OMPI_LOCAL_RANK_INVALID ORTE_LOCAL_RANK_INVALID
#define OMPI_RTE_CMP_JOBID ORTE_NS_CMP_JOBID
#define OMPI_RTE_CMP_VPID ORTE_NS_CMP_VPID
#define OMPI_RTE_CMP_ALL ORTE_NS_CMP_ALL
#define OMPI_LOCAL_JOBID(jobid) ORTE_LOCAL_JOBID(jobid)
#define OMPI_JOB_FAMILY(jobid) ORTE_JOB_FAMILY(jobid)
#define OMPI_CONSTRUCT_JOBID(family,local) ORTE_CONSTRUCT_JOBID(family,local)
/* This is the DSS tag to serialize a proc name */
#define OMPI_NAME ORTE_NAME
#define OMPI_PROCESS_NAME_HTON ORTE_PROCESS_NAME_HTON
#define OMPI_PROCESS_NAME_NTOH ORTE_PROCESS_NAME_NTOH
#if OPAL_ENABLE_DEBUG
static inline orte_process_name_t * OMPI_CAST_RTE_NAME(opal_process_name_t * name) {
return (orte_process_name_t *)name;
}
#else
#define OMPI_CAST_RTE_NAME(a) ((orte_process_name_t*)(a))
#endif
/* Process info struct and values */
typedef orte_node_rank_t ompi_node_rank_t;
typedef orte_local_rank_t ompi_local_rank_t;
#define ompi_process_info orte_process_info
#define ompi_rte_proc_is_bound orte_proc_is_bound
/* Error handling objects and operations */
OMPI_DECLSPEC void __opal_attribute_noreturn__
ompi_rte_abort(int error_code, char *fmt, ...);
#define ompi_rte_abort_peers(a, b, c) orte_errmgr.abort_peers(a, b, c)
#define OMPI_ERROR_LOG ORTE_ERROR_LOG
/* Init and finalize objects and operations */
#define ompi_rte_init(a, b) orte_init(a, b, ORTE_PROC_MPI)
#define ompi_rte_finalize() orte_finalize()
OMPI_DECLSPEC void ompi_rte_wait_for_debugger(void);
/* check dynamics support */
OMPI_DECLSPEC bool ompi_rte_connect_accept_support(const char *port);
#define ompi_proc_applied_binding orte_proc_applied_binding
END_C_DECLS
#endif /* MCA_OMPI_RTE_ORTE_H */

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

@ -1,80 +0,0 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights reserved.
* Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
*
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*
* These symbols are in a file by themselves to provide nice linker
* semantics. Since linkers generally pull in symbols by object
* files, keeping these symbols as the only symbols in this file
* prevents utility programs such as "ompi_info" from having to import
* entire components just to query their version and parameters.
*/
#include "ompi_config.h"
#include "ompi/constants.h"
#include "opal/threads/threads.h"
#include "opal/class/opal_list.h"
#include "orte/mca/rml/rml.h"
#include "orte/mca/grpcomm/base/base.h"
#include "ompi/mca/rte/rte.h"
#include "rte_orte.h"
/*
* Public string showing the component version number
*/
const char *ompi_rte_orte_component_version_string =
"OMPI orte rte MCA component version " OMPI_VERSION;
/*
* Local function
*/
static int rte_orte_open(void);
static int rte_orte_close(void);
/*
* Instantiate the public struct with all of our public information
* and pointers to our public functions in it
*/
ompi_rte_component_t mca_rte_orte_component = {
/* First, the mca_component_t struct containing meta information
about the component itself */
.base_version = {
OMPI_RTE_BASE_VERSION_1_0_0,
/* Component name and version */
.mca_component_name = "orte",
MCA_BASE_MAKE_VERSION(component, OMPI_MAJOR_VERSION, OMPI_MINOR_VERSION,
OMPI_RELEASE_VERSION),
/* Component open and close functions */
.mca_open_component = rte_orte_open,
.mca_close_component = rte_orte_close,
},
.base_data = {
/* The component is checkpoint ready */
MCA_BASE_METADATA_PARAM_CHECKPOINT
},
};
static int rte_orte_open(void)
{
return OMPI_SUCCESS;
}
static int rte_orte_close(void)
{
return OMPI_SUCCESS;
}

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

@ -1,247 +0,0 @@
/*
* Copyright (c) 2012-2013 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2012-2014 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved.
* $COPYRIGHT$
*/
#include "ompi_config.h"
#include "ompi/constants.h"
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include "opal/dss/dss.h"
#include "opal/util/argv.h"
#include "opal/util/proc.h"
#include "opal/util/opal_getcwd.h"
#include "opal/util/printf.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/threads/threads.h"
#include "opal/class/opal_list.h"
#include "opal/dss/dss.h"
#include "orte/mca/errmgr/errmgr.h"
#include "orte/mca/ess/ess.h"
#include "orte/mca/grpcomm/base/base.h"
#include "orte/mca/odls/odls.h"
#include "orte/mca/plm/plm.h"
#include "orte/mca/rml/rml.h"
#include "orte/mca/rml/rml_types.h"
#include "orte/mca/rmaps/rmaps.h"
#include "orte/mca/rmaps/rmaps_types.h"
#include "orte/mca/rmaps/base/base.h"
#include "orte/mca/rml/base/rml_contact.h"
#include "orte/mca/state/state.h"
#include "orte/mca/routed/routed.h"
#include "orte/util/name_fns.h"
#include "orte/util/session_dir.h"
#include "orte/util/show_help.h"
#include "orte/runtime/orte_globals.h"
#include "orte/runtime/orte_wait.h"
#include "orte/runtime/orte_data_server.h"
#include "ompi/mca/rte/base/base.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/debuggers/debuggers.h"
#include "ompi/proc/proc.h"
#include "ompi/runtime/params.h"
#include "ompi/communicator/communicator.h"
extern ompi_rte_component_t mca_rte_orte_component;
void ompi_rte_abort(int error_code, char *fmt, ...)
{
va_list arglist;
/* If there was a message, output it */
va_start(arglist, fmt);
if( NULL != fmt ) {
char* buffer = NULL;
opal_vasprintf( &buffer, fmt, arglist );
opal_output( 0, "%s", buffer );
free( buffer );
}
va_end(arglist);
/* if I am a daemon or the HNP... */
if (ORTE_PROC_IS_HNP || ORTE_PROC_IS_DAEMON) {
/* whack my local procs */
orte_odls.kill_local_procs(NULL);
/* whack any session directories */
orte_session_dir_cleanup(ORTE_JOBID_WILDCARD);
} else {
/* cleanup my session directory */
orte_session_dir_finalize(ORTE_PROC_MY_NAME);
}
/* if a critical connection failed, or a sensor limit was exceeded, exit without dropping a core */
if (ORTE_ERR_CONNECTION_FAILED == error_code ||
ORTE_ERR_SENSOR_LIMIT_EXCEEDED == error_code) {
orte_ess.abort(error_code, false);
} else {
orte_ess.abort(error_code, true);
}
/*
* We must exit in orte_ess.abort; all implementations of orte_ess.abort
* contain __opal_attribute_noreturn__
*/
/* No way to reach here, but put an exit() here a) just to cover
for bugs, and b) to let the compiler know we're honoring the
__opal_attribute_noreturn__. */
exit(-1);
}
static size_t handler = SIZE_MAX;
static bool debugger_register_active = true;
static bool debugger_event_active = true;
static void _release_fn(int status,
const opal_process_name_t *source,
opal_list_t *info, opal_list_t *results,
opal_pmix_notification_complete_fn_t cbfunc,
void *cbdata)
{
/* must let the notifier know we are done */
if (NULL != cbfunc) {
cbfunc(ORTE_SUCCESS, NULL, NULL, NULL, cbdata);
}
debugger_event_active = false;
}
static void _register_fn(int status,
size_t evhandler_ref,
void *cbdata)
{
opal_list_t *codes = (opal_list_t*)cbdata;
handler = evhandler_ref;
OPAL_LIST_RELEASE(codes);
debugger_register_active = false;
}
/*
* Wait for a debugger if asked. We support two ways of waiting for
* attaching debuggers -- see big comment in
* orte/tools/orterun/debuggers.c explaining the two scenarios.
*/
void ompi_rte_wait_for_debugger(void)
{
int debugger;
opal_list_t *codes, directives;
opal_value_t *kv;
char *evar;
int time;
/* See lengthy comment in orte/tools/orterun/debuggers.c about
orte_in_parallel_debugger */
debugger = orte_in_parallel_debugger;
if (1 == MPIR_being_debugged) {
debugger = 1;
}
if (!debugger && NULL == getenv("ORTE_TEST_DEBUGGER_ATTACH")) {
/* if not, just return */
return;
}
/* if we are being debugged, then we need to find
* the correct plug-ins
*/
ompi_debugger_setup_dlls();
if (NULL != (evar = getenv("ORTE_TEST_DEBUGGER_SLEEP"))) {
time = strtol(evar, NULL, 10);
sleep(time);
return;
}
if (orte_standalone_operation) {
/* spin until debugger attaches and releases us */
while (MPIR_debug_gate == 0) {
#if defined(HAVE_USLEEP)
usleep(100000); /* microseconds */
#else
sleep(1); /* seconds */
#endif
}
} else {
/* register an event handler for the ORTE_ERR_DEBUGGER_RELEASE event */
codes = OBJ_NEW(opal_list_t);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup("errorcode");
kv->type = OPAL_INT;
kv->data.integer = ORTE_ERR_DEBUGGER_RELEASE;
opal_list_append(codes, &kv->super);
OBJ_CONSTRUCT(&directives, opal_list_t);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_EVENT_HDLR_NAME);
kv->type = OPAL_STRING;
kv->data.string = strdup("MPI-DEBUGGER-ATTACH");
opal_list_append(&directives, &kv->super);
opal_pmix.register_evhandler(codes, &directives, _release_fn, _register_fn, codes);
/* let the MPI progress engine run while we wait for registration to complete */
OMPI_WAIT_FOR_COMPLETION(debugger_register_active);
OPAL_LIST_DESTRUCT(&directives);
/* let the MPI progress engine run while we wait for debugger release */
OMPI_WAIT_FOR_COMPLETION(debugger_event_active);
/* deregister the event handler */
opal_pmix.deregister_evhandler(handler, NULL, NULL);
}
}
bool ompi_rte_connect_accept_support(const char *port)
{
char *ptr, *tmp;
orte_process_name_t name;
/* were we launched by mpirun, or are we calling
* without a defined port? */
if (NULL == orte_process_info.my_hnp_uri ||
NULL == port || 0 == strlen(port)) {
return true;
}
/* is the job family in the port different than my own? */
tmp = strdup(port); // protect input
if (NULL == (ptr = strchr(tmp, ':'))) {
/* this port didn't come from us! */
orte_show_help("help-orterun.txt", "orterun:malformedport", true);
free(tmp);
return false;
}
*ptr = '\0';
if (ORTE_SUCCESS != orte_util_convert_string_to_process_name(&name, tmp)) {
free(tmp);
orte_show_help("help-orterun.txt", "orterun:malformedport", true);
return false;
}
free(tmp);
if (ORTE_JOB_FAMILY(ORTE_PROC_MY_NAME->jobid) == ORTE_JOB_FAMILY(name.jobid)) {
/* same job family, so our infrastructure is adequate */
return true;
}
/* if the job family of the port is different than our own
* and we were launched by mpirun, then we require ompi-server
* support */
if (NULL == orte_data_server_uri) {
/* print a pretty help message */
orte_show_help("help-orterun.txt", "orterun:server-unavailable", true);
return false;
}
return true;
}

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

@ -1,29 +0,0 @@
#
# Copyright (c) 2012 Los Alamos National Security, LLC.
# All rights reserved.
# Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2016-2017 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
headers = rte_pmix.h
sources = \
rte_pmix_component.c \
rte_pmix_module.c
# Conditionally install the header files
if WANT_INSTALL_HEADERS
ompidir = $(ompiincludedir)/$(subdir)
nobase_ompi_HEADERS = $(headers)
endif
# We only ever build this component statically
noinst_LTLIBRARIES = libmca_rte_pmix.la
libmca_rte_pmix_la_SOURCES =$(sources) $(headers)
libmca_rte_pmix_la_LDFLAGS = -module -avoid-version
libmca_rte_pmix_la_LIBADD = $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la

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

@ -1,48 +0,0 @@
# -*- shell-script -*-
#
# Copyright (c) 2012 Los Alamos National Security, LLC. All rights reserved.
# Copyright (c) 2013 Sandia National Laboratories. All rights reserved.
# Copyright (c) 2017 Intel, Inc. All rights reserved.
# Copyright (c) 2019 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
# Higher priority to override the default
AC_DEFUN([MCA_ompi_rte_pmix_PRIORITY], [50])
# Force this component to compile in static-only mode
AC_DEFUN([MCA_ompi_rte_pmix_COMPILE_MODE], [
AC_MSG_CHECKING([for MCA component $2:$3 compile mode])
$4="static"
AC_MSG_RESULT([$$4])
])
# If component was selected, $1 will be 1 and we should set the base header
AC_DEFUN([MCA_ompi_rte_pmix_POST_CONFIG],[
AS_IF([test "$1" = "1"], [ompi_rte_base_include="pmix/rte_pmix.h"])
AC_DEFINE_UNQUOTED([OMPI_RTE_PMIX], [$1],
[Defined to 1 if the OMPI runtime component is PMIX])
AM_CONDITIONAL([OMPI_RTE_PMIX], [test $1 = 1])
])dnl
# MCA_rte_pmix_CONFIG([action-if-can-compile],
# [action-if-cant-compile])
# ------------------------------------------------
AC_DEFUN([MCA_ompi_rte_pmix_CONFIG],[
AC_CONFIG_FILES([ompi/mca/rte/pmix/Makefile])
m4_ifdef([project_orte],
[AC_ARG_WITH([ompi-pmix-rte],
AC_HELP_STRING([--with-ompi-pmix-rte],
[Use PMIx as the OMPI run-time environment (default: no)]))
AS_IF([test "$with_ompi_pmix_rte" == "yes"],
[$1
AC_MSG_NOTICE([PMIx RTE selected by user])],
[$2])],
[$1])
])

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

@ -1,147 +0,0 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2012-2013 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
* Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2014-2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Intel, Inc. All rights reserved.
* Copyright (c) 2016-2017 IBM Corporation. All rights reserved.
* Copyright (c) 2018 Triad National Security, LLC. All rights
* reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*
* When this component is used, this file is included in the rest of
* the OPAL/OMPI code base via ompi/mca/rte/rte.h. As such,
* this header represents the public interface to this static component.
*/
#ifndef MCA_OMPI_RTE_PMIX_H
#define MCA_OMPI_RTE_PMIX_H
#include "ompi_config.h"
#include "ompi/constants.h"
#include <stdint.h>
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
struct opal_proc_t;
#include "opal/threads/threads.h"
#include "opal/util/proc.h"
#include "opal/mca/hwloc/hwloc-internal.h"
#include "opal/mca/pmix/pmix.h"
struct ompi_proc_t;
struct ompi_communicator_t;
BEGIN_C_DECLS
/* Process name objects and operations */
typedef opal_process_name_t ompi_process_name_t;
typedef uint32_t ompi_jobid_t;
typedef uint32_t ompi_vpid_t;
/* some local storage */
OMPI_DECLSPEC extern opal_process_name_t pmix_name_wildcard;
OMPI_DECLSPEC extern hwloc_cpuset_t ompi_proc_applied_binding;
#define OMPI_PROC_MY_NAME (&pmix_process_info.my_name)
#define OMPI_NAME_WILDCARD (&pmix_name_wildcard)
typedef uint8_t ompi_rte_cmp_bitmask_t;
#define OMPI_RTE_CMP_NONE 0x00
#define OMPI_RTE_CMP_JOBID 0x02
#define OMPI_RTE_CMP_VPID 0x04
#define OMPI_RTE_CMP_ALL 0x0f
#define OMPI_RTE_CMP_WILD 0x10
OMPI_DECLSPEC char* ompi_pmix_print_name(const ompi_process_name_t *name);
#define OMPI_NAME_PRINT(a) ompi_pmix_print_name(a)
OMPI_DECLSPEC int ompi_rte_compare_name_fields(ompi_rte_cmp_bitmask_t mask,
const opal_process_name_t* name1,
const opal_process_name_t* name2);
OMPI_DECLSPEC int ompi_rte_convert_string_to_process_name(opal_process_name_t *name,
const char* name_string);
OMPI_DECLSPEC int ompi_rte_convert_process_name_to_string(char** name_string,
const opal_process_name_t *name);
#define OMPI_LOCAL_JOBID(n) \
( (n) & 0x0000ffff)
#define OMPI_JOB_FAMILY(n) \
(((n) >> 16) & 0x0000ffff)
#define OMPI_CONSTRUCT_LOCAL_JOBID(local, job) \
( ((local) & 0xffff0000) | ((job) & 0x0000ffff) )
#define OMPI_CONSTRUCT_JOB_FAMILY(n) \
( ((n) << 16) & 0xffff0000)
#define OMPI_CONSTRUCT_JOBID(family, local) \
OMPI_CONSTRUCT_LOCAL_JOBID(OMPI_CONSTRUCT_JOB_FAMILY(family), local)
/* This is the DSS tag to serialize a proc name */
#define OMPI_NAME OPAL_NAME
#define OMPI_PROCESS_NAME_HTON OPAL_PROCESS_NAME_HTON
#define OMPI_PROCESS_NAME_NTOH OPAL_PROCESS_NAME_NTOH
#if OPAL_ENABLE_DEBUG
static inline opal_process_name_t * OMPI_CAST_RTE_NAME(opal_process_name_t * name) {
return (opal_process_name_t *)name;
}
#else
#define OMPI_CAST_RTE_NAME(a) ((opal_process_name_t*)(a))
#endif
/* Process info struct and values */
typedef uint16_t ompi_node_rank_t;
typedef uint16_t ompi_local_rank_t;
#define OMPI_NODE_RANK_INVALID UINT16_MAX
#define OMPI_LOCAL_RANK_INVALID UINT16_MAX
typedef struct {
opal_process_name_t my_name;
char *my_hnp_uri;
char *nodename;
pid_t pid;
char *job_session_dir;
char *proc_session_dir;
uint16_t my_local_rank;
uint16_t my_node_rank;
int32_t num_local_peers;
uint32_t num_procs;
uint32_t app_num;
char *cpuset;
} pmix_process_info_t;
OMPI_DECLSPEC extern pmix_process_info_t pmix_process_info;
#define ompi_process_info pmix_process_info
OMPI_DECLSPEC extern bool pmix_proc_is_bound;
#define ompi_rte_proc_is_bound pmix_proc_is_bound
/* Error handling objects and operations */
OMPI_DECLSPEC void __opal_attribute_noreturn__
ompi_rte_abort(int error_code, char *fmt, ...);
OMPI_DECLSPEC void ompi_rte_abort_peers(opal_process_name_t *procs,
int32_t num_procs,
int error_code);
#define OMPI_ERROR_LOG OPAL_ERROR_LOG
/* Init and finalize operations */
OMPI_DECLSPEC int ompi_rte_init(int *argc, char ***argv);
OMPI_DECLSPEC int ompi_rte_finalize(void);
OMPI_DECLSPEC void ompi_rte_wait_for_debugger(void);
/* check dynamics support */
OMPI_DECLSPEC bool ompi_rte_connect_accept_support(const char *port);
END_C_DECLS
#endif /* MCA_OMPI_RTE_PMIX_H */

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

@ -1,77 +0,0 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights reserved.
* Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
*
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*
* These symbols are in a file by themselves to provide nice linker
* semantics. Since linkers generally pull in symbols by object
* files, keeping these symbols as the only symbols in this file
* prevents utility programs such as "ompi_info" from having to import
* entire components just to query their version and parameters.
*/
#include "ompi_config.h"
#include "ompi/constants.h"
#include "opal/threads/threads.h"
#include "opal/class/opal_list.h"
#include "ompi/mca/rte/rte.h"
#include "rte_pmix.h"
/*
* Public string showing the component version number
*/
const char *ompi_rte_pmix_component_version_string =
"OMPI pmix rte MCA component version " OMPI_VERSION;
/*
* Local function
*/
static int rte_pmix_open(void);
static int rte_pmix_close(void);
/*
* Instantiate the public struct with all of our public information
* and pointers to our public functions in it
*/
ompi_rte_component_t mca_rte_pmix_component = {
/* First, the mca_component_t struct containing meta information
about the component itself */
.base_version = {
OMPI_RTE_BASE_VERSION_1_0_0,
/* Component name and version */
.mca_component_name = "pmix",
MCA_BASE_MAKE_VERSION(component, OMPI_MAJOR_VERSION, OMPI_MINOR_VERSION,
OMPI_RELEASE_VERSION),
/* Component open and close functions */
.mca_open_component = rte_pmix_open,
.mca_close_component = rte_pmix_close,
},
.base_data = {
/* The component is checkpoint ready */
MCA_BASE_METADATA_PARAM_CHECKPOINT
},
};
static int rte_pmix_open(void)
{
return OMPI_SUCCESS;
}
static int rte_pmix_close(void)
{
return OMPI_SUCCESS;
}

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

@ -5,7 +5,7 @@
* reserved.
* Copyright (c) 2011-2018 Inria. All rights reserved.
* Copyright (c) 2011-2018 Bordeaux Polytechnic Institute
* Copyright (c) 2015-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2017 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2016 Los Alamos National Security, LLC. All rights
@ -34,7 +34,7 @@
#include "ompi/mca/pml/pml.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
/* #define __DEBUG__ 1 */
@ -170,8 +170,8 @@ int mca_topo_treematch_dist_graph_create(mca_topo_base_module_t* topo_module,
vpids[num_procs_in_node++] = i;
pval = &val;
OPAL_MODEX_RECV_VALUE(err, OPAL_PMIX_NODEID, &(proc->super.proc_name), &pval, OPAL_UINT32);
if( OPAL_SUCCESS != err ) {
OPAL_MODEX_RECV_VALUE(err, PMIX_NODEID, &(proc->super.proc_name), &pval, PMIX_UINT32);
if( PMIX_SUCCESS != err ) {
opal_output(0, "Unable to extract peer %s nodeid from the modex.\n",
OMPI_NAME_PRINT(&(proc->super.proc_name)));
colors[i] = -1;

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

@ -3,7 +3,7 @@
* All rights reserved.
* Copyright (c) 2012 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2015 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved.
* $COPYRIGHT$
*
@ -14,33 +14,33 @@
#include "ompi_config.h"
#include "vprotocol_pessimist_eventlog.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/printf.h"
#include "ompi/dpm/dpm.h"
int vprotocol_pessimist_event_logger_connect(int el_rank, ompi_communicator_t **el_comm)
{
int rc;
char *port;
pmix_status_t prc;
char *port, *tmp;
int rank;
vprotocol_pessimist_clock_t connect_info[2];
opal_list_t results;
opal_pmix_pdata_t *pdat;
pmix_pdata_t pdat;
OBJ_CONSTRUCT(&results, opal_list_t);
pdat = OBJ_NEW(opal_pmix_pdata_t);
opal_asprintf(&pdat->value.key, VPROTOCOL_EVENT_LOGGER_NAME_FMT, el_rank);
opal_list_append(&results, &pdat->super);
PMIX_PDATA_CONSTRUCT(&pdat);
opal_asprintf(&tmp, VPROTOCOL_EVENT_LOGGER_NAME_FMT, el_rank);
PMIX_LOAD_KEY(pdat.key, tmp);
free(tmp);
rc = opal_pmix.lookup(&results, NULL);
if (OPAL_SUCCESS != rc ||
OPAL_STRING != pdat->value.type ||
NULL == pdat->value.data.string) {
OPAL_LIST_DESTRUCT(&results);
prc = PMIx_Lookup(&pdat, 1, NULL, 0);
if (PMIX_SUCCESS != prc ||
OPAL_STRING != pdat.value.type ||
NULL == pdat.value.data.string) {
PMIX_PDATA_DESTRUCT(&pdat);
return OMPI_ERR_NOT_FOUND;
}
port = strdup(pdat->value.data.string);
OPAL_LIST_DESTRUCT(&results);
port = strdup(pdat.value.data.string);
PMIX_PDATA_DESTRUCT(&pdat);
V_OUTPUT_VERBOSE(45, "Found port < %s >", port);
rc = ompi_dpm_connect_accept(MPI_COMM_SELF, 0, port, true, el_comm);

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

@ -12,7 +12,7 @@
* All rights reserved.
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2015-2016 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2018 Cisco Systems, Inc. All rights reserved
@ -26,7 +26,7 @@
#include "ompi_config.h"
#include "opal/class/opal_list.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/show_help.h"
#include "opal/util/string_copy.h"
@ -50,9 +50,10 @@ int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name)
{
char range[OPAL_MAX_INFO_VAL];
int flag=0, ret;
opal_value_t *rng;
opal_list_t results, pinfo;
opal_pmix_pdata_t *pdat;
pmix_status_t rc;
pmix_pdata_t pdat;
pmix_info_t pinfo;
pmix_data_range_t rng;
if ( MPI_PARAM_CHECK ) {
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
@ -71,60 +72,37 @@ int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name)
}
}
if (NULL == opal_pmix.lookup) {
opal_show_help("help-mpi-api.txt",
"MPI function not supported",
true,
FUNC_NAME,
"Underlying runtime environment does not support name lookup functionality");
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD,
OMPI_ERR_NOT_SUPPORTED,
FUNC_NAME);
}
OPAL_CR_ENTER_LIBRARY();
OBJ_CONSTRUCT(&pinfo, opal_list_t);
/* OMPI supports info keys to pass the range to
* be searched for the given key */
if (MPI_INFO_NULL != info) {
ompi_info_get (info, "range", sizeof(range) - 1, range, &flag);
if (flag) {
if (0 == strcmp(range, "nspace")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_RANGE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_RANGE_NAMESPACE; // share only with procs in same nspace
opal_list_append(&pinfo, &rng->super);
rng = PMIX_RANGE_NAMESPACE; // share only with procs in same nspace
} else if (0 == strcmp(range, "session")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_RANGE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_RANGE_SESSION; // share only with procs in same session
opal_list_append(&pinfo, &rng->super);
rng = PMIX_RANGE_SESSION; // share only with procs in same session
} else {
/* unrecognized scope */
OPAL_LIST_DESTRUCT(&pinfo);
OPAL_CR_EXIT_LIBRARY();
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG,
FUNC_NAME);
}
}
}
PMIX_INFO_LOAD(&pinfo, PMIX_RANGE, &rng, PMIX_DATA_RANGE);
/* collect the findings */
OBJ_CONSTRUCT(&results, opal_list_t);
pdat = OBJ_NEW(opal_pmix_pdata_t);
pdat->value.key = strdup(service_name);
opal_list_append(&results, &pdat->super);
PMIX_PDATA_CONSTRUCT(&pdat);
PMIX_LOAD_KEY(pdat.key, service_name);
ret = opal_pmix.lookup(&results, &pinfo);
OPAL_LIST_DESTRUCT(&pinfo);
if (OPAL_SUCCESS != ret ||
OPAL_STRING != pdat->value.type ||
NULL == pdat->value.data.string) {
if (OPAL_ERR_NOT_SUPPORTED == ret) {
rc = PMIx_Lookup(&pdat, 1, &pinfo, 1);
PMIX_INFO_DESTRUCT(&pinfo);
if (PMIX_SUCCESS != rc ||
PMIX_STRING != pdat.value.type ||
NULL == pdat.value.data.string) {
if (PMIX_ERR_NOT_SUPPORTED == rc) {
ret = OMPI_ERR_NOT_SUPPORTED;
opal_show_help("help-mpi-api.txt",
"MPI function not supported",
@ -139,9 +117,9 @@ int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name)
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, ret, FUNC_NAME);
}
opal_string_copy( port_name, pdat->value.data.string,
opal_string_copy( port_name, pdat.value.data.string,
MPI_MAX_PORT_NAME );
OPAL_LIST_DESTRUCT(&results);
PMIX_PDATA_DESTRUCT(&pdat);
OPAL_CR_EXIT_LIBRARY();
return MPI_SUCCESS;

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

@ -12,7 +12,7 @@
* All rights reserved.
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2015-2016 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
@ -26,7 +26,7 @@
#include <stdio.h>
#include "opal/class/opal_list.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/show_help.h"
#include "ompi/mpi/c/bindings.h"
@ -48,11 +48,13 @@ static const char FUNC_NAME[] = "MPI_Publish_name";
int MPI_Publish_name(const char *service_name, MPI_Info info,
const char *port_name)
{
int rc;
int ret;
char range[OPAL_MAX_INFO_VAL];
int flag=0;
opal_value_t *rng;
opal_list_t values;
pmix_status_t rc;
pmix_info_t pinfo[3];
pmix_data_range_t rng = PMIX_RANGE_SESSION;
pmix_persistence_t pers = PMIX_PERSIST_SESSION;
if ( MPI_PARAM_CHECK ) {
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
@ -71,19 +73,7 @@ int MPI_Publish_name(const char *service_name, MPI_Info info,
}
}
if (NULL == opal_pmix.publish) {
opal_show_help("help-mpi-api.txt",
"MPI function not supported",
true,
FUNC_NAME,
"Underlying runtime environment does not support name publishing functionality");
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD,
OMPI_ERR_NOT_SUPPORTED,
FUNC_NAME);
}
OPAL_CR_ENTER_LIBRARY();
OBJ_CONSTRUCT(&values, opal_list_t);
/* OMPI supports info keys to pass the range and persistence to
* be used for the given key */
@ -91,20 +81,11 @@ int MPI_Publish_name(const char *service_name, MPI_Info info,
ompi_info_get (info, "range", sizeof(range) - 1, range, &flag);
if (flag) {
if (0 == strcmp(range, "nspace")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_RANGE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_RANGE_NAMESPACE; // share only with procs in same nspace
opal_list_append(&values, &rng->super);
rng = PMIX_RANGE_NAMESPACE; // share only with procs in same nspace
} else if (0 == strcmp(range, "session")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_RANGE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_RANGE_SESSION; // share only with procs in same session
opal_list_append(&values, &rng->super);
rng = PMIX_RANGE_SESSION; // share only with procs in same session
} else {
/* unrecognized scope */
OPAL_LIST_DESTRUCT(&values);
OPAL_CR_EXIT_LIBRARY();
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG,
FUNC_NAME);
@ -113,32 +94,15 @@ int MPI_Publish_name(const char *service_name, MPI_Info info,
ompi_info_get (info, "persistence", sizeof(range) - 1, range, &flag);
if (flag) {
if (0 == strcmp(range, "indef")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_PERSISTENCE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_PERSIST_INDEF; // retain until specifically deleted
opal_list_append(&values, &rng->super);
pers = PMIX_PERSIST_INDEF; // retain until specifically deleted
} else if (0 == strcmp(range, "proc")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_PERSISTENCE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_PERSIST_PROC; // retain until publishing process terminates
opal_list_append(&values, &rng->super);
pers = PMIX_PERSIST_PROC; // retain until publishing process terminates
} else if (0 == strcmp(range, "app")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_PERSISTENCE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_PERSIST_APP; // retain until application terminates
opal_list_append(&values, &rng->super);
pers = PMIX_PERSIST_APP; // retain until application terminates
} else if (0 == strcmp(range, "session")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_PERSISTENCE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_PERSIST_SESSION; // retain until session/allocation terminates
opal_list_append(&values, &rng->super);
pers = PMIX_PERSIST_SESSION; // retain until session/allocation terminates
} else {
/* unrecognized persistence */
OPAL_LIST_DESTRUCT(&values);
OPAL_CR_EXIT_LIBRARY();
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG,
FUNC_NAME);
@ -147,33 +111,33 @@ int MPI_Publish_name(const char *service_name, MPI_Info info,
}
/* publish the service name */
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(service_name);
rng->type = OPAL_STRING;
rng->data.string = strdup(port_name);
opal_list_append(&values, &rng->super);
PMIX_INFO_LOAD(&pinfo[0], service_name, port_name, PMIX_STRING);
PMIX_INFO_LOAD(&pinfo[1], PMIX_RANGE, &rng, PMIX_DATA_RANGE);
PMIX_INFO_LOAD(&pinfo[2], PMIX_PERSISTENCE, &pers, PMIX_PERSIST);
rc = opal_pmix.publish(&values);
OPAL_LIST_DESTRUCT(&values);
rc = PMIx_Publish(pinfo, 3);
PMIX_INFO_DESTRUCT(&pinfo[0]);
PMIX_INFO_DESTRUCT(&pinfo[1]);
PMIX_INFO_DESTRUCT(&pinfo[2]);
OPAL_CR_EXIT_LIBRARY();
if ( OPAL_SUCCESS != rc ) {
if (OPAL_EXISTS == rc) {
if ( PMIX_SUCCESS != rc ) {
if (PMIX_EXISTS == rc) {
/* already exists - can't publish it */
rc = MPI_ERR_FILE_EXISTS;
} else if (OPAL_ERR_NOT_SUPPORTED == rc) {
ret = MPI_ERR_FILE_EXISTS;
} else if (PMIX_ERR_NOT_SUPPORTED == rc) {
/* this PMIX environment doesn't support publishing */
rc = OMPI_ERR_NOT_SUPPORTED;
ret = OMPI_ERR_NOT_SUPPORTED;
opal_show_help("help-mpi-api.txt",
"MPI function not supported",
true,
FUNC_NAME,
"Underlying runtime environment does not support name publishing functionality");
} else {
rc = MPI_ERR_INTERN;
ret = MPI_ERR_INTERN;
}
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, rc, FUNC_NAME);
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, ret, FUNC_NAME);
}
return MPI_SUCCESS;

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

@ -12,7 +12,7 @@
* All rights reserved.
* Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2015-2016 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
@ -26,7 +26,7 @@
#include <stdio.h>
#include "opal/class/opal_list.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/argv.h"
#include "opal/util/show_help.h"
@ -49,11 +49,12 @@ static const char FUNC_NAME[] = "MPI_Unpublish_name";
int MPI_Unpublish_name(const char *service_name, MPI_Info info,
const char *port_name)
{
int rc;
int ret;
char range[OPAL_MAX_INFO_VAL];
int flag=0;
opal_list_t pinfo;
opal_value_t *rng;
pmix_status_t rc;
pmix_info_t pinfo;
pmix_data_range_t rng = PMIX_RANGE_SESSION;
char **keys = NULL;
if ( MPI_PARAM_CHECK ) {
@ -73,19 +74,7 @@ int MPI_Unpublish_name(const char *service_name, MPI_Info info,
}
}
if (NULL == opal_pmix.publish) {
opal_show_help("help-mpi-api.txt",
"MPI function not supported",
true,
FUNC_NAME,
"Underlying runtime environment does not support name publishing functionality");
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD,
OMPI_ERR_NOT_SUPPORTED,
FUNC_NAME);
}
OPAL_CR_ENTER_LIBRARY();
OBJ_CONSTRUCT(&pinfo, opal_list_t);
/* OMPI supports info keys to pass the range to
* be searched for the given key */
@ -93,20 +82,11 @@ int MPI_Unpublish_name(const char *service_name, MPI_Info info,
ompi_info_get (info, "range", sizeof(range) - 1, range, &flag);
if (flag) {
if (0 == strcmp(range, "nspace")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_RANGE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_RANGE_NAMESPACE; // share only with procs in same nspace
opal_list_append(&pinfo, &rng->super);
rng = PMIX_RANGE_NAMESPACE; // share only with procs in same nspace
} else if (0 == strcmp(range, "session")) {
rng = OBJ_NEW(opal_value_t);
rng->key = strdup(OPAL_PMIX_RANGE);
rng->type = OPAL_INT;
rng->data.integer = OPAL_PMIX_RANGE_SESSION; // share only with procs in same session
opal_list_append(&pinfo, &rng->super);
rng = PMIX_RANGE_SESSION; // share only with procs in same session
} else {
/* unrecognized scope */
OPAL_LIST_DESTRUCT(&pinfo);
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG,
FUNC_NAME);
}
@ -115,32 +95,33 @@ int MPI_Unpublish_name(const char *service_name, MPI_Info info,
/* unpublish the service_name */
opal_argv_append_nosize(&keys, service_name);
PMIX_INFO_LOAD(&pinfo, PMIX_RANGE, &rng, PMIX_DATA_RANGE);
rc = opal_pmix.unpublish(keys, &pinfo);
rc = PMIx_Unpublish(keys, &pinfo, 1);
opal_argv_free(keys);
OPAL_LIST_DESTRUCT(&pinfo);
PMIX_INFO_DESTRUCT(&pinfo);
if ( OPAL_SUCCESS != rc ) {
if (OPAL_ERR_NOT_FOUND == rc) {
if ( PMIX_SUCCESS != rc ) {
if (PMIX_ERR_NOT_FOUND == rc) {
/* service couldn't be found */
rc = MPI_ERR_SERVICE;
} else if (OPAL_ERR_PERM == rc) {
ret = MPI_ERR_SERVICE;
} else if (PMIX_ERR_NO_PERMISSIONS == rc) {
/* this process didn't own the specified service */
rc = MPI_ERR_ACCESS;
} else if (OPAL_ERR_NOT_SUPPORTED == rc) {
ret = MPI_ERR_ACCESS;
} else if (PMIX_ERR_NOT_SUPPORTED == rc) {
/* this PMIX environment doesn't support publishing */
rc = OMPI_ERR_NOT_SUPPORTED;
ret = OMPI_ERR_NOT_SUPPORTED;
opal_show_help("help-mpi-api.txt",
"MPI function not supported",
true,
FUNC_NAME,
"Underlying runtime environment does not support name publishing functionality");
} else {
rc = MPI_ERR_INTERN;
ret = MPI_ERR_INTERN;
}
OPAL_CR_EXIT_LIBRARY();
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, rc, FUNC_NAME);
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, ret, FUNC_NAME);
}
OPAL_CR_EXIT_LIBRARY();

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

@ -8,7 +8,7 @@
* reserved.
* Copyright (c) 2015-2017 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -35,7 +35,7 @@
#include "ompi/communicator/communicator.h"
#include "ompi/errhandler/errhandler.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/mpi/c/bindings.h"
#include "ompi/mpiext/affinity/c/mpiext_affinity_c.h"

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

@ -4,6 +4,7 @@
* Copyright (c) 2012 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2017 IBM Corporation. All rights reserved.
* Copyright (c) 2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -19,7 +20,7 @@
#include "ompi/op/op.h"
#include "ompi/datatype/ompi_datatype.h"
#include "ompi/communicator/communicator.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
void send_completion(nt status, struct ompi_process_name_t* peer, struct iovec* msg,
int count, ompi_rml_tag_t tag, void* cbdata)

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

@ -4,6 +4,7 @@
* Copyright (c) 2012 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2017 IBM Corporation. All rights reserved.
* Copyright (c) 2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -16,7 +17,7 @@
#include "ompi_config.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "netpatterns_knomial_tree.h"
BEGIN_C_DECLS

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

@ -7,6 +7,7 @@
* Copyright (c) 2014 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2017 IBM Corporation. All rights reserved.
* Copyright (c) 2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -28,7 +29,7 @@
#include "ompi/constants.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "netpatterns.h"

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

@ -13,7 +13,7 @@
* Copyright (c) 2006-2015 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2013-2015 Intel, Inc. All rights reserved
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2017 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2017 Mellanox Technologies. All rights reserved.
@ -37,7 +37,7 @@
#include "opal/util/arch.h"
#include "opal/util/show_help.h"
#include "opal/mca/hwloc/base/base.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/argv.h"
#include "ompi/proc/proc.h"
@ -148,8 +148,8 @@ int ompi_proc_complete_init_single (ompi_proc_t *proc)
* we don't chase after it if some system doesn't
* provide it */
proc->super.proc_hostname = NULL;
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, OPAL_PMIX_HOSTNAME, &proc->super.proc_name,
(char**)&(proc->super.proc_hostname), OPAL_STRING);
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, PMIX_HOSTNAME, &proc->super.proc_name,
(char**)&(proc->super.proc_hostname), PMIX_STRING);
#if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
/* get the remote architecture - this might force a modex except
@ -157,7 +157,7 @@ int ompi_proc_complete_init_single (ompi_proc_t *proc)
{
uint32_t *ui32ptr;
ui32ptr = &(proc->super.proc_arch);
OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_ARCH, &proc->super.proc_name,
OPAL_MODEX_RECV_VALUE(ret, PMIX_ARCH, &proc->super.proc_name,
(void**)&ui32ptr, OPAL_UINT32);
if (OPAL_SUCCESS == ret) {
/* if arch is different than mine, create a new convertor for this proc */
@ -270,8 +270,8 @@ int ompi_proc_init(void)
opal_proc_local_set(&proc->super);
#if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
/* add our arch to the modex */
OPAL_MODEX_SEND_VALUE(ret, OPAL_PMIX_GLOBAL,
OPAL_PMIX_ARCH, &opal_local_arch, OPAL_UINT32);
OPAL_MODEX_SEND_VALUE(ret, PMIX_GLOBAL,
PMIX_ARCH, &opal_local_arch, OPAL_UINT32);
if (OPAL_SUCCESS != ret) {
return ret;
}
@ -316,8 +316,8 @@ int ompi_proc_complete_init(void)
wildcard_rank.jobid = OMPI_PROC_MY_NAME->jobid;
wildcard_rank.vpid = OMPI_NAME_WILDCARD->vpid;
/* retrieve the local peers */
OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_LOCAL_PEERS,
&wildcard_rank, &val, OPAL_STRING);
OPAL_MODEX_RECV_VALUE(ret, PMIX_LOCAL_PEERS,
&wildcard_rank, &val, PMIX_STRING);
if (OPAL_SUCCESS == ret && NULL != val) {
char **peers = opal_argv_split(val, ',');
int i;
@ -334,7 +334,7 @@ int ompi_proc_complete_init(void)
}
/* get the locality information - all RTEs are required
* to provide this information at startup */
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, OPAL_PMIX_LOCALITY, &proc->super.proc_name, &u16ptr, OPAL_UINT16);
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, PMIX_LOCALITY, &proc->super.proc_name, &u16ptr, PMIX_UINT16);
if (OPAL_SUCCESS == ret) {
proc->super.proc_flags = u16;
}
@ -662,7 +662,7 @@ ompi_proc_pack(ompi_proc_t **proclist, int proclistsize,
}
/* retrieve and send the corresponding nspace for this job
* as the remote side may not know the translation */
nspace = (char*)opal_pmix.get_nspace(proc->super.proc_name.jobid);
nspace = opal_jobid_print(proc->super.proc_name.jobid);
rc = opal_dss.pack(buf, &nspace, 1, OPAL_STRING);
if(rc != OPAL_SUCCESS) {
OMPI_ERROR_LOG(rc);
@ -766,7 +766,6 @@ ompi_proc_unpack(opal_buffer_t* buf,
free(newprocs);
return rc;
}
opal_pmix.register_jobid(new_name.jobid, nspace);
free(nspace);
rc = opal_dss.unpack(buf, &new_arch, &count, OPAL_UINT32);
if (rc != OPAL_SUCCESS) {

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

@ -12,7 +12,7 @@
* Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2007-2012 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2013-2014 Intel, Inc. All rights reserved
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* $COPYRIGHT$
@ -39,7 +39,7 @@
#include "opal/util/proc.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
BEGIN_C_DECLS

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

@ -10,7 +10,7 @@
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
# Copyright (c) 2006-2015 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2014 Intel, Inc. All rights reserved.
# Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
# Copyright (c) 2016 IBM Corporation. All rights reserved.
# $COPYRIGHT$
#
@ -28,7 +28,8 @@ headers += \
runtime/ompi_cr.h \
runtime/params.h \
runtime/ompi_info_support.h \
runtime/ompi_spc.h
runtime/ompi_spc.h \
runtime/ompi_rte.h
lib@OMPI_LIBMPI_NAME@_la_SOURCES += \
runtime/ompi_mpi_abort.c \
@ -38,7 +39,8 @@ lib@OMPI_LIBMPI_NAME@_la_SOURCES += \
runtime/ompi_mpi_preconnect.c \
runtime/ompi_cr.c \
runtime/ompi_info_support.c \
runtime/ompi_spc.c
runtime/ompi_spc.c \
runtime/ompi_rte.c
# The MPIR portion of the library must be built with flags to
# enable stepping out of MPI_INIT into main.

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

@ -12,7 +12,7 @@
# All rights reserved.
# Copyright (c) 2007-2018 Cisco Systems, Inc. All rights reserved
# Copyright (c) 2013 NVIDIA Corporation. All rights reserved.
# Copyright (c) 2017 Intel, Inc. All rights reserved.
# Copyright (c) 2017-2020 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -119,3 +119,12 @@ Aborting...
There was an error registering software performance counters (SPCs) as
MPI_T performance variables. Your job will continue, but SPCs will be
disabled for MPI_T.
#
[no-pmi]
PMIx_Init failed for the following reason:
%s
Open MPI requires access to a local PMIx server to execute. Please ensure
that either you are operating in a PMIx-enabled environment, or use "mpirun"
to execute the job.

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

@ -15,6 +15,7 @@
* Copyright (c) 2010-2015 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved.
* Copyright (c) 2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -33,10 +34,6 @@
#include "opal/runtime/opal_info_support.h"
#include "ompi/runtime/ompi_info_support.h"
#if OMPI_RTE_ORTE
#include "orte/runtime/orte_info_support.h"
#endif
#include "opal/util/show_help.h"
#include "opal/util/printf.h"
@ -78,13 +75,6 @@ int ompi_info_register_framework_params(opal_pointer_array_t *component_map)
return rc;
}
#if OMPI_RTE_ORTE
rc = orte_info_register_framework_params(component_map);
if (ORTE_SUCCESS != rc) {
return rc;
}
#endif
return opal_info_register_project_frameworks(ompi_info_type_ompi, ompi_frameworks, component_map);
}
@ -110,11 +100,6 @@ void ompi_info_close_components(void)
(void) mca_base_framework_close(ompi_frameworks[i]);
}
#if OMPI_RTE_ORTE
/* close the ORTE components */
(void) orte_info_close_components();
#endif
(void) opal_info_close_components();
}
@ -138,11 +123,6 @@ void ompi_info_show_ompi_version(const char *scope)
opal_info_out("Open MPI release date", tmp, OMPI_RELEASE_DATE);
free(tmp);
#if OMPI_RTE_ORTE
/* show the orte version */
orte_info_show_orte_version(scope);
#endif
/* show the opal version */
opal_info_show_opal_version(scope);

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

@ -16,7 +16,7 @@
* Copyright (c) 2006 University of Houston. All rights reserved.
* Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2011 Sandia National Laboratories. All rights reserved.
* Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
*
@ -56,7 +56,7 @@
#include "opal/mca/mpool/base/mpool_base_tree.h"
#include "opal/mca/rcache/base/base.h"
#include "opal/mca/allocator/base/base.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/timings.h"
#include "mpi.h"
@ -76,8 +76,7 @@
#include "ompi/mca/bml/base/base.h"
#include "ompi/mca/osc/base/base.h"
#include "ompi/mca/coll/base/base.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/mca/rte/base/base.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/mca/topo/base/base.h"
#include "ompi/mca/io/io.h"
#include "ompi/mca/io/base/base.h"
@ -95,7 +94,7 @@
extern bool ompi_enable_timing;
static void fence_cbfunc(int status, void *cbdata)
static void fence_cbfunc(pmix_status_t status, void *cbdata)
{
volatile bool *active = (volatile bool*)cbdata;
OPAL_ACQUIRE_OBJECT(active);
@ -112,6 +111,7 @@ int ompi_mpi_finalize(void)
volatile bool active;
uint32_t key;
ompi_datatype_t * datatype;
pmix_status_t rc;
ompi_hook_base_mpi_finalize_top();
@ -249,37 +249,38 @@ int ompi_mpi_finalize(void)
del_procs behavior around May of 2014 (see
https://svn.open-mpi.org/trac/ompi/ticket/4669#comment:4 for
more details). */
if (!ompi_async_mpi_finalize) {
if (NULL != opal_pmix.fence_nb) {
active = true;
OPAL_POST_OBJECT(&active);
/* Note that use of the non-blocking PMIx fence will
* allow us to lazily cycle calling
* opal_progress(), which will allow any other pending
* communications/actions to complete. See
* https://github.com/open-mpi/ompi/issues/1576 for the
* original bug report. */
if (OMPI_SUCCESS != (ret = opal_pmix.fence_nb(NULL, 0, fence_cbfunc,
(void*)&active))) {
OMPI_ERROR_LOG(ret);
/* Reset the active flag to false, to avoid waiting for
* completion when the fence was failed. */
active = false;
}
OMPI_LAZY_WAIT_FOR_COMPLETION(active);
} else {
/* However, we cannot guarantee that the provided PMIx has
* fence_nb. If it doesn't, then do the best we can: an MPI
* barrier on COMM_WORLD (which isn't the best because of the
* reasons cited above), followed by a blocking PMIx fence
* (which does not call opal_progress()). */
ompi_communicator_t *comm = &ompi_mpi_comm_world.comm;
comm->c_coll->coll_barrier(comm, comm->c_coll->coll_barrier_module);
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
OMPI_ERROR_LOG(ret);
}
if (!ompi_async_mpi_finalize && !ompi_singleton) {
#ifdef PMIx_Fence_nb
active = true;
OPAL_POST_OBJECT(&active);
/* Note that use of the non-blocking PMIx fence will
* allow us to lazily cycle calling
* opal_progress(), which will allow any other pending
* communications/actions to complete. See
* https://github.com/open-mpi/ompi/issues/1576 for the
* original bug report. */
if (PMIX_SUCCESS != (rc = PMIx_Fence_nb(NULL, 0, NULL, 0, fence_cbfunc, (void*)&active))) {
ret = opal_pmix_convert_status(rc);
OMPI_ERROR_LOG(ret);
/* Reset the active flag to false, to avoid waiting for
* completion when the fence was failed. */
active = false;
}
OMPI_LAZY_WAIT_FOR_COMPLETION(active);
#else
/* However, we cannot guarantee that the provided PMIx has
* fence_nb. If it doesn't, then do the best we can: an MPI
* barrier on COMM_WORLD (which isn't the best because of the
* reasons cited above), followed by a blocking PMIx fence
* (which does not call opal_progress()). */
ompi_communicator_t *comm = &ompi_mpi_comm_world.comm;
comm->c_coll->coll_barrier(comm, comm->c_coll->coll_barrier_module);
if (PMIX_SUCCESS != (rc = PMIx_Fence(NULL, 0))) {
ret = opal_pmix_convert_status(rc);
OMPI_ERROR_LOG(ret);
}
#endif
}
/*
@ -482,12 +483,6 @@ int ompi_mpi_finalize(void)
}
ompi_rte_initialized = false;
/* now close the rte framework */
if (OMPI_SUCCESS != (ret = mca_base_framework_close(&ompi_rte_base_framework) ) ) {
OMPI_ERROR_LOG(ret);
goto done;
}
/* Now close the hook framework */
if (OMPI_SUCCESS != (ret = mca_base_framework_close(&ompi_hook_base_framework) ) ) {
OMPI_ERROR_LOG(ret);

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

@ -17,7 +17,7 @@
* Copyright (c) 2008-2009 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2011 Sandia National Laboratories. All rights reserved.
* Copyright (c) 2012-2013 Inria. All rights reserved.
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2016-2018 Mellanox Technologies Ltd. All rights reserved.
@ -88,8 +88,7 @@
#include "ompi/mca/coll/base/base.h"
#include "ompi/mca/io/io.h"
#include "ompi/mca/io/base/base.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/mca/rte/base/base.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/debuggers/debuggers.h"
#include "ompi/proc/proc.h"
#include "ompi/mca/pml/base/pml_base_bsend.h"
@ -363,7 +362,7 @@ static int ompi_register_mca_variables(void)
return OMPI_SUCCESS;
}
static void fence_release(int status, void *cbdata)
static void fence_release(pmix_status_t status, void *cbdata)
{
volatile bool *active = (volatile bool*)cbdata;
OPAL_ACQUIRE_OBJECT(active);
@ -378,12 +377,10 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided,
ompi_proc_t** procs;
size_t nprocs;
char *error = NULL;
ompi_errhandler_errtrk_t errtrk;
opal_list_t info;
opal_value_t *kv;
volatile bool active;
bool background_fence = false;
pmix_info_t info[2];
pmix_status_t rc;
OMPI_TIMING_INIT(64);
ompi_hook_base_mpi_init_top(argc, argv, requested, provided);
@ -510,13 +507,6 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided,
free(tmp);
}
/* open the rte framework */
if (OMPI_SUCCESS != (ret = mca_base_framework_open(&ompi_rte_base_framework, 0))) {
error = "ompi_rte_base_open() failed";
goto error;
}
/* no select is required as this is a static framework */
/* Setup RTE */
if (OMPI_SUCCESS != (ret = ompi_rte_init(NULL, NULL))) {
error = "ompi_mpi_init: ompi_rte_init failed";
@ -529,28 +519,16 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided,
ompi_rte_initialized = true;
/* Register the default errhandler callback */
errtrk.status = OPAL_ERROR;
errtrk.active = true;
/* we want to go first */
OBJ_CONSTRUCT(&info, opal_list_t);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_EVENT_HDLR_PREPEND);
opal_list_append(&info, &kv->super);
PMIX_INFO_LOAD(&info[0], PMIX_EVENT_HDLR_PREPEND, NULL, PMIX_BOOL);
/* give it a name so we can distinguish it */
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_EVENT_HDLR_NAME);
kv->type = OPAL_STRING;
kv->data.string = strdup("MPI-Default");
opal_list_append(&info, &kv->super);
opal_pmix.register_evhandler(NULL, &info, ompi_errhandler_callback,
ompi_errhandler_registration_callback,
(void*)&errtrk);
OMPI_LAZY_WAIT_FOR_COMPLETION(errtrk.active);
OPAL_LIST_DESTRUCT(&info);
if (OPAL_SUCCESS != errtrk.status) {
PMIX_INFO_LOAD(&info[1], PMIX_EVENT_HDLR_NAME, "MPI-Default", PMIX_STRING);
rc = PMIx_Register_event_handler(NULL, 0, info, 2, ompi_errhandler_callback, NULL, NULL);
PMIX_INFO_DESTRUCT(&info[0]);
PMIX_INFO_DESTRUCT(&info[1]);
if (0 > rc) {
error = "Error handler registration";
ret = errtrk.status;
ret = opal_pmix_convert_status(rc);
goto error;
}
@ -660,17 +638,23 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided,
* if data exchange is required. The modex occurs solely across procs
* in our job. If a barrier is required, the "modex" function will
* perform it internally */
opal_pmix.commit();
rc = PMIx_Commit();
if (PMIX_SUCCESS != rc) {
ret = opal_pmix_convert_status(rc);
error = "PMIx_Commit()";
goto error;
}
OMPI_TIMING_NEXT("commit");
#if (OPAL_ENABLE_TIMING)
if (OMPI_TIMING_ENABLED && !opal_pmix_base_async_modex &&
opal_pmix_collect_all_data) {
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
opal_pmix_collect_all_data && !ompi_singleton) {
if (PMIX_SUCCESS != (rc = PMIx_Fence(NULL, 0, NULL, 0))) {
ret - opal_pmix_convert_status(rc);
error = "timing: pmix-barrier-1 failed";
goto error;
}
OMPI_TIMING_NEXT("pmix-barrier-1");
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, 0))) {
if (PMIX_SUCCESS != (rc = PMIx_Fence(NULL, 0, NULL, 0))) {
error = "timing: pmix-barrier-2 failed";
goto error;
}
@ -678,28 +662,30 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided,
}
#endif
/* If we have a non-blocking fence:
* if we are doing an async modex, but we are collecting all
* data, then execute the non-blocking modex in the background.
* All calls to modex_recv will be cached until the background
* modex completes. If collect_all_data is false, then we skip
* the fence completely and retrieve data on-demand from the
* source node.
*
* If we do not have a non-blocking fence, then we must always
* execute the blocking fence as the system does not support
* later data retrieval. */
if (NULL != opal_pmix.fence_nb) {
if (opal_pmix_base_async_modex && opal_pmix_collect_all_data) {
if (!ompi_singleton) {
/* If we have a non-blocking fence:
* if we are doing an async modex, but we are collecting all
* data, then execute the non-blocking modex in the background.
* All calls to modex_recv will be cached until the background
* modex completes. If collect_all_data is false, then we skip
* the fence completely and retrieve data on-demand from the
* source node.
*
* If we do not have a non-blocking fence, then we must always
* execute the blocking fence as the system does not support
* later data retrieval. */
if (opal_pmix_base_async_modex) {
/* execute the fence_nb in the background to collect
* the data */
background_fence = true;
active = true;
OPAL_POST_OBJECT(&active);
if( OMPI_SUCCESS != (ret = opal_pmix.fence_nb(NULL, true,
PMIX_INFO_LOAD(&info[0], PMIX_COLLECT_DATA, &opal_pmix_collect_all_data, PMIX_BOOL);
if( PMIX_SUCCESS != (rc = PMIx_Fence_nb(NULL, 0, NULL, 0,
fence_release,
(void*)&active))) {
error = "opal_pmix.fence_nb() failed";
ret = opal_pmix_convert_status(rc);
error = "PMIx_Fence_nb() failed";
goto error;
}
@ -707,21 +693,15 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided,
/* we want to do the modex */
active = true;
OPAL_POST_OBJECT(&active);
if( OMPI_SUCCESS != (ret = opal_pmix.fence_nb(NULL,
opal_pmix_collect_all_data, fence_release, (void*)&active))) {
error = "opal_pmix.fence_nb() failed";
PMIX_INFO_LOAD(&info[0], PMIX_COLLECT_DATA, &opal_pmix_collect_all_data, PMIX_BOOL);
if( PMIX_SUCCESS != (rc = PMIx_Fence_nb(NULL, 0, info, 1, fence_release, (void*)&active))) {
ret = opal_pmix_convert_status(rc);
error = "PMIx_Fence() failed";
goto error;
}
/* cannot just wait on thread as we need to call opal_progress */
OMPI_LAZY_WAIT_FOR_COMPLETION(active);
}
/* otherwise, we don't want to do the modex, so fall thru */
} else if (!opal_pmix_base_async_modex || opal_pmix_collect_all_data) {
if( OMPI_SUCCESS != (ret = opal_pmix.fence(NULL,
opal_pmix_collect_all_data))) {
error = "opal_pmix.fence() failed";
goto error;
}
}
OMPI_TIMING_NEXT("modex");
@ -887,29 +867,27 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided,
/* Next timing measurement */
OMPI_TIMING_NEXT("modex-barrier");
/* if we executed the above fence in the background, then
* we have to wait here for it to complete. However, there
* is no reason to do two barriers! */
if (background_fence) {
OMPI_LAZY_WAIT_FOR_COMPLETION(active);
} else if (!ompi_async_mpi_init) {
/* wait for everyone to reach this point - this is a hard
* barrier requirement at this time, though we hope to relax
* it at a later point */
if (NULL != opal_pmix.fence_nb) {
if (!ompi_singleton) {
/* if we executed the above fence in the background, then
* we have to wait here for it to complete. However, there
* is no reason to do two barriers! */
if (background_fence) {
OMPI_LAZY_WAIT_FOR_COMPLETION(active);
} else if (!ompi_async_mpi_init) {
/* wait for everyone to reach this point - this is a hard
* barrier requirement at this time, though we hope to relax
* it at a later point */
bool flag = false;
active = true;
OPAL_POST_OBJECT(&active);
if (OMPI_SUCCESS != (ret = opal_pmix.fence_nb(NULL, false,
fence_release, (void*)&active))) {
error = "opal_pmix.fence_nb() failed";
PMIX_INFO_LOAD(&info[0], PMIX_COLLECT_DATA, &flag, PMIX_BOOL);
if (PMIX_SUCCESS != (rc = PMIx_Fence_nb(NULL, 0, info, 1,
fence_release, (void*)&active))) {
ret = opal_pmix_convert_status(rc);
error = "PMIx_Fence_nb() failed";
goto error;
}
OMPI_LAZY_WAIT_FOR_COMPLETION(active);
} else {
if (OMPI_SUCCESS != (ret = opal_pmix.fence(NULL, false))) {
error = "opal_pmix.fence() failed";
goto error;
}
}
}

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

@ -14,7 +14,7 @@
* Copyright (c) 2007-2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2013 NVIDIA Corporation. All rights reserved.
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Mellanox Technologies, Inc.
* All rights reserved.
* Copyright (c) 2016-2019 Research Organization for Information Science
@ -35,7 +35,7 @@
#include "ompi/datatype/ompi_datatype.h"
#include "ompi/runtime/mpiruntime.h"
#include "ompi/runtime/params.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "opal/mca/pmix/base/base.h"
#include "opal/util/argv.h"

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

@ -2,7 +2,7 @@
/*
* Copyright (c) 2012-2013 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2012-2014 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
@ -51,31 +51,27 @@
#include "opal/class/opal_list.h"
#include "opal/dss/dss.h"
#include "ompi/mca/rte/base/base.h"
#include "ompi/mca/rte/rte.h"
#include "ompi/runtime/ompi_rte.h"
#include "ompi/debuggers/debuggers.h"
#include "ompi/proc/proc.h"
#include "ompi/runtime/params.h"
#include "ompi/communicator/communicator.h"
/* instantiate a debugger-required value */
volatile int MPIR_being_debugged = 0;
extern ompi_rte_component_t mca_rte_pmix_component;
/* storage to support OMPI */
opal_process_name_t pmix_name_wildcard = {UINT32_MAX-1, UINT32_MAX-1};
opal_process_name_t pmix_name_invalid = {UINT32_MAX, UINT32_MAX};
hwloc_cpuset_t ompi_proc_applied_binding = NULL;
pmix_process_info_t pmix_process_info = {0};
bool pmix_proc_is_bound = false;
bool ompi_singleton = false;
static bool pmix_in_parallel_debugger = false;
static bool added_transport_keys = false;
static bool added_num_procs = false;
static bool added_app_ctx = false;
static char* pre_condition_transports_print(uint64_t *unique_key);
static int _setup_top_session_dir(char **sdir);
static int _setup_job_session_dir(char **sdir);
static int _setup_proc_session_dir(char **sdir);
#define OPAL_SCHEMA_DELIMITER_CHAR '.'
#define OPAL_SCHEMA_WILDCARD_CHAR '*'
@ -502,16 +498,17 @@ int ompi_rte_init(int *pargc, char ***pargv)
int ret;
char *error = NULL;
opal_process_name_t pname;
opal_proc_t *myproc;
pmix_proc_t myproc, rproc;
int u32, *u32ptr;
uint16_t u16, *u16ptr;
char **peers=NULL;
char *envar, *ev1, *ev2;
opal_value_t *kv;
char *val;
size_t i;
uint64_t unique_key[2];
char *string_key;
pmix_value_t pval;
pmix_status_t rc;
u32ptr = &u32;
u16ptr = &u16;
@ -533,63 +530,62 @@ int ompi_rte_init(int *pargc, char ***pargv)
goto error;
}
/* open and setup pmix */
if (OPAL_SUCCESS != (ret = mca_base_framework_open(&opal_pmix_base_framework, 0))) {
OPAL_ERROR_LOG(ret);
/* we cannot run */
error = "pmix init";
goto error;
}
if (OPAL_SUCCESS != (ret = opal_pmix_base_select())) {
/* we cannot run */
error = "pmix init";
goto error;
}
/* set the event base */
opal_pmix_base_set_evbase(opal_sync_event_base);
/* initialize the selected module */
if (!opal_pmix.initialized() && (OPAL_SUCCESS != (ret = opal_pmix.init(NULL)))) {
if (!PMIx_Initialized() && (PMIX_SUCCESS != (ret = PMIx_Init(&myproc, NULL, 0)))) {
/* we cannot run - this could be due to being direct launched
* without the required PMI support being built, so print
* out a help message indicating it */
opal_show_help("help-ompi-rte-pmix.txt", "no-pmi", true);
opal_show_help("help-mpi-runtime.txt", "no-pmi", true, PMIx_Error_string(ret));
return OPAL_ERR_SILENT;
}
/* opal_pmix.init will have filled in proc name fields in
* OPAL, so transfer them here */
/* setup the process name fields */
OPAL_PMIX_CONVERT_PROCT(rc, &pname, &myproc);
if (OPAL_SUCCESS != rc) {
return rc;
}
OPAL_PROC_MY_NAME.jobid = pname.jobid;
OPAL_PROC_MY_NAME.vpid = pname.vpid;
pmix_process_info.my_name.jobid = OPAL_PROC_MY_NAME.jobid;
pmix_process_info.my_name.vpid = OPAL_PROC_MY_NAME.vpid;
/* get our hostname */
myproc = opal_proc_local_get();
pmix_process_info.nodename = opal_get_proc_hostname(myproc);
/* set our hostname */
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, PMIX_HOSTNAME, &OPAL_PROC_MY_NAME,
(char**)&ev1, PMIX_STRING);
if (PMIX_SUCCESS == ret) {
if (NULL != opal_process_info.nodename) {
free(opal_process_info.nodename);
}
opal_process_info.nodename = ev1; // ev1 is an allocated string
}
ompi_process_info.nodename = opal_process_info.nodename;
/* get our local rank from PMI */
OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_LOCAL_RANK,
&pmix_process_info.my_name, &u16ptr, OPAL_UINT16);
if (OPAL_SUCCESS != ret) {
error = "getting local rank";
goto error;
OPAL_MODEX_RECV_VALUE(rc, PMIX_LOCAL_RANK,
&pmix_process_info.my_name, &u16ptr, PMIX_UINT16);
if (PMIX_SUCCESS != rc) {
/* assume we are a singleton */
u16 = 0;
ompi_singleton = true;
}
pmix_process_info.my_local_rank = u16;
/* get our node rank from PMI */
OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_NODE_RANK,
&pmix_process_info.my_name, &u16ptr, OPAL_UINT16);
if (OPAL_SUCCESS != ret) {
error = "getting node rank";
goto error;
OPAL_MODEX_RECV_VALUE(rc, PMIX_NODE_RANK,
&pmix_process_info.my_name, &u16ptr, PMIX_UINT16);
if (PMIX_SUCCESS != rc) {
/* assume we are a singleton */
u16 = 0;
}
pmix_process_info.my_node_rank = u16;
/* get job size */
pname.jobid = pmix_process_info.my_name.jobid;
pname.vpid = OPAL_VPID_WILDCARD;
OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_JOB_SIZE,
&pname, &u32ptr, OPAL_UINT32);
if (OPAL_SUCCESS != ret) {
error = "getting job size";
goto error;
OPAL_MODEX_RECV_VALUE(rc, PMIX_JOB_SIZE,
&pname, &u32ptr, PMIX_UINT32);
if (PMIX_SUCCESS != rc) {
/* assume we are a singleton */
u32 = 1;
}
pmix_process_info.num_procs = u32;
@ -608,9 +604,9 @@ int ompi_rte_init(int *pargc, char ***pargv)
}
/* get our app number from PMI - ok if not found */
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, OPAL_PMIX_APPNUM,
&pmix_process_info.my_name, &u32ptr, OPAL_UINT32);
if (OPAL_SUCCESS == ret) {
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_APPNUM,
&pmix_process_info.my_name, &u32ptr, PMIX_UINT32);
if (PMIX_SUCCESS == rc) {
pmix_process_info.app_num = u32;
} else {
pmix_process_info.app_num = 0;
@ -618,9 +614,9 @@ int ompi_rte_init(int *pargc, char ***pargv)
/* get the number of local peers - required for wireup of
* shared memory BTL */
OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_LOCAL_SIZE,
&pname, &u32ptr, OPAL_UINT32);
if (OPAL_SUCCESS == ret) {
OPAL_MODEX_RECV_VALUE(rc, PMIX_LOCAL_SIZE,
&pname, &u32ptr, PMIX_UINT32);
if (PMIX_SUCCESS == rc) {
pmix_process_info.num_local_peers = u32 - 1; // want number besides ourselves
} else {
pmix_process_info.num_local_peers = 0;
@ -637,9 +633,6 @@ int ompi_rte_init(int *pargc, char ***pargv)
OPAL_ERROR_LOG(OPAL_ERR_OUT_OF_RESOURCE);
return OPAL_ERR_OUT_OF_RESOURCE;
}
opal_output_verbose(2, ompi_rte_base_framework.framework_output,
"%s transport key %s",
OPAL_NAME_PRINT(pmix_process_info.my_name), string_key);
opal_asprintf(&envar, OPAL_MCA_PREFIX"opal_precondition_transports=%s", string_key);
putenv(envar);
added_transport_keys = true;
@ -648,19 +641,55 @@ int ompi_rte_init(int *pargc, char ***pargv)
}
/* retrieve temp directories info */
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, OPAL_PMIX_NSDIR, &pname, &val, OPAL_STRING);
if (OPAL_SUCCESS == ret && NULL != val) {
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_TMPDIR, &pname, &val, PMIX_STRING);
if (OPAL_SUCCESS == rc && NULL != val) {
pmix_process_info.top_session_dir = val;
} else {
/* we need to create something */
rc = _setup_top_session_dir(&pmix_process_info.top_session_dir);
if (OPAL_SUCCESS != rc) {
error = "top session directory";
goto error;
}
}
/* retrieve job-session directory info */
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_NSDIR, &pname, &val, PMIX_STRING);
if (PMIX_SUCCESS == rc && NULL != val) {
pmix_process_info.job_session_dir = val;
val = NULL;
} else {
/* we need to create something */
ret = _setup_job_session_dir(&pmix_process_info.job_session_dir);
if (OPAL_SUCCESS != ret) {
rc = _setup_job_session_dir(&pmix_process_info.job_session_dir);
if (OPAL_SUCCESS != rc) {
error = "job session directory";
goto error;
}
}
/* retrieve proc-session directory info */
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_PROCDIR, &OPAL_PROC_MY_NAME, &val, OPAL_STRING);
if (OPAL_SUCCESS == rc && NULL != val) {
pmix_process_info.proc_session_dir = val;
} else {
/* we need to create something */
rc = _setup_proc_session_dir(&pmix_process_info.proc_session_dir);
if (OPAL_SUCCESS != rc) {
error = "proc session directory";
goto error;
}
}
/* identify our location */
val = NULL;
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_LOCALITY_STRING,
&pmix_process_info.my_name, &val, PMIX_STRING);
if (PMIX_SUCCESS == rc && NULL != val) {
pmix_process_info.cpuset = val;
} else {
pmix_process_info.cpuset = NULL;
}
/* get our local peers */
if (0 < pmix_process_info.num_local_peers) {
/* if my local rank if too high, then that's an error */
@ -670,9 +699,9 @@ int ompi_rte_init(int *pargc, char ***pargv)
goto error;
}
/* retrieve the local peers */
OPAL_MODEX_RECV_VALUE(ret, OPAL_PMIX_LOCAL_PEERS,
&pname, &val, OPAL_STRING);
if (OPAL_SUCCESS == ret && NULL != val) {
OPAL_MODEX_RECV_VALUE(rc, PMIX_LOCAL_PEERS,
&pname, &val, PMIX_STRING);
if (PMIX_SUCCESS == rc && NULL != val) {
peers = opal_argv_split(val, ',');
free(val);
} else {
@ -684,15 +713,6 @@ int ompi_rte_init(int *pargc, char ***pargv)
/* set the locality */
if (NULL != peers) {
/* identify our location */
val = NULL;
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, OPAL_PMIX_LOCALITY_STRING,
&pmix_process_info.my_name, &val, OPAL_STRING);
if (OPAL_SUCCESS == ret && NULL != val) {
pmix_process_info.cpuset = val;
} else {
pmix_process_info.cpuset = NULL;
}
pname.jobid = pmix_process_info.my_name.jobid;
for (i=0; NULL != peers[i]; i++) {
pname.vpid = strtoul(peers[i], NULL, 10);
@ -701,9 +721,9 @@ int ompi_rte_init(int *pargc, char ***pargv)
u16 = OPAL_PROC_ALL_LOCAL;
} else {
val = NULL;
OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, OPAL_PMIX_LOCALITY_STRING,
&pname, &val, OPAL_STRING);
if (OPAL_SUCCESS == ret && NULL != val) {
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_LOCALITY_STRING,
&pname, &val, PMIX_STRING);
if (PMIX_SUCCESS == rc && NULL != val) {
u16 = opal_hwloc_compute_relative_locality(pmix_process_info.cpuset, val);
free(val);
} else {
@ -711,16 +731,12 @@ int ompi_rte_init(int *pargc, char ***pargv)
u16 = OPAL_PROC_ON_CLUSTER | OPAL_PROC_ON_CU | OPAL_PROC_ON_NODE;
}
}
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_LOCALITY);
kv->type = OPAL_UINT16;
OPAL_OUTPUT_VERBOSE((1, ompi_rte_base_framework.framework_output,
"%s locality: proc %s locality %s",
OPAL_NAME_PRINT(pmix_process_info.my_name),
OPAL_NAME_PRINT(pname), opal_hwloc_base_print_locality(u16)));
kv->data.uint16 = u16;
ret = opal_pmix.store_local(&pname, kv);
if (OPAL_SUCCESS != ret) {
pval.type = PMIX_UINT16;
pval.data.uint16 = u16;
OPAL_PMIX_CONVERT_NAME(&rproc, &pname);
rc = PMIx_Store_internal(&rproc, PMIX_LOCALITY, &pval);
if (PMIX_SUCCESS != rc) {
ret = opal_pmix_convert_status(rc);
error = "local store of locality";
opal_argv_free(peers);
if (NULL != pmix_process_info.cpuset) {
@ -728,7 +744,6 @@ int ompi_rte_init(int *pargc, char ***pargv)
}
goto error;
}
OBJ_RELEASE(kv);
}
opal_argv_free(peers);
}
@ -742,28 +757,21 @@ int ompi_rte_init(int *pargc, char ***pargv)
* the OPAL layer will have initialized these to NULL, and
* anyone between us would not have strdup'd the string, so
* we cannot free it here */
opal_process_info.top_session_dir = pmix_process_info.top_session_dir;
opal_process_info.job_session_dir = pmix_process_info.job_session_dir;
opal_process_info.proc_session_dir = pmix_process_info.proc_session_dir;
opal_process_info.num_local_peers = (int32_t)pmix_process_info.num_local_peers;
opal_process_info.my_local_rank = (int32_t)pmix_process_info.my_local_rank;
opal_process_info.cpuset = pmix_process_info.cpuset;
/* push our hostname so others can find us, if they need to - the
* native PMIx component will ignore this request as the hostname
* is provided by the system */
OPAL_MODEX_SEND_VALUE(ret, OPAL_PMIX_GLOBAL, OPAL_PMIX_HOSTNAME, pmix_process_info.nodename, OPAL_STRING);
if (OPAL_SUCCESS != ret) {
error = "db store hostname";
goto error;
}
return OPAL_SUCCESS;
error:
if (OPAL_ERR_SILENT != ret ) {
opal_show_help("help-ompi-rte-pmix.txt",
"internal-failure",
true, error, opal_strerror(ret), ret);
opal_show_help("help-mpi-runtime.txt",
"mpi_init:startup:internal-failure",
true, "MPI runtime init", "RTE init",
error, opal_strerror(ret), ret);
}
opal_finalize();
return ret;
@ -808,10 +816,7 @@ int ompi_rte_finalize(void)
}
/* shutdown pmix */
if (NULL != opal_pmix.finalize) {
opal_pmix.finalize();
(void) mca_base_framework_close(&opal_pmix_base_framework);
}
PMIx_Finalize(NULL, 0);
/* cleanup the session directory we created */
if (NULL != pmix_process_info.job_session_dir) {
@ -840,7 +845,7 @@ void ompi_rte_abort(int error_code, char *fmt, ...)
va_end(arglist);
/* call abort */
opal_pmix.abort(error_code, buffer, NULL);
PMIx_Abort(error_code, buffer, NULL, 0);
if (NULL != buffer) {
free(buffer);
}
@ -861,33 +866,22 @@ void ompi_rte_abort_peers(opal_process_name_t *procs,
}
static size_t handler = SIZE_MAX;
static bool debugger_register_active = true;
static bool debugger_event_active = true;
static void _release_fn(int status,
const opal_process_name_t *source,
opal_list_t *info, opal_list_t *results,
opal_pmix_notification_complete_fn_t cbfunc,
static void _release_fn(size_t refid, pmix_status_t status,
const pmix_proc_t *source,
pmix_info_t info[], size_t ninfo,
pmix_info_t *results, size_t nresults,
pmix_event_notification_cbfunc_fn_t cbfunc,
void *cbdata)
{
/* must let the notifier know we are done */
if (NULL != cbfunc) {
cbfunc(OPAL_SUCCESS, NULL, NULL, NULL, cbdata);
cbfunc(PMIX_EVENT_ACTION_COMPLETE, NULL, 0, NULL, NULL, cbdata);
}
debugger_event_active = false;
}
static void _register_fn(int status,
size_t evhandler_ref,
void *cbdata)
{
opal_list_t *codes = (opal_list_t*)cbdata;
handler = evhandler_ref;
OPAL_LIST_RELEASE(codes);
debugger_register_active = false;
}
/*
* Wait for a debugger if asked. We support two ways of waiting for
* attaching debuggers -- see big comment in
@ -895,20 +889,13 @@ static void _register_fn(int status,
*/
void ompi_rte_wait_for_debugger(void)
{
int debugger;
opal_list_t *codes, directives;
opal_value_t *kv;
pmix_info_t directive;
char *evar;
int time;
int time, code = PMIX_ERR_DEBUGGER_RELEASE;
/* check PMIx to see if we are under a debugger */
debugger = pmix_in_parallel_debugger;
if (1 == MPIR_being_debugged) {
debugger = 1;
}
if (!debugger && NULL == getenv("PMIX_TEST_DEBUGGER_ATTACH")) {
if (NULL == getenv("PMIX_DEBUG_WAIT_FOR_NOTIFY") &&
NULL == getenv("PMIX_TEST_DEBUGGER_ATTACH")) {
/* if not, just return */
return;
}
@ -925,36 +912,15 @@ void ompi_rte_wait_for_debugger(void)
}
/* register an event handler for the PMIX_ERR_DEBUGGER_RELEASE event */
codes = OBJ_NEW(opal_list_t);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup("errorcode");
kv->type = OPAL_INT;
kv->data.integer = OPAL_ERR_DEBUGGER_RELEASE;
opal_list_append(codes, &kv->super);
OBJ_CONSTRUCT(&directives, opal_list_t);
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_EVENT_HDLR_NAME);
kv->type = OPAL_STRING;
kv->data.string = strdup("MPI-DEBUGGER-ATTACH");
opal_list_append(&directives, &kv->super);
opal_pmix.register_evhandler(codes, &directives, _release_fn, _register_fn, codes);
/* let the MPI progress engine run while we wait for registration to complete */
OMPI_WAIT_FOR_COMPLETION(debugger_register_active);
OPAL_LIST_DESTRUCT(&directives);
PMIX_INFO_LOAD(&directive, PMIX_EVENT_HDLR_NAME, "MPI-DEBUGGER-ATTACH", PMIX_STRING);
PMIx_Register_event_handler(&code, 1, &directive, 1, _release_fn, NULL, NULL);
PMIX_INFO_DESTRUCT(&directive);
/* let the MPI progress engine run while we wait for debugger release */
OMPI_WAIT_FOR_COMPLETION(debugger_event_active);
/* deregister the event handler */
opal_pmix.deregister_evhandler(handler, NULL, NULL);
}
bool ompi_rte_connect_accept_support(const char *port)
{
/* not sure how to support this yet */
return true;
PMIx_Deregister_event_handler(handler, NULL, NULL);
}
static char* pre_condition_transports_print(uint64_t *unique_key)
@ -1023,25 +989,44 @@ static char* pre_condition_transports_print(uint64_t *unique_key)
return string_key;
}
static int _setup_job_session_dir(char **sdir)
static int _setup_top_session_dir(char **sdir)
{
char *tmpdir;
/* get the effective uid */
uid_t uid = geteuid();
if( NULL == (tmpdir = getenv("TMPDIR")) )
if( NULL == (tmpdir = getenv("TEMP")) )
if( NULL == (tmpdir = getenv("TMP")) )
tmpdir = "/tmp";
if (0 > opal_asprintf(&pmix_process_info.job_session_dir,
"%s/ompi.%s.%lu/jf.0/%u", tmpdir,
pmix_process_info.nodename,
(unsigned long)uid,
pmix_process_info.my_name.jobid)) {
*sdir = strdup(tmpdir);
return OPAL_SUCCESS;
}
static int _setup_job_session_dir(char **sdir)
{
/* get the effective uid */
uid_t uid = geteuid();
if (0 > opal_asprintf(sdir, "%s/ompi.%s.%lu/jf.0/%u",
pmix_process_info.top_session_dir,
pmix_process_info.nodename,
(unsigned long)uid,
pmix_process_info.my_name.jobid)) {
pmix_process_info.job_session_dir = NULL;
return OPAL_ERR_OUT_OF_RESOURCE;
}
return OPAL_SUCCESS;
}
static int _setup_proc_session_dir(char **sdir)
{
if (0 > opal_asprintf(sdir, "%s/%d",
pmix_process_info.job_session_dir,
pmix_process_info.my_name.vpid)) {
pmix_process_info.proc_session_dir = NULL;
return OPAL_ERR_OUT_OF_RESOURCE;
}
return OPAL_SUCCESS;
}

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

@ -3,7 +3,9 @@
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights reserved.
* Copyright (c) 2013 Mellanox Technologies, Inc.
* All rights reserved.
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2019 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
*
* $COPYRIGHT$
*
@ -158,46 +160,121 @@
#define OMPI_MCA_RTE_H
#include "ompi_config.h"
#include "ompi/constants.h"
#include <stdint.h>
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
struct opal_proc_t;
#include "opal/threads/threads.h"
#include "opal/util/proc.h"
#include "opal/mca/hwloc/hwloc-internal.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/dss/dss_types.h"
#include "ompi/mca/mca.h"
#include "opal/mca/base/base.h"
struct ompi_proc_t;
struct ompi_communicator_t;
BEGIN_C_DECLS
/**
* Structure for rte components.
*/
struct ompi_rte_base_component_1_0_0_t {
/** MCA base component */
mca_base_component_t base_version;
/** MCA base data */
mca_base_component_data_t base_data;
};
/* Process name objects and operations */
typedef opal_process_name_t ompi_process_name_t;
typedef uint32_t ompi_jobid_t;
typedef uint32_t ompi_vpid_t;
/**
* Convenience typedef
*/
typedef struct ompi_rte_base_component_1_0_0_t ompi_rte_base_component_1_0_0_t;
typedef struct ompi_rte_base_component_1_0_0_t ompi_rte_component_t;
/* some local storage */
OMPI_DECLSPEC extern opal_process_name_t pmix_name_wildcard;
OMPI_DECLSPEC extern hwloc_cpuset_t ompi_proc_applied_binding;
/**
* Macro for use in components that are of type rte
*/
#define OMPI_RTE_BASE_VERSION_1_0_0 \
OMPI_MCA_BASE_VERSION_2_1_0("rte", 2, 0, 0)
#define OMPI_PROC_MY_NAME (&pmix_process_info.my_name)
#define OMPI_NAME_WILDCARD (&pmix_name_wildcard)
END_C_DECLS
typedef uint8_t ompi_rte_cmp_bitmask_t;
#define OMPI_RTE_CMP_NONE 0x00
#define OMPI_RTE_CMP_JOBID 0x02
#define OMPI_RTE_CMP_VPID 0x04
#define OMPI_RTE_CMP_ALL 0x0f
#define OMPI_RTE_CMP_WILD 0x10
/* include implementation to call */
#include MCA_rte_IMPLEMENTATION_HEADER
OMPI_DECLSPEC char* ompi_pmix_print_name(const ompi_process_name_t *name);
BEGIN_C_DECLS
#define OMPI_NAME_PRINT(a) ompi_pmix_print_name(a)
OMPI_DECLSPEC int ompi_rte_compare_name_fields(ompi_rte_cmp_bitmask_t mask,
const opal_process_name_t* name1,
const opal_process_name_t* name2);
OMPI_DECLSPEC int ompi_rte_convert_string_to_process_name(opal_process_name_t *name,
const char* name_string);
OMPI_DECLSPEC int ompi_rte_convert_process_name_to_string(char** name_string,
const opal_process_name_t *name);
/*
* MCA Framework
*/
OMPI_DECLSPEC extern mca_base_framework_t ompi_rte_base_framework;
#define OMPI_LOCAL_JOBID(n) \
( (n) & 0x0000ffff)
#define OMPI_JOB_FAMILY(n) \
(((n) >> 16) & 0x0000ffff)
#define OMPI_CONSTRUCT_LOCAL_JOBID(local, job) \
( ((local) & 0xffff0000) | ((job) & 0x0000ffff) )
#define OMPI_CONSTRUCT_JOB_FAMILY(n) \
( ((n) << 16) & 0xffff0000)
#define OMPI_CONSTRUCT_JOBID(family, local) \
OMPI_CONSTRUCT_LOCAL_JOBID(OMPI_CONSTRUCT_JOB_FAMILY(family), local)
/* This is the DSS tag to serialize a proc name */
#define OMPI_NAME OPAL_NAME
#define OMPI_PROCESS_NAME_HTON OPAL_PROCESS_NAME_HTON
#define OMPI_PROCESS_NAME_NTOH OPAL_PROCESS_NAME_NTOH
#if OPAL_ENABLE_DEBUG
static inline opal_process_name_t * OMPI_CAST_RTE_NAME(opal_process_name_t * name) {
return (opal_process_name_t *)name;
}
#else
#define OMPI_CAST_RTE_NAME(a) ((opal_process_name_t*)(a))
#endif
/* Process info struct and values */
typedef uint16_t ompi_node_rank_t;
typedef uint16_t ompi_local_rank_t;
#define OMPI_NODE_RANK_INVALID UINT16_MAX
#define OMPI_LOCAL_RANK_INVALID UINT16_MAX
typedef struct {
opal_process_name_t my_name;
char *my_hnp_uri;
char *nodename;
pid_t pid;
char *top_session_dir;
char *job_session_dir;
char *proc_session_dir;
uint16_t my_local_rank;
uint16_t my_node_rank;
int32_t num_local_peers;
uint32_t num_procs;
uint32_t app_num;
char *cpuset;
} pmix_process_info_t;
OMPI_DECLSPEC extern pmix_process_info_t pmix_process_info;
#define ompi_process_info pmix_process_info
OMPI_DECLSPEC extern bool pmix_proc_is_bound;
#define ompi_rte_proc_is_bound pmix_proc_is_bound
/* Error handling objects and operations */
OMPI_DECLSPEC void __opal_attribute_noreturn__
ompi_rte_abort(int error_code, char *fmt, ...);
OMPI_DECLSPEC void ompi_rte_abort_peers(opal_process_name_t *procs,
int32_t num_procs,
int error_code);
#define OMPI_ERROR_LOG OPAL_ERROR_LOG
/* Init and finalize operations */
OMPI_DECLSPEC int ompi_rte_init(int *argc, char ***argv);
OMPI_DECLSPEC int ompi_rte_finalize(void);
OMPI_DECLSPEC void ompi_rte_wait_for_debugger(void);
OMPI_DECLSPEC extern bool ompi_singleton;
/* In a few places, we need to barrier until something happens
* that changes a flag to indicate we can release - e.g., waiting
@ -207,10 +284,6 @@ OMPI_DECLSPEC extern mca_base_framework_t ompi_rte_base_framework;
*/
#define OMPI_WAIT_FOR_COMPLETION(flg) \
do { \
opal_output_verbose(1, ompi_rte_base_framework.framework_output, \
"%s waiting on RTE event at %s:%d", \
OMPI_NAME_PRINT(OMPI_PROC_MY_NAME), \
__FILE__, __LINE__); \
while ((flg)) { \
opal_progress(); \
} \
@ -218,22 +291,12 @@ OMPI_DECLSPEC extern mca_base_framework_t ompi_rte_base_framework;
#define OMPI_LAZY_WAIT_FOR_COMPLETION(flg) \
do { \
opal_output_verbose(1, ompi_rte_base_framework.framework_output, \
"%s lazy waiting on RTE event at %s:%d", \
OMPI_NAME_PRINT(OMPI_PROC_MY_NAME), \
__FILE__, __LINE__); \
while ((flg)) { \
opal_progress(); \
usleep(100); \
} \
}while(0);
typedef struct {
opal_list_item_t super;
ompi_process_name_t name;
} ompi_namelist_t;
OBJ_CLASS_DECLARATION(ompi_namelist_t);
END_C_DECLS
#endif /* OMPI_RTE_H_ */

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

@ -11,6 +11,7 @@
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
# Copyright (c) 2014 Intel, Inc. All rights reserved.
# Copyright (c) 2020 IBM Corporation. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -21,11 +22,13 @@
# This makefile.am does not stand on its own - it is included from ompi/Makefile.am
SUBDIRS += \
tools/mpirun \
tools/ompi_info \
tools/wrappers \
tools/mpisync
DIST_SUBDIRS += \
tools/mpirun \
tools/ompi_info \
tools/wrappers \
tools/mpisync

21
ompi/tools/mpirun/Makefile.am Обычный файл
Просмотреть файл

@ -0,0 +1,21 @@
#
# Copyright (c) 2019 Intel, Inc. All rights reserved.
# Copyright (c) 2020 IBM Corporation. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
if OMPI_WANT_PRRTE
install-exec-hook:
(cd $(DESTDIR)$(bindir); rm -f mpirun$(EXEEXT); $(LN_S) prun$(EXEEXT) mpirun$(EXEEXT))
(cd $(DESTDIR)$(bindir); rm -f mpiexec$(EXEEXT); $(LN_S) prun$(EXEEXT) mpiexec$(EXEEXT))
(cd $(DESTDIR)$(bindir); rm -f oshrun$(EXEEXT); $(LN_S) prun$(EXEEXT) oshrun$(EXEEXT))
uninstall-local:
rm -f $(DESTDIR)$(bindir)/mpirun$(EXEEXT) \
$(DESTDIR)$(bindir)/mpiexec$(EXEEXT) \
$(DESTDIR)$(bindir)/oshrun$(EXEEXT)
endif

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

@ -18,6 +18,7 @@
# Copyright (c) 2017 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
#
# Copyright (c) 2019 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -75,9 +76,6 @@ mpisync_SOURCES = \
sync.c
mpisync_LDADD = $(top_builddir)/ompi/lib@OMPI_LIBMPI_NAME@.la
if OMPI_RTE_ORTE
mpisync_LDADD += $(top_builddir)/orte/lib@ORTE_LIB_PREFIX@open-rte.la
endif
mpisync_LDADD += $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la
clean-local:

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

@ -16,6 +16,7 @@
# Copyright (c) 2016 IBM Corporation. All rights reserved.
# Copyright (c) 2017 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2019 Intel, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -65,9 +66,6 @@ ompi_info_SOURCES = \
param.c
ompi_info_LDADD = $(top_builddir)/ompi/lib@OMPI_LIBMPI_NAME@.la
if OMPI_RTE_ORTE
ompi_info_LDADD += $(top_builddir)/orte/lib@ORTE_LIB_PREFIX@open-rte.la
endif
ompi_info_LDADD += $(top_builddir)/opal/lib@OPAL_LIB_PREFIX@open-pal.la
clean-local:

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

@ -13,7 +13,7 @@
* Copyright (c) 2011-2012 University of Houston. All rights reserved.
* Copyright (c) 2010-2013 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2014 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -51,10 +51,6 @@
#include "opal/util/argv.h"
#include "opal/util/show_help.h"
#if OMPI_RTE_ORTE
#include "orte/runtime/orte_info_support.h"
#endif
#include "ompi/communicator/communicator.h"
#include "ompi/tools/ompi_info/ompi_info.h"
#include "ompi/runtime/ompi_info_support.h"
@ -115,11 +111,6 @@ int main(int argc, char *argv[])
/* add in the opal frameworks */
opal_info_register_types(&mca_types);
#if OMPI_RTE_ORTE
/* add in the orte frameworks */
orte_info_register_types(&mca_types);
#endif
ompi_info_register_types(&mca_types);
/* init the component map */

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

@ -13,7 +13,7 @@
* Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
* Copyright (c) 2014-2019 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015 Intel, Inc. All rights reserved
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved.
* Copyright (c) 2018 FUJITSU LIMITED. All rights reserved.
* $COPYRIGHT$
@ -123,9 +123,6 @@ void ompi_info_do_config(bool want_all)
char *cxxexceptions;
char *threads;
char *have_dl;
#if OMPI_RTE_ORTE
char *mpirun_prefix_by_default;
#endif
char *sparse_groups;
char *wtime_support;
char *symbol_visibility;
@ -277,9 +274,6 @@ void ompi_info_do_config(bool want_all)
fortran_usempi_profiling = (OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_USEMPI_BINDINGS) ? "yes" : "no";
fortran_usempif08_profiling = (OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_USEMPIF08_BINDINGS) ? "yes" : "no";
have_dl = OPAL_HAVE_DL_SUPPORT ? "yes" : "no";
#if OMPI_RTE_ORTE
mpirun_prefix_by_default = ORTE_WANT_ORTERUN_PREFIX_BY_DEFAULT ? "yes" : "no";
#endif
sparse_groups = OMPI_GROUP_SPARSE ? "yes" : "no";
wtime_support = OPAL_TIMER_USEC_NATIVE ? "native" : "gettimeofday";
symbol_visibility = OPAL_C_HAVE_VISIBILITY ? "yes" : "no";
@ -308,13 +302,8 @@ void ompi_info_do_config(bool want_all)
fortran_have_ignore_tkr = strdup("no");
}
#if OMPI_RTE_ORTE
(void)opal_asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
"posix", OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
#else
(void)opal_asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: %s, Event lib: yes)",
"posix", OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
#endif
(void)opal_asprintf(&ft_support, "%s (checkpoint thread: %s)",
OPAL_ENABLE_FT ? "yes" : "no", OPAL_ENABLE_FT_THREAD ? "yes" : "no");
@ -655,10 +644,6 @@ void ompi_info_do_config(bool want_all)
opal_info_out("Memory debugging support", "option:mem-debug", memdebug);
opal_info_out("dl support", "option:dlopen", have_dl);
opal_info_out("Heterogeneous support", "options:heterogeneous", heterogeneous);
#if OMPI_RTE_ORTE
opal_info_out("mpirun default --prefix", "mpirun:prefix_by_default",
mpirun_prefix_by_default);
#endif
opal_info_out("MPI_WTIME support", "options:mpi-wtime", wtime_support);
opal_info_out("Symbol vis. support", "options:visibility", symbol_visibility);
opal_info_out("Host topology support", "options:host-topology",

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

@ -11,7 +11,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2012-2013 Los Alamos National Security, Inc. All rights reserved.
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2017 IBM Corporation. All rights reserved.
@ -88,10 +88,12 @@ static void opal_value_destruct(opal_value_t* ptr)
if (OPAL_STRING == ptr->type &&
NULL != ptr->data.string) {
free(ptr->data.string);
}
if (OPAL_BYTE_OBJECT == ptr->type &&
} else if (OPAL_BYTE_OBJECT == ptr->type &&
NULL != ptr->data.bo.bytes) {
free(ptr->data.bo.bytes);
} else if (OPAL_LIST == ptr->type &&
NULL != ptr->data.ptr) {
OPAL_LIST_RELEASE(ptr->data.ptr);
}
}
OBJ_CLASS_INSTANCE(opal_value_t,

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

@ -15,7 +15,7 @@
* reserved.
* Copyright (c) 2014-2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -108,6 +108,7 @@ typedef struct {
#define OPAL_PROC_STATE (opal_data_type_t) 37 /**< corresponds to PMIx proc state type (uint8_t) */
#define OPAL_PROC_INFO (opal_data_type_t) 38 /**< corresponds to PMIx proc_info type */
#define OPAL_ENVAR (opal_data_type_t) 39 /**< corresponds to PMIx envar type */
#define OPAL_LIST (opal_data_type_t) 40 /**< an opal list */
/* OPAL Dynamic */
#define OPAL_DSS_ID_DYNAMIC (opal_data_type_t) 100

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

@ -12,7 +12,7 @@
* All rights reserved.
* Copyright (c) 2015-2018 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2018 Intel, Inc, All rights reserved
* Copyright (c) 2018-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -36,7 +36,7 @@
#include "opal/mca/mpool/mpool.h"
#include "opal/mca/btl/base/btl_base_error.h"
#include "opal/mca/rcache/base/base.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/class/opal_hash_table.h"

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

@ -12,7 +12,7 @@
* All rights reserved.
* Copyright (c) 2014-2018 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2018 Intel, Inc, All rights reserved
* Copyright (c) 2018-2019 Intel, Inc. All rights reserved.
*
* Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved.
* $COPYRIGHT$
@ -567,7 +567,7 @@ static int mca_btl_ofi_init_device(struct fi_info *info)
/* post our endpoint name so peer can use it to connect to us */
OPAL_MODEX_SEND(rc,
OPAL_PMIX_GLOBAL,
PMIX_GLOBAL,
&mca_btl_ofi_component.super.btl_version,
&ep_name,
namelen);

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

@ -13,7 +13,7 @@
* Copyright (c) 2010-2012 Sandia National Laboratories. All rights reserved.
* Copyright (c) 2014 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2014 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2014 Bull SAS. All rights reserved.
* $COPYRIGHT$
*
@ -34,7 +34,7 @@
#include "opal/mca/btl/btl.h"
#include "opal/datatype/opal_convertor.h"
#include "opal/util/proc.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "btl_portals4.h"
#include "btl_portals4_recv.h"

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

@ -11,7 +11,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2010-2012 Sandia National Laboratories. All rights reserved.
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2014 Bull SAS. All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
@ -26,7 +26,7 @@
#include "opal/mca/event/event.h"
#include "opal/util/output.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/show_help.h"
#include "opal/mca/btl/btl.h"
#include "opal/mca/btl/base/base.h"
@ -457,7 +457,7 @@ static mca_btl_base_module_t** mca_btl_portals4_component_init(int *num_btls,
ptl_process_ids[interface].rank,
ptl_process_ids[interface].phys.nid, ptl_process_ids[interface].phys.pid));
}
OPAL_MODEX_SEND(ret, OPAL_PMIX_GLOBAL,
OPAL_MODEX_SEND(ret, PMIX_GLOBAL,
&mca_btl_portals4_component.super.btl_version,
ptl_process_ids, mca_btl_portals4_component.num_btls * sizeof(ptl_process_t));
if (OPAL_SUCCESS != ret) {

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

@ -18,7 +18,7 @@
* Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014-2017 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2016 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -243,7 +243,7 @@ smcuda_btl_first_time_init(mca_btl_smcuda_t *smcuda_btl,
/* see if we were given a topology signature */
wildcard_rank.jobid = OPAL_PROC_MY_NAME.jobid;
wildcard_rank.vpid = OPAL_VPID_WILDCARD;
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, OPAL_PMIX_TOPOLOGY_SIGNATURE,
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_TOPOLOGY_SIGNATURE,
&wildcard_rank, &loc, OPAL_STRING);
if (OPAL_SUCCESS == rc) {
/* the number of NUMA nodes is right at the front */
@ -266,7 +266,7 @@ smcuda_btl_first_time_init(mca_btl_smcuda_t *smcuda_btl,
}
}
/* see if we were given our location */
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, OPAL_PMIX_LOCALITY_STRING,
OPAL_MODEX_RECV_VALUE_OPTIONAL(rc, PMIX_LOCALITY_STRING,
&OPAL_PROC_MY_NAME, &loc, OPAL_STRING);
if (OPAL_SUCCESS == rc) {
if (NULL == loc) {

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

@ -16,7 +16,7 @@
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2013-2015 NVIDIA Corporation. All rights reserved.
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2017 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2018-2019 Amazon.com, Inc. or its affiliates. All Rights
@ -77,8 +77,8 @@
#include "opal/mca/btl/base/base.h"
#include "opal/mca/mpool/base/base.h"
#include "opal/mca/btl/base/btl_base_error.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/reachable/base/base.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/threads/threads.h"
#include "opal/constants.h"
@ -1242,7 +1242,7 @@ static int mca_btl_tcp_component_exchange(void)
addrs[i].addr_bandwidth = btl->super.btl_bandwidth;
}
OPAL_MODEX_SEND(rc, OPAL_PMIX_GLOBAL,
OPAL_MODEX_SEND(rc, PMIX_GLOBAL,
&mca_btl_tcp_component.super.btl_version,
addrs, size);
free(addrs);
@ -1427,7 +1427,7 @@ static void mca_btl_tcp_component_recv_handler(int sd, short flags, void* user)
socklen_t rcvtimeo_save_len = sizeof(save);
/* Note, Socket will be in blocking mode during intial handshake
* hence setting SO_RCVTIMEO to say 2 seconds here to avoid waiting
* hence setting SO_RCVTIMEO to say 2 seconds here to avoid waiting
* forever when connecting to older versions (that reply to the
* handshake with only the guid) or when the remote side isn't OMPI
*/

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

@ -11,7 +11,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2008-2010 Oracle and/or its affiliates. All rights reserved
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2013-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2015-2016 Los Alamos National Security, LLC. All rights
@ -40,7 +40,7 @@
#include "opal/class/opal_hash_table.h"
#include "opal/mca/btl/base/btl_base_error.h"
#include "opal/mca/reachable/base/base.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/arch.h"
#include "opal/util/argv.h"
#include "opal/util/if.h"

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

@ -13,6 +13,7 @@
* Copyright (c) 2015-2018 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2019 Google, LLC. All rights reserved.
* Copyright (c) 2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -37,7 +38,7 @@
#include "opal/mca/rcache/base/base.h"
#include "opal/class/opal_fifo.h"
#include "opal/class/opal_hash_table.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/threads/tsd.h"
#include <uct/api/uct.h>

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

@ -18,6 +18,7 @@
* Copyright (c) 2018 Triad National Security, LLC. All rights
* reserved.
* Copyright (c) 2019 Google, LLC. All rights reserved.
* Copyright (c) 2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -254,7 +255,7 @@ static int mca_btl_uct_modex_send (void)
}
}
OPAL_MODEX_SEND(rc, OPAL_PMIX_GLOBAL, &mca_btl_uct_component.super.btl_version, modex, modex_size);
OPAL_MODEX_SEND(rc, PMIX_GLOBAL, &mca_btl_uct_component.super.btl_version, modex, modex_size);
return rc;
}

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

@ -3,7 +3,7 @@
* Copyright (c) 2011-2017 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2011 UT-Battelle, LLC. All rights reserved.
* Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -18,7 +18,7 @@
#include "btl_ugni_smsg.h"
#include "opal/include/opal/align.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#define INITIAL_GNI_EPS 1024
@ -309,7 +309,7 @@ mca_btl_ugni_setup_mpools (mca_btl_ugni_module_t *ugni_module)
/* determine how many procs are in the job (might want to check universe size here) */
u32 = &nprocs;
OPAL_MODEX_RECV_VALUE(rc, OPAL_PMIX_UNIV_SIZE, &OPAL_PROC_MY_NAME,
OPAL_MODEX_RECV_VALUE(rc, PMIX_UNIV_SIZE, &OPAL_PROC_MY_NAME,
&u32, OPAL_UINT32);
if (OPAL_SUCCESS != rc) {
/* take a wild conservative guess */

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

@ -3,7 +3,7 @@
* Copyright (c) 2011-2018 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2011-2013 UT-Battelle, LLC. All rights reserved.
* Copyright (c) 2017 Intel, Inc. All rights reserved.
* Copyright (c) 2017-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -13,7 +13,7 @@
#include "btl_ugni_endpoint.h"
#include "btl_ugni_smsg.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
static void mca_btl_ugni_ep_construct (mca_btl_base_endpoint_t *ep)
{

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

@ -3,7 +3,7 @@
* Copyright (c) 2011-2018 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2011 UT-Battelle, LLC. All rights reserved.
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2014 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* $COPYRIGHT$
@ -20,7 +20,7 @@
#include "opal/class/opal_list.h"
#include "opal/dss/dss.h"
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
#include "opal/util/bit_ops.h"
#include "opal/mca/hwloc/base/base.h"
@ -221,7 +221,7 @@ static int mca_btl_ugni_send_modex (void)
* new ranks started on the same nodes as the spawnee ranks, etc.
*/
OPAL_MODEX_SEND(rc, OPAL_PMIX_GLOBAL,
OPAL_MODEX_SEND(rc, PMIX_GLOBAL,
&mca_btl_ugni_component.super.btl_version,
modex_msg, modex_size);

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

@ -1,6 +1,6 @@
/*
* Copyright (c) 2014-2019 Cisco Systems, Inc. All rights reserved
* Copyright (c) 2015 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -27,7 +27,7 @@ void usnic_compat_modex_send(int *rc,
opal_btl_usnic_modex_t *modexes,
size_t size)
{
OPAL_MODEX_SEND(*rc, OPAL_PMIX_REMOTE, component,
OPAL_MODEX_SEND(*rc, PMIX_REMOTE, component,
modexes, size);
}

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

@ -3,7 +3,7 @@
* Copyright (c) 2013-2019 Cisco Systems, Inc. All rights reserved
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2018 Intel, Inc. All rights reserved.
* Copyright (c) 2018-2019 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -26,7 +26,7 @@
#include "opal/util/error.h"
/* PMIX / modex stuff */
#include "opal/mca/pmix/pmix.h"
#include "opal/mca/pmix/pmix-internal.h"
/* Proc stuff */
#include "opal/util/proc.h"

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