Remove ORTE project
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>
Этот коммит содержится в:
родитель
dc0d6a5e1b
Коммит
174e967dbc
8
.gitmodules
поставляемый
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
|
||||
|
10
Makefile.am
10
Makefile.am
@ -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
|
||||
|
4
VERSION
4
VERSION
@ -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
|
||||
|
47
autogen.pl
47
autogen.pl
@ -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
Обычный файл
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
Обычный файл
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)
|
||||
])
|
91
configure.ac
91
configure.ac
@ -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
|
||||
|
304
ompi/dpm/dpm.c
304
ompi/dpm/dpm.c
@ -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
Обычный файл
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"
|
||||
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
x
Ссылка в новой задаче
Block a user