From 13e60bd8b4fbf6c59f6ddc2b98f9e8d06a248a0a9759ec7d75171c38b6a01388 Mon Sep 17 00:00:00 2001 From: Nicolas Morey Date: Thu, 5 Sep 2024 10:05:51 +0000 Subject: [PATCH] - Add patches to fix compilation errors with GCC >= 14: - mrail-fix-incompatible-pointer-issues.patch - util-add-missing-include.patch - psm-add-missing-declaration.patch - Refresh 0001-Drop-real128.patch to work with patch -p0 - Switch to autopatch OBS-URL: https://build.opensuse.org/package/show/science:HPC/mvapich2?expand=0&rev=103 --- .gitattributes | 23 + .gitignore | 1 + 0001-Drop-GCC-check.patch | 59 ++ 0001-Drop-Real-16.patch | 281 ++++++ 0001-Drop-real128.patch | 70 ++ _constraints | 11 + _multibuild | 9 + macros.hpc-mvapich2 | 21 + mpivars.csh | 15 + mpivars.sh | 31 + mrail-fix-incompatible-pointer-issues.patch | 56 ++ mvapich2-2.3.7-1.tar.gz | 3 + ...2-allow-building-with-external-hwloc.patch | 70 ++ mvapich2-arm-support.patch | 28 + mvapich2-openpa-add-memory-barriers.patch | 94 ++ mvapich2-s390_get_cycles.patch | 27 + mvapich2.changes | 872 ++++++++++++++++++ mvapich2.spec | 586 ++++++++++++ pass-correct-size-to-snprintf.patch | 103 +++ psm-add-missing-declaration.patch | 20 + reproducible.patch | 110 +++ util-add-missing-include.patch | 20 + 22 files changed, 2510 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 0001-Drop-GCC-check.patch create mode 100644 0001-Drop-Real-16.patch create mode 100644 0001-Drop-real128.patch create mode 100644 _constraints create mode 100644 _multibuild create mode 100644 macros.hpc-mvapich2 create mode 100644 mpivars.csh create mode 100644 mpivars.sh create mode 100644 mrail-fix-incompatible-pointer-issues.patch create mode 100644 mvapich2-2.3.7-1.tar.gz create mode 100644 mvapich2-allow-building-with-external-hwloc.patch create mode 100644 mvapich2-arm-support.patch create mode 100644 mvapich2-openpa-add-memory-barriers.patch create mode 100644 mvapich2-s390_get_cycles.patch create mode 100644 mvapich2.changes create mode 100644 mvapich2.spec create mode 100644 pass-correct-size-to-snprintf.patch create mode 100644 psm-add-missing-declaration.patch create mode 100644 reproducible.patch create mode 100644 util-add-missing-include.patch diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/0001-Drop-GCC-check.patch b/0001-Drop-GCC-check.patch new file mode 100644 index 0000000..71a6f36 --- /dev/null +++ b/0001-Drop-GCC-check.patch @@ -0,0 +1,59 @@ +commit b609280fc0d0f0f5a728b08e874977cb16f921b8 +Author: Nicolas Morey-Chaisemartin +Date: Thu May 2 08:17:42 2019 +0200 + + 0001 Drop GCC check + + Skip GCC badly written GCC check intended for older released that may cause + bugs during future GCC updates + + Signed-off-by: Nicolas Morey-Chaisemartin + +diff --git autogen.sh autogen.sh +index a0b3d897d15b..f13f3ad543f0 100755 +--- autogen.sh ++++ autogen.sh +@@ -516,7 +516,7 @@ fi + + echo_n "Checking for automake version... " + recreate_tmp +-ver=1.15 ++ver=1.13 + cat > .tmp/configure.ac<.tmp/configure.ac + AC_INIT(testver,1.0) + AC_CONFIG_AUX_DIR([m4]) +diff --git src/binding/cxx/buildiface src/binding/cxx/buildiface +index 3afd823c8bd0..9f73c84d7eb8 100755 +--- src/binding/cxx/buildiface ++++ src/binding/cxx/buildiface +@@ -1454,21 +1454,6 @@ sub printDefineChecks { + #endif\n\n"; + } + +- # GCC changed the calling convention between 3.2.3 and 3.4.3 (!!!) +- # check for that +- print $OUTFD " +-// Check for incompatible GCC versions +-// GCC (specifically) g++ changed the calling convention +-// between 3.2.3 and 3.4.3 (!!) Normally such changes +-// should only occur at major releases (e.g., version 3 to 4) +-#ifdef __GNUC__ +-# if __GNUC__ >= \@GNUCXX_VERSION\@ +-# if __GNUC_MINOR__ > 2 && \@GNUCXX_MINORVERSION\@ == 2 +-# error 'Please use the same version of GCC and g++ for compiling MPICH and user MPI programs' +-# endif +-# endif +-#endif\n"; +- + print $OUTFD " + /* + * Because the API is defined, some methods have parameters that are diff --git a/0001-Drop-Real-16.patch b/0001-Drop-Real-16.patch new file mode 100644 index 0000000..2828cc4 --- /dev/null +++ b/0001-Drop-Real-16.patch @@ -0,0 +1,281 @@ +commit 55d03ccf1f3969b185f00e5572c5a0675e000264 +Author: Nicolas Morey-Chaisemartin +Date: Fri Jun 5 10:11:12 2020 +0200 + + 0001 Drop Real(16) + + Real(16) does not work on armv7 + + Signed-off-by: Nicolas Morey-Chaisemartin + +diff --git src/binding/fortran/mpif_h/Makefile.mk src/binding/fortran/mpif_h/Makefile.mk +index d2de6bc779ac..73049dbd9379 100644 +--- src/binding/fortran/mpif_h/Makefile.mk ++++ src/binding/fortran/mpif_h/Makefile.mk +@@ -390,7 +390,6 @@ mpi_f77_sources += src/binding/fortran/mpif_h/sendf.c \ + src/binding/fortran/mpif_h/null_type_copy_fnf.c + mpi_core_sources += src/binding/fortran/mpif_h/fdebug.c \ + src/binding/fortran/mpif_h/setbot.c \ +- src/binding/fortran/mpif_h/fortran_ops.F \ + src/binding/fortran/mpif_h/setbotf.f + mpi_sources += src/binding/fortran/mpif_h/statusf2c.c src/binding/fortran/mpif_h/statusc2f.c + +diff --git src/binding/fortran/mpif_h/buildiface src/binding/fortran/mpif_h/buildiface +index 2b7a77f22c90..9eebc69a4359 100755 +--- src/binding/fortran/mpif_h/buildiface ++++ src/binding/fortran/mpif_h/buildiface +@@ -1045,7 +1045,6 @@ EOT + print MAKEFD < +Date: Fri Jun 5 10:07:37 2020 +0200 + + 0001 Drop real128 + + See https://github.com/pmodels/mpich/issues/4005 + + Signed-off-by: Nicolas Morey-Chaisemartin + +diff --git src/binding/fortran/use_mpi_f08/mpi_f08_types.f90 src/binding/fortran/use_mpi_f08/mpi_f08_types.f90 +index f8b0fa811e01..46bdf6972dde 100644 +--- src/binding/fortran/use_mpi_f08/mpi_f08_types.f90 ++++ src/binding/fortran/use_mpi_f08/mpi_f08_types.f90 +@@ -248,10 +248,8 @@ interface MPI_Sizeof + module procedure MPI_Sizeof_xint64 + module procedure MPI_Sizeof_xreal32 + module procedure MPI_Sizeof_xreal64 +- module procedure MPI_Sizeof_xreal128 + module procedure MPI_Sizeof_xcomplex32 + module procedure MPI_Sizeof_xcomplex64 +- module procedure MPI_Sizeof_xcomplex128 + end interface + + private :: MPI_Sizeof_character +@@ -263,10 +261,8 @@ private :: MPI_Sizeof_xint32 + private :: MPI_Sizeof_xint64 + private :: MPI_Sizeof_xreal32 + private :: MPI_Sizeof_xreal64 +-private :: MPI_Sizeof_xreal128 + private :: MPI_Sizeof_xcomplex32 + private :: MPI_Sizeof_xcomplex64 +-private :: MPI_Sizeof_xcomplex128 + + contains + +@@ -350,16 +346,6 @@ subroutine MPI_Sizeof_xreal64 (x, size, ierror) + ierror = 0 + end subroutine MPI_Sizeof_xreal64 + +-subroutine MPI_Sizeof_xreal128 (x, size, ierror) +- use,intrinsic :: iso_fortran_env, only: real128 +- real(real128),dimension(..) :: x +- integer, intent(out) :: size +- integer, optional, intent(out) :: ierror +- +- size = storage_size(x)/8 +- ierror = 0 +-end subroutine MPI_Sizeof_xreal128 +- + subroutine MPI_Sizeof_xcomplex32 (x, size, ierror) + use,intrinsic :: iso_fortran_env, only: real32 + complex(real32),dimension(..) :: x +@@ -380,16 +366,6 @@ subroutine MPI_Sizeof_xcomplex64 (x, size, ierror) + ierror = 0 + end subroutine MPI_Sizeof_xcomplex64 + +-subroutine MPI_Sizeof_xcomplex128 (x, size, ierror) +- use,intrinsic :: iso_fortran_env, only: real128 +- complex(real128),dimension(..) :: x +- integer, intent(out) :: size +- integer, optional, intent(out) :: ierror +- +- size = storage_size(x)/8 +- ierror = 0 +-end subroutine MPI_Sizeof_xcomplex128 +- + subroutine MPI_Status_f2f08(f_status, f08_status, ierror) + integer, intent(in) :: f_status(MPI_STATUS_SIZE) + type(MPI_Status), intent(out) :: f08_status diff --git a/_constraints b/_constraints new file mode 100644 index 0000000..ae349f9 --- /dev/null +++ b/_constraints @@ -0,0 +1,11 @@ + + + 4 + + 4 + + + 6 + + + \ No newline at end of file diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000..564f8ab --- /dev/null +++ b/_multibuild @@ -0,0 +1,9 @@ + + standard + testsuite + psm2 + psm2-testsuite + gnu-hpc + gnu-hpc-psm2 + gnu-hpc-testsuite + diff --git a/macros.hpc-mvapich2 b/macros.hpc-mvapich2 new file mode 100644 index 0000000..cfcd47e --- /dev/null +++ b/macros.hpc-mvapich2 @@ -0,0 +1,21 @@ +# +# mvapich2 +# + +%hpc_mvapich2_init(V:) \ + %{-V: %define _mf_ver %{-V*}} \ + %{expand: %%global hpc_mvapich2_dep_version %%{?_mf_ver}} \ + %{expand: %%global hpc_mvapich2_dir mvapich2} \ + %global hpc_mvapich2_pack_version %{hpc_mvapich2_dep_version} \ + %{expand: %%global _hpc_mvapich2_modules mvapich2} + +# We may have to add a version here. +%hpc_setup_mvapich2 \ + module load mvapich2 + +%hpc_mvapich2_requires \ +Requires: mvapich2%{hpc_mvapich2_dep_version}-%{hpc_compiler_family}%{hpc_cf_pack_version}-hpc + +%hpc_mvapich2_requires_devel \ +Requires: mvapich2%{hpc_mvapich2_dep_version}-%{hpc_compiler_family}%{hpc_cf_pack_version}-hpc-devel + diff --git a/mpivars.csh b/mpivars.csh new file mode 100644 index 0000000..5c7f4a3 --- /dev/null +++ b/mpivars.csh @@ -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 diff --git a/mpivars.sh b/mpivars.sh new file mode 100644 index 0000000..c8317da --- /dev/null +++ b/mpivars.sh @@ -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 diff --git a/mrail-fix-incompatible-pointer-issues.patch b/mrail-fix-incompatible-pointer-issues.patch new file mode 100644 index 0000000..0d4eb57 --- /dev/null +++ b/mrail-fix-incompatible-pointer-issues.patch @@ -0,0 +1,56 @@ +commit 0b2339b6c8d2221a0db1e2f00b87025c7aac4fb7 +Author: Nicolas Morey +Date: Thu Sep 5 08:51:06 2024 +0200 + + mrail: fix incompatible pointer issues + + GCC 14 is complaining about incompatible pointer types. + Fix the function definition so quiet them. + + Signed-off-by: Nicolas Morey + +diff --git src/mpid/ch3/channels/mrail/src/gen2/ofed_abstraction.h src/mpid/ch3/channels/mrail/src/gen2/ofed_abstraction.h +index 07190c5177e6..36462b6bbd64 100644 +--- src/mpid/ch3/channels/mrail/src/gen2/ofed_abstraction.h ++++ src/mpid/ch3/channels/mrail/src/gen2/ofed_abstraction.h +@@ -191,10 +191,11 @@ typedef struct _rdma_ops_t { + int (*get_cm_event)(struct rdma_event_channel *channel, + struct rdma_cm_event **event); + int (*ack_cm_event)(struct rdma_cm_event *event); +- int (*getaddrinfo) (char *node, char *service, struct rdma_addrinfo *hints, +- struct rdma_addrinfo **res); +- int (*freeaddrinfo)(struct rdma_addrinfo *res); +- char* (*event_str)(enum rdma_cm_event_type event); ++ int (*getaddrinfo) (const char *node, const char *service, ++ const struct rdma_addrinfo *hints, ++ struct rdma_addrinfo **res); ++ void (*freeaddrinfo)(struct rdma_addrinfo *res); ++ const char* (*event_str)(enum rdma_cm_event_type event); + struct ibv_context** (*get_devices) (int *num_devices); + void (*free_devices) (struct ibv_context **list); + } rdma_ops_t; +@@ -208,13 +209,13 @@ extern void *rdma_dl_handle; + typedef struct _umad_ops_t { + int (*init)(void); + int (*done)(void); +- int (*get_ca)(char *ca_name, umad_ca_t *ca); ++ int (*get_ca)(const char *ca_name, umad_ca_t *ca); + int (*release_ca)(umad_ca_t *ca); + void* (*get_mad)(void *umad); + int (*send)(int portid, int agentid, void *umad, int length, + int timeout_ms, int retries); + int (*recv)(int portid, void *umad, int *length, int timeout_ms); +- int (*open_port)(char *ca_name, int portnum); ++ int (*open_port)(const char *ca_name, int portnum); + int (*close_port)(int portid); + int (*u_register)(int portid, int mgmt_class, int mgmt_version, + uint8_t rmpp_version, long method_mask[16 / sizeof(long)]); +@@ -309,7 +310,7 @@ do { \ + #else + #define MV2_DLSYM(_struct_, _handle_, _prefix_, _function_) \ + do { \ +- _struct_._function_ = _prefix_##_##_function_; \ ++ _struct_._function_ = (void*)_prefix_##_##_function_; \ + } while (0) + #endif + diff --git a/mvapich2-2.3.7-1.tar.gz b/mvapich2-2.3.7-1.tar.gz new file mode 100644 index 0000000..d416b28 --- /dev/null +++ b/mvapich2-2.3.7-1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdd971cf36d6476d007b5d63d19414546ca8a2937b66886f24a1d9ca154634e4 +size 21139377 diff --git a/mvapich2-allow-building-with-external-hwloc.patch b/mvapich2-allow-building-with-external-hwloc.patch new file mode 100644 index 0000000..3acc4b4 --- /dev/null +++ b/mvapich2-allow-building-with-external-hwloc.patch @@ -0,0 +1,70 @@ +commit 2a05bb1eba231f7b95ddb3fdeec21146b99e43f1 +Author: Nicolas Morey-Chaisemartin +Date: Wed Jul 6 15:21:38 2022 +0200 + + mvapich2: allow building with external hwloc + + Signed-off-by: Nicolas Morey-Chaisemartin + +diff --git Makefile.am Makefile.am +index 17788bb3ba49..c8cfeb941de7 100644 +--- Makefile.am ++++ Makefile.am +@@ -203,9 +203,11 @@ if BUILD_OSU_MVAPICH + if BUILD_HWLOC_v1 + SUBDIRS += contrib/hwloc_v1 + else ++if BUILD_HWLOC_v2 + SUBDIRS += contrib/hwloc_v2 + endif + endif ++endif + + # build the current directory and then the examples directory after everything else + SUBDIRS += . examples +@@ -222,8 +224,12 @@ if BUILD_HWLOC_v1 + AM_CPPFLAGS += -Icontrib/hwloc_v1/include/ -I$(top_srcdir)/contrib/hwloc_v1/include + lib_lib@MPILIBNAME@_la_LIBADD += contrib/hwloc_v1/src/libhwloc_embedded.la + else ++if BUILD_HWLOC_v2 + AM_CPPFLAGS += -Icontrib/hwloc_v2/include/ -I$(top_srcdir)/contrib/hwloc_v2/include +-lib_lib@MPILIBNAME@_la_LIBADD += contrib/hwloc_v2/hwloc/libhwloc_embedded.la ++lib_lib@MPILIBNAME@_la_LIBADD += contrib/hwloc_v2/src/libhwloc_embedded.la ++else ++lib_lib@MPILIBNAME@_la_LDFLAGS += -lhwloc ++endif + endif + endif + +diff --git configure.ac configure.ac +index d073cb1bef5e..b82de7a9a5fb 100644 +--- configure.ac ++++ configure.ac +@@ -539,18 +539,24 @@ dnl based on the environment. + AC_ARG_WITH(hwloc, + AC_HELP_STRING([--with-hwloc=version], + [Specify the hwloc version to use with MVAPICH2 +- (Options: v1, v2) (Default: v1)]),, ++ (Options: v1, v2, external) (Default: v1)]),, + with_hwloc=v1) + + AM_CONDITIONAL([BUILD_HWLOC_v1], [test x$with_hwloc = xv1]) + AM_CONDITIONAL([BUILD_HWLOC_v2], [test x$with_hwloc = xv2]) ++AM_CONDITIONAL([BUILD_HWLOC_EXT], [test x$with_hwloc = xexternal]) + + if test "$with_hwloc" = "v1" ; then + AC_CONFIG_SUBDIRS([contrib/hwloc_v1]) + AC_DEFINE([_USE_HWLOC_V1_], 1, [Define when using HWLOC V1]) + else +- AC_CONFIG_SUBDIRS([contrib/hwloc_v2]) +- AC_DEFINE([_USE_HWLOC_V2_], 1, [Define when using HWLOC V2]) ++ if test "$with_hwloc" = "v2" ; then ++ AC_CONFIG_SUBDIRS([contrib/hwloc_v2]) ++ AC_DEFINE([_USE_HWLOC_V2_], 1, [Define when using HWLOC V2]) ++ else ++ AC_DEFINE([_USE_HWLOC_EXT_], 1, [Define when using HWLOC External]) ++ AC_DEFINE([_USE_HWLOC_V2_], 1, [Define when using HWLOC V2]) ++ fi + fi + + AC_ARG_WITH(device, diff --git a/mvapich2-arm-support.patch b/mvapich2-arm-support.patch new file mode 100644 index 0000000..961ea3b --- /dev/null +++ b/mvapich2-arm-support.patch @@ -0,0 +1,28 @@ +commit 55640b711726705a0127eb7ce767ef69e7642790 +Author: Nicolas Morey-Chaisemartin +Date: Thu Jun 8 15:14:01 2017 +0200 + + mvapich2 arm support + + Signed-off-by: Nicolas Morey-Chaisemartin + +diff --git src/mpid/ch3/channels/common/include/mv2_clock.h src/mpid/ch3/channels/common/include/mv2_clock.h +index af8bb2b77d08..b73a4ffa2fc0 100644 +--- src/mpid/ch3/channels/common/include/mv2_clock.h ++++ src/mpid/ch3/channels/common/include/mv2_clock.h +@@ -92,7 +92,14 @@ static inline cycles_t get_cycles() + + return ret; + } +- ++#elif defined(__ARM_ARCH_7A__) ++typedef unsigned long long cycles_t; ++static inline cycles_t get_cycles(void) ++{ ++ cycles_t clk; ++ asm volatile("mrrc p15, 0, %Q0, %R0, c14" : "=r" (clk)); ++ return clk; ++} + #elif defined(__s390__) || defined(__s390x__) + typedef unsigned long cycles_t; + static inline cycles_t get_cycles() diff --git a/mvapich2-openpa-add-memory-barriers.patch b/mvapich2-openpa-add-memory-barriers.patch new file mode 100644 index 0000000..8a09c28 --- /dev/null +++ b/mvapich2-openpa-add-memory-barriers.patch @@ -0,0 +1,94 @@ +commit 68c4106b2a8d8fdb9ba4e2bab90e90e3392b6bbd +Author: Nicolas Morey +Date: Thu Oct 26 12:39:20 2023 +0200 + + mvapich2: openpa: add memory barriers + + Backport from openPA: + commit 28d602b620b5d7ec8ca1a7f3ad8ab27d439b1751 + Author: Neil Fortner + Date: Wed Dec 19 13:14:57 2012 -0600 + + Add more memory barriers to LL/SC ABA tests. This should fix the recent errors + on POWER7. + + Reviewed by goodell. + + Signed-off-by: Nicolas Morey + +diff --git src/openpa/test/test_primitives.c src/openpa/test/test_primitives.c +index a83b95e00578..4533c643d581 100644 +--- src/openpa/test/test_primitives.c ++++ src/openpa/test/test_primitives.c +@@ -3783,12 +3783,18 @@ static int threaded_llsc_int_aba_helper_0(llsc_int_aba_t *udata) + nerrors++; + } /* end if */ + ++ /* Make sure shared_val is initialized before passing point 0 */ ++ OPA_write_barrier(); ++ + /* Point 0 */ + OPA_store_int(&udata->pass_point_0, 1); + + /* Wait until thread 1 passes point 1 */ + while(!OPA_load_int(&udata->pass_point_1)); + ++ /* Make sure that change_val is loaded after passing point 1 */ ++ OPA_read_barrier(); ++ + /* Store conditional 1 to the shared value */ + if(OPA_SC_int(&udata->shared_val, 1)) { + /* SC succeeded, make sure that the shared value was not changed by +@@ -3870,12 +3876,12 @@ static void *threaded_llsc_int_aba_helper_1(void *_udata) + * of this test */ + OPA_store_int(&udata->shared_val, 1); + OPA_store_int(&udata->shared_val, 0); +- +- /* Write barrier to make sure the shared value was actually updated +- * before we mark point 1 as passed */ +- OPA_write_barrier(); + } /* end if */ + ++ /* Write barrier to make sure the shared_val (if appropriate) and ++ * change_val are actually updated before we mark point 1 as passed */ ++ OPA_write_barrier(); ++ + /* Point 1 */ + OPA_store_int(&udata->pass_point_1, 1); + +@@ -4012,12 +4018,18 @@ static int threaded_llsc_ptr_aba_helper_0(llsc_ptr_aba_t *udata) + nerrors++; + } /* end if */ + ++ /* Make sure shared_val is initialized before passing point 0 */ ++ OPA_write_barrier(); ++ + /* Point 0 */ + OPA_store_int(&udata->pass_point_0, 1); + + /* Wait until thread 1 passes point 1 */ + while(!OPA_load_int(&udata->pass_point_1)); + ++ /* Make sure that change_val is loaded after passing point 1 */ ++ OPA_read_barrier(); ++ + /* Store conditional 1 to the shared value */ + if(OPA_SC_ptr(&udata->shared_val, (void *) ((int *) 0 + 1))) { + /* SC succeeded, make sure that the shared value was not changed by +@@ -4099,12 +4111,12 @@ static void *threaded_llsc_ptr_aba_helper_1(void *_udata) + * of this test */ + OPA_store_ptr(&udata->shared_val, (void *) ((int *) 0 + 1)); + OPA_store_ptr(&udata->shared_val, (void *) 0); +- +- /* Write barrier to make sure the shared value was actually updated +- * before we mark point 1 as passed */ +- OPA_write_barrier(); + } /* end if */ + ++ /* Write barrier to make sure the shared_val (if appropriate) and ++ * change_val are actually updated before we mark point 1 as passed */ ++ OPA_write_barrier(); ++ + /* Point 1 */ + OPA_store_int(&udata->pass_point_1, 1); + diff --git a/mvapich2-s390_get_cycles.patch b/mvapich2-s390_get_cycles.patch new file mode 100644 index 0000000..69037a4 --- /dev/null +++ b/mvapich2-s390_get_cycles.patch @@ -0,0 +1,27 @@ +commit 92d5b11beaf8919979705f44d56eb0569feceb93 +Author: Nicolas Morey-Chaisemartin +Date: Thu Jun 8 15:11:12 2017 +0200 + + mvapich2-s390_get_cycles + + Signed-off-by: Nicolas Morey-Chaisemartin + +diff --git src/mpid/ch3/channels/common/include/mv2_clock.h src/mpid/ch3/channels/common/include/mv2_clock.h +index dba8e51bf129..af8bb2b77d08 100644 +--- src/mpid/ch3/channels/common/include/mv2_clock.h ++++ src/mpid/ch3/channels/common/include/mv2_clock.h +@@ -93,6 +93,14 @@ static inline cycles_t get_cycles() + return ret; + } + ++#elif defined(__s390__) || defined(__s390x__) ++typedef unsigned long cycles_t; ++static inline cycles_t get_cycles() ++{ ++ unsigned long clk; ++ asm volatile("stck %0" : "=Q" (clk) : : "cc"); ++ return clk >> 2; ++} + #else + #warning get_cycles not implemented for this architecture: attempt asm/timex.h + #include diff --git a/mvapich2.changes b/mvapich2.changes new file mode 100644 index 0000000..799aacd --- /dev/null +++ b/mvapich2.changes @@ -0,0 +1,872 @@ +------------------------------------------------------------------- +Thu Sep 5 07:24:42 UTC 2024 - Nicolas Morey + +- Add patches to fix compilation errors with GCC >= 14: + - mrail-fix-incompatible-pointer-issues.patch + - util-add-missing-include.patch + - psm-add-missing-declaration.patch +- Refresh 0001-Drop-real128.patch to work with patch -p0 +- Switch to autopatch + +------------------------------------------------------------------- +Tue Jun 25 13:22:53 UTC 2024 - Nicolas Morey + +- Disable 32b builds of hpc flavours. +- Remove obsolete dependency to sysfsutils + +------------------------------------------------------------------- +Thu Feb 22 11:49:03 UTC 2024 - pgajdos@suse.com + +- Use %patch -P N instead of deprecated %patchN. + +------------------------------------------------------------------- +Thu Oct 26 10:42:07 UTC 2023 - Nicolas Morey + +- Add mvapich2-openpa-add-memory-barriers.patch to fix testsuite issue + on pcc64 (bsc#1216610, bsc#1216612) + +------------------------------------------------------------------- +Mon Aug 7 16:57:40 UTC 2023 - Nicolas Morey + +- Drop support for obsolete TrueScale (bsc#1212146) + +------------------------------------------------------------------- +Mon Dec 5 21:11:29 UTC 2022 - Stefan Brüns + +- Reduce constraints to match the actual requirement. Exaggerating + the requirements hurts both this package (time until build can + start) as well as other OBS users (blocking large workers + without need). +- Use a reproducible timestamp instead of removing it altogether. + +------------------------------------------------------------------- +Mon Nov 28 08:30:49 UTC 2022 - Nicolas Morey-Chaisemartin + +- Update reproducible.patch to remove timestamp generated at compilation time + +------------------------------------------------------------------- +Wed Jul 6 15:08:09 UTC 2022 - Nicolas Morey-Chaisemartin + +- Add mvapich2-allow-building-with-external-hwloc.patch + to allow building against an external hwloc library +- Build mvapich2 HPC flavors against pmix and hwloc system libraries + +------------------------------------------------------------------- +Wed Jun 29 12:54:33 UTC 2022 - Klaus Kämpf + +- add pass-correct-size-to-snprintf.patch to fix potential buffer + overflows (required to make 'sundials' testsuite pass) + +- Update to mvapich2 2.3.7 + * Features and Enhancements (since 2.3.6): + - Added support for systems with Rockport's switchless networks + * Added automatic architecture detection + * Optimized performance for point-to-point operations + - Added support for the Cray Slingshot 10 interconnect + - Enhanced support for blocking collective offload using + Mellanox SHARP + * Scatter and Scatterv + - Enhanced support for non-blocking collective offload using + Mellanox SHARP + * Iallreduce, Ibarrier, Ibcast, and Ireduce + + * Bug Fixes (since 2.3.6): + - Removed several deprectated functions + - Thanks to Honggang Li @RedHat for the report + - Fixed a bug where tools like CMake FindMPI would not + detect MVAPICH when compiled without Hydra mpiexec + - Thanks to Chris Chambreau and Adam Moody @LLNL for the report + - Fixed compilation error when building with mpirun and without hydra + - Thanks to James Long @University of Illinois for the report + - Fixed issue with setting RoCE mode correctly without RDMA_CM. + - Thanks to Nicolas Gagnon @Rockport Networks for the report + - Fixed an issue on heterogeneous clusters where QP attributes were + set incorrectly + - Thanks to X-ScaleSolutions for the report and fix + - Fixed a memory leak in improbe on the PSM channel + - Thanks to Gregory Lee @LLNL Beichuan Yan @University of Colorado + for the report + - Added retry logic for PSM connection establishment + - Thanks to Gregory Lee @LLNL for the report and X-ScaleSolutions + for the patch + - Fixed an initialization error when using PSM and gcc's -pg option + - Thanks to Gregory Lee @LLNL for the report and X-ScaleSolutions for + the patch + - Fixed a potential integer overflow when transfering large arrays + - Thanks to Alexander Melnikov for the report and patch + +- Fix Url: link + +------------------------------------------------------------------- +Wed Feb 16 11:07:12 UTC 2022 - Nicolas Morey-Chaisemartin + +- Disable dlopen for verbs library (bsc#1196019) + +------------------------------------------------------------------- +Tue Oct 19 15:20:53 UTC 2021 - Nicolas Morey-Chaisemartin + +- Move rpm macros to %_rpmmacrodir (bsc#1191386) + +------------------------------------------------------------------- +Tue Sep 28 07:20:18 UTC 2021 - Nicolas Morey-Chaisemartin + +- Remove obsolete python dependency (bsc#1190996) + +------------------------------------------------------------------- +Tue May 18 08:08:52 UTC 2021 - Nicolas Morey-Chaisemartin + +- Update to mvapich2 2.3.6 + - Enhanced performance for UD-Hybrid code + - Add multi-rail support for UD-Hybrid code + - Enhanced performance for shared-memory collectives + - Enhanced job-startup performance for flux job launcher + - Use PMI2 by default when SLURM is selected as process manager + - Add support to use aligned memory allocations for multi-threaded + applications + - Architecture detection and enhanced point-to-point tuning for + Oracle BM.HPC2 cloud shape + - Add support for GCC compiler v11 + - Update hwloc v1 code to v1.11.14 + - Update hwloc v2 code to v2.4.2 +- Drop obsolete patches: + - fix-missing-return-code.patch as it was fixed upstream + - mvapich2-remove-deprecated-sys_siglist.patch + - rdma_find_network_type-return-MV2_NETWORK_CLASS_UNKNOWN-when-dev_list-is-freed.patch +- Refresh reproducible.patch + +------------------------------------------------------------------- +Wed Mar 24 10:06:26 UTC 2021 - Egbert Eich + +- Update mvapich2 to 2.3.5. + * Enhanced performance for MPI_Allreduce and MPI_Barrier + * Support collective offload using Mellanox's SHARP for Barrier + - Enhanced tuning framework for Barrier using SHARP + * Remove dependency on underlying libibverbs, libibmad, libibumad, and + librdmacm libraries using dlopen + * Add support for Broadcom NetXtreme RoCE HCA + - Enhanced inter-node point-to-point support + * Support architecture detection for Fujitsu A64fx processor + * Enhanced point-to-point and collective tuning for Fujitsu A64fx processor + * Enhanced point-to-point and collective tuning for AMD ROME processor + * Add support for process placement aware HCA selection + - Add "MV2_PROCESS_PLACEMENT_AWARE_HCA_MAPPING" environment variable to + enable process placement aware HCA mapping + * Add support to auto-detect RoCE HCAs and auto-detect GID index + * Add support to use RoCE/Ethernet and InfiniBand HCAs at the same time + * Add architecture-specific flags to improve performance of certain CUDA + operations + - Thanks to Chris Chambreau @LLNL for the report + * Read MTU and maximum outstanding RDMA operations from the device + * Improved performance and scalability for UD-based communication + * Update maximum HCAs supported by default from 4 to 10 + * Enhanced collective tuning for Frontera@TACC, Expanse@SDSC, + Ookami@StonyBrook, and bb5@EPFL + * Enhanced support for SHARP v2.1.0 + * Generalize code for GPU support +- Obsolete: wrapper-revert-ldflag-order-change.patch. +- Replace: mvapich2-fix-double-free.patch by + rdma_find_network_type-return-MV2_NETWORK_CLASS_UNKNOWN-when-dev_list-is-freed.patch + +------------------------------------------------------------------- +Thu Feb 18 04:46:04 UTC 2021 - Nicolas Morey-Chaisemartin + +- Re-add mvapich2-fix-double-free.patch as the bug was + somehow be reintroduced (bsc#1144000) +- Add mvapich2-remove-deprecated-sys_siglist.patch to + fix compilation errors with newer glibc + +------------------------------------------------------------------- +Sun Nov 29 13:44:44 UTC 2020 - Egbert Eich + +- HPC: Fix environment module settings for MANPATH. + +------------------------------------------------------------------- +Sat Jul 25 07:03:57 UTC 2020 - Egbert Eich + +- For HPC builds check for gnu compiler suite version >= 10 and + set -fallow-argument-mismatch. + +------------------------------------------------------------------- +Thu Jul 23 15:53:00 UTC 2020 - Egbert Eich + +- Add build support for gcc8/9/10 to HPC build (bsc#1174439). + +------------------------------------------------------------------- +Wed Jun 3 08:13:07 UTC 2020 - Nicolas Morey-Chaisemartin + +- Update so mvapich2 2.3.4 + - See CHANGELOG for fixes and new features +- Add fix-missing-return-code.patch to fix compilation errors +- Add 0001-Drop-Real-16.patch to disable Real(16) support on Armv7 +- Add wrapper-revert-ldflag-order-change.patch to revert LDFLAGS order + change done in 2.3.4. + This allows legacy builds to work without adding a -lmpi flag + +------------------------------------------------------------------- +Tue Jan 21 08:17:00 UTC 2020 - Nicolas Morey-Chaisemartin + +- Update to mvapich2 2.3.3 (jsc#SLE-8497) + - See CHANGELOG for fixes and new features + +------------------------------------------------------------------- +Fri Sep 6 08:10:21 UTC 2019 - Nicolas Morey-Chaisemartin + +- Update to mvapich2 2.3.2 (jsc#SLE-8544) + - See CHANGELOG for fixes and new features +- Drop mvapich2-make-sure-ibv_get_device_list-returned-one-before-freeing-it.patch + as it was fixed upstream. +- Use FAT LTO objects in order to provide proper static library. +- Add 0001-Drop-real128.patch to fix compilation on armv7 + +------------------------------------------------------------------- +Fri Aug 2 08:56:21 UTC 2019 - Nicolas Morey-Chaisemartin + +- Add mvapich2-make-sure-ibv_get_device_list-returned-one-before-freeing-it.patch + to Fix segfault when ib_uverbs is not loaded (bsc#1144000) + + +------------------------------------------------------------------- +Mon May 27 15:14:10 UTC 2019 - Bernhard Wiedemann + +- Add reproducible.patch to sort readdir to make package build reproducible + (boo#1041090) + +------------------------------------------------------------------- +Mon May 13 07:59:22 UTC 2019 - Nicolas Morey-Chaisemartin + +- Update to mvapich2 2.3.1 + - See CHANGELOG for fixes and new features +- Refreshed patches against the new version: + - 0001-Drop-GCC-check.patch + - mvapich2-arm-support.patch + - mvapich2-s390_get_cycles.patch +- Drop mvapich2-fix-double-free.patch as it was merged upstream + +------------------------------------------------------------------- +Thu May 2 08:00:51 UTC 2019 - Nicolas Morey-Chaisemartin + +- Add mvapich2-fix-double-free.patch to fix a segfault + when running on a machine with no RDMA hardware (bsc#1133797) + +------------------------------------------------------------------- +Wed Mar 20 19:01:00 UTC 2019 - Ana Guerrero Lopez + +- Add patch to remove obsolete GCC check (bnc#1129421). It also patches + autogen.sh to get the autotools working in SLE12SP4. + * 0001-Drop-GCC-check.patch +- Force to re-run autotools to generate properly the files after + patching src/binding/cxx/buildiface + +------------------------------------------------------------------- +Sun Nov 18 14:21:27 UTC 2018 - eich@suse.com + +- Add macro _hpc_mvapich2_modules for modules support (bsc#1116458). + +------------------------------------------------------------------- +Mon Sep 10 12:15:10 UTC 2018 - nmoreychaisemartin@suse.com + +- Remove bashism in postun scriptlet + +------------------------------------------------------------------- +Wed Sep 5 06:54:33 UTC 2018 - nmoreychaisemartin@suse.com + +- Fix handling of mpi-selector during updates (bsc#1098653) + +------------------------------------------------------------------- +Sun Aug 19 09:21:45 UTC 2018 - eich@suse.com + +- macros.hpc-mvapich2: + replace %%compiler_family by %%hpc_compiler_family + +------------------------------------------------------------------- +Mon Jul 16 16:13:32 UTC 2018 - msuchanek@suse.com + +- Use sched_yield instead of pthread_yield (boo#1102421). + - drop mvapich2-pthread_yield.patch + +------------------------------------------------------------------- +Mon Jun 18 13:12:15 UTC 2018 - nmoreychaisemartin@suse.com + +- Add missing bsc and fate references to changelog + +------------------------------------------------------------------- +Tue Jun 12 07:07:37 UTC 2018 - nmoreychaisemartin@suse.com + +- Disable HPC builds for SLE12 (fate#323655) + +------------------------------------------------------------------- +Sun Mar 25 13:07:18 UTC 2018 - kasimir_@outlook.de + +- Change mvapich2-arm-support.patch to provide missing functions for + armv6hl + +------------------------------------------------------------------- +Fri Feb 9 11:29:26 UTC 2018 - cgoll@suse.com + +- Fix summary in module files (bnc#1080259) + +------------------------------------------------------------------- +Tue Jan 30 20:04:01 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). + +------------------------------------------------------------------- +Fri Jan 5 19:03:44 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). + +------------------------------------------------------------------- +Fri Oct 6 14:06:37 UTC 2017 - nmoreychaisemartin@suse.com + +- Add conflicts between the macros-devel packages + +------------------------------------------------------------------- +Thu Oct 5 13:30:48 UTC 2017 - nmoreychaisemartin@suse.com + +- Add BuildRequires to libibmad-devel for older release (SLE <= 12.2, Leap <= 42.2) + +------------------------------------------------------------------- +Fri Sep 12 15:38:14 UTC 2017 - eich@suse.com + +- Add HPC specific build targets using environment modules + (FATE#321712). + +------------------------------------------------------------------- +Tue Sep 12 09:25:01 UTC 2017 - nmoreychaisemartin@suse.com + +- Drop unnecessary dependency to xorg-x11-devel + +------------------------------------------------------------------- +Mon Sep 11 09:19:37 UTC 2017 - nmoreychaisemartin@suse.com + +- Only requires verbs libraries for verbs build. + libibverbs devel causes a SEGV when run in a chroot using the + psm or psm2 conduits +- Add testuite packages for all build flavours + +------------------------------------------------------------------- +Thu Jul 13 14:59:13 UTC 2017 - nmoreychaisemartin@suse.com + +- Add LD_LIBRARY_PATH to mpivars.sh and mpivars.csh + +------------------------------------------------------------------- +Thu Jul 13 07:54:38 UTC 2017 - nmoreychaisemartin@suse.com + +- Disable rpath in pkgconfig files + +------------------------------------------------------------------- +Wed Jul 5 15:12:46 UTC 2017 - nmoreychaisemartin@suse.com + +- Remove redondant configure options already passed by %configure + +------------------------------------------------------------------- +Mon Jun 26 12:24:30 UTC 2017 - nmoreychaisemartin@suse.com + +- Change install dir to allow multiple flavor to be installed + at the same time (bsc#934090) +- Fix bsc#1045955 + - Fix mvapich2-psm package to use libpsm (TrueScale) + - Add mvapich2-psm2 package using libpsm2 (OmniPath) + +------------------------------------------------------------------- +Mon Jun 26 09:37:42 UTC 2017 - nmoreychaisemartin@suse.com + +- Use _multibuild to build the various mvapich2-flavours + +------------------------------------------------------------------- +Fri Jun 23 15:40:51 UTC 2017 - nmoreychaisemartin@suse.com + +- Replace dependency from libibmad-devel to infiniband-diags-devel + +------------------------------------------------------------------- +Wed Jun 14 10:01:07 UTC 2017 - nmoreychaisemartin@suse.com + +- Have mvapich2 and mvapich2-psm conflicts between them +- Cleanup spec file +- Remove mvapich2-testsuite RPM + +------------------------------------------------------------------- +Thu Jun 8 13:55:32 UTC 2017 - nmoreychaisemartin@suse.com + +- Reenable arm compilation +- Rename and cleanup mvapich-s390_get_cycles.patch to + mvapich2-s390_get_cycles.patch for coherency +- Cleanup mvapich2-pthread_yield.patch +- Add mvapich2-arm-support.patch to provide missing functions for + armv7hl and aarch64 + +------------------------------------------------------------------- +Thu Jun 8 11:38:36 UTC 2017 - nmoreychaisemartin@suse.com + +- Remove version dependencies to libibumad, libibverbs and librdmacm + +------------------------------------------------------------------- +Tue May 16 16:29:41 UTC 2017 - nmoreychaisemartin@suse.com + +- Fix mvapich2-testsuite packaging +- Disable build on armv7 + +------------------------------------------------------------------- +Wed Mar 29 08:06:23 CEST 2017 - pth@suse.de + +- Make dependencies on libs now coming from rdma-core versioned. + +------------------------------------------------------------------- +Tue Nov 29 13:08:18 CET 2016 - pth@suse.de + +- Create environment module (bsc#1004628). + +------------------------------------------------------------------- +Wed Nov 23 11:00:43 CET 2016 - pth@suse.de + +- Fix URL. +- Update to mvapich 2.2 GA. Changes since rc1: + MVAPICH2 2.2 (09/07/2016) + + * Features and Enhancements (since 2.2rc2): + - Single node collective tuning for Bridges@PSC, Stampede@TACC and other + architectures + - Enable PSM builds when both PSM and PSM2 libraries are present + - Add support for HCAs that return result of atomics in big endian notation + - Establish loopback connections by default if HCA supports atomics + * Bug Fixes (since 2.2rc2): + - Fix minor error in use of communicator object in collectives + - Fix missing u_int64_t declaration with PGI compilers + - Fix memory leak in RMA rendezvous code path + + MVAPICH2 2.2rc2 (08/08/2016) + + * Features and Enhancements (since 2.2rc1): + - Enhanced performance for MPI_Comm_split through new bitonic algorithm + - Enable graceful fallback to Shared Memory if LiMIC2 or CMA transfer fails + - Enable support for multiple MPI initializations + - Unify process affinity support in Gen2, PSM and PSM2 channels + - Remove verbs dependency when building the PSM and PSM2 channels + - Allow processes to request MPI_THREAD_MULTIPLE when socket or NUMA node + level affinity is specified + - Point-to-point and collective performance optimization for Intel Knights + Landing + - Automatic detection and tuning for InfiniBand EDR HCAs + - Warn user to reconfigure library if rank type is not large enough to + represent all ranks in job + - Collective tuning for Opal@LLNL, Bridges@PSC, and Stampede-1.5@TACC + - Tuning and architecture detection for Intel Broadwell processors + - Add ability to avoid using --enable-new-dtags with ld + - Add LIBTVMPICH specific CFLAGS and LDFLAGS + + * Bug Fixes (since 2.2rc1): + - Disable optimization that removes use of calloc in ptmalloc hook + detection code + - Fix weak alias typos (allows successful compilation with CLANG compiler) + - Fix issues in PSM large message gather operations + - Enhance error checking in collective tuning code + - Fix issues with UD based communication in RoCE mode + - Fix issues with PMI2 support in singleton mode + - Fix default binding bug in hydra launcher + - Fix issues with Checkpoint Restart when launched with mpirun_rsh + - Fix fortran binding issues with Intel 2016 compilers + - Fix issues with socket/NUMA node level binding + - Disable atomics when using Connect-IB with RDMA_CM + - Fix hang in MPI_Finalize when using hybrid channel + - Fix memory leaks + +------------------------------------------------------------------- +Tue Nov 15 14:04:50 CET 2016 - pth@suse.de + +- Update to version 2.2rc1 (fate#319240). Changes since 2.1: + + MVAPICH2 2.2rc1 (03/29/2016) + +* Features and Enhancements (since 2.2b): + - Support for OpenPower architecture + - Optimized inter-node and intra-node communication + - Support for Intel Omni-Path architecture + - Thanks to Intel for contributing the patch + - Introduction of a new PSM2 channel for Omni-Path + - Support for RoCEv2 + - Architecture detection for PSC Bridges system with Omni-Path + - Enhanced startup performance and reduced memory footprint for storing + InfiniBand end-point information with SLURM + - Support for shared memory based PMI operations + - Availability of an updated patch from the MVAPICH project website + with this support for SLURM installations + - Optimized pt-to-pt and collective tuning for Chameleon InfiniBand + systems at TACC/UoC + - Enable affinity by default for TrueScale(PSM) and Omni-Path(PSM2) + channels + - Enhanced tuning for shared-memory based MPI_Bcast + - Enhanced debugging support and error messages + - Update to hwloc version 1.11.2 + +* Bug Fixes (since 2.2b): + - Fix issue in some of the internal algorithms used for MPI_Bcast, + MPI_Alltoall and MPI_Reduce + - Fix hang in one of the internal algorithms used for MPI_Scatter + - Thanks to Ivan Raikov@Stanford for reporting this issue + - Fix issue with rdma_connect operation + - Fix issue with Dynamic Process Management feature + - Fix issue with de-allocating InfiniBand resources in blocking mode + - Fix build errors caused due to improper compile time guards + - Thanks to Adam Moody@LLNL for the report + - Fix finalize hang when running in hybrid or UD-only mode + - Thanks to Jerome Vienne@TACC for reporting this issue + - Fix issue in MPI_Win_flush operation + - Thanks to Nenad Vukicevic for reporting this issue + - Fix out of memory issues with non-blocking collectives code + - Thanks to Phanisri Pradeep Pratapa and Fang Liu@GaTech for + reporting this issue + - Fix fall-through bug in external32 pack + - Thanks to Adam Moody@LLNL for the report and patch + - Fix issue with on-demand connection establishment and blocking mode + - Thanks to Maksym Planeta@TU Dresden for the report + - Fix memory leaks in hardware multicast based broadcast code + - Fix memory leaks in TrueScale(PSM) channel + - Fix compilation warnings + +MVAPICH2 2.2b (11/12/2015) + +* Features and Enhancements (since 2.2a): + - Enhanced performance for small messages + - Enhanced startup performance with SLURM + - Support for PMIX_Iallgather and PMIX_Ifence + - Support to enable affinity with asynchronous progress thread + - Enhanced support for MPIT based performance variables + - Tuned VBUF size for performance + - Improved startup performance for QLogic PSM-CH3 channel + - Thanks to Maksym Planeta@TU Dresden for the patch + +* Bug Fixes (since 2.2a): + - Fix issue with MPI_Get_count in QLogic PSM-CH3 channel with very large + messages (>2GB) + - Fix issues with shared memory collectives and checkpoint-restart + - Fix hang with checkpoint-restart + - Fix issue with unlinking shared memory files + - Fix memory leak with MPIT + - Fix minor typos and usage of inline and static keywords + - Thanks to Maksym Planeta@TU Dresden for the patch and suggestions + - Fix missing MPIDI_FUNC_EXIT + - Thanks to Maksym Planeta@TU Dresden for the patch + - Remove unused code + - Thanks to Maksym Planeta@TU Dresden for the patch + - Continue with warning if user asks to enable XRC when the system does not + support XRC + +MVAPICH2 2.2a (08/17/2015) + +* Features and Enhancements (since 2.1 GA): + + - Based on MPICH 3.1.4 + - Support for backing on-demand UD CM information with shared memory + for minimizing memory footprint + - Reorganized HCA-aware process mapping + - Dynamic identification of maximum read/atomic operations supported by HCA + - Enabling support for intra-node communications in RoCE mode without + shared memory + - Updated to hwloc 1.11.0 + - Updated to sm_20 kernel optimizations for MPI Datatypes + - Automatic detection and tuning for 24-core Haswell architecture + +* Bug Fixes (since 2.1 GA): + + - Fix for error with multi-vbuf design for GPU based communication + - Fix bugs with hybrid UD/RC/XRC communications + - Fix for MPICH putfence/getfence for large messages + - Fix for error in collective tuning framework + - Fix validation failure with Alltoall with IN_PLACE option + - Thanks for Mahidhar Tatineni @SDSC for the report + - Fix bug with MPI_Reduce with IN_PLACE option + - Thanks to Markus Geimer for the report + - Fix for compilation failures with multicast disabled + - Thanks to Devesh Sharma @Emulex for the report + - Fix bug with MPI_Bcast + - Fix IPC selection for shared GPU mode systems + - Fix for build time warnings and memory leaks + - Fix issues with Dynamic Process Management + - Thanks to Neil Spruit for the report + - Fix bug in architecture detection code + - Thanks to Adam Moody @LLNL for the report + +------------------------------------------------------------------- +Fri Oct 14 11:28:41 CEST 2016 - pth@suse.de + +- Create and include modules file for Mvapich2 (bsc#1004628). + +- Remove mvapich2-fix-implicit-decl.patch as the fix is upstream. +- Adapt spec file to the changed micro benchmark install directory. + +------------------------------------------------------------------- +Sun Jul 24 14:24:59 UTC 2016 - p.drouand@gmail.com + +- Update to version 2.1 + * Features and Enhancements (since 2.1rc2): + - Tuning for EDR adapters + - Optimization of collectives for SDSC Comet system + - Based on MPICH-3.1.4 + - Enhanced startup performance with mpirun_rsh + - Checkpoint-Restart Support with DMTCP (Distributed MultiThreaded + CheckPointing) + - Thanks to the DMTCP project team (http://dmtcp.sourceforge.net/) + - Support for handling very large messages in RMA + - Optimize size of buffer requested for control messages in large message + transfer + - Enhanced automatic detection of atomic support + - Optimized collectives (bcast, reduce, and allreduce) for 4K processes + - Introduce support to sleep for user specified period before aborting + - Disable PSM from setting CPU affinity + - Install PSM error handler to print more verbose error messages + - Introduce retry mechanism to perform psm_ep_open in PSM channel + * Bug-Fixes (since 2.1rc2): + - Relocate reading environment variables in PSM + - Fix issue with automatic process mapping + - Fix issue with checkpoint restart when full path is not given + - Fix issue with Dynamic Process Management + - Fix issue in CUDA IPC code path + - Fix corner case in CMA runtime detection + * Features and Enhancements (since 2.1rc1): + - Based on MPICH-3.1.4 + - Enhanced startup performance with mpirun_rsh + - Checkpoint-Restart Support with DMTCP (Distributed MultiThreaded + CheckPointing) + - Support for handling very large messages in RMA + - Optimize size of buffer requested for control messages in large message + transfer + - Enhanced automatic detection of atomic support + - Optimized collectives (bcast, reduce, and allreduce) for 4K processes + - Introduce support to sleep for user specified period before aborting + - Disable PSM from setting CPU affinity + - Install PSM error handler to print more verbose error messages + - Introduce retry mechanism to perform psm_ep_open in PSM channel + * Bug-Fixes (since 2.1rc1): + - Fix failures with shared memory collectives with checkpoint-restart + - Fix failures with checkpoint-restart when using internal communication + buffers of different size + - Fix undeclared variable error when --disable-cxx is specified with + configure + - Fix segfault seen during connect/accept with dynamic processes + - Fix errors with large messages pack/unpack operations in PSM channel + - Fix for bcast collective tuning + - Fix assertion errors in one-sided put operations in PSM channel + - Fix issue with code getting stuck in infinite loop inside ptmalloc + - Fix assertion error in shared memory large message transfers + - Fix compilation warnings + * Features and Enhancements (since 2.1a): + - Based on MPICH-3.1.3 + - Flexibility to use internal communication buffers of different size for + improved performance and memory footprint + - Improve communication performance by removing locks from critical path + - Enhanced communication performance for small/medium message sizes + - Support for linking Intel Trace Analyzer and Collector + - Increase the number of connect retry attempts with RDMA_CM + - Automatic detection and tuning for Haswell architecture + * Bug-Fixes (since 2.1a): + - Fix automatic detection of support for atomics + - Fix issue with void pointer arithmetic with PGI + - Fix deadlock in ctxidup MPICH test in PSM channel + - Fix compile warnings + * Features and Enhancements (since 2.0): + - Based on MPICH-3.1.2 + - Support for PMI-2 based startup with SLURM + - Enhanced startup performance for Gen2/UD-Hybrid channel + - GPU support for MPI_Scan and MPI_Exscan collective operations + - Optimize creation of 2-level communicator + - Collective optimization for PSM-CH3 channel + - Tuning for IvyBridge architecture + - Add -export-all option to mpirun_rsh + - Support for additional MPI-T performance variables (PVARs) + in the CH3 channel + - Link with libstdc++ when building with GPU support + (required by CUDA 6.5) + * Bug-Fixes (since 2.0): + - Fix error in large message (>2GB) transfers in CMA code path + - Fix memory leaks in OFA-IB-CH3 and OFA-IB-Nemesis channels + - Fix issues with optimizations for broadcast and reduce collectives + - Fix hang at finalize with Gen2-Hybrid/UD channel + - Fix issues for collectives with non power-of-two process counts + - Make ring startup use HCA selected by user + - Increase counter length for shared-memory collectives +- Use download Url as source +- Some other minor improvements +- Add mvapich2-fix-implicit-decl.patch + +------------------------------------------------------------------- +Thu Oct 9 13:32:28 CEST 2014 - pth@suse.de + +- Don't provide the full source uri as build servis can't handle it. + +------------------------------------------------------------------- +Wed Oct 8 17:12:27 CEST 2014 - pth@suse.de + +- Only run autogen.sh if the distribution has a new enough automake. + +------------------------------------------------------------------- +Wed Sep 24 17:06:22 CEST 2014 - pth@suse.de + +- Update to mvapich2 2.0 GMC: + * Features and Enhancements (since 2.0rc2): + - Consider CMA in collective tuning framework + + * Bug-Fixes (since 2.0rc2): + - Fix bug when disabling registration cache + - Fix shared memory window bug when shared memory collectives + are disabled. + - Fix mpirun_rsh bug when running mpmd programs with no arguments + +- Exclude Aarch64 for the time being as asm/timex.h seems to be missing + from the glibc kernel headers. + +------------------------------------------------------------------- +Tue Jun 3 11:24:34 CEST 2014 - pth@suse.de + +- Update to OFED 3.12 final. + +------------------------------------------------------------------- +Mon May 26 13:02:24 CEST 2014 - pth@suse.de + +- Update to 2.0rc2: + * Features and Enhancements (since 2.0rc1): + - CMA support is now enabled by default + - Optimization of collectives with CMA support + - RMA optimizations for shared memory and atomic operations + - Tuning RGET and Atomics operations + - Tuning RDMA FP-based communication + - MPI-T support for additional performance and control variables + - The --enable-mpit-pvars=yes configuration option will now + enable only MVAPICH2 specific variables + - Large message transfer support for PSM interface + - Optimization of collectives for PSM interface + - Updated to hwloc v1.9 + + * Bug-Fixes (since 2.0rc1): + - Fix multicast hang when there is a single process on one node + and more than one process on other nodes + - Fix non-power-of-two usage of scatter-doubling-allgather algorithm + - Fix for bcastzero type hang during finalize + - Enhanced handling of failures in RDMA_CM based + connection establishment + - Fix for a hang in finalize when using RDMA_CM + - Finish receive request when RDMA READ completes in RGET protocol + - Always use direct RDMA when flush is used + - Fix compilation error with --enable-g=all in PSM interface + - Fix warnings and memory leaks + +------------------------------------------------------------------- +Thu May 15 16:01:50 CEST 2014 - pth@suse.de + +- mvapich2-psm-devel requires infinipath-psm-devel. +- Remove redundent requires for the devel-static package. + +------------------------------------------------------------------- +Wed May 7 15:40:33 UTC 2014 - stefan.fent@suse.com + +- remove typo in mvapich-s390_get_cycles.patch + +------------------------------------------------------------------- +Tue Apr 29 13:47:06 CEST 2014 - pth@suse.de + +- Remove bogus 0 from spec. + +------------------------------------------------------------------- +Mon Apr 28 12:30:12 CEST 2014 - pth@suse.de + +- Remove all additional mvapich specific CFLAGS and extra LIBS. + +------------------------------------------------------------------- +Fri Apr 25 09:41:47 CEST 2014 - pth@suse.de + +- Fix ExclusiveArch +- Only PSM needs explicit configuration so drop the else branch + in configure call. +- mvapich2 now builds in parallel so tell make. + +------------------------------------------------------------------- +Thu Apr 24 21:27:06 CEST 2014 - pth@suse.de + +- Build Mvapich2 for Qlogic from its own mvapich2-psm.spec. + +------------------------------------------------------------------- +Wed Apr 23 18:04:36 CEST 2014 - pth@suse.de + +- Add mvapich2-pthread_yield.patch to define GNU_SOURCE before + including pthread.h to get pthread_yield declared. + +------------------------------------------------------------------- +Wed Apr 23 14:48:07 CEST 2014 - pth@suse.de + +- Don't require libibcommon as it's gone with OFED 3.12. + +------------------------------------------------------------------- +Wed Apr 16 15:50:22 UTC 2014 - stefan.fent@suse.com + +- add asm code from kernel to properly implement get_cycles on + s390 and s390x (bnc #870424) (mvapich-s390_get_cycles.patch) + +------------------------------------------------------------------- +Mon Apr 7 14:49:22 CEST 2014 - pth@suse.de + +- Fix spec so that testsuite builds correctly. + +------------------------------------------------------------------- +Sat Apr 5 20:28:49 CEST 2014 - pth@suse.de + +- Update config.* to make it build on ppc64le. + +------------------------------------------------------------------- +Thu Mar 27 12:56:50 CET 2014 - pth@suse.de + +- Regenerate autotool files to get ppc64le recognized. +- The predefined platform macros for s390 are lower case not upcase. + +------------------------------------------------------------------- +Wed Mar 26 16:15:45 CET 2014 - pth@suse.de + +- Finally got the syntax for conditionals in spec right... +- Add a dummy implementation of get_cycles for s390x. +- Update to 2.0rc1 as this is a MPI-3 implementation. For + detailed changes see. +- Fix options passed to mpi-selector + +------------------------------------------------------------------- +Tue Mar 25 14:42:43 CET 2014 - pth@suse.de + +- Include the two COPYRIGHT files in the package. +- BuildRequire kernel-headers on s390x. +- Fix spec file + +------------------------------------------------------------------- +Wed Mar 5 14:04:47 CET 2014 - pth@suse.de + +- Compile with support for PSM on ix86 (fate#315889). +- mvapich2 has a testsuite, so run it from a separate spec file. + +------------------------------------------------------------------- +Mon Feb 10 13:13:39 CET 2014 - pth@suse.de + +- Update to 1.9: +- Remove mvapich2-1.0.2-non-void-rtn.patch as the changes are in + the upstream source. +- Reformat BuildRequires + +------------------------------------------------------------------- +Fri Jan 24 19:15:39 CET 2014 - pth@suse.de + +- Update to OFED 3.12 daily. + +------------------------------------------------------------------- +Fri Feb 29 00:00:00 CET 2008 - - jjolly@suse.de + +- Update to 1.0.2 from OFED 1.3 GA release +- Minor changes to return value patch + +------------------------------------------------------------------- +Thu Jan 31 00:00:00 CET 2008 - - jjolly@suse.de + +- Update to 1.0.1 from OFED 1.3 rc2 +- Fixed several 'undefined return value' compile errors + +------------------------------------------------------------------- +Tue Jul 10 00:00:00 CET 2007 - - hvogel@suse.de + +- Initial Package, Version 0.9.8 + diff --git a/mvapich2.spec b/mvapich2.spec new file mode 100644 index 0000000..c47be59 --- /dev/null +++ b/mvapich2.spec @@ -0,0 +1,586 @@ +# +# spec file +# +# Copyright (c) 2024 SUSE LLC +# +# 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} + +%define pname mvapich2 +%define vers 2.3.7 +%define _vers 2_3_7 +%define rc_ver -1 + +%if "%{flavor}" == "" +ExclusiveArch: do_not_build +%{bcond_with hpc} +%endif + +%if "%{flavor}" == "standard" +%define build_flavor verbs +%{bcond_with hpc} +%endif +%if "%{flavor}" == "testsuite" +%define build_flavor verbs +%define testsuite 1 +%{bcond_with hpc} +%endif + +%if "%{flavor}" == "psm2" +%define build_flavor psm2 +%{bcond_with hpc} +%endif +%if "%{flavor}" == "psm2-testsuite" +%define build_flavor psm2 +%define testsuite 1 +%{bcond_with hpc} +%endif + +%if "%flavor" == "gnu-hpc" +%define compiler_family gnu +%undefine c_f_ver +%define build_flavor verbs +%{bcond_without hpc} +%endif +%if "%flavor" == "gnu-hpc-testsuite" +%define compiler_family gnu +%undefine c_f_ver +%define testsuite 1 +%define build_flavor verbs +%{bcond_without hpc} +%endif + +%if "%flavor" == "gnu-hpc-psm2" +%define compiler_family gnu +%undefine c_f_ver +%define build_flavor psm2 +%{bcond_without hpc} +%endif + +%if "%flavor" == "gnu7-hpc" +%define compiler_family gnu +%define c_f_ver 7 +%define build_flavor verbs +%{bcond_without hpc} +%endif +%if "%flavor" == "gnu7-hpc-testsuite" +%define compiler_family gnu +%define c_f_ver 7 +%define testsuite 1 +%define build_flavor verbs +%{bcond_without hpc} +%endif + +%if "%flavor" == "gnu7-hpc-psm2" +%define compiler_family gnu +%define c_f_ver 7 +%define build_flavor psm2 +%{bcond_without hpc} +%endif + +%if "%flavor" == "gnu8-hpc" +%define compiler_family gnu +%define c_f_ver 8 +%define build_flavor verbs +%{bcond_without hpc} +%endif +%if "%flavor" == "gnu8-hpc-testsuite" +%define compiler_family gnu +%define c_f_ver 8 +%define testsuite 1 +%define build_flavor verbs +%{bcond_without hpc} +%endif + +%if "%flavor" == "gnu8-hpc-psm2" +%define compiler_family gnu +%define c_f_ver 8 +%define build_flavor psm2 +%{bcond_without hpc} +%endif + +%if "%flavor" == "gnu9-hpc" +%define compiler_family gnu +%define c_f_ver 9 +%define build_flavor verbs +%{bcond_without hpc} +%endif +%if "%flavor" == "gnu9-hpc-testsuite" +%define compiler_family gnu +%define c_f_ver 9 +%define testsuite 1 +%define build_flavor verbs +%{bcond_without hpc} +%endif + +%if "%flavor" == "gnu9-hpc-psm2" +%define compiler_family gnu +%define c_f_ver 9 +%define build_flavor psm2 +%{bcond_without hpc} +%endif + +%if "%flavor" == "gnu10-hpc" +%define compiler_family gnu +%define c_f_ver 10 +%define build_flavor verbs +%{bcond_without hpc} +%endif +%if "%flavor" == "gnu10-hpc-testsuite" +%define compiler_family gnu +%define c_f_ver 10 +%define testsuite 1 +%define build_flavor verbs +%{bcond_without hpc} +%endif + +%if "%flavor" == "gnu10-hpc-psm2" +%define compiler_family gnu +%define c_f_ver 10 +%define build_flavor psm2 +%{bcond_without hpc} +%endif + +%if "%{build_flavor}" != "verbs" +%define pack_suff %{?build_flavor:-%{build_flavor}} +%endif + +%if %{without hpc} +%define module_name mvapich2%{?pack_suff} +%define p_prefix /usr/%_lib/mpi/gcc/%{module_name} +%define p_bindir %{p_prefix}/bin +%define p_datadir %{p_prefix}/share +%define p_includedir %{p_prefix}/include +%define p_mandir %{p_datadir}/man +%define p_libdir %{p_prefix}/%{_lib} +%define p_libexecdir %{p_prefix}/%{_lib} +%define _moduledir /usr/share/modules/gnu-%{module_name} +%define package_name mvapich2%{?pack_suff} +%{bcond_with pmix} +%{bcond_with hwloc} +%else +%{hpc_init -M -c %compiler_family %{?c_f_ver:-v %{c_f_ver}} -m mvapich2 %{?pack_suff:-e %{build_flavor}}} +%define p_prefix %{hpc_prefix} +%define p_bindir %{hpc_bindir} +%define p_datadir %{hpc_datadir} +%define p_includedir %{hpc_includedir} +%define p_mandir %{hpc_mandir} +%define p_libdir %{hpc_libdir} +%define p_libexecdir %{hpc_libexecdir} +%define package_name %{hpc_package_name %{_vers}} + +%global hpc_mvapich2_dep_version %(VER=%{?m_f_ver}; echo -n ${VER}) +%global hpc_mvapich2_dir mvapich2 +%global hpc_mvapich2_pack_version %{hpc_mvapich2_dep_version} +%{bcond_without pmix} +%{bcond_without hwloc} +ExcludeArch: i586 %arm s390 +%endif + +# Disable hpc builds for SLE12 +%if 0%{?sle_version} > 120200 && 0%{?sle_version} < 150000 && %{with hpc} +%{bcond_with skip_hpc_build} +%else +%{bcond_without skip_hpc_build} +%endif + +Name: %{package_name} +Summary: OSU MVAPICH2 MPI package +License: BSD-3-Clause +Group: Development/Libraries/Parallel +Version: %{vers} +Release: 0 +Source0: http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-%{version}%{?rc_ver}.tar.gz +Source1: mpivars.sh +Source2: mpivars.csh +Source3: macros.hpc-mvapich2 +Source100: _multibuild +Patch0: mvapich2-s390_get_cycles.patch +Patch2: mvapich2-arm-support.patch +# PATCH-FIX-UPSTREAM 0001-Drop-GCC-check.patch (bnc#1129421) +# It's been merged upstream, should be removed with the next release +Patch3: 0001-Drop-GCC-check.patch +Patch4: reproducible.patch +Patch5: pass-correct-size-to-snprintf.patch +Patch6: mvapich2-allow-building-with-external-hwloc.patch +Patch7: mvapich2-openpa-add-memory-barriers.patch +Patch8: mrail-fix-incompatible-pointer-issues.patch +Patch9: util-add-missing-include.patch +Patch10: psm-add-missing-declaration.patch + +## Armv7 specific patches +# PATCH-FIX-UPSTREAM 0001-Drop-real128.patch (https://github.com/pmodels/mpich/issues/4005) +Patch50: 0001-Drop-real128.patch +Patch51: 0001-Drop-Real-16.patch + +URL: http://mvapich.cse.ohio-state.edu +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%if %{without skip_hpc_build} +ExclusiveArch: do_not_build +%endif + +BuildRequires: autoconf +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: automake +BuildRequires: bison +BuildRequires: flex +BuildRequires: hwloc-devel >= 2.0 +%ifnarch s390 s390x %{arm} +BuildRequires: libnuma-devel +%endif +BuildRequires: libtool +BuildRequires: libtool +%if %{without hpc} +BuildRequires: gcc-c++ +BuildRequires: gcc-fortran +BuildRequires: mpi-selector +%else +BuildRequires: %{compiler_family}%{?c_f_ver}-compilers-hpc-macros-devel +BuildRequires: lua-lmod +BuildRequires: suse-hpc +%endif +%if %{with hwloc} +BuildRequires: hwloc-devel +%endif +%if %{with pmix} +BuildRequires: pmix-devel +%endif +%if "%{build_flavor}" == "psm2" && %{with skip_hpc_build} +ExclusiveArch: x86_64 +BuildRequires: libpsm2-devel +%endif +%if "%{build_flavor}" == "verbs" +BuildRequires: infiniband-diags-devel +BuildRequires: libibumad-devel +BuildRequires: libibverbs-devel +BuildRequires: librdmacm-devel +%if 0%{?sle_version} <= 120200 +BuildRequires: libibmad-devel +%endif +%endif + +%if %{without hpc} +Requires: mpi-selector +%else +%hpc_requires +%endif + +%description +This is an MPI-3 implementation which includes all MPI-1 features. It +is based on MPICH2 and MVICH. + +%{!?testsuite:%{?with_hpc:%{hpc_master_package -a -L}}} + +%if 0%{!?testsuite:1} + +%package devel +Summary: OSU MVAPICH2 MPI package +Group: Development/Libraries/Parallel +Requires: %{name} = %{version} +%if "%{build_flavor}" == "psm2" +Requires: libpsm2-devel +%endif +%if "%{build_flavor}" == "verbs" +Requires: libibumad-devel +Requires: libibverbs-devel +Requires: librdmacm-devel +%endif +%if %{without hpc} +Requires: gcc-c++ +Requires: gcc-fortran +%else +%hpc_requires_devel +%endif + +%description devel +This is an MPI-2 implementation which includes all MPI-1 features. It +is based on MPICH2 and MVICH. + +%{?with_hpc:%{hpc_master_package -a devel}} + +%package devel-static +Summary: OSU MVAPICH2 MPI package - static libraries +Group: Development/Libraries/Parallel +Requires: %{name}-devel = %{version} + +%description devel-static +This is an MPI-3 implementation which includes all MPI-1 and MPI-2 features. It +is based on MPICH2 and MVICH. This package contains the static libraries + +%package doc +Summary: OSU MVAPICH2 MPI package - Documentation +Group: Development/Libraries/Parallel +Requires: %{name} = %{version} + +%description doc +This is an MPI-3 implementation which includes all MPI-1 and MPI-2 features. It +is based on MPICH2 and MVICH. This package contains the static libraries + +%{?with_hpc:%{hpc_master_package doc}} + +%package macros-devel +Summary: OSU MVAPICH2 MPI package - HPC build macros +Group: Development/Libraries/Parallel +Requires: %{name}-devel = %{version} +Provides: %{pname}-hpc-macros-devel = %{version} +Conflicts: otherproviders(%{pname}-hpc-macros-devel) + +%description macros-devel +This is an MPI-3 implementation which includes all MPI-1 and MPI-2 features. It +is based on MPICH2 and MVICH. This package contains the static libraries + +%{?with_hpc:%{hpc_master_package macros-devel}} + +%endif # ! testsuite + +%prep + +%{?with_hpc:%hpc_debug} +%setup -q -n mvapich2-%{version}%{?rc_ver} +%autopatch -M 49 -p0 + +# Only apply these patches on Armv7 +%ifarch armv7hl +%autopatch -m 50 -p0 +%endif +cp /usr/share/automake*/config.* . + +%build +%global _lto_cflags %{_lto_cflags} -ffat-lto-objects + +# GCC10 needs an extra flag to allow badly passed parameters +%if 0%{?suse_version} > 1500 || 0%{?hpc_gnu_dep_version} >= 10 +export FFLAGS="-fallow-argument-mismatch $FFLAGS" +%endif + +PERL_USE_UNSAFE_INC=1 ./autogen.sh +%if %{with hpc} +%{hpc_setup} +%{hpc_configure} \ +%else +%configure \ + --prefix=%{p_prefix} \ + --exec-prefix=%{p_prefix} \ + --datadir=%{p_datadir} \ + --bindir=%{p_bindir} \ + --includedir=%{p_includedir} \ + --libdir=%{p_libdir} \ + --libexecdir=%{p_libexecdir} \ + --mandir=%{p_mandir} \ +%endif + --docdir=%{_datadir}/doc/%{name} \ + --disable-wrapper-rpath \ + --enable-yield=sched_yield \ +%if %{with hwloc} + --with-hwloc=external \ +%endif +%if %{with pmix} + --with-pmix=${_prefix} \ +%endif +%if "%{build_flavor}" == "psm2" + --with-device=ch3:psm \ + --with-psm2=/usr \ +%endif +%if "%{build_flavor}" == "verbs" + --disable-ibv-dlopen \ +%endif + --without-mpe +make %{?_smp_mflags} V=1 + +%if 0%{?testsuite} +%check +make V=1 check +%endif + +%install + +%if 0%{?testsuite} +# Remove everything from testsuite package +# It is all contained by mvapich2 packages +rm -rf %{buildroot}/* + +%else +make DESTDIR=%{buildroot} V=1 install + +rm -f %{buildroot}%{p_libdir}/libfmpich.la \ + %{buildroot}%{p_libdir}/libmpich.la \ + %{buildroot}%{p_libdir}/libmpichcxx.la \ + %{buildroot}%{p_libdir}/libmpichf90.la \ + %{buildroot}%{p_libdir}/libmpl.la \ + %{buildroot}%{p_libdir}/libopa.la \ + %{buildroot}%{p_libdir}/libmpi.la \ + %{buildroot}%{p_libdir}/libmpicxx.la \ + %{buildroot}%{p_libdir}/libmpifort.la +install -m 0755 -d %{buildroot}%{_datadir}/doc/%{name} +install -m 0644 COPYRIGHT* %{buildroot}%{_datadir}/doc/%{name} +install -m 0644 CHANGE* %{buildroot}%{_datadir}/doc/%{name} + +%if %{without hpc} +# make and install mpivars files +install -m 0755 -d %{buildroot}%{_bindir} +sed -e 's,prefix,%p_prefix,g' -e 's,libdir,%{p_libdir},g' %{S:1} > %{buildroot}%{p_bindir}/mpivars.sh +sed -e 's,prefix,%p_prefix,g' -e 's,libdir,%{p_libdir},g' %{S:2} > %{buildroot}%{p_bindir}/mpivars.csh + +mkdir -p %{buildroot}%{_moduledir} + +cat << EOF > %{buildroot}%{_moduledir}/%{version} +#%%Module +proc ModulesHelp { } { + global dotversion + puts stderr "\tLoads the gnu - mvapich2 %{version} Environment" +} + +module-whatis "Loads the gnu mvapich2 %{version} Environment." +conflict gnu-mvapich2 +prepend-path PATH %{%p_bindir} +prepend-path INCLUDE %{p_includedir} +prepend-path INCLUDE %{p_libdir} +prepend-path MANPATH %{p_mandir} +prepend-path LD_LIBRARY_PATH %{p_libdir} + +EOF + +cat << EOF > %{buildroot}%{_moduledir}/.version +#%%Module1.0 +set ModulesVersion "%{version}" + +EOF +%else # with hpc + +install -d -m 755 %{buildroot}%{_rpmmacrodir} +cp %{S:3} %{buildroot}%{_rpmmacrodir} + +%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} + +prepend-path PATH %{hpc_bindir} +prepend-path MANPATH %{hpc_mandir} +prepend-path LD_LIBRARY_PATH %{hpc_libdir} +prepend-path MODULEPATH %{hpc_modulepath} +prepend-path MPI_DIR %{hpc_prefix} +%{hpc_modulefile_add_pkgconfig_path} + +family "MPI" +EOF +cat < %{buildroot}/%{p_bindir}/mpivars.sh +%hpc_setup_compiler +module load %{hpc_mpi_family}%{?pack_suff}/%{version} +EOF +sed -e "s/export/setenv/" -e "s/=/ /" \ + %{buildroot}/%{p_bindir}/mpivars.sh > \ + %{buildroot}/%{p_bindir}/mpivars.csh +mkdir -p %{buildroot}%{_sysconfdir}/rpm + +%endif # with hpc + +%post +/sbin/ldconfig +%if %{without hpc} +# 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}%{?pack_suff} \ + --source-dir %{p_bindir} \ + --yes +%endif + +%postun +/sbin/ldconfig +%if %{without hpc} +# Only unregister when uninstalling +if [ "$1" = "0" ]; then + /usr/bin/mpi-selector --unregister %{name}%{?pack_suff} --yes + # Deregister the default if we are uninstalling it + if [ "$(/usr/bin/mpi-selector --system --query)" = "%{name}%{?pack_suff}" ]; then + /usr/bin/mpi-selector --system --unset --yes + fi +fi +%else +%hpc_module_delete_if_default +%endif + +%files +%defattr(-, root, root) +%if %{without hpc} +%dir /usr/%_lib/mpi +%dir /usr/%_lib/mpi/gcc +%dir /usr/share/modules +%dir %{_moduledir} +%{_moduledir} +%else +%hpc_mpi_dirs +%hpc_modules_files +%endif +%doc %{_datadir}/doc/%{name}/COPYRIGHT* +%doc %{_datadir}/doc/%{name}/CHANGE* +%dir %{p_prefix} +%dir %{p_bindir} +%dir %{p_datadir} +%dir %{p_includedir} +%dir %{p_mandir} +%dir %{p_mandir}/man1 +%dir %{p_mandir}/man3 +%dir %{p_libdir} +%dir %{p_libexecdir} +%{p_bindir}/* +%{p_libexecdir}/osu-micro-benchmarks +%{p_mandir}/man1/* +%{p_libdir}/*.so.* + +%files doc +%defattr(-, root, root) +%doc %{_datadir}/doc/%{name} +%exclude /%{_datadir}/doc/%{name}/COPYRIGHT* +%exclude /%{_datadir}/doc/%{name}/CHANGE* + +%files devel +%defattr(-,root,root) +%dir %{p_libdir}/pkgconfig +%{p_mandir}/man3/* +%{p_includedir} +%{p_libdir}/*.so +%{p_libdir}/pkgconfig/mvapich2.pc +%{p_libdir}/pkgconfig/openpa.pc + +%files devel-static +%defattr(-,root,root) +%{p_libdir}/*.a + +%if %{with hpc} +%files macros-devel +%defattr(-,root,root) +%config %{_rpmmacrodir}/macros.hpc-mvapich2 +%endif # with hpc + +%endif # !testsuite + +%changelog diff --git a/pass-correct-size-to-snprintf.patch b/pass-correct-size-to-snprintf.patch new file mode 100644 index 0000000..44662bc --- /dev/null +++ b/pass-correct-size-to-snprintf.patch @@ -0,0 +1,103 @@ +diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache -x .deps -x .libs ../orig-mvapich2-2.3.7-1/src/mpid/ch3/channels/common/src/affinity/hwloc_bind.c ./src/mpid/ch3/channels/common/src/affinity/hwloc_bind.c +--- ../orig-mvapich2-2.3.7-1/src/mpid/ch3/channels/common/src/affinity/hwloc_bind.c 2022-05-16 18:58:22.000000000 +0200 ++++ ./src/mpid/ch3/channels/common/src/affinity/hwloc_bind.c 2022-06-29 15:07:17.700058168 +0200 +@@ -2107,7 +2107,7 @@ + for (i = 0; i < g_smpi.num_local_nodes; ++i) { + hwloc_bitmap_clr(*free_sock_cpuset, local_core_ids[i]); + } +- hwloc_bitmap_snprintf(cpu_str, 128, *free_sock_cpuset); ++ hwloc_bitmap_snprintf(cpu_str, sizeof(cpu_str), *free_sock_cpuset); + PRINT_DEBUG(DEBUG_INIT_verbose, "Free sock_cpuset = %s\n", cpu_str); + } + +@@ -3190,11 +3190,11 @@ + for (i = 0; i < local_procs; i++) { + curr = count; + for (k = 0; k < num_app_threads; k++) { +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, "%d,", mv2_core_map[curr]); ++ j += snprintf (mapping+j, sizeof(mapping)-j, "%d,", mv2_core_map[curr]); + curr = (curr + 1) % num_pu; + } + mapping [--j] = '\0'; +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, ":"); ++ j += snprintf (mapping+j, sizeof(mapping)-j, ":"); + count = (count + hw_threads_per_core) % num_pu; + } + } else if (mv2_hybrid_binding_policy == HYBRID_LINEAR) { +@@ -3203,14 +3203,14 @@ + * resources */ + for (i = 0; i < local_procs; i++) { + for (k = 0; k < num_app_threads; k++) { +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, "%d,", mv2_core_map[curr]); ++ j += snprintf (mapping+j, sizeof(mapping)-j, "%d,", mv2_core_map[curr]); + + curr = ((curr + hw_threads_per_core) >= num_pu) ? + ((curr + hw_threads_per_core+ ++step) % num_pu) : + (curr + hw_threads_per_core) % num_pu; + } + mapping [--j] = '\0'; +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, ":"); ++ j += snprintf (mapping+j, sizeof(mapping)-j, ":"); + } + } else if (mv2_hybrid_binding_policy == HYBRID_SPREAD) { + #if defined(CHANNEL_MRAIL) +@@ -3232,12 +3232,12 @@ + for (i = 0; i < local_procs; i++) { + for (k = curr; k < curr+chunk; k++) { + for (l = 0; l < hw_threads_per_core; l++) { +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, "%d,", ++ j += snprintf (mapping+j, sizeof(mapping)-j, "%d,", + mv2_core_map[k * hw_threads_per_core + l]); + } + } + mapping [--j] = '\0'; +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, ":"); ++ j += snprintf (mapping+j, sizeof(mapping)-j, ":"); + curr = (curr + chunk) % size; + } + } else { +@@ -3252,11 +3252,11 @@ + for (i = 0; i < num_sockets; i++) { + for (k = curr; k < curr+ranks_per_sock; k++) { + for (l = 0; l < hw_threads_per_core; l++) { +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, "%d,", ++ j += snprintf (mapping+j, sizeof(mapping)-j, "%d,", + mv2_core_map[k * hw_threads_per_core + l]); + } + mapping [--j] = '\0'; +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, ":"); ++ j += snprintf (mapping+j, sizeof(mapping)-j, ":"); + } + curr = (curr + ((num_pu_per_socket/hw_threads_per_core) * chunk)) % size; + } +@@ -3265,7 +3265,7 @@ + /* Bunch mapping: Bind each MPI rank to a single phyical core of first + * socket followed by second secket */ + for (i = 0; i < local_procs; i++) { +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, "%d:", mv2_core_map[k]); ++ j += snprintf (mapping+j, sizeof(mapping)-j, "%d:", mv2_core_map[k]); + k = (k + hw_threads_per_core) % size; + } + } else if (mv2_hybrid_binding_policy == HYBRID_SCATTER) { +@@ -3283,7 +3283,7 @@ + return MPI_ERR_OTHER; + } + for (i = 0; i < local_procs; i++) { +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, "%d:", mv2_core_map[k]); ++ j += snprintf (mapping+j, sizeof(mapping)-j, "%d:", mv2_core_map[k]); + k = (i % num_sockets == 0) ? + (k + num_pu_per_socket) % size : + (k + num_pu_per_socket + hw_threads_per_core) % size; +@@ -3315,10 +3315,10 @@ + /* NUMA mapping: Bind consecutive MPI ranks to different NUMA domains in + * round-robin fashion. */ + for (i = 0; i < local_procs; i++) { +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, "%d,", ++ j += snprintf (mapping+j, sizeof(mapping)-j, "%d,", + mv2_core_map_per_numa[node_base_pu+node_offset]); + mapping [--j] = '\0'; +- j += snprintf (mapping+j, _POSIX2_LINE_MAX, ":"); ++ j += snprintf (mapping+j, sizeof(mapping)-j, ":"); + node_base_pu = (node_base_pu + num_pu_per_numanode) % size; + node_offset = (node_base_pu == 0) ? + (node_offset + ((hw_threads_per_core > 0) ? hw_threads_per_core : 1)) : diff --git a/psm-add-missing-declaration.patch b/psm-add-missing-declaration.patch new file mode 100644 index 0000000..565e5b7 --- /dev/null +++ b/psm-add-missing-declaration.patch @@ -0,0 +1,20 @@ +commit 54cb73337039c22aed5b2b4ee7b19aeb8df33b2c +Author: Nicolas Morey +Date: Thu Sep 5 10:11:46 2024 +0200 + + psm: add missing declaration + + Signed-off-by: Nicolas Morey + +diff --git src/mpid/ch3/channels/psm/src/psm_entry.c src/mpid/ch3/channels/psm/src/psm_entry.c +index 125194750a0f..4ff539b65635 100755 +--- src/mpid/ch3/channels/psm/src/psm_entry.c ++++ src/mpid/ch3/channels/psm/src/psm_entry.c +@@ -21,6 +21,7 @@ + #include + #include "coll_shmem.h" + extern int g_mv2_num_cpus; ++extern int MPIDI_Get_num_nodes(); + + volatile unsigned int MPIDI_CH3I_progress_completion_count = 0; //ODOT: what is this ? + volatile int MPIDI_CH3I_progress_blocked = FALSE; diff --git a/reproducible.patch b/reproducible.patch new file mode 100644 index 0000000..cc45191 --- /dev/null +++ b/reproducible.patch @@ -0,0 +1,110 @@ +commit bf7afdf34ad71b1e644dda34053e491653ca59e7 +Author: Bernhard M. Wiedemann +Date: Mon Mar 25 11:12:56 2019 +0100 + + reproducible + + Sort input file list so that mpich builds in a reproducible way + in spite of indeterministic filesystem readdir order + + See https://reproducible-builds.org/ for why this is good. + + Without this patch, README.envvar, /usr/lib64/mpi/gcc/mpich/bin/mpivars + and other output files varied between builds. + + Signed-off-by: Nicolas Morey-Chaisemartin + + Also remove any unreproducible timestamps from generated files. + +diff --git maint/extractcvars.in maint/extractcvars.in +index b627a6f8d937..879de7bf6d5a 100755 +--- maint/extractcvars.in ++++ maint/extractcvars.in +@@ -125,7 +125,7 @@ foreach my $p (@cvars) { + print "Categories include: \n".Dumper(@categories) if $debug; + print "Cvars include :\n".Dumper(@cvars)."\n" if $debug; + +-my $run_timestamp = localtime(); ++my $run_timestamp = localtime($ENV{"SOURCE_DATE_EPOCH"} || time); + my $uc_ns = uc($ns); + + # Setup output files +@@ -594,7 +594,7 @@ sub ExpandDir { + my @subdirs = (); + my $DIR_HANDLE; + opendir $DIR_HANDLE, "$dir" or die "Error: open directory $dir -- $!\n"; +- while (my $filename = readdir $DIR_HANDLE) { ++ for my $filename (sort readdir $DIR_HANDLE) { + if ($filename =~ /^\./) { + next; + } elsif (-d "$dir/$filename") { +diff --git maint/extractfixme.in maint/extractfixme.in +index 6b2567f037ed..7636fad296b8 100644 +--- maint/extractfixme.in ++++ maint/extractfixme.in +@@ -114,7 +114,7 @@ sub ExpandDir { + my @otherdirs = (); + my @files = (); + opendir DIR, "$dir"; +- while ($filename = readdir DIR) { ++ for $filename (sort readdir DIR) { + if ($filename =~ /^\./ || $filename eq ".svn") { + next; + } +diff --git maint/extractstrings.in maint/extractstrings.in +index 4e8a599c89ca..449a8c007499 100644 +--- maint/extractstrings.in ++++ maint/extractstrings.in +@@ -73,7 +73,7 @@ sub GetFileNamesInDirectory { + my @filesFound = (); + + opendir DIR, $dir || die "Could not open $dir\n"; +- while (my $file = readdir DIR) { ++ for my $file (sort readdir DIR) { + if (! -f "$dir/$file") { next; } + if ($file =~ /^\.$/ || $file =~ /^\.\.$/) { next; } + if ($file =~ /$pattern/) { +@@ -246,7 +246,7 @@ sub processDirs { + my @dirs = (); + # Find the directories + opendir DIR, "$dir" || die "Cannot open $dir\n"; +- while (my $file = readdir DIR) { ++ for my $file (sort readdir DIR) { + if (! -d "$dir/$file") { next; } + if ($file =~ /^\./) { next; } + if ($file =~ /^.svn/) { next; } +@@ -273,7 +273,7 @@ sub processDirsAndAction { + my @dirs = (); + # Find the directories + opendir DIR, "$dir" || die "Cannot open $dir\n"; +- while (my $file = readdir DIR) { ++ for my $file (sort readdir DIR) { + if (! -d "$dir/$file") { next; } + if ($file =~ /^\./) { next; } + if ($file =~ /^.svn/) { next; } +diff --git maint/gen_subcfg_m4 maint/gen_subcfg_m4 +index 80654263401d..34cb19ed0649 100755 +--- maint/gen_subcfg_m4 ++++ maint/gen_subcfg_m4 +@@ -118,7 +118,7 @@ while (my $dir = pop @dirstack) { + # the stack to continue the traversal + opendir DH, $dir + or die "unable to open dir='$dir', stopped"; +- my @contents = readdir DH; ++ my @contents = sort readdir DH; + foreach my $f (@contents) { + # avoid endless recursion + next if $f eq "." || $f eq ".."; +diff --git maint/getcoverage.in maint/getcoverage.in +index c9c69f299261..f4fc35be72f6 100644 +--- maint/getcoverage.in ++++ maint/getcoverage.in +@@ -779,7 +779,7 @@ sub ExpandDir { + my @otherdirs = (); + my @files = (); + opendir DIR, "$dir"; +- while ($filename = readdir DIR) { ++ for $filename (sort readdir DIR) { + if ($filename =~ /^\./ || $filename eq ".svn") { + next; + } diff --git a/util-add-missing-include.patch b/util-add-missing-include.patch new file mode 100644 index 0000000..03bb995 --- /dev/null +++ b/util-add-missing-include.patch @@ -0,0 +1,20 @@ +commit e0028839a9bee6996816ae5be43f8a1a7faa6580 +Author: Nicolas Morey +Date: Thu Sep 5 10:00:12 2024 +0200 + + util: add missing include + + Signed-off-by: Nicolas Morey + +diff --git src/util/mem/mpit.c src/util/mem/mpit.c +index 19c2caf27cb3..17f6e6115291 100644 +--- src/util/mem/mpit.c ++++ src/util/mem/mpit.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + + #ifdef USE_MEMORY_TRACING + # define mpit_malloc(a, line, file) \