Sync from SUSE:ALP:Source:Standard:1.0 openmpi3 revision 56d0e18e68cd0578aefcd56822ab3531

This commit is contained in:
Adrian Schröter 2023-06-07 08:17:30 +02:00
commit f3b360fa79
24 changed files with 2311 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

View File

@ -0,0 +1,30 @@
commit 14fde40ec7066c788b27fac7d6de64e8ada43520
Author: George Bosilca <bosilca@icl.utk.edu>
Date: Fri Mar 12 13:38:10 2021 -0500
Always include the stddef.h header.
Signed-off-by: George Bosilca <bosilca@icl.utk.edu>
diff --git configure.ac configure.ac
index f553cff725af..fa1adf12bd2c 100644
--- configure.ac
+++ configure.ac
@@ -1290,10 +1290,13 @@ OPAL_SETUP_WRAPPER_FINAL
# autoconf macro defines in mpi.h. Since AC sometimes changes whether
# things are defined as null tokens or an integer result, two projects
# with different versions of AC can cause problems.
-if test $ac_cv_header_stdc = yes; then
- AC_DEFINE(OPAL_STDC_HEADERS, 1,
- [Do not use outside of mpi.h. Define to 1 if you have the ANSI C header files.])
-fi
+
+# According to the autoconf 2.67 documentation the AC_HEADER_STDC macro,
+# and therefore the ac_cv_header_stdc cache variable, is obsolescent, as
+# current systems have conforming header files. Instead of removing the
+# protection completely, let's just make sure it is always on.
+AC_DEFINE(OPAL_STDC_HEADERS, 1,
+ [Do not use outside of mpi.h. Define to 1 if you have the ANSI C header files.])
if test $ac_cv_header_sys_time_h = yes ; then
AC_DEFINE(OPAL_HAVE_SYS_TIME_H, 1,
[Do not use outside of mpi.h. Define to 1 if you have the <sys/time.h> header file.])

View File

@ -0,0 +1,38 @@
commit 8c2b56a209b309e07058c48780339804cb4bdbb0
Author: John L. Jolly <jjolly@suse.com>
Date: Tue May 22 10:04:40 2018 -0600
- Build warning: stringop-overflow in
get_dynamic_win_info() at osc_ucx_comm.c
In file included from /usr/include/string.h:494:0,
from ../../../../ompi/info/info.h:29,
from ../../../../ompi/mca/osc/base/base.h:24,
from osc_ucx_comm.c:13:
In function 'memcpy',
inlined from 'get_dynamic_win_info' at osc_ucx_comm.c:359:5,
inlined from 'ompi_osc_ucx_put' at osc_ucx_comm.c:401:18:
/usr/include/bits/string_fortified.h:34:10: warning: '__builtin___memcpy_chk' writing 8 bytes into a region of size 4 overflows the destination [-Wstringop-overflow=]
return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is caused by a type size mismatch in a call to memcpy
This fix corrects the type definition of the win_count variable.
Signed-off-by: John Jolly <jjolly@suse.com>
diff --git ompi/mca/osc/ucx/osc_ucx_comm.c ompi/mca/osc/ucx/osc_ucx_comm.c
index 22f4ce1e9430..e9e2b40f8222 100644
--- ompi/mca/osc/ucx/osc_ucx_comm.c
+++ ompi/mca/osc/ucx/osc_ucx_comm.c
@@ -332,7 +332,8 @@ static inline int get_dynamic_win_info(uint64_t remote_addr, ompi_osc_ucx_module
size_t len = sizeof(uint64_t) + sizeof(ompi_osc_dynamic_win_info_t) * OMPI_OSC_UCX_ATTACH_MAX;
char *temp_buf = malloc(len);
ompi_osc_dynamic_win_info_t *temp_dynamic_wins;
- int win_count, contain, insert = -1;
+ uint64_t win_count;
+ int contain, insert = -1;
ucs_status_t status;
if ((module->win_info_array[target]).rkey_init == true) {

View File

@ -0,0 +1,23 @@
commit eef11c98b878e63c4742523a965da5d91f62d73b
Author: Christoph Niethammer <niethammer@hlrs.de>
Date: Tue Jan 19 22:56:19 2021 +0100
Fix error with stricter quoting requirements of autoconf-2.70
Signed-off-by: Christoph Niethammer <niethammer@hlrs.de>
diff --git config/opal_check_cuda.m4 config/opal_check_cuda.m4
index fd7816e3ea7a..67059a8c851e 100644
--- config/opal_check_cuda.m4
+++ config/opal_check_cuda.m4
@@ -91,8 +91,8 @@ AS_IF([test "$opal_check_cuda_happy" = "yes"],
# If we have CUDA support, check to see if we have support for SYNC_MEMOPS
# which was first introduced in CUDA 6.0.
AS_IF([test "$opal_check_cuda_happy"="yes"],
- AC_CHECK_DECL([CU_POINTER_ATTRIBUTE_SYNC_MEMOPS], [CUDA_SYNC_MEMOPS=1], [CUDA_SYNC_MEMOPS=0],
- [#include <$opal_cuda_incdir/cuda.h>]),
+ [AC_CHECK_DECL([CU_POINTER_ATTRIBUTE_SYNC_MEMOPS], [CUDA_SYNC_MEMOPS=1], [CUDA_SYNC_MEMOPS=0],
+ [#include <$opal_cuda_incdir/cuda.h>])],
[])
# If we have CUDA support, check to see if we have CUDA 6.0 or later.

View File

@ -0,0 +1,35 @@
commit b80cf0f5de7720f71189f594125f986193c12f81
Author: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
Date: Tue Jul 12 09:36:25 2022 +0200
Revert "hwloc: bring back the configure error when external hwloc is >= 2.0"
This reverts commit 9eb37be46c75662eb4f6c945144121e3e55360be.
diff --git opal/mca/hwloc/external/configure.m4 opal/mca/hwloc/external/configure.m4
index d951c9a92f1b..411d8ad1c1f2 100644
--- opal/mca/hwloc/external/configure.m4
+++ opal/mca/hwloc/external/configure.m4
@@ -184,21 +184,7 @@ AC_DEFUN([MCA_opal_hwloc_external_CONFIG],[
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
AC_MSG_ERROR([Cannot continue])])
- AC_MSG_CHECKING([if external hwloc version is lower than 2.0])
- AS_IF([test "$opal_hwloc_dir" != ""],
- [opal_hwloc_external_CFLAGS_save=$CFLAGS
- CFLAGS="-I$opal_hwloc_dir/include $opal_hwloc_external_CFLAGS_save"])
- AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([[#include <hwloc.h>]],
- [[
-#if HWLOC_API_VERSION >= 0x00020000
-#error "hwloc API version is greater or equal than 0x00020000"
-#endif
- ]])],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- AC_MSG_ERROR([OMPI does not currently support hwloc v2 API
-Cannot continue])])
+
AS_IF([test "$opal_hwloc_dir" != ""],
[CFLAGS=$opal_hwloc_external_CFLAGS_save])

13
_constraints Normal file
View File

@ -0,0 +1,13 @@
<constraints>
<overwrite>
<conditions>
<arch>ppc64le</arch>
</conditions>
<hardware>
<disk>
<size unit="G">4</size>
</disk>
</hardware>
</overwrite>
</constraints>

6
_multibuild Normal file
View File

@ -0,0 +1,6 @@
<multibuild>
<package>standard</package>
<package>testsuite</package>
<package>gnu-hpc</package>
<package>gnu-hpc-testsuite</package>
</multibuild>

17
_service Normal file
View File

@ -0,0 +1,17 @@
<services>
<service name="tar_scm" mode="disabled">
<param name="scm">git</param>
<param name="url">https://github.com/open-mpi/ompi.git</param>
<param name="package-meta">no</param>
<param name="exclude">.git</param>
<param name="filename">openmpi</param>
<param name="versionformat">@PARENT_TAG@.@TAG_OFFSET@.%h</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="versionrewrite-replacement">\1</param>
<param name="revision">ea348728b4c856973b48252c8b843078b4784cc3</param>
</service>
<service name="recompress" mode="disabled">
<param name="file">openmpi*.tar</param>
<param name="compression">bz2</param>
</service>
</services>

View File

@ -0,0 +1,55 @@
commit 64434b46183221882cb767dc29b25cc90576b9ef
Author: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
Date: Tue Sep 13 15:48:59 2022 +0200
btl: openib: Add support for newer hardware
- ConnectX4 VF
- ConnectX5 VF
- ConnectX6 VF
- New broadcom PCI Ids
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
fix
diff --git opal/mca/btl/openib/mca-btl-openib-device-params.ini opal/mca/btl/openib/mca-btl-openib-device-params.ini
index b51a7dcdde78..b9949de235b8 100644
--- opal/mca/btl/openib/mca-btl-openib-device-params.ini
+++ opal/mca/btl/openib/mca-btl-openib-device-params.ini
@@ -174,7 +174,7 @@ max_inline_data = 256
[Mellanox ConnectX4]
vendor_id = 0x2c9,0x5ad,0x66a,0x8f1,0x1708,0x03ba,0x15b3,0x119f
-vendor_part_id = 4115,4117
+vendor_part_id = 4115,4116,4117,4118
use_eager_rdma = 1
mtu = 4096
max_inline_data = 256
@@ -183,7 +183,7 @@ max_inline_data = 256
[Mellanox ConnectX5]
vendor_id = 0x2c9,0x5ad,0x66a,0x8f1,0x1708,0x03ba,0x15b3,0x119f
-vendor_part_id = 4119,4121
+vendor_part_id = 4119,4120,4121,4122
use_eager_rdma = 1
mtu = 4096
max_inline_data = 256
@@ -192,7 +192,7 @@ max_inline_data = 256
[Mellanox ConnectX6]
vendor_id = 0x2c9,0x5ad,0x66a,0x8f1,0x1708,0x03ba,0x15b3,0x119f
-vendor_part_id = 4123
+vendor_part_id = 4123,4124
use_eager_rdma = 1
mtu = 4096
max_inline_data = 256
@@ -345,7 +345,7 @@ max_inline_data = 72
[Broadcom BCM57XXX]
vendor_id = 0x14e4
-vendor_part_id = 0x1605,0x1606,0x1614,0x16c0,0x16c1,0x16ce,0x16cf,0x16d6,0x16d7,0x16d8,0x16d9,0x16df,0x16e2,0x16e3,0x16e5,0x16eb,0x16ed,0x16ef,0x16f0,0x16f1,0x1750
+vendor_part_id = 0x1605,0x1606,0x1614,0x16c0,0x16c1,0x16ce,0x16cf,0x16d6,0x16d7,0x16d8,0x16d9,0x16df,0x16e2,0x16e3,0x16e5,0x16eb,0x16ed,0x16ef,0x16f0,0x16f1
use_eager_rdma = 1
mtu = 1024
receive_queues = P,65536,256,192,128

View File

@ -0,0 +1,47 @@
commit 923ca7c6424d0cf0b5139be316b651d54d90d5f5
Author: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
Date: Wed Mar 28 11:17:17 2018 +0200
fix rdma component selection
Github issue#4976
bsc#1087031
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
diff --git ompi/mca/osc/rdma/osc_rdma_component.c ompi/mca/osc/rdma/osc_rdma_component.c
index 45da5aafab4d..9cb8535683c1 100644
--- ompi/mca/osc/rdma/osc_rdma_component.c
+++ ompi/mca/osc/rdma/osc_rdma_component.c
@@ -355,6 +355,8 @@ static int ompi_osc_rdma_component_query (struct ompi_win_t *win, void **base, s
int flavor)
{
+ int rc;
+
if (MPI_WIN_FLAVOR_SHARED == flavor) {
return -1;
}
@@ -368,15 +370,18 @@ static int ompi_osc_rdma_component_query (struct ompi_win_t *win, void **base, s
}
#endif /* OPAL_CUDA_SUPPORT */
- if (OMPI_SUCCESS == ompi_osc_rdma_query_mtls ()) {
+ rc = ompi_osc_rdma_query_mtls ();
+ rc = comm->c_coll->coll_allreduce(MPI_IN_PLACE, &rc, 1, MPI_INT, MPI_MIN, comm, comm->c_coll->coll_allreduce_module);
+ if (OMPI_SUCCESS == rc) {
return 5; /* this has to be lower that osc pt2pt default priority */
}
-
- if (OMPI_SUCCESS != ompi_osc_rdma_query_btls (comm, NULL)) {
+
+ rc = ompi_osc_rdma_query_btls (comm, NULL);
+ rc = comm->c_coll->coll_allreduce(MPI_IN_PLACE, &rc, 1, MPI_INT, MPI_MIN, comm, comm->c_coll->coll_allreduce_module);
+ if (OMPI_SUCCESS != rc) {
return -1;
}
-
return mca_osc_rdma_component.priority;
}

View File

@ -0,0 +1,74 @@
commit 6a2d129fd28ca90c5c3f857eeb5ff933abc33470
Author: Brice Goglin <Brice.Goglin@inria.fr>
Date: Fri Jan 26 15:44:15 2018 +0100
hwloc: fix hwloc/shmem.h in the external case
Signed-off-by: Brice Goglin <Brice.Goglin@inria.fr>
diff --git opal/mca/hwloc/base/hwloc_base_util.c opal/mca/hwloc/base/hwloc_base_util.c
index f8ca72c182d1..dd483a7dc1be 100644
--- opal/mca/hwloc/base/hwloc_base_util.c
+++ opal/mca/hwloc/base/hwloc_base_util.c
@@ -27,6 +27,7 @@
* $HEADER$
*/
+#define OPAL_HWLOC_WANT_SHMEM 1
#include "opal_config.h"
diff --git opal/mca/hwloc/external/configure.m4 opal/mca/hwloc/external/configure.m4
index 411d8ad1c1f2..b8214099ef84 100644
--- opal/mca/hwloc/external/configure.m4
+++ opal/mca/hwloc/external/configure.m4
@@ -63,12 +63,17 @@ AC_DEFUN([MCA_opal_hwloc_external_POST_CONFIG],[
# the MCA_hwloc_external_openfabrics_helper define).
AS_IF([test "$opal_hwloc_dir" != ""],
[opal_hwloc_include="$opal_hwloc_dir/include/hwloc.h"
+ opal_hwloc_shmem_include="$opal_hwloc_dir/include/hwloc/shmem.h",
opal_hwloc_openfabrics_include="$opal_hwloc_dir/include/hwloc/openfabrics-verbs.h"],
[opal_hwloc_include="hwloc.h"
+ opal_hwloc_shmem_include="hwloc/shmem.h"
opal_hwloc_openfabrics_include="hwloc/openfabrics-verbs.h"])
AC_DEFINE_UNQUOTED(MCA_hwloc_external_header,
["$opal_hwloc_include"],
[Location of external hwloc header])
+ AC_DEFINE_UNQUOTED(MCA_hwloc_external_shmem_header,
+ ["$opal_hwloc_shmem_include"],
+ [Location of external hwloc shmem header])
AC_DEFINE_UNQUOTED(MCA_hwloc_external_openfabrics_header,
["$opal_hwloc_openfabrics_include"],
[Location of external hwloc OpenFabrics header])
diff --git opal/mca/hwloc/external/external.h opal/mca/hwloc/external/external.h
index 6558a0bcbd14..0e1a91fcf470 100644
--- opal/mca/hwloc/external/external.h
+++ opal/mca/hwloc/external/external.h
@@ -43,6 +43,14 @@ BEGIN_C_DECLS
# endif
#endif
+#if defined(OPAL_HWLOC_WANT_SHMEM) && OPAL_HWLOC_WANT_SHMEM
+# if HWLOC_API_VERSION >= 0x20000
+# include MCA_hwloc_external_shmem_header
+# else
+# error Tried to include hwloc shmem header, but hwloc < 2.0 found
+# endif
+#endif
+
#if HWLOC_API_VERSION < 0x00010b00
#define HWLOC_OBJ_NUMANODE HWLOC_OBJ_NODE
#define HWLOC_OBJ_PACKAGE HWLOC_OBJ_SOCKET
diff --git orte/mca/rtc/hwloc/rtc_hwloc.c orte/mca/rtc/hwloc/rtc_hwloc.c
index b832d4cf6bc9..8acdf572b577 100644
--- orte/mca/rtc/hwloc/rtc_hwloc.c
+++ orte/mca/rtc/hwloc/rtc_hwloc.c
@@ -9,6 +9,8 @@
* $HEADER$
*/
+#define OPAL_HWLOC_WANT_SHMEM 1
+
#include "orte_config.h"
#include "orte/constants.h"
#include "orte/types.h"

View File

@ -0,0 +1,134 @@
commit 287d7866d3bd70c1a8d412ffb8e6b12cd7e903d5
Author: Jeff Squyres <jsquyres@cisco.com>
Date: Thu Jan 4 09:58:50 2018 -0800
hwloc: updates for hwloc 2.0.x API
Signed-off-by: Jeff Squyres <jsquyres@cisco.com>
diff --git opal/mca/btl/openib/btl_openib_component.c opal/mca/btl/openib/btl_openib_component.c
index c482dcdbcda7..facf338a5373 100644
--- opal/mca/btl/openib/btl_openib_component.c
+++ opal/mca/btl/openib/btl_openib_component.c
@@ -10,7 +10,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
- * Copyright (c) 2006-2017 Cisco Systems, Inc. All rights reserved
+ * Copyright (c) 2006-2018 Cisco Systems, Inc. All rights reserved
* Copyright (c) 2006-2015 Mellanox Technologies. All rights reserved.
* Copyright (c) 2006-2015 Los Alamos National Security, LLC. All rights
* reserved.
@@ -1524,7 +1524,11 @@ static uint64_t calculate_total_mem (void)
if (NULL == machine) {
return 0;
}
+#if HWLOC_API_VERSION < 0x20000
return machine->memory.total_memory;
+#else
+ return machine->total_memory;
+#endif
}
/* couldn't find it */
diff --git opal/mca/hwloc/base/hwloc_base_util.c opal/mca/hwloc/base/hwloc_base_util.c
index dd483a7dc1be..61d8b779888c 100644
--- opal/mca/hwloc/base/hwloc_base_util.c
+++ opal/mca/hwloc/base/hwloc_base_util.c
@@ -10,7 +10,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
- * Copyright (c) 2011-2017 Cisco Systems, Inc. All rights reserved
+ * Copyright (c) 2011-2018 Cisco Systems, Inc. All rights reserved
* Copyright (c) 2012-2017 Los Alamos National Security, LLC.
* All rights reserved.
* Copyright (c) 2013-2018 Intel, Inc. All rights reserved.
@@ -59,6 +59,11 @@
#include "opal/mca/hwloc/hwloc-internal.h"
#include "opal/mca/hwloc/base/base.h"
+#if HWLOC_API_VERSION >= 0x20000
+// JMS Is this right?
+#include "hwloc/shmem.h"
+#endif
+
static bool topo_in_shmem = false;
/*
@@ -154,7 +159,7 @@ int opal_hwloc_base_filter_cpus(hwloc_topology_t topo)
avail = hwloc_bitmap_alloc();
hwloc_bitmap_and(avail, root->online_cpuset, root->allowed_cpuset);
#else
- avail = hwloc_bitmap_dup(root->allowed_cpuset);
+ avail = hwloc_bitmap_dup(root->cpuset);
#endif
OPAL_OUTPUT_VERBOSE((5, opal_hwloc_base_framework.framework_output,
"hwloc:base: no cpus specified - using root available cpuset"));
@@ -178,7 +183,7 @@ int opal_hwloc_base_filter_cpus(hwloc_topology_t topo)
hwloc_bitmap_and(pucpus, pu->online_cpuset, pu->allowed_cpuset);
#else
hwloc_bitmap_free(pucpus);
- pucpus = hwloc_bitmap_dup(pu->allowed_cpuset);
+ pucpus = hwloc_bitmap_dup(pu->cpuset);
#endif
hwloc_bitmap_or(res, avail, pucpus);
hwloc_bitmap_copy(avail, res);
@@ -200,7 +205,7 @@ int opal_hwloc_base_filter_cpus(hwloc_topology_t topo)
hwloc_bitmap_and(pucpus, pu->online_cpuset, pu->allowed_cpuset);
#else
hwloc_bitmap_free(pucpus);
- pucpus = hwloc_bitmap_dup(pu->allowed_cpuset);
+ pucpus = hwloc_bitmap_dup(pu->cpuset);
#endif
hwloc_bitmap_or(res, avail, pucpus);
hwloc_bitmap_copy(avail, res);
diff --git orte/mca/rtc/hwloc/rtc_hwloc.c orte/mca/rtc/hwloc/rtc_hwloc.c
index 8acdf572b577..16d5b825e0c7 100644
--- orte/mca/rtc/hwloc/rtc_hwloc.c
+++ orte/mca/rtc/hwloc/rtc_hwloc.c
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
- * Copyright (c) 2017 Cisco Systems, Inc. All rights reserved
+ * Copyright (c) 2017-2018 Cisco Systems, Inc. All rights reserved
* Copyright (c) 2017 Inria. All rights reserved.
* $COPYRIGHT$
*
@@ -50,6 +50,11 @@
#include "orte/mca/rtc/base/base.h"
#include "rtc_hwloc.h"
+#if HWLOC_API_VERSION >= 0x20000
+// JMS Is this right?
+#include "hwloc/shmem.h"
+#endif
+
static int init(void);
static void finalize(void);
static void assign(orte_job_t *jdata);
diff --git orte/orted/pmix/pmix_server_register_fns.c orte/orted/pmix/pmix_server_register_fns.c
index 25fb26475918..ff98f6de59cb 100644
--- orte/orted/pmix/pmix_server_register_fns.c
+++ orte/orted/pmix/pmix_server_register_fns.c
@@ -11,7 +11,7 @@
* All rights reserved.
* Copyright (c) 2006-2013 Los Alamos National Security, LLC.
* All rights reserved.
- * Copyright (c) 2009 Cisco Systems, Inc. All rights reserved.
+ * Copyright (c) 2009-2018 Cisco Systems, Inc. All rights reserved
* Copyright (c) 2011 Oak Ridge National Labs. All rights reserved.
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2014 Mellanox Technologies, Inc.
@@ -276,7 +276,11 @@ int orte_pmix_server_register_nspace(orte_job_t *jdata, bool force)
kv = OBJ_NEW(opal_value_t);
kv->key = strdup(OPAL_PMIX_AVAIL_PHYS_MEMORY);
kv->type = OPAL_UINT64;
+#if HWLOC_API_VERSION < 0x20000
kv->data.uint64 = machine->memory.total_memory;
+#else
+ kv->data.uint64 = machine->total_memory;
+#endif
opal_list_append(info, &kv->super);
}

21
macros.hpc-openmpi Normal file
View File

@ -0,0 +1,21 @@
#
# openmpi
#
%hpc_openmpi_init(V:) \
%{-V: %define _mf_ver %{-V*}} \
%{expand: %%global hpc_openmpi_dep_version %%{?_mf_ver}%%{?!_mf_ver:3}} \
%{expand: %%global hpc_openmpi_dir openmpi%{hpc_openmpi_dep_version}} \
%{expand: %%global hpc_openmpi_pack_version %{hpc_openmpi_dep_version}} \
%{expand: %%global _hpc_openmpi_modules openmpi}
# We may have to add a version here.
%hpc_setup_openmpi \
module load openmpi
%hpc_openmpi_requires \
Requires: libopenmpi%{hpc_openmpi_dep_version}-%{hpc_compiler_family}%{hpc_cf_pack_version}-hpc
%hpc_openmpi_requires_devel \
Requires: openmpi%{hpc_openmpi_dep_version}-%{hpc_compiler_family}%{hpc_cf_pack_version}-hpc-devel

View File

@ -0,0 +1,24 @@
commit a0242346788a31050effb025b43da5f3e6a1bb9b
Author: Maxwell Coil <mcoil@nd.edu>
Date: Sun Dec 8 13:56:00 2019 -0500
memory/patcher: fix compiler warning
syscall() returns a long, but we are invoking shmat(), which returns
a void*.
Signed-off-by: Maxwell Coil <mcoil@nd.edu>
diff --git opal/mca/memory/patcher/memory_patcher_component.c opal/mca/memory/patcher/memory_patcher_component.c
index 687d430fa362..272ec721225b 100644
--- opal/mca/memory/patcher/memory_patcher_component.c
+++ opal/mca/memory/patcher/memory_patcher_component.c
@@ -440,7 +440,7 @@ static void *_intercept_shmat(int shmid, const void *shmaddr, int shmflg)
if (!original_shmat) {
#if defined(SYS_shmat)
- result = memory_patcher_syscall(SYS_shmat, shmid, shmaddr, shmflg);
+ result = (void*) memory_patcher_syscall(SYS_shmat, shmid, shmaddr, shmflg);
#else // IPCOP_shmat
unsigned long ret;
ret = memory_patcher_syscall(SYS_ipc, IPCOP_shmat,

15
mpivars.csh Normal file
View File

@ -0,0 +1,15 @@
set -f path= ( prefix/bin $path )
if ($?MANPATH) then
if ( "$MANPATH" !~ *prefix/man* ) then
setenv MANPATH prefix/man:$MANPATH
endif
else
setenv MANPATH prefix/man:
endif
if ($?LD_LIBRARY_PATH) then
setenv LD_LIBRARY_PATH libdir:$LD_LIBRARY_PATH
else
setenv LD_LIBRARY_PATH libdir
endif

31
mpivars.sh Normal file
View File

@ -0,0 +1,31 @@
case $PATH in
*prefix/bin*)
true
;;
*)
PATH=prefix/bin:$PATH
esac
case $MANPATH in
*prefix/share/man*)
true
;;
*)
MANPATH=prefix/share/man:$MANPATH
export MANPATH
esac
case $LD_LIBRARY_PATH in
*libdir*)
true
;;
*)
if [ -z "$LD_LIBRARY_PATH" ]; then
LD_LIBRARY_PATH=libdir
else
LD_LIBRARY_PATH="libdir:$LD_LIBRARY_PATH"
fi
export LD_LIBRARY_PATH
esac

BIN
openmpi-3.1.6.0.ea348728b4c8.tar.bz2 (Stored with Git LFS) Normal file

Binary file not shown.

6
openmpi3-rpmlintrc Normal file
View File

@ -0,0 +1,6 @@
# This line is mandatory to access the configuration functions
from Config import *
addFilter("openmpi3-libs.* rpath-in-buildconfig")
addFilter("openmpi3-devel.* shared-lib-calls-exit")
addFilter("libopenmpi.* shlib-policy-name-error")

392
openmpi3.changes Normal file
View File

@ -0,0 +1,392 @@
-------------------------------------------------------------------
Thu Nov 3 09:37:32 UTC 2022 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Add rmaps-simplify-the-lookup-for-the-binding-object-and-fix-for-hwloc-2.0.patch
to fix compatibility with hwloc >= 2.0 (bsc#1204982)
-------------------------------------------------------------------
Wed Jul 6 12:29:12 UTC 2022 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Enable libfabric on all arch
- Switch to external libevent for all flavors
- Switch to external hwloc and PMIx for HPC builds
- Add patches to fix compilation against hwloc v2.x
- Revert-hwloc-bring-back-the-configure-error-when-external-hwloc-is-2.0.patch
- hwloc-fix-hwloc-shmem.h-in-the-external-case.patch
- hwloc-updates-for-hwloc-2.0.x-API.patch
- Backport upstream patches for external PMIx support
- pmix-pmix2x-Fix-the-PMIx-discovery-logic.patch
- pmix-Fix-detection-of-Externally-built-PMIx.patch
- Update rpmlintrc file to ignore missing libname suffix in libopenmpi packages
- Add patch btl-openib-Add-support-for-newer-hardware.patch to support
newer RDMA hardware (ConnectX 4 and 5 VF, ConnectX6 PF + VF and Broadcom adapters)
-------------------------------------------------------------------
Mon Jun 13 06:38:32 UTC 2022 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Backport upstream patchs to fix compilation with autoconf >= 2.70 and GCC12
- Fix-error-with-stricter-quoting-requirements-of-autoconf-2.70.patch
- Always-include-the-stddef.h-header.patch
-------------------------------------------------------------------
Mon Mar 7 16:54:42 UTC 2022 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Add fix-rdma-component-selection.patch to fix bad rdma component selection
which can cause stall when running on multiple IB nodes (bsc#1196838).
-------------------------------------------------------------------
Tue Oct 19 15:24:25 UTC 2021 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Move rpm macros to %_rpmmacrodir (bsc#1191390)
-------------------------------------------------------------------
Thu Jul 23 16:00:23 UTC 2020 - Egbert Eich <eich@suse.com>
- Add build support for gcc8/9/10 to HPC build (bsc#1174439).
-------------------------------------------------------------------
Fri Mar 20 11:26:15 UTC 2020 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Update to openmpi3 3.1.6
- See changelog in NEWS
- Remove add-gen-p5-chip-pci-id-to-ini-file.patch that was merged upstream
- Add patch memory-patcher-fix-compiler-warning.patch to fix cast warning
causing RPM to fail building
-------------------------------------------------------------------
Thu Mar 19 08:26:16 UTC 2020 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Drop different package string between SLES and Leap (jsc#SLE-11848)
-------------------------------------------------------------------
Mon Jan 13 09:56:29 UTC 2020 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Have openmpi3-config provide pmix-runtime-config
-------------------------------------------------------------------
Thu Dec 5 10:36:33 UTC 2019 - Michel Normand <normand@linux.vnet.ibm.com>
- Add _constraints file for ppc64le for disk > 4G
-------------------------------------------------------------------
Thu Oct 31 16:54:27 UTC 2019 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Link against libnuma (bsc#1155120)
-------------------------------------------------------------------
Tue Oct 22 09:11:49 UTC 2019 - Christian Goll <cgoll@suse.com>
- added --with-slurm (its enabled by default), but if this behavior
is changed the binding should not away
-------------------------------------------------------------------
Thu Oct 10 06:09:30 UTC 2019 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Add missing Provides when openmpi3 is the default openmpi
- Add conflict with the older hpc-macros-devel providers to avoid issues during updates
- Add openmpi_prefix macro to openmpi-macros-devel
-------------------------------------------------------------------
Fri Sep 27 11:17:24 UTC 2019 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Add macro file for non-hpc flavour
- Enable build on ppc64
-------------------------------------------------------------------
Fri Sep 6 11:14:12 UTC 2019 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Use FAT LTO objects in order to provide proper static library.
- Mark LICENSE with %license
-------------------------------------------------------------------
Tue Apr 23 07:42:08 UTC 2019 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Fix bad INCLUDE path in module (bsc#1132949)
-------------------------------------------------------------------
Fri Apr 19 05:56:35 UTC 2019 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Update to openmpi 3.1.4
- See changelog in NEWS
-------------------------------------------------------------------
Mon Apr 1 05:20:04 UTC 2019 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Add add-gen-p5-chip-pci-id-to-ini-file.patch:
- Adds support for Broadcom 57500 adapters (bsc#1125651)
- Update to openmpi 3.1.3
- See changelog in NEWS
-------------------------------------------------------------------
Sun Nov 18 14:27:03 UTC 2018 - eich@suse.com
- Add macro _hpc_openmpi_modules for modules support (bsc#1116458).
-------------------------------------------------------------------
Mon Sep 10 12:15:48 UTC 2018 - nmoreychaisemartin@suse.com
- Remove bashism in preun scriptlet
-------------------------------------------------------------------
Wed Sep 5 06:53:37 UTC 2018 - nmoreychaisemartin@suse.com
- Fix handling of mpi-selector during updates (bsc#1098653)
-------------------------------------------------------------------
Mon Sep 3 08:47:46 UTC 2018 - bwiedemann@suse.com
- Add reproducible.patch to drop build time and hostname to make
package build reproducible (boo#1047218, boo#1084909)
-------------------------------------------------------------------
Sun Aug 19 09:25:46 UTC 2018 - eich@suse.com
- macros.hpc-openmpi3:
replace %%compiler_family by %%hpc_compiler_family
-------------------------------------------------------------------
Thu Jul 5 12:29:43 UTC 2018 - nmoreychaisemartin@suse.com
- Update to openmpi 3.1.1
3.1.1 -- June, 2018
-------------------
- Fix potential hang in UCX PML during MPI_FINALIZE
- Update internal PMIx to v2.1.2rc2 to fix forward version compatibility.
- Add new MCA parameter osc_sm_backing_store to allow users to specify
where in the filesystem the backing file for the shared memory
one-sided component should live. Defaults to /dev/shm on Linux.
- Fix potential hang on non-x86 platforms when using builds with
optimization flags turned off.
- Disable osc/pt2pt when using MPI_THREAD_MULTIPLE due to numerous
race conditions in the component.
- Fix dummy variable names for the mpi and mpi_f08 Fortran bindings to
match the MPI standard. This may break applications which use
name-based parameters in Fortran which used our internal names
rather than those documented in the MPI standard.
- Revamp Java detection to properly handle new Java versions which do
not provide a javah wrapper.
- Fix RMA function signatures for use-mpi-f08 bindings to have the
asynchonous property on all buffers.
- Improved configure logic for finding the UCX library.
3.1.0 -- May, 2018
------------------
- Various OpenSHMEM bug fixes.
- Properly handle array_of_commands argument to Fortran version of
MPI_COMM_SPAWN_MULTIPLE.
- Fix bug with MODE_SEQUENTIAL and the sharedfp MPI-IO component.
- Use "javac -h" instead of "javah" when building the Java bindings
with a recent version of Java.
- Fix mis-handling of jostepid under SLURM that could cause problems
with PathScale/OmniPath NICs.
- Disable the POWER 7/BE block in configure. Note that POWER 7/BE is
still not a supported platform, but it is no longer automatically
disabled. See
https://github.com/open-mpi/ompi/issues/4349#issuecomment-374970982
for more information.
- The output-filename option for mpirun is now converted to an
absolute path before being passed to other nodes.
- Add monitoring component for PML, OSC, and COLL to track data
movement of MPI applications. See
ompi/mca/commmon/monitoring/HowTo_pml_monitoring.tex for more
information about the monitoring framework.
- Add support for communicator assertions: mpi_assert_no_any_tag,
mpi_assert_no_any_source, mpi_assert_exact_length, and
mpi_assert_allow_overtaking.
- Update PMIx to version 2.1.1.
- Update hwloc to 1.11.7.
- Many one-sided behavior fixes.
- Improved performance for Reduce and Allreduce using Rabenseifner's algorithm.
- Revamped mpirun --help output to make it a bit more manageable.
- Portals4 MTL improvements: Fix race condition in rendezvous protocol and
retry logic.
- UCX OSC: initial implementation.
- UCX PML improvements: add multi-threading support.
- Yalla PML improvements: Fix error with irregular contiguous datatypes.
- Openib BTL: disable XRC support by default.
- TCP BTL: Add check to detect and ignore connections from processes
that aren't MPI (such as IDS probes) and verify that source and
destination are using the same version of Open MPI, fix issue with very
large message transfer.
- ompi_info parsable output now escapes double quotes in values, and
also quotes values can contains colons. Thanks to Lev Givon for the
suggestion.
- CUDA-aware support can now handle GPUs within a node that do not
support CUDA IPC. Earlier versions would get error and abort.
- Add a mca parameter ras_base_launch_orted_on_hn to allow for launching
MPI processes on the same node where mpirun is executing using a separate
orte daemon, rather than the mpirun process. This may be useful to set to
true when using SLURM, as it improves interoperability with SLURM's signal
propagation tools. By default it is set to false, except for Cray XC systems.
- Remove LoadLeveler RAS support.
- Remove IB XRC support from the OpenIB BTL due to lack of support.
- Add functionality for IBM s390 platforms. Note that regular
regression testing does not occur on the s390 and it is not
considered a supported platform.
- Remove support for big endian PowerPC.
- Remove support for XL compilers older than v13.1.
- Remove support for atomic operations using MacOS atomics library.
- Drop btl-vader-change-the-way-fast-boxes-are-used.patch which was merged upstream
- Add Build-warning-stringop-overflow-in.patch to fix a potential buffer overflow warning.
-------------------------------------------------------------------
Wed May 2 18:24:56 UTC 2018 - eich@suse.com
- Create missing docs master package (bsc#1091714)
-------------------------------------------------------------------
Mon Mar 26 11:31:06 UTC 2018 - nmoreychaisemartin@suse.com
- Enable --enable-mpirun-prefix-by-default (bsc#1086821)
-------------------------------------------------------------------
Fri Feb 9 12:05:35 UTC 2018 - cgoll@suse.com
- Fix summary in module files (bnc#1080259)
-------------------------------------------------------------------
Tue Jan 30 20:03:24 UTC 2018 - eich@suse.com
- Use macro in mpivars.(c)sh to be independent of changes to the module
setup for the compiler (boo#1078364).
-------------------------------------------------------------------
Wed Jan 17 09:54:18 UTC 2018 - nmoreychaisemartin@suse.com
- Only build openmpi3-config for the standard flavor
-------------------------------------------------------------------
Fri Jan 5 19:02:20 UTC 2018 - eich@suse.com
- Switch from gcc6 to gcc7 as additional compiler flavor for HPC on SLES.
- Fix library package requires - use HPC macro (boo#1074890).
- Fix rpm macro file.
-------------------------------------------------------------------
Thu Dec 7 10:58:31 UTC 2017 - nmoreychaisemartin@suse.com
- Add btl-vader-change-the-way-fast-boxes-are-used.patch to
fix a SEGV on i386 systems
-------------------------------------------------------------------
Tue Oct 10 13:16:11 UTC 2017 - nmoreychaisemartin@suse.com
- Add a ringdisabled flag to allow building only the standard flavor
so not all flavors are pulled into staging rings
- Fix baselibs.conf generation (wrong directory and name)
- Fix pre/post install call to ldconfig
-------------------------------------------------------------------
Fri Oct 6 13:58:00 UTC 2017 - nmoreychaisemartin@suse.com
- Add conflicts between the macros-devel packages
-------------------------------------------------------------------
Wed Sep 27 11:59:34 UTC 2017 - nmoreychaisemartin@suse.com
- Converted to multibuild.
- Add HPC build using environment modules (FATE#321711).
- Resync spec file with openmpi and openmpi2
-------------------------------------------------------------------
Mon Sep 25 15:45:23 UTC 2017 - nmoreychaisemartin@suse.com
- Fix VERSION file during build so that ompi_info reports good infos
-------------------------------------------------------------------
Tue Sep 19 15:04:51 UTC 2017 - nmoreychaisemartin@suse.com
- Remove --disable-mca-dso
Related bug was due to openmpi/*.so wrongly packaged as devel
-------------------------------------------------------------------
Wed Sep 13 07:27:16 UTC 2017 - nmoreychaisemartin@suse.com
- Update to OpenMPI 3.0.0
- Enable fortan08 bindings
- Disable devel headers
-------------------------------------------------------------------
Mon Aug 21 11:52:26 UTC 2017 - nmoreychaisemartin@suse.com
- Update to openMPI 3.0.0rc3
-------------------------------------------------------------------
Mon Jul 3 13:05:34 UTC 2017 - nmoreychaisemartin@suse.com
- Build with openucx support
-------------------------------------------------------------------
Mon Jul 3 13:52:53 CEST 2017 - pth@suse.de
- Initial packaging of openMPI 3.0.0rc1.
* Use UCX allocator for OSHMEM symmetric heap allocations to optimize intra-node
data transfers. UCX SPML only.
* Use UCX multi-threaded API in the UCX PML. Requires UCX 1.0 or later.
* Fix file list and call fdupes.
-------------------------------------------------------------------
Wed Jun 28 06:31:04 UTC 2017 - jengelh@inai.de
- Trim filler wording from description
- Replace uses of old $RPM_ variables, remove redundant %clean
section, abolish %__-type macro indirection,
remove excess piping to xargs
- Add missing %_smp_mflags.
-------------------------------------------------------------------
Thu Jun 15 12:06:33 UTC 2017 - nmoreychaisemartin@suse.com
- Add support for openmpi2 over PSM2 and libfabric
- Reference baselibs.conf and openmpi2-rpmlintrc in spec
- Add _service to fetch from upstream github repo
-------------------------------------------------------------------
Thu Jun 8 11:39:44 UTC 2017 - nmoreychaisemartin@suse.com
- Remove version dependencies to libibumad and libibverbs
-------------------------------------------------------------------
Wed May 31 12:30:39 UTC 2017 - nmoreychaisemartin@suse.com
- Fix module file paths
-------------------------------------------------------------------
Tue May 30 14:21:28 UTC 2017 - nmoreychaisemartin@suse.com
- Add openmpi2-config package which contains runtime configuration
files for OpenMPI 1 and/or 2
-------------------------------------------------------------------
Wed May 17 09:17:16 UTC 2017 - nmoreychaisemartin@suse.com
- Update to OpenMPI 2.1.1
* Fix a problem with one of Open MPI's fifo data structures which led to
hangs in a make check test.
* Add missing MPI_AINT_ADD/MPI_AINT_DIFF function definitions to mpif.h.
* Fix the error return from MPI_WIN_LOCK when rank argument is invalid.
* Fix a problem with mpirun/orterun when started under a debugger.
* Add configury option to disable use of CMA by the vader BTL.
* Add configury check for MPI_DOUBLE_COMPLEX datatype support.
* Fix memory allocated by MPI_WIN_ALLOCATE_SHARED to
be 64 byte aligned.
* Update MPI_WTICK man page to reflect possibly higher
resolution than 10e-6.
* Add missing MPI_T_PVAR_SESSION_NULL definition to mpi.h
include file.
* Enhance the Open MPI spec file to install modulefile in /opt
if installed in a non-default location.
* Fix a problem with conflicting PMI symbols when linking statically.
* S390/S390x support
- Drop openmpi2-ia32-fix-atomic.patch openmpi2-s390.patch as they are now
fixed/supported upstream.
-------------------------------------------------------------------
Tue May 2 15:45:26 UTC 2017 - nmoreychaisemartin@suse.com
- Add testsuite package
-------------------------------------------------------------------
Mon Apr 24 18:22:22 UTC 2017 - nmoreychaisemartin@suse.com
- Initial packaging of OpenMPI 2.1.0

843
openmpi3.spec Normal file
View File

@ -0,0 +1,843 @@
#
# spec file
#
# Copyright (c) 2022 SUSE LLC
# 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) 2013 Mellanox Technologies, Inc.
# All rights reserved.
# Copyright (c) 2015 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2003, The Regents of the University of California, through
# Lawrence Berkeley National Laboratory (subject to receipt of any
# required approvals from the U.S. Dept. of Energy). All rights reserved.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%global flavor @BUILD_FLAVOR@%{nil}
# Static libraries are disabled by default
# for non HPC builds
# To enable them, simply uncomment:
# % define build_static_devel 1
%define pname openmpi
%define vers 3.1.6
%define _vers 3_1_6
%define m_f_ver 3
%bcond_with ringdisabled
%if "%flavor" == ""
ExclusiveArch: do_not_build
%{bcond_with hpc}
%define package_name %pname%{m_f_ver}
%else
# Trickery for OBS Staging. If _with_ringdisabled is set
# we only want to build the flavors required by other rings packages.
# Do not build any other ones
%if %{with ringdisabled}
%if "%flavor" != "standard"
ExclusiveArch: do_not_build
%endif
%endif
%if "%flavor" == "standard" || "%flavor" == "testsuite"
%define package_name %{pname}%{m_f_ver}
%bcond_with hpc
%if "%flavor" == "testsuite"
%define testsuite 1
%endif
%else
%bcond_without hpc
# Needs to be defined here to avoid hen/egg problem with test packages.
%define package_name %{pname}_%{_vers}-%{compiler_family}%{?c_f_ver}-hpc
%define build_static_devel 1
%endif
%endif
%if "%flavor" == "gnu-hpc"
%define compiler_family gnu
%undefine c_f_ver
%endif
%if "%flavor" == "gnu-hpc-testsuite"
%define compiler_family gnu
%undefine c_f_ver
%define testsuite 1
%endif
%if "%flavor" == "gnu7-hpc"
%define compiler_family gnu
%define c_f_ver 7
%endif
%if "%flavor" == "gnu7-hpc-testsuite"
%define compiler_family gnu
%define c_f_ver 7
%define testsuite 1
%endif
%if "%flavor" == "gnu8-hpc"
%define compiler_family gnu
%define c_f_ver 8
%endif
%if "%flavor" == "gnu8-hpc-testsuite"
%define compiler_family gnu
%define c_f_ver 8
%define testsuite 1
%endif
%if "%flavor" == "gnu9-hpc"
%define compiler_family gnu
%define c_f_ver 9
%endif
%if "%flavor" == "gnu9-hpc-testsuite"
%define compiler_family gnu
%define c_f_ver 9
%define testsuite 1
%endif
%if "%flavor" == "gnu10-hpc"
%define compiler_family gnu
%define c_f_ver 10
%endif
%if "%flavor" == "gnu10-hpc-testsuite"
%define compiler_family gnu
%define c_f_ver 10
%define testsuite 1
%endif
%if 0%{?suse_version} >= 1320
%ifarch aarch64 %power64 x86_64 s390x
%define with_ucx 1
%endif
%endif
# Detect whether we are the default openMPI implemantation or not
%define default_openmpi 0
%if %{with hpc}
%{!?compiler_family:%global compiler_family gnu}
%{hpc_init -M -c %compiler_family %{?c_f_ver:-v %{c_f_ver}} -m openmpi %{?mpi_f_ver:-V %{mpi_f_ver}}}
%global hpc_openmpi_dep_version %(VER=%m_f_ver; echo -n ${VER})
%global hpc_openmpi_dir openmpi%{hpc_openmpi_dep_version}
%global hpc_openmpi_pack_version %{hpc_openmpi_dep_version}
%{bcond_without pmix}
%{bcond_without hwloc}
%else
%{bcond_with pmix}
%{bcond_with hwloc}
%endif
%define git_ver .0.ea348728b4c8
#############################################################################
#
# Preamble Section
#
#############################################################################
Name: %{package_name}%{?testsuite:-testsuite}
Version: %{vers}
Release: 0
Summary: An implementation of MPI/SHMEM
License: BSD-3-Clause
Group: Development/Libraries/Parallel
URL: http://www.open-mpi.org/
Source0: openmpi-%{version}%{git_ver}.tar.bz2
Source2: openmpi3-rpmlintrc
Source3: macros.hpc-openmpi
Source4: mpivars.sh
Source5: mpivars.csh
Patch0: Build-warning-stringop-overflow-in.patch
Patch1: reproducible.patch
Patch2: memory-patcher-fix-compiler-warning.patch
Patch3: fix-rdma-component-selection.patch
Patch4: Fix-error-with-stricter-quoting-requirements-of-autoconf-2.70.patch
Patch5: Always-include-the-stddef.h-header.patch
Patch6: Revert-hwloc-bring-back-the-configure-error-when-external-hwloc-is-2.0.patch
Patch7: hwloc-fix-hwloc-shmem.h-in-the-external-case.patch
Patch8: hwloc-updates-for-hwloc-2.0.x-API.patch
Patch9: pmix-pmix2x-Fix-the-PMIx-discovery-logic.patch
Patch10: pmix-Fix-detection-of-Externally-built-PMIx.patch
Patch11: btl-openib-Add-support-for-newer-hardware.patch
Patch12: rmaps-simplify-the-lookup-for-the-binding-object-and-fix-for-hwloc-2.0.patch
Provides: mpi
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: fdupes
BuildRequires: flex
BuildRequires: libevent-devel
BuildRequires: libfabric-devel
BuildRequires: libibumad-devel
BuildRequires: libibverbs-devel
BuildRequires: libtool
# net-tools is required to run hostname
BuildRequires: net-tools
%if 0%{?testsuite}
BuildArch: noarch
BuildRequires: %{package_name} = %{version}
%endif
%if 0%{?with_ucx}
BuildRequires: libucm-devel
BuildRequires: libucp-devel
BuildRequires: libucs-devel
BuildRequires: libuct-devel
%endif
%if %{with hwloc}
BuildRequires: hwloc-devel
%endif
%if %{with pmix}
BuildRequires: pmix-devel
%endif
%if %{without hpc}
BuildRequires: Modules
BuildRequires: gcc-c++
BuildRequires: gcc-fortran
BuildRequires: mpi-selector
Requires: mpi-selector
Requires(preun):mpi-selector
Requires: %{package_name}-libs = %{version}
%else
BuildRequires: %{compiler_family}%{?c_f_ver}-compilers-hpc-macros-devel
BuildRequires: lua-lmod
BuildRequires: suse-hpc
%if 0%{!?testsuite:1}
Requires: lib%{package_name} = %{version}
%endif
%hpc_requires
%endif
%ifarch %{ix86} x86_64
BuildRequires: infinipath-psm-devel
%endif
%ifarch x86_64
BuildRequires: libnuma-devel
BuildRequires: libpsm2-devel
BuildRequires: numactl
%endif
Requires: openmpi-runtime-config
Recommends: openmpi%{m_f_ver}-config
%if 0%{?default_openmpi}
Provides: openmpi = %{version}
%endif
# OpenMPI requires ssh (or rsh) to run even on a single host
# Force ssh to make sure the install works out of the box
Requires: openssh
%if %{without hpc}
%define mpi_prefix %{_libdir}/mpi/gcc/openmpi%{m_f_ver}
%define mpi_bindir %{mpi_prefix}/bin
%define mpi_libdir %{mpi_prefix}/%{_lib}
%define mpi_datadir %{mpi_prefix}/share
%define mpi_helpdir %{mpi_datadir}/%{pname}%{m_f_ver}
%define mpi_includedir %{mpi_prefix}/include
%define mpi_mandir %{mpi_prefix}/share/man
%else
%define mpi_prefix %hpc_prefix
%define mpi_bindir %hpc_bindir
%define mpi_libdir %hpc_libdir
%define mpi_datadir %hpc_datadir
%define mpi_helpdir %{mpi_datadir}/openmpi
%define mpi_includedir %hpc_includedir
%define mpi_mandir %hpc_mandir
%endif
%description
%if 0%{?testsuite}
This package is just needed to run the testsuite and does not contain
anything interesting.
%else
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
OpenMPI also includes an implementation of the OpenSHMEM parallel
programming API, which is a Partitioned Global Address Space (PGAS)
abstraction layer providing inter-process communication using
one-sided communication techniques.
This package provides general tools (mpirun, mpiexec, etc.) and the
Module Component Architecture (MCA) base and plugins necessary for
running Open MPI/OpenSHMEM jobs.
%endif
%if 0%{!?testsuite:1}
%package %{!?with_hpc:libs}%{?with_hpc:-n lib%{name}}
Summary: OpenMPI runtime libraries for OpenMPI %{?with_hpc:HPC} version %{version}
Group: System/Libraries
Requires: %{name} = %{version}
%if 0%{?default_openmpi}
Provides: openmpi-libs = %{version}
%endif
%{?with_hpc:%hpc_requires}
%description %{!?with_hpc:libs}%{?with_hpc:-n lib%{name}}
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
OpenMPI also includes an implementation of the OpenSHMEM parallel
programming API, which is a Partitioned Global Address Space (PGAS)
abstraction layer providing inter-process communication using
one-sided communication techniques.
This subpackage provides the OpenMPI shared libraries.
%package devel
Summary: SDK for openMPI %{?with_hpc:HPC} version %{version}
Group: Development/Libraries/Parallel
Requires: libibumad-devel
Requires: libibverbs-devel
%if %{without hpc}
Requires: libstdc++-devel
%if 0%{?default_openmpi}
Provides: openmpi-devel = %{version}
%endif
%else
%hpc_requires_devel
%endif
Requires: %{name} = %{version}
%description devel
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
OpenMPI also includes an implementation of the OpenSHMEM parallel
programming API, which is a Partitioned Global Address Space (PGAS)
abstraction layer providing inter-process communication using
one-sided communication techniques.
This subpackage provides the development files for Open MPI/OpenSHMEM,
such as wrapper compilers and header files for MPI/OpenSHMEM
development.
%package docs
Summary: Documentation for Open MPI/SHMEM %{?with_hpc:HPC} version %{version}
Group: Development/Documentation
Requires: %{name} = %{version}
%description docs
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
OpenMPI also includes an implementation of the OpenSHMEM parallel
programming API, which is a Partitioned Global Address Space (PGAS)
abstraction layer providing inter-process communication using
one-sided communication techniques.
This subpackage provides the documentation for Open MPI/OpenSHMEM.
%package macros-devel
Summary: Macros for openMPI version %{version}
Group: Development/Libraries/Parallel
Requires: %{name}-devel = %{version}
# Make sure no two openmpi macro file can be installed at once
Provides: %{pname}-macros-provider = %{version}
Conflicts: otherproviders(%{pname}-macros-provider)
# Conflict (without providing) with the older openmpi-hpc-macros-devel flag
# to avoid issue with older packages
Conflicts: otherproviders(%{pname}-hpc-macros-devel)
%if 0%{?default_openmpi}
Provides: openmpi-macros-devel = %{version}
%endif
%description macros-devel
Macros for building RPM packages for OpenMPI version %{version}.
%if 0%{?build_static_devel}
%package devel-static
Summary: Static libraries for openMPI %{?with_hpc:HPC} version %{version}
Group: Development/Libraries/Parallel
Requires: %{name}-devel = %{version}
%if 0%{?default_openmpi}
Provides: openmpi-devel-static = %{version}
%endif
%description devel-static
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
This RPM contains the static library files, which are packaged separately from
the dynamic library and headers.
%endif
%if %{without hpc}
%package -n %{pname}%{m_f_ver}-config
Summary: Runtime configuration files for openMPI %{?with_hpc:HPC} version %{version}
Group: Development/Libraries/Parallel
Provides: openmpi-runtime-config = %{version}
Conflicts: otherproviders(openmpi-runtime-config)
%if %{without pmix}
# OpenMPI3 is PMIx enabled
Provides: pmix-runtime-config = %{version}
Conflicts: otherproviders(pmix-runtime-config)
%endif
%description -n %{pname}%{m_f_ver}-config
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
This RPM contains the configuration files for OpenMPI runtime (Version 3).
%endif
%if %{with hpc}
%{hpc_master_package -L -a}
%{hpc_master_package -l}
%{hpc_master_package devel}
%{hpc_master_package docs}
%{hpc_master_package macros-devel}
%{hpc_master_package -a devel-static}
%endif # ?with_hpc
%endif # !testsuite
#############################################################################
#
# Prepatory Section
#
#############################################################################
%prep
echo FLAVOR %{flavor}
%if %{with hpc}
echo with HPC
%endif
%if %{without hpc}
echo without HPC
%endif
%setup -q -n openmpi-%{version}%{git_ver}
%patch0
%if %{without hpc}
cat > %{_sourcedir}/baselibs.conf <<EOF
openmpi%{m_f_ver}-libs
EOF
%endif
%patch1 -p1
%patch2
%patch3
%patch4
%patch5
%patch6
%patch7
%patch8
%patch9
%patch10
%patch11
%patch12
# Live patch the VERSION file
sed -i -e 's/^greek=.*$/greek=%{git_ver}/' -e 's/^repo_rev=.*$/repo_rev=%{version}%{git_ver}/' \
-e 's/^date=.*$/date="OpenMPI %{version} Distribution for SUSE"/' VERSION
#############################################################################
#
# Build Section
#
#############################################################################
%build
export USER=OBS
export HOSTNAME=OBS
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
%{?with_hpc:%hpc_debug}
./autogen.pl --force
%if %{with hpc}
%{hpc_setup}
%{hpc_configure} \
%else
%{configure} \
--prefix="%{mpi_prefix}" \
--exec-prefix="%{mpi_prefix}" \
--bindir="%{mpi_bindir}" \
--datadir="%{mpi_datadir}" \
--includedir="%{mpi_includedir}" \
--libdir="%{mpi_libdir}" \
--mandir="%{mpi_mandir}" \
%endif
%{?build_static_devel:--enable-static} \
%{!?build_static_devel:--disable-static} \
--enable-builtin-atomics \
--with-libltdl=%{_prefix} \
--with-verbs \
--with-libfabric \
--enable-mpi-thread-multiple \
--disable-wrapper-rpath \
--with-slurm \
--with-libevent=external \
%if %{with hwloc}
--with-hwloc=external \
%endif
%if %{with pmix}
--with-pmix=external \
%endif
%if 0%{?with_ucx}
--with-ucx \
--with-ucx-libdir=/usr/%_lib \
%endif
%ifarch %{ix86} x86_64
--with-psm \
%endif
%ifarch x86_64
--with-psm2 \
%endif
--disable-silent-rules \
--enable-mpirun-prefix-by-default \
--with-package-string="Open MPI Distribution for SUSE" \
--disable-wrapper-runpath
make %{?_smp_mflags}
%if 0%{?testsuite}
%check
make check
%install
%files
%defattr(-, root, root)
%doc README
%doc test/util/test-suite.log
%else # ?testsuite
#############################################################################
#
# Install Section
#
#############################################################################
%install
%{?with_hpc:%{hpc_setup_compiler}}
make install DESTDIR="%buildroot"
# sanitize .la files
list="$(find %{buildroot} -name "*.la" -printf "%%h\n" | sort | uniq)"
for dir in ${list}
do
deps="${deps} -L${dir##%{buildroot}}"
done
for dir in ${list}
do
%if !0%{?build_static_devel}
rm -f ${dir}/*.la
%else
for file in ${dir}/*.la
do
sed -i -e "s@ [^[:space:]]*home[^[:space:]\']*@${deps}@" \
-e "s@ [^[:space:]]*home[^[:space:]\']*@@g" \
-e "s@-L.*.libs @@g" ${file}
done
%endif
done
##even with disable static this one gets generated
%{!?build_static_devel:rm -f %{buildroot}%{mpi_libdir}/libvt-pomp.a}
# GCC 5 builds the ignore-tkr extension and there is no way to
# turn that off
rm -f %{buildroot}%{mpi_libdir}/mpi_ext.mod
%fdupes %{buildroot}%{mpi_mandir}
%fdupes %{buildroot}%{mpi_datadir}
%fdupes %{buildroot}%{mpi_libdir}/pkgconfig
%if %{without hpc}
# make and install mpivars files
sed -e 's,prefix,%{mpi_prefix},g' -e 's,libdir,%{mpi_libdir},g' %{SOURCE4} \
> %{buildroot}%{mpi_bindir}/mpivars.sh
sed -e 's,prefix,%{mpi_prefix},g' -e 's,libdir,%{mpi_libdir},g' %{SOURCE5} \
> %{buildroot}%{mpi_bindir}/mpivars.csh
mkdir -p %{buildroot}%{_datadir}/modules/gnu-openmpi
cat << EOF > %{buildroot}%{_datadir}/modules/gnu-openmpi/%{version}
#%%Module
proc ModulesHelp { } {
global dotversion
puts stderr "\tLoads the gnu - openmpi %{version} Environment"
}
module-whatis "Loads the gnu openmpi %{version} Environment."
conflict gnu-openmpi
prepend-path PATH %{mpi_bindir}
prepend-path INCLUDE %{mpi_includedir}
prepend-path INCLUDE %{mpi_libdir}
prepend-path MANPATH %{mpi_mandir}
prepend-path LD_LIBRARY_PATH %{mpi_libdir}
EOF
mkdir -p %{buildroot}%{_rpmmacrodir}
cat <<EOF >%{buildroot}%{_rpmmacrodir}/macros.openmpi
#
# openmpi
#
%openmpi_prefix %{mpi_prefix}
%setup_openmpi source %{mpi_bindir}/mpivars.sh
%openmpi_requires Requires: %{name}-libs
%openmpi_devel_requires Requires: %{name}-devel
EOF
%else
%hpc_write_modules_files
#%%Module1.0#####################################################################
proc ModulesHelp { } {
puts stderr " "
puts stderr "This module loads the %{pname} library built with the %{compiler_family} toolchain."
puts stderr "\nVersion %{version}\n"
}
module-whatis "Name: %{pname} built with %{compiler_family} toolchain"
module-whatis "Version: %{version}"
module-whatis "Category: runtime library"
module-whatis "Description: %{SUMMARY:0}"
module-whatis "URL: %{url}"
set version %{version}
setenv MPI_DIR %{hpc_mpi_install_path}
prepend-path PATH %{hpc_bindir}
prepend-path MANPATH %{hpc_mandir}
prepend-path LD_LIBRARY_PATH %{hpc_libdir}
prepend-path MODULEPATH %{hpc_modulepath}
%{hpc_modulefile_add_pkgconfig_path}
family "MPI"
EOF
cat <<EOF > %{buildroot}/%{mpi_bindir}/mpivars.sh
%hpc_setup_compiler
module load %{hpc_mpi_family}%{?pack_suff}/%{version}
EOF
sed -e "s/export/setenv/" -e "s/=/ /" \
%{buildroot}/%{mpi_bindir}/mpivars.sh > \
%{buildroot}/%{mpi_bindir}/mpivars.csh
mkdir -p %{buildroot}%{_rpmmacrodir}
cp %{S:3} %{buildroot}%{_rpmmacrodir}
# Drop the files that should go into %{pname}-config as we only package them
# in the non HPC build
rm -f %{buildroot}%{_sysconfdir}/openmpi-default-hostfile
rm -f %{buildroot}%{_sysconfdir}/openmpi-mca-params.conf
rm -f %{buildroot}%{_sysconfdir}/openmpi-totalview.tcl
%if %{without pmix}
rm -f %{buildroot}%{_sysconfdir}/pmix-mca-params.conf
%endif
%endif
%if %{without hpc}
%post
# Always register. We might be already registered in the case of an udate
# but mpi-selector handles it fine
/usr/bin/mpi-selector \
--register %{name} \
--source-dir %{mpi_bindir} \
--yes
%preun
# Only unregister when uninstalling
if [ "$1" = "0" ]; then
/usr/bin/mpi-selector --unregister %{name} --yes
# Deregister the default if we are uninstalling it
if [ "$(/usr/bin/mpi-selector --system --query)" = "%{name}" ]; then
/usr/bin/mpi-selector --system --unset --yes
fi
fi
%post libs -p /sbin/ldconfig
%postun libs -p /sbin/ldconfig
%else #!?with_hpc
# make it default
%post -n lib%{name} -p /sbin/ldconfig
%postun -n lib%{name} -p /sbin/ldconfig
%postun
%hpc_module_delete_if_default
%endif #!?with_hpc
%files
%defattr(-, root, root)
%doc NEWS README
%license LICENSE
%dir %{mpi_prefix}
%dir %{mpi_bindir}
%dir %{mpi_libdir}
%dir %{mpi_datadir}
%dir %{mpi_mandir}
%{mpi_bindir}/mpivars.csh
%{mpi_bindir}/mpivars.sh
%if %{without hpc}
%dir %{_libdir}/mpi
%dir %{_libdir}/mpi/gcc
%dir %{_datadir}/modules/gnu-openmpi
%{_datadir}/modules/gnu-openmpi/%{version}
%else # with hpc
%hpc_mpi_dirs
%hpc_modules_files
%endif # with hpc
#
%{mpi_bindir}/mpirun
%{mpi_bindir}/ompi-clean
%{mpi_bindir}/ompi-dvm
%{mpi_bindir}/ompi-ps
%{mpi_bindir}/ompi-server
%{mpi_bindir}/ompi-top
%{mpi_bindir}/ompi_info
%{mpi_bindir}/orte-clean
%{mpi_bindir}/orte-dvm
%{mpi_bindir}/orte-info
%{mpi_bindir}/orte-ps
%{mpi_bindir}/orte-server
%{mpi_bindir}/orte-top
%{mpi_bindir}/orted
%{mpi_bindir}/orterun
%{mpi_bindir}/oshmem_info
%{mpi_bindir}/oshrun
%{mpi_bindir}/prun
%{mpi_bindir}/shmemrun
%if %{without hpc}
%{mpi_bindir}/aggregate_profile.pl
%{mpi_bindir}/profile2mat.pl
%endif
%dir %{mpi_datadir}/openmpi
%dir %{mpi_datadir}/openmpi/amca-param-sets
%{mpi_datadir}/openmpi/amca-param-sets/btl-openib-benchmark
%{mpi_datadir}/openmpi/amca-param-sets/example.conf
%{mpi_datadir}/openmpi/mca-btl-openib-device-params.ini
%{mpi_datadir}/openmpi/*-data.txt
%{mpi_datadir}/openmpi/help-*.txt
%if %{without pmix}
%dir %{mpi_datadir}/pmix
%{mpi_datadir}/pmix/help-*.txt
%{mpi_datadir}/pmix/help-*.txt
%endif
%files %{!?with_hpc:libs}%{?with_hpc:-n lib%{name}}
%defattr(-,root,root)
%dir %mpi_prefix/
%dir %mpi_libdir/
%mpi_libdir/*.so.*
%{mpi_libdir}/openmpi/*.so
%if %{without pmix}
%dir %mpi_libdir/pmix/
%{mpi_libdir}/pmix/*.so
%endif
%files devel
%defattr(-, root, root)
%dir %{mpi_libdir}/openmpi
%dir %{mpi_libdir}/pkgconfig
%{mpi_includedir}
%{mpi_libdir}/*.so
%{mpi_libdir}/pkgconfig/*.pc
%{mpi_libdir}/mpi.mod
%if 0%{?suse_version} >= 1320
%{mpi_libdir}/mpi_f08*.mod
%{mpi_libdir}/pmpi_f08*.mod
%endif
%{mpi_bindir}/mpiCC
%{mpi_bindir}/mpic++
%{mpi_bindir}/mpicc
%{mpi_bindir}/mpicxx
%{mpi_bindir}/mpiexec
%{mpi_bindir}/mpif77
%{mpi_bindir}/mpif90
%{mpi_bindir}/mpifort
%{mpi_bindir}/opal_wrapper
%{mpi_bindir}/ortecc
%{mpi_bindir}/oshcc
%{mpi_bindir}/oshCC
%{mpi_bindir}/oshc++
%{mpi_bindir}/oshcxx
%{mpi_bindir}/oshfort
%{mpi_bindir}/shmemcc
%{mpi_bindir}/shmemCC
%{mpi_bindir}/shmemc++
%{mpi_bindir}/shmemcxx
%{mpi_bindir}/shmemfort
%{mpi_datadir}/openmpi/openmpi-valgrind.supp
%if %{without pmix}
%{mpi_datadir}/pmix/pmix-valgrind.supp
%endif
%files docs
%defattr(-, root, root, -)
%{mpi_mandir}
%files macros-devel
%defattr(-,root,root,-)
%if %{with hpc}
%config %{_rpmmacrodir}/macros.hpc-openmpi
%else
%config %{_rpmmacrodir}/macros.openmpi
%endif
%if 0%{?build_static_devel}
%files devel-static
%defattr(-, root, root)
%{mpi_libdir}/*.la
%{mpi_libdir}/openmpi/*.la
%{mpi_libdir}/*.a
%{mpi_libdir}/openmpi/*.a
%endif
%if %{without hpc}
%files -n %{pname}%{m_f_ver}-config
%config %{_sysconfdir}/openmpi-default-hostfile
%config %{_sysconfdir}/openmpi-mca-params.conf
%if %{without pmix}
%config %{_sysconfdir}/pmix-mca-params.conf
%endif
%{_sysconfdir}/openmpi-totalview.tcl
%endif
%endif # !?testsuite
%changelog

View File

@ -0,0 +1,24 @@
commit ed3ecbc8be313cb3613d6022548deb41750b7725
Author: Artem Polyakov <artpol84@gmail.com>
Date: Tue Apr 20 15:16:24 2021 -0700
pmix: Fix detection of Externally-built PMIx
See https://github.com/open-mpi/ompi/issues/8823 for more details.
Signed-off-by: Artem Polyakov <artpol84@gmail.com>
diff --git opal/mca/pmix/ext1x/pmix1x_component.c opal/mca/pmix/ext1x/pmix1x_component.c
index 747f95cc6139..57e91305fd85 100644
--- opal/mca/pmix/ext1x/pmix1x_component.c
+++ opal/mca/pmix/ext1x/pmix1x_component.c
@@ -95,8 +95,7 @@ static int external_component_query(mca_base_module_t **module, int *priority)
char *t, *id;
/* see if a PMIx server is present */
- if (NULL != (t = getenv("PMIX_SERVER_URI")) ||
- NULL != (id = getenv("PMIX_ID"))) {
+ if (NULL != (t = getenv("PMIX_NAMESPACE"))) {
/* if PMIx is present, then we are a client and need to use it */
*priority = 100;
} else {

View File

@ -0,0 +1,25 @@
commit 4bb0f4200ae67d203d59f19c7d38c01cc320ee03
Author: Artem Polyakov <artpol84@gmail.com>
Date: Tue Apr 20 09:17:32 2021 -0700
pmix/pmix2x: Fix the PMIx discovery logic
See https://github.com/open-mpi/ompi/issues/8823 for the details.
Signed-off-by: Artem Polyakov <artpol84@gmail.com>
diff --git opal/mca/pmix/pmix2x/pmix2x_component.c opal/mca/pmix/pmix2x/pmix2x_component.c
index 74a08a77058b..0771331a0679 100644
--- opal/mca/pmix/pmix2x/pmix2x_component.c
+++ opal/mca/pmix/pmix2x/pmix2x_component.c
@@ -118,9 +118,7 @@ static int external_component_query(mca_base_module_t **module, int *priority)
char *t, *id;
/* see if a PMIx server is present */
- if (NULL != (t = getenv("PMIX_SERVER_URI")) ||
- NULL != (t = getenv("PMIX_SERVER_URI2")) ||
- NULL != (id = getenv("PMIX_ID"))) {
+ if (NULL != (t = getenv("PMIX_NAMESPACE"))) {
/* if PMIx is present, then we are a client and need to use it */
*priority = 100;
} else {

126
reproducible.patch Normal file
View File

@ -0,0 +1,126 @@
Author: Bernhard M. Wiedemann <bwiedemann suse de>
Date: 2017-06-29
make package build reproducible
by using fixed date + hostname
https://github.com/open-mpi/ompi/issues/3759
https://bugzilla.opensuse.org/show_bug.cgi?id=1047218 packages do not build reproducibly from including build time
https://bugzilla.opensuse.org/show_bug.cgi?id=1084909 +hostname
Index: openmpi-3.1.1.0.155d2134a776/autogen.pl
===================================================================
--- openmpi-3.1.1.0.155d2134a776.orig/autogen.pl
+++ openmpi-3.1.1.0.155d2134a776/autogen.pl
@@ -85,7 +85,7 @@ if ($^O eq "solaris") {
}
$username = getpwuid($>);
-$full_hostname = `hostname`;
+$full_hostname = "openSUSEnohostname";
chomp($full_hostname);
$hostname = $full_hostname;
$hostname =~ s/^([\w\-]+)\..+/\1/;
@@ -1190,7 +1190,7 @@ if (-e "orcm") {
#---------------------------------------------------------------------------
-$full_hostname = `hostname`;
+$full_hostname = "openSUSEnohostname";
chomp($full_hostname);
$m4 = "dnl
Index: openmpi-3.1.1.0.155d2134a776/config/opal_functions.m4
===================================================================
--- openmpi-3.1.1.0.155d2134a776.orig/config/opal_functions.m4
+++ openmpi-3.1.1.0.155d2134a776/config/opal_functions.m4
@@ -94,9 +94,9 @@ EOF
# Save some stats about this build
#
-OPAL_CONFIGURE_USER="`whoami`"
-OPAL_CONFIGURE_HOST="`(hostname || uname -n) 2> /dev/null | sed 1q`"
-OPAL_CONFIGURE_DATE="`date`"
+OPAL_CONFIGURE_USER="openSUSEnowhoami"
+OPAL_CONFIGURE_HOST="openSUSEnohostname"
+OPAL_CONFIGURE_DATE="openSUSEnodate"
OPAL_LIBNL_SANITY_INIT
@@ -116,9 +116,9 @@ AC_DEFUN([OPAL_BASIC_SETUP],[
# Save some stats about this build
#
-OPAL_CONFIGURE_USER="`whoami`"
-OPAL_CONFIGURE_HOST="`(hostname || uname -n) 2> /dev/null | sed 1q`"
-OPAL_CONFIGURE_DATE="`date`"
+OPAL_CONFIGURE_USER="openSUSEnowhoami"
+OPAL_CONFIGURE_HOST="openSUSEnohostname"
+OPAL_CONFIGURE_DATE="openSUSEnodate"
#
# Make automake clean emacs ~ files for "make clean"
Index: openmpi-3.1.1.0.155d2134a776/config/opal_get_version.m4
===================================================================
--- openmpi-3.1.1.0.155d2134a776.orig/config/opal_get_version.m4
+++ openmpi-3.1.1.0.155d2134a776/config/opal_get_version.m4
@@ -91,7 +91,7 @@ m4_define([OPAL_GET_VERSION],[
$2_REPO_REV=`git describe --tags --always`
fi
else
- $2_REPO_REV="date`date '+%Y-%m-%d'`"
+ $2_REPO_REV="date"
fi
fi
Index: openmpi-3.1.1.0.155d2134a776/ompi/tools/ompi_info/Makefile.am
===================================================================
--- openmpi-3.1.1.0.155d2134a776.orig/ompi/tools/ompi_info/Makefile.am
+++ openmpi-3.1.1.0.155d2134a776/ompi/tools/ompi_info/Makefile.am
@@ -27,9 +27,9 @@ AM_CFLAGS = \
-DOPAL_CONFIGURE_USER="\"@OPAL_CONFIGURE_USER@\"" \
-DOPAL_CONFIGURE_HOST="\"@OPAL_CONFIGURE_HOST@\"" \
-DOPAL_CONFIGURE_DATE="\"@OPAL_CONFIGURE_DATE@\"" \
- -DOMPI_BUILD_USER="\"$$USER\"" \
- -DOMPI_BUILD_HOST="\"`(hostname || uname -n) 2> /dev/null | sed 1q`\"" \
- -DOMPI_BUILD_DATE="\"`date`\"" \
+ -DOMPI_BUILD_USER="\"USER\"" \
+ -DOMPI_BUILD_HOST="\"openSUSEnohostname\"" \
+ -DOMPI_BUILD_DATE="\"`date -u -r ../../../NEWS`\"" \
-DOMPI_BUILD_CFLAGS="\"@CFLAGS@\"" \
-DOMPI_BUILD_CPPFLAGS="\"@CPPFLAGS@\"" \
-DOMPI_BUILD_CXXFLAGS="\"@CXXFLAGS@\"" \
Index: openmpi-3.1.1.0.155d2134a776/orte/tools/orte-info/Makefile.am
===================================================================
--- openmpi-3.1.1.0.155d2134a776.orig/orte/tools/orte-info/Makefile.am
+++ openmpi-3.1.1.0.155d2134a776/orte/tools/orte-info/Makefile.am
@@ -24,9 +24,9 @@ AM_CFLAGS = \
-DOPAL_CONFIGURE_USER="\"@OPAL_CONFIGURE_USER@\"" \
-DOPAL_CONFIGURE_HOST="\"@OPAL_CONFIGURE_HOST@\"" \
-DOPAL_CONFIGURE_DATE="\"@OPAL_CONFIGURE_DATE@\"" \
- -DOMPI_BUILD_USER="\"$$USER\"" \
- -DOMPI_BUILD_HOST="\"`(hostname || uname -n) | sed 1q`\"" \
- -DOMPI_BUILD_DATE="\"`date`\"" \
+ -DOMPI_BUILD_USER="\"USER\"" \
+ -DOMPI_BUILD_HOST="\"openSUSEnohostname\"" \
+ -DOMPI_BUILD_DATE="\"`date -u -r ../../../NEWS`\"" \
-DOMPI_BUILD_CFLAGS="\"@CFLAGS@\"" \
-DOMPI_BUILD_CPPFLAGS="\"@CPPFLAGS@\"" \
-DOMPI_BUILD_CXXFLAGS="\"@CXXFLAGS@\"" \
Index: openmpi-3.1.1.0.155d2134a776/oshmem/tools/oshmem_info/Makefile.am
===================================================================
--- openmpi-3.1.1.0.155d2134a776.orig/oshmem/tools/oshmem_info/Makefile.am
+++ openmpi-3.1.1.0.155d2134a776/oshmem/tools/oshmem_info/Makefile.am
@@ -16,9 +16,9 @@ AM_CPPFLAGS = \
-DOPAL_CONFIGURE_USER="\"@OPAL_CONFIGURE_USER@\"" \
-DOPAL_CONFIGURE_HOST="\"@OPAL_CONFIGURE_HOST@\"" \
-DOPAL_CONFIGURE_DATE="\"@OPAL_CONFIGURE_DATE@\"" \
- -DOMPI_BUILD_USER="\"$$USER\"" \
- -DOMPI_BUILD_HOST="\"`(hostname || uname -n) 2> /dev/null | sed 1q`\"" \
- -DOMPI_BUILD_DATE="\"`date`\"" \
+ -DOMPI_BUILD_USER="\"USER\"" \
+ -DOMPI_BUILD_HOST="\"openSUSEnohostname\"" \
+ -DOMPI_BUILD_DATE="\"`date -u -r ../../../NEWS`\"" \
-DOMPI_BUILD_CFLAGS="\"@CFLAGS@\"" \
-DOMPI_BUILD_CPPFLAGS="\"@CPPFLAGS@\"" \
-DOMPI_BUILD_CXXFLAGS="\"@CXXFLAGS@\"" \

View File

@ -0,0 +1,306 @@
commit 8992b7c5996de5e261bbfc9e57b270c8717852f9
Author: Brice Goglin <Brice.Goglin@inria.fr>
Date: Fri Jan 26 16:19:52 2018 +0100
rmaps: simplify the lookup for the binding object and fix for hwloc 2.0
Don't bother doing a lookup upwards or downwards for the target object type.
Just use the target depth, iterate over the level until we find the min_bound
object that intersects the locale cpuset.
Signed-off-by: Brice Goglin <Brice.Goglin@inria.fr>
diff --git orte/mca/rmaps/base/rmaps_base_binding.c orte/mca/rmaps/base/rmaps_base_binding.c
index df3799947514..d6781608f36f 100644
--- orte/mca/rmaps/base/rmaps_base_binding.c
+++ orte/mca/rmaps/base/rmaps_base_binding.c
@@ -15,6 +15,7 @@
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
* Copyright (c) 2015-2017 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
+ * Copyright (c) 2018 Inria. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@@ -120,142 +121,21 @@ static void unbind_procs(orte_job_t *jdata)
}
}
-static int bind_upwards(orte_job_t *jdata,
+static int bind_generic(orte_job_t *jdata,
orte_node_t *node,
- hwloc_obj_type_t target,
- unsigned cache_level)
-{
- /* traverse the hwloc topology tree on each node upwards
- * until we find an object of type target - and then bind
- * the process to that target
- */
- int j;
- orte_job_map_t *map;
- orte_proc_t *proc;
- hwloc_obj_t obj;
- unsigned int idx, ncpus;
- opal_hwloc_obj_data_t *data;
- hwloc_obj_t locale;
- char *cpu_bitmap;
-
- opal_output_verbose(5, orte_rmaps_base_framework.framework_output,
- "mca:rmaps: bind upwards for job %s with bindings %s",
- ORTE_JOBID_PRINT(jdata->jobid),
- opal_hwloc_base_print_binding(jdata->map->binding));
- /* initialize */
- map = jdata->map;
-
-
- /* cycle thru the procs */
- for (j=0; j < node->procs->size; j++) {
- if (NULL == (proc = (orte_proc_t*)opal_pointer_array_get_item(node->procs, j))) {
- continue;
- }
- /* ignore procs from other jobs */
- if (proc->name.jobid != jdata->jobid) {
- continue;
- }
- /* bozo check */
- if (!orte_get_attribute(&proc->attributes, ORTE_PROC_HWLOC_LOCALE, (void**)&locale, OPAL_PTR)) {
- orte_show_help("help-orte-rmaps-base.txt", "rmaps:no-locale", true, ORTE_NAME_PRINT(&proc->name));
- return ORTE_ERR_SILENT;
- }
- /* starting at the locale, move up thru the parents
- * to find the target object type
- */
- cpu_bitmap = NULL;
- for (obj = locale->parent; NULL != obj; obj = obj->parent) {
- opal_output_verbose(5, orte_rmaps_base_framework.framework_output,
- "%s bind:upward target %s type %s",
- ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
- hwloc_obj_type_string(target),
- hwloc_obj_type_string(obj->type));
- if (target == obj->type) {
-#if HWLOC_API_VERSION < 0x20000
- if (HWLOC_OBJ_CACHE == target && cache_level != obj->attr->cache.depth) {
- continue;
- }
-#endif
- /* get its index */
- if (UINT_MAX == (idx = opal_hwloc_base_get_obj_idx(node->topology->topo, obj, OPAL_HWLOC_AVAILABLE))) {
- ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);
- return ORTE_ERR_SILENT;
- }
- /* track the number bound */
- data = (opal_hwloc_obj_data_t*)obj->userdata;
- data->num_bound++;
- /* get the number of cpus under this location */
- if (0 == (ncpus = opal_hwloc_base_get_npus(node->topology->topo, obj))) {
- orte_show_help("help-orte-rmaps-base.txt", "rmaps:no-available-cpus", true, node->name);
- return ORTE_ERR_SILENT;
- }
- /* error out if adding a proc would cause overload and that wasn't allowed,
- * and it wasn't a default binding policy (i.e., the user requested it)
- */
- if (ncpus < data->num_bound &&
- !OPAL_BIND_OVERLOAD_ALLOWED(jdata->map->binding)) {
- if (OPAL_BINDING_POLICY_IS_SET(jdata->map->binding)) {
- /* if the user specified a binding policy, then we cannot meet
- * it since overload isn't allowed, so error out - have the
- * message indicate that setting overload allowed will remove
- * this restriction */
- orte_show_help("help-orte-rmaps-base.txt", "rmaps:binding-overload", true,
- opal_hwloc_base_print_binding(map->binding), node->name,
- data->num_bound, ncpus);
- return ORTE_ERR_SILENT;
- } else {
- /* if we have the default binding policy, then just don't bind */
- OPAL_SET_BINDING_POLICY(map->binding, OPAL_BIND_TO_NONE);
- unbind_procs(jdata);
- return ORTE_SUCCESS;
- }
- }
- /* bind it here */
- hwloc_bitmap_list_asprintf(&cpu_bitmap, obj->cpuset);
- orte_set_attribute(&proc->attributes, ORTE_PROC_CPU_BITMAP, ORTE_ATTR_GLOBAL, cpu_bitmap, OPAL_STRING);
- /* record the location */
- orte_set_attribute(&proc->attributes, ORTE_PROC_HWLOC_BOUND, ORTE_ATTR_LOCAL, obj, OPAL_PTR);
- opal_output_verbose(5, orte_rmaps_base_framework.framework_output,
- "%s BOUND PROC %s TO %s[%s:%u] on node %s",
- ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
- ORTE_NAME_PRINT(&proc->name),
- cpu_bitmap,
- hwloc_obj_type_string(target),
- idx, node->name);
- break;
- }
- }
- if (NULL == cpu_bitmap && OPAL_BINDING_REQUIRED(jdata->map->binding)) {
- /* didn't find anyone to bind to - this is an error
- * unless the user specified if-supported
- */
- orte_show_help("help-orte-rmaps-base.txt", "rmaps:binding-target-not-found", true,
- opal_hwloc_base_print_binding(map->binding), node->name);
- return ORTE_ERR_SILENT;
- }
- if (NULL != cpu_bitmap) {
- free(cpu_bitmap);
- }
- }
-
- return ORTE_SUCCESS;
-}
-
-static int bind_downwards(orte_job_t *jdata,
- orte_node_t *node,
- hwloc_obj_type_t target,
- unsigned cache_level)
+ int target_depth)
{
int j;
orte_job_map_t *map;
orte_proc_t *proc;
- hwloc_obj_t trg_obj, nxt_obj;
+ hwloc_obj_t trg_obj, tmp_obj, nxt_obj;
unsigned int ncpus;
opal_hwloc_obj_data_t *data;
int total_cpus;
hwloc_cpuset_t totalcpuset;
hwloc_obj_t locale;
char *cpu_bitmap;
+ unsigned min_bound;
opal_output_verbose(5, orte_rmaps_base_framework.framework_output,
"mca:rmaps: bind downward for job %s with bindings %s",
@@ -282,12 +162,24 @@ static int bind_downwards(orte_job_t *jdata,
hwloc_bitmap_free(totalcpuset);
return ORTE_ERR_SILENT;
}
- /* we don't know if the target is a direct child of this locale,
- * or if it is some depth below it, so we have to conduct a bit
- * of a search. Let hwloc find the min usage one for us.
- */
- trg_obj = opal_hwloc_base_find_min_bound_target_under_obj(node->topology->topo, locale,
- target, cache_level);
+
+ /* use the min_bound object that intersects locale->cpuset at target_depth */
+ tmp_obj = NULL;
+ trg_obj = NULL;
+ min_bound = UINT_MAX;
+ while (tmp_obj = hwloc_get_next_obj_by_depth(node->topology->topo, target_depth, tmp_obj)) {
+ if (!hwloc_bitmap_intersects(locale->cpuset, tmp_obj->cpuset))
+ continue;
+ data = (opal_hwloc_obj_data_t*)tmp_obj->userdata;
+ if (NULL == data) {
+ data = OBJ_NEW(opal_hwloc_obj_data_t);
+ tmp_obj->userdata = data;
+ }
+ if (data->num_bound < min_bound) {
+ min_bound = data->num_bound;
+ trg_obj = tmp_obj;
+ }
+ }
if (NULL == trg_obj) {
/* there aren't any such targets under this object */
orte_show_help("help-orte-rmaps-base.txt", "rmaps:no-available-cpus", true, node->name);
@@ -296,6 +188,7 @@ static int bind_downwards(orte_job_t *jdata,
}
/* record the location */
orte_set_attribute(&proc->attributes, ORTE_PROC_HWLOC_BOUND, ORTE_ATTR_LOCAL, trg_obj, OPAL_PTR);
+
/* start with a clean slate */
hwloc_bitmap_zero(totalcpuset);
total_cpus = 0;
@@ -685,7 +578,7 @@ int orte_rmaps_base_compute_bindings(orte_job_t *jdata)
int i, rc;
struct hwloc_topology_support *support;
bool force_down = false;
- int bind_depth, map_depth;
+ int bind_depth;
opal_output_verbose(5, orte_rmaps_base_framework.framework_output,
"mca:rmaps: compute bindings for job %s with policy %s[%x]",
@@ -904,62 +797,35 @@ int orte_rmaps_base_compute_bindings(orte_job_t *jdata)
*/
reset_usage(node, jdata->jobid);
- if (force_down) {
- if (ORTE_SUCCESS != (rc = bind_downwards(jdata, node, hwb, clvl))) {
- ORTE_ERROR_LOG(rc);
- return rc;
- }
- } else {
- /* determine the relative depth on this node */
+ /* determine the relative depth on this node */
#if HWLOC_API_VERSION < 0x20000
- if (HWLOC_OBJ_CACHE == hwb) {
- /* must use a unique function because blasted hwloc
- * just doesn't deal with caches very well...sigh
- */
- bind_depth = hwloc_get_cache_type_depth(node->topology->topo, clvl, (hwloc_obj_cache_type_t)-1);
- } else
+ if (HWLOC_OBJ_CACHE == hwb) {
+ /* must use a unique function because blasted hwloc
+ * just doesn't deal with caches very well...sigh
+ */
+ bind_depth = hwloc_get_cache_type_depth(node->topology->topo, clvl, (hwloc_obj_cache_type_t)-1);
+ } else
#endif
- bind_depth = hwloc_get_type_depth(node->topology->topo, hwb);
- if (0 > bind_depth) {
- /* didn't find such an object */
- orte_show_help("help-orte-rmaps-base.txt", "orte-rmaps-base:no-objects",
- true, hwloc_obj_type_string(hwb), node->name);
- return ORTE_ERR_SILENT;
- }
+ bind_depth = hwloc_get_type_depth(node->topology->topo, hwb);
#if HWLOC_API_VERSION < 0x20000
- if (HWLOC_OBJ_CACHE == hwm) {
- /* must use a unique function because blasted hwloc
- * just doesn't deal with caches very well...sigh
- */
- map_depth = hwloc_get_cache_type_depth(node->topology->topo, clvm, (hwloc_obj_cache_type_t)-1);
- } else
+ if (0 > bind_depth)
#else
- /* do something with clvm to silence compiler warnings */
- ++clvm;
+ if (0 > bind_depth && HWLOC_TYPE_DEPTH_NUMANODE != bind_depth)
#endif
- map_depth = hwloc_get_type_depth(node->topology->topo, hwm);
- if (0 > map_depth) {
- /* didn't find such an object */
- orte_show_help("help-orte-rmaps-base.txt", "orte-rmaps-base:no-objects",
- true, hwloc_obj_type_string(hwm), node->name);
- return ORTE_ERR_SILENT;
- }
- opal_output_verbose(5, orte_rmaps_base_framework.framework_output,
- "%s bind_depth: %d map_depth %d",
- ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
- bind_depth, map_depth);
- if (bind_depth > map_depth) {
- if (ORTE_SUCCESS != (rc = bind_downwards(jdata, node, hwb, clvl))) {
- ORTE_ERROR_LOG(rc);
- return rc;
- }
- } else {
- if (ORTE_SUCCESS != (rc = bind_upwards(jdata, node, hwb, clvl))) {
- ORTE_ERROR_LOG(rc);
- return rc;
- }
- }
- }
+ {
+ /* didn't find such an object */
+ orte_show_help("help-orte-rmaps-base.txt", "orte-rmaps-base:no-objects",
+ true, hwloc_obj_type_string(hwb), node->name);
+ return ORTE_ERR_SILENT;
+ }
+ opal_output_verbose(5, orte_rmaps_base_framework.framework_output,
+ "%s bind_depth: %d",
+ ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
+ bind_depth);
+ if (ORTE_SUCCESS != (rc = bind_generic(jdata, node, bind_depth))) {
+ ORTE_ERROR_LOG(rc);
+ return rc;
+ }
}
return ORTE_SUCCESS;