Skip to content

uofl: changes to Open MPI and move prrte/pmix shas #13299

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[submodule "prrte"]
path = 3rd-party/prrte
url = ../../open-mpi/prrte
branch = master
branch = ompi_main
[submodule "openpmix"]
path = 3rd-party/openpmix
url = ../../openpmix/openpmix.git
Expand Down
2 changes: 1 addition & 1 deletion 3rd-party/openpmix
Submodule openpmix updated 407 files
2 changes: 1 addition & 1 deletion 3rd-party/prrte
Submodule prrte updated 470 files
16 changes: 16 additions & 0 deletions config/ompi_setup_prrte.m4
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ dnl Copyright (c) 2021 Nanook Consulting. All rights reserved.
dnl Copyright (c) 2021-2022 IBM Corporation. All rights reserved.
dnl Copyright (c) 2023-2024 Jeffrey M. Squyres. All rights reserved.
dnl Copyright (c) 2025 Advanced Micro Devices, Inc. All rights reserved.
dnl Copyright (c) 2025 Triad National Security, LLC. All rights
dnl reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
Expand Down Expand Up @@ -118,10 +120,19 @@ OPAL_VAR_SCOPE_PUSH([prrte_setup_internal_happy prrte_setup_external_happy targe
[$OMPI_USING_INTERNAL_PRRTE],
[Whether or not we are using the internal PRRTE])

AM_CONDITIONAL(OMPI_USING_INTERNAL_PRRTE, [test $OMPI_USING_INTERNAL_PRRTE -eq 1])

AC_SUBST(OMPI_PRRTE_RST_CONTENT_DIR)
AC_SUBST(OMPI_SCHIZO_OMPI_RST_CONTENT_DIR)
AM_CONDITIONAL(OMPI_HAVE_PRRTE_RST, [test $OMPI_HAVE_PRRTE_RST -eq 1])

dnl
dnl If using external prrte that supports prte_launch or using internal prtte then
dnl set OMPI_HAVE_PRTE_LAUNCH
dnl
AS_IF([test "$setup_pprte_external_has_prte_launch" = "1" -o "$prrte_setup_internal_happy" = "1"],
[AC_DEFINE_UNQUOTED([OMPI_HAVE_PRTE_LAUNCH], [1], [Whether prte_launch support available])])

OPAL_SUMMARY_ADD([Miscellaneous], [PRRTE], [], [$opal_prrte_mode])

OPAL_VAR_SCOPE_POP
Expand Down Expand Up @@ -297,6 +308,11 @@ AC_DEFUN([_OMPI_SETUP_PRRTE_EXTERNAL], [
AS_IF([test "${ompi_setup_prrte_cv_version_happy}" = "no"],
[setup_prrte_external_happy="no"])])

AS_IF([test "${setup_prrte_external_happy}" = "yes"],
[AC_CHECK_DECL([prte_launch],
[setup_prrte_external_has_prte_launch=1], [setup_pprte_external_has_prte_launch=0],
[#include "prte.h"])],[])

CPPFLAGS="$opal_prrte_CPPFLAGS_save"

# If an external build and the user told us where to find PRRTE,
Expand Down
5 changes: 4 additions & 1 deletion ompi/dpm/dpm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1975,7 +1975,10 @@ static char *find_prte(void)
#if OMPI_USING_INTERNAL_PRRTE
/* 2) If using internal PRRTE, use our bindir. Note that this
* will obey OPAL_PREFIX and OPAL_DESTDIR */
opal_asprintf(&filename, "%s%sprte", opal_install_dirs.bindir, OPAL_PATH_SEP);
/*
* TODO: HPP replace hard-wired prrte prefix with something configurable
*/
opal_asprintf(&filename, "%s%sompi-prte", opal_install_dirs.bindir, OPAL_PATH_SEP);
return filename;
#else

Expand Down
13 changes: 13 additions & 0 deletions ompi/tools/mpirun/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,28 @@

if OMPI_WANT_PRRTE

#
# to help VPATH'd builds find prrte_version.h
#
AM_CFLAGS = \
-I$(top_srcdir)/3rd-party/prrte/include -I$(includedir)

bin_PROGRAMS = mpirun

EXTRA_DIST = help-mpirun.txt

mpirun_SOURCES = \
main.c

#
# TODO: HPP replace hard-wired prrte prefix with something configurable
#
mpirun_LDADD = \
$(top_builddir)/opal/libopen-pal_core.la
if OMPI_USING_INTERNAL_PRRTE
mpirun_LDADD += \
$(top_builddir)/3rd-party/prrte/src/libompi-prrte.la
endif

mpirun_CPPFLAGS = \
-DMCA_oshmem_FRAMEWORKS="\"$(MCA_oshmem_FRAMEWORKS)\"" \
Expand Down
6 changes: 6 additions & 0 deletions ompi/tools/mpirun/help-mpirun.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
# This is the US/English help file for Open MPI wrapper compiler error
# messages.
#
[prte-launch-failed]
Open MPI's mpirun command was unable to launch the user's application.
This may indicate an issue with the environment or incorrect configuration.

Error Message: %s
#
[no-prterun-found]
Open MPI's mpirun command was unable to find an underlying prterun
command to execute. Consider setting the OMPI_PRTERUN environment
Expand Down
114 changes: 58 additions & 56 deletions ompi/tools/mpirun/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,47 +28,10 @@
#include "opal/util/printf.h"
#include "opal/util/show_help.h"
#include "ompi/constants.h"

static char *find_prterun(void)
{
char *filename = NULL;
#if !OMPI_USING_INTERNAL_PRRTE
char *prrte_prefix = NULL;
#if OMPI_HAVE_PRTE_LAUNCH
#include "prte.h"
#endif

/* 1) Did the user tell us exactly where to find prterun? */
filename = getenv("OMPI_PRTERUN");
if (NULL != filename) {
return filename;
}

#if OMPI_USING_INTERNAL_PRRTE
/* 2) If using internal PRRTE, use our bindir. Note that this
* will obey OPAL_PREFIX and OPAL_DESTDIR */
opal_asprintf(&filename, "%s%sprterun", opal_install_dirs.bindir, OPAL_PATH_SEP);
return filename;
#else

/* 3) Look in ${PRTE_PREFIX}/bin */
prrte_prefix = getenv("PRTE_PREFIX");
if (NULL != prrte_prefix) {
opal_asprintf(&filename, "%s%sbin%sprterun", prrte_prefix, OPAL_PATH_SEP, OPAL_PATH_SEP);
return filename;
}

/* 4) See if configure told us where to look, if set */
#if defined(OMPI_PRTERUN_PATH)
return strdup(OMPI_PRTERUN_PATH);
#else

/* 5) Use path search */
filename = opal_find_absolute_path("prterun");

return filename;
#endif
#endif
}

static void append_prefixes(char ***out, const char *in)
{
if (NULL == in) {
Expand Down Expand Up @@ -115,14 +78,43 @@ static void setup_mca_prefixes(void)
opal_argv_free(tmp);
}

__opal_attribute_unused__
static char *find_prterun(void)
{
char *filename = NULL;
char *prrte_prefix = NULL;

/* 1) Did the user tell us exactly where to find prterun? */
filename = getenv("OMPI_PRTERUN");
if (NULL != filename) {
return filename;
}

/* 2) Look in ${PRTE_PREFIX}/bin */
prrte_prefix = getenv("PRTE_PREFIX");
if (NULL != prrte_prefix) {
opal_asprintf(&filename, "%s%sbin%sprterun", prrte_prefix, OPAL_PATH_SEP, OPAL_PATH_SEP);
return filename;
}

/* 4) See if configure told us where to look, if set */
#if defined(OMPI_PRTERUN_PATH)
return strdup(OMPI_PRTERUN_PATH);
#else

/* 5) Use path search */
filename = opal_find_absolute_path("prterun");

return filename;
#endif
}

int main(int argc, char *argv[])
{
char *opal_prefix = getenv("OPAL_PREFIX");
char *full_prterun_path = NULL;
char **prterun_args = NULL;
char __opal_attribute_unused__ *full_prterun_path = NULL;
char __opal_attribute_unused__ **prterun_args = NULL;
int ret;
size_t i;

ret = opal_init_util(&argc, &argv);
if (OMPI_SUCCESS != ret) {
Expand Down Expand Up @@ -154,23 +146,33 @@ int main(int argc, char *argv[])
#endif
}

full_prterun_path = find_prterun();
if (NULL == full_prterun_path) {
opal_show_help("help-mpirun.txt", "no-prterun-found", 1);
exit(1);
}

/*
* set environment variable for our install location
* used within the OMPI prrte schizo component
*/

setenv("OMPI_LIBDIR_LOC", opal_install_dirs.libdir, 1);

// Set environment variable to tell PRTE what MCA prefixes belong
// to Open MPI.
setup_mca_prefixes();

#if OMPI_HAVE_PRTE_LAUNCH

ret = prte_launch(argc, argv);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I said elsewhere, why not just use "prun_common"? Already exists, public symbol, does pretty much everything you have in your "prte_launch" code. The little bit that is left can easily be put here, just like we did with our "prte", and then call "prun_common". Avoid a bunch of code duplication that adds nothing.

if (OMPI_SUCCESS != ret) {
opal_show_help("help-mpirun.txt", "prte-launch-failed", 1, strerror(errno));
exit(1);
}

return 0;
#else

full_prterun_path = find_prterun();
if (NULL == full_prterun_path) {
opal_show_help("help-mpirun.txt", "no-prterun-found", 1);
exit(1);
}

/* calling mpirun (and now prterun) with a full path has a special
* meaning in terms of -prefix behavior, so copy that behavior
* into prterun */
Expand All @@ -182,16 +184,16 @@ int main(int argc, char *argv[])

/* Copy all the mpirun arguments to prterun.
* TODO: Need to handle --prefix rationally here. */
for (i = 1; NULL != argv[i]; i++) {
for (size_t i = 1; NULL != argv[i]; i++) {
opal_argv_append_nosize(&prterun_args, argv[i]);
}
ret = execv(full_prterun_path, prterun_args);
opal_show_help("help-mpirun.txt", "prterun-exec-failed",
1, full_prterun_path, strerror(errno));
exit(1);
}

/*
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think you want to remove these copyrghts.

I think they're at the bottom of the file because MPI-enabled debuggers would default to opening the source code for mpirun.c upon attach, so we wanted to show the specific banner at the top of this file (vs. all the copyrights). But we still need the copyrights.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh i see. didn't realize that.

exit(1);
#endif /* OMPI_HAVE_PRTE_LAUNCH*/
}
/*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
Expand All @@ -206,9 +208,9 @@ int main(int argc, char *argv[])
* Copyright (c) 2020-2022 Cisco Systems, Inc. All rights reserved
* Copyright (c) 2021 Nanook Consulting. All rights reserved.
* Copyright (c) 2022 Amazon.com, Inc. or its affiliates. All Rights reserved.
* Copyright (c) 2022 Triad National Security, LLC. All rights
* Copyright (c) 2022-2025 Triad National Security, LLC. All rights
* reserved.

* $COPYRIGHT$
*
* Additional copyrights may follow
Expand Down
Loading