diff --git a/.gitignore b/.gitignore index d89aa68..104cfac 100644 --- a/.gitignore +++ b/.gitignore @@ -54,20 +54,3 @@ openmpi-1.4.1-RH.tar.bz2 /openmpi-4.0.4.tar.bz2 /openmpi-4.0.5.tar.bz2 /openmpi-4.1.0.tar.bz2 -/openmpi-4.1.1rc1.tar.bz2 -/openmpi-4.1.1rc2.tar.bz2 -/openmpi-4.1.1.tar.bz2 -/openmpi-4.1.2rc1.tar.bz2 -/openmpi-4.1.2.tar.bz2 -/openmpi-4.1.3.tar.bz2 -/openmpi-4.1.4.tar.bz2 -/openmpi-4.1.5.tar.bz2 -/openmpi-5.0.0.tar.bz2 -/openmpi-5.0.1.tar.bz2 -/openmpi-5.0.2.tar.bz2 -/openmpi-5.0.3.tar.bz2 -/openmpi-5.0.5.tar.bz2 -/openmpi-5.0.6.tar.bz2 -/openmpi-5.0.8.tar.bz2 -/openmpi-5.0.9.tar.bz2 -/openmpi-5.0.10.tar.bz2 diff --git a/openmpi.rpmlintrc b/.rpmlint similarity index 93% rename from openmpi.rpmlintrc rename to .rpmlint index 2342110..0aa5b0e 100644 --- a/openmpi.rpmlintrc +++ b/.rpmlint @@ -1,3 +1,4 @@ +from Config import * addFilter("shared-library-calls-exit .*/lib(mpi|open-rte|oshmem|_java)\.so"); # We use environment modules to load these paths addFilter("file-not-in-%lang /usr/share/man/openmpi-"); diff --git a/8322.patch b/8322.patch new file mode 100644 index 0000000..8c04e5d --- /dev/null +++ b/8322.patch @@ -0,0 +1,1682 @@ +From 31068e063b8795ae11f3a59d4080db1fe111cfaf Mon Sep 17 00:00:00 2001 +From: George Bosilca +Date: Mon, 28 Dec 2020 15:36:05 -0500 +Subject: [PATCH 1/3] Major update to the AVX* detection and support + +1. Consistent march flag order between configure and make. + +2. op/avx: give the option to skip some tests + +it is possible to skip some intrinsic tests by setting some environment variables to "no" before invoking configure: + - ompi_cv_op_avx_check_avx512 + - ompi_cv_op_avx_check_avx2 + - ompi_cv_op_avx_check_avx + - ompi_cv_op_avx_check_sse41 + - ompi_cv_op_avx_check_sse3 + +3. op/avx: update AVX512 flags + +try +-mavx512f -mavx512bw -mavx512vl -mavx512dq +instead of +-march=skylake-avx512 + +since the former is less likely to conflict with user provided CFLAGS +(e.g. -march=...) + +Thanks Bart Oldeman for pointing this. + +4. op/avx: have the op/avx library depend on libmpi.so + +Refs. open-mpi/ompi#8323 + +Signed-off-by: Gilles Gouaillardet +Signed-off-by: George Bosilca +--- + ompi/mca/op/avx/Makefile.am | 4 +- + ompi/mca/op/avx/configure.m4 | 325 ++++++++++++++++++----------------- + 2 files changed, 174 insertions(+), 155 deletions(-) + +diff --git a/ompi/mca/op/avx/Makefile.am b/ompi/mca/op/avx/Makefile.am +index 41dcf2e1834..b1d84d90b33 100644 +--- a/ompi/mca/op/avx/Makefile.am ++++ b/ompi/mca/op/avx/Makefile.am +@@ -2,7 +2,7 @@ + # Copyright (c) 2019-2020 The University of Tennessee and The University + # of Tennessee Research Foundation. All rights + # reserved. +-# Copyright (c) 2020 Research Organization for Information Science ++# Copyright (c) 2020-2021 Research Organization for Information Science + # and Technology (RIST). All rights reserved. + # $COPYRIGHT$ + # +@@ -86,7 +86,7 @@ mcacomponentdir = $(ompilibdir) + mcacomponent_LTLIBRARIES = $(component_install) + mca_op_avx_la_SOURCES = $(sources) + mca_op_avx_la_LIBADD = $(specialized_op_libs) +-mca_op_avx_la_LDFLAGS = -module -avoid-version ++mca_op_avx_la_LDFLAGS = -module -avoid-version $(top_builddir)/ompi/lib@OMPI_LIBMPI_NAME@.la + + + # Specific information for static builds. +diff --git a/ompi/mca/op/avx/configure.m4 b/ompi/mca/op/avx/configure.m4 +index 09d8b374c8e..f61b7100ef4 100644 +--- a/ompi/mca/op/avx/configure.m4 ++++ b/ompi/mca/op/avx/configure.m4 +@@ -29,6 +29,13 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + op_avx_support=0 + op_avx2_support=0 + op_avx512_support=0 ++ ++ AS_VAR_PUSHDEF([op_avx_check_sse3], [ompi_cv_op_avx_check_sse3]) ++ AS_VAR_PUSHDEF([op_avx_check_sse41], [ompi_cv_op_avx_check_sse41]) ++ AS_VAR_PUSHDEF([op_avx_check_avx], [ompi_cv_op_avx_check_avx]) ++ AS_VAR_PUSHDEF([op_avx_check_avx2], [ompi_cv_op_avx_check_avx2]) ++ AS_VAR_PUSHDEF([op_avx_check_avx512], [ompi_cv_op_avx_check_avx512]) ++ + OPAL_VAR_SCOPE_PUSH([op_avx_cflags_save]) + + AS_IF([test "$opal_cv_asm_arch" = "X86_64"], +@@ -37,21 +44,9 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + # + # Check for AVX512 support + # +- AC_MSG_CHECKING([for AVX512 support (no additional flags)]) +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ +- __m512 vA, vB; +- _mm512_add_ps(vA, vB) +- ]])], +- [op_avx512_support=1 +- AC_MSG_RESULT([yes])], +- [AC_MSG_RESULT([no])]) +- +- AS_IF([test $op_avx512_support -eq 0], +- [AC_MSG_CHECKING([for AVX512 support (with -march=skylake-avx512)]) +- op_avx_cflags_save="$CFLAGS" +- CFLAGS="$CFLAGS -march=skylake-avx512" ++ AC_CACHE_CHECK([if we are checking for AVX512 support], op_avx_check_avx512, AS_VAR_SET(op_avx_check_avx512, yes)) ++ AS_IF([test "$op_avx_check_avx512" = "yes"], ++ [AC_MSG_CHECKING([for AVX512 support (no additional flags)]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[ +@@ -59,99 +54,115 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + _mm512_add_ps(vA, vB) + ]])], + [op_avx512_support=1 +- MCA_BUILD_OP_AVX512_FLAGS="-march=skylake-avx512" + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) +- CFLAGS="$op_avx_cflags_save" +- ]) +- # +- # Some combination of gcc and older as would not correctly build the code generated by +- # _mm256_loadu_si256. Screen them out. +- # +- AS_IF([test $op_avx512_support -eq 1], +- [AC_MSG_CHECKING([if _mm512_loadu_si512 generates code that can be compiled]) +- op_avx_cflags_save="$CFLAGS" +- CFLAGS="$CFLAGS_WITHOUT_OPTFLAGS -O0 $MCA_BUILD_OP_AVX512_FLAGS" +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ ++ AS_IF([test $op_avx512_support -eq 0], ++ [AC_MSG_CHECKING([for AVX512 support (with -mavx512f -mavx512bw -mavx512vl -mavx512dq)]) ++ op_avx_cflags_save="$CFLAGS" ++ CFLAGS="-mavx512f -mavx512bw -mavx512vl -mavx512dq $CFLAGS" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ ++ __m512 vA, vB; ++ _mm512_add_ps(vA, vB) ++ ]])], ++ [op_avx512_support=1 ++ MCA_BUILD_OP_AVX512_FLAGS="-mavx512f -mavx512bw -mavx512vl -mavx512dq" ++ AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([no])]) ++ CFLAGS="$op_avx_cflags_save" ++ ]) ++ # ++ # Some combination of gcc and older as would not correctly build the code generated by ++ # _mm256_loadu_si256. Screen them out. ++ # ++ AS_IF([test $op_avx512_support -eq 1], ++ [AC_MSG_CHECKING([if _mm512_loadu_si512 generates code that can be compiled]) ++ op_avx_cflags_save="$CFLAGS" ++ CFLAGS="$CFLAGS_WITHOUT_OPTFLAGS -O0 $MCA_BUILD_OP_AVX512_FLAGS" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + int A[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; + __m512i vA = _mm512_loadu_si512((__m512i*)&(A[1])) +- ]])], +- [AC_MSG_RESULT([yes])], +- [op_avx512_support=0 +- MCA_BUILD_OP_AVX512_FLAGS="" +- AC_MSG_RESULT([no])]) +- CFLAGS="$op_avx_cflags_save" +- ]) +- # +- # Some PGI compilers do not define _mm512_mullo_epi64. Screen them out. +- # +- AS_IF([test $op_avx512_support -eq 1], +- [AC_MSG_CHECKING([if _mm512_mullo_epi64 generates code that can be compiled]) +- op_avx_cflags_save="$CFLAGS" +- CFLAGS="$CFLAGS_WITHOUT_OPTFLAGS -O0 $MCA_BUILD_OP_AVX512_FLAGS" +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ ]])], ++ [AC_MSG_RESULT([yes])], ++ [op_avx512_support=0 ++ MCA_BUILD_OP_AVX512_FLAGS="" ++ AC_MSG_RESULT([no])]) ++ CFLAGS="$op_avx_cflags_save" ++ ]) ++ # ++ # Some PGI compilers do not define _mm512_mullo_epi64. Screen them out. ++ # ++ AS_IF([test $op_avx512_support -eq 1], ++ [AC_MSG_CHECKING([if _mm512_mullo_epi64 generates code that can be compiled]) ++ op_avx_cflags_save="$CFLAGS" ++ CFLAGS="$CFLAGS_WITHOUT_OPTFLAGS -O0 $MCA_BUILD_OP_AVX512_FLAGS" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + __m512i vA, vB; + _mm512_mullo_epi64(vA, vB) +- ]])], +- [AC_MSG_RESULT([yes])], +- [op_avx512_support=0 +- MCA_BUILD_OP_AVX512_FLAGS="" +- AC_MSG_RESULT([no])]) +- CFLAGS="$op_avx_cflags_save" +- ]) ++ ]])], ++ [AC_MSG_RESULT([yes])], ++ [op_avx512_support=0 ++ MCA_BUILD_OP_AVX512_FLAGS="" ++ AC_MSG_RESULT([no])]) ++ CFLAGS="$op_avx_cflags_save" ++ ])]) + # + # Check support for AVX2 + # +- AC_MSG_CHECKING([for AVX2 support (no additional flags)]) +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ AC_CACHE_CHECK([if we are checking for AVX2 support], op_avx_check_avx2, AS_VAR_SET(op_avx_check_avx2, yes)) ++ AS_IF([test "$op_avx_check_avx2" = "yes"], ++ [AC_MSG_CHECKING([for AVX2 support (no additional flags)]) ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + __m256 vA, vB; + _mm256_add_ps(vA, vB) +- ]])], +- [op_avx2_support=1 +- AC_MSG_RESULT([yes])], +- [AC_MSG_RESULT([no])]) +- AS_IF([test $op_avx2_support -eq 0], +- [AC_MSG_CHECKING([for AVX2 support (with -mavx2)]) +- op_avx_cflags_save="$CFLAGS" +- CFLAGS="$CFLAGS -mavx2" +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ ]])], ++ [op_avx2_support=1 ++ AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([no])]) ++ AS_IF([test $op_avx2_support -eq 0], ++ [AC_MSG_CHECKING([for AVX2 support (with -mavx2)]) ++ op_avx_cflags_save="$CFLAGS" ++ CFLAGS="-mavx2 $CFLAGS" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + __m256 vA, vB; + _mm256_add_ps(vA, vB) +- ]])], +- [op_avx2_support=1 +- MCA_BUILD_OP_AVX2_FLAGS="-mavx2" +- AC_MSG_RESULT([yes])], +- [AC_MSG_RESULT([no])]) +- CFLAGS="$op_avx_cflags_save" +- ]) +- # +- # Some combination of gcc and older as would not correctly build the code generated by +- # _mm256_loadu_si256. Screen them out. +- # +- AS_IF([test $op_avx2_support -eq 1], +- [AC_MSG_CHECKING([if _mm256_loadu_si256 generates code that can be compiled]) +- op_avx_cflags_save="$CFLAGS" +- CFLAGS="$CFLAGS_WITHOUT_OPTFLAGS -O0 $MCA_BUILD_OP_AVX2_FLAGS" +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ ]])], ++ [op_avx2_support=1 ++ MCA_BUILD_OP_AVX2_FLAGS="-mavx2" ++ AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([no])]) ++ CFLAGS="$op_avx_cflags_save" ++ ]) ++ # ++ # Some combination of gcc and older as would not correctly build the code generated by ++ # _mm256_loadu_si256. Screen them out. ++ # ++ AS_IF([test $op_avx2_support -eq 1], ++ [AC_MSG_CHECKING([if _mm256_loadu_si256 generates code that can be compiled]) ++ op_avx_cflags_save="$CFLAGS" ++ CFLAGS="$CFLAGS_WITHOUT_OPTFLAGS -O0 $MCA_BUILD_OP_AVX2_FLAGS" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + int A[8] = {0, 1, 2, 3, 4, 5, 6, 7}; + __m256i vA = _mm256_loadu_si256((__m256i*)&A) +- ]])], +- [AC_MSG_RESULT([yes])], +- [op_avx2_support=0 +- MCA_BUILD_OP_AVX2_FLAGS="" +- AC_MSG_RESULT([no])]) +- CFLAGS="$op_avx_cflags_save" +- ]) ++ ]])], ++ [AC_MSG_RESULT([yes])], ++ [op_avx2_support=0 ++ MCA_BUILD_OP_AVX2_FLAGS="" ++ AC_MSG_RESULT([no])]) ++ CFLAGS="$op_avx_cflags_save" ++ ])]) + # + # What about early AVX support. The rest of the logic is slightly different as + # we need to include some of the SSE4.1 and SSE3 instructions. So, we first check +@@ -160,90 +171,92 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + # the AVX flag, and then recheck if we have support for the SSE4.1 and SSE3 + # instructions. + # +- AC_MSG_CHECKING([for AVX support (no additional flags)]) +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ AC_CACHE_CHECK([if we are checking for AVX support], op_avx_check_avx, AS_VAR_SET(op_avx_check_avx, yes)) ++ AS_IF([test "$op_avx_check_avx" = "yes"], ++ [AC_MSG_CHECKING([for AVX support (no additional flags)]) ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + __m128 vA, vB; + _mm_add_ps(vA, vB) +- ]])], +- [op_avx_support=1 +- AC_MSG_RESULT([yes])], +- [AC_MSG_RESULT([no])]) ++ ]])], ++ [op_avx_support=1 ++ AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([no])])]) + # + # Check for SSE4.1 support + # +- AS_IF([test $op_avx_support -eq 1], +- [AC_MSG_CHECKING([for SSE4.1 support]) +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ AC_CACHE_CHECK([if we are checking for SSE4.1 support], op_avx_check_sse41, AS_VAR_SET(op_avx_check_sse41, yes)) ++ AS_IF([test $op_avx_support -eq 1 && test "$op_avx_check_sse41" = "yes"], ++ [AC_MSG_CHECKING([for SSE4.1 support]) ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + __m128i vA, vB; + (void)_mm_max_epi8(vA, vB) +- ]])], +- [op_sse41_support=1 +- AC_MSG_RESULT([yes])], +- [AC_MSG_RESULT([no])]) +- ]) ++ ]])], ++ [op_sse41_support=1 ++ AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([no])]) ++ ]) + # + # Check for SSE3 support + # +- AS_IF([test $op_avx_support -eq 1], +- [AC_MSG_CHECKING([for SSE3 support]) +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ AC_CACHE_CHECK([if we are checking for SSE3 support], op_avx_check_sse3, AS_VAR_SET(op_avx_check_sse3, yes)) ++ AS_IF([test $op_avx_support -eq 1 && test "$op_avx_check_sse3" = "yes"], ++ [AC_MSG_CHECKING([for SSE3 support]) ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + int A[4] = {0, 1, 2, 3}; + __m128i vA = _mm_lddqu_si128((__m128i*)&A) +- ]])], +- [op_sse3_support=1 +- AC_MSG_RESULT([yes])], +- [AC_MSG_RESULT([no])]) +- ]) ++ ]])], ++ [op_sse3_support=1 ++ AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([no])]) ++ ]) + # Second pass, do we need to add the AVX flag ? + AS_IF([test $op_avx_support -eq 0 || test $op_sse41_support -eq 0 || test $op_sse3_support -eq 0], +- [AC_MSG_CHECKING([for AVX support (with -mavx)]) +- op_avx_cflags_save="$CFLAGS" +- CFLAGS="$CFLAGS -mavx" +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ [AS_IF([test "$op_avx_check_avx" = "yes"], ++ [AC_MSG_CHECKING([for AVX support (with -mavx)]) ++ op_avx_cflags_save="$CFLAGS" ++ CFLAGS="-mavx $CFLAGS" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + __m128 vA, vB; + _mm_add_ps(vA, vB) + ]])], +- [op_avx_support=1 +- MCA_BUILD_OP_AVX_FLAGS="-mavx" +- op_sse41_support=0 +- op_sse3_support=0 +- AC_MSG_RESULT([yes])], +- [AC_MSG_RESULT([no])]) ++ [op_avx_support=1 ++ MCA_BUILD_OP_AVX_FLAGS="-mavx" ++ op_sse41_support=0 ++ op_sse3_support=0 ++ AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([no])])]) + +- AS_IF([test $op_sse41_support -eq 0], +- [AC_MSG_CHECKING([for SSE4.1 support]) +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], +- [[ ++ AS_IF([test "$op_avx_check_sse41" = "yes" && test $op_sse41_support -eq 0], ++ [AC_MSG_CHECKING([for SSE4.1 support]) ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], ++ [[ + __m128i vA, vB; + (void)_mm_max_epi8(vA, vB) +- ]])], +- [op_sse41_support=1 +- AC_MSG_RESULT([yes])], +- [AC_MSG_RESULT([no])]) +- ]) +- AS_IF([test $op_sse3_support -eq 0], +- [AC_MSG_CHECKING([for SSE3 support]) +- AC_LINK_IFELSE( +- [AC_LANG_PROGRAM([[#include ]], ++ ]])], ++ [op_sse41_support=1 ++ AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([no])])]) ++ AS_IF([test "$op_avx_check_sse3" = "yes" && test $op_sse3_support -eq 0], ++ [AC_MSG_CHECKING([for SSE3 support]) ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[#include ]], + [[ + int A[4] = {0, 1, 2, 3}; + __m128i vA = _mm_lddqu_si128((__m128i*)&A) + ]])], +- [op_sse3_support=1 +- AC_MSG_RESULT([yes])], +- [AC_MSG_RESULT([no])]) +- ]) +- CFLAGS="$op_avx_cflags_save" +- ]) ++ [op_sse3_support=1 ++ AC_MSG_RESULT([yes])], ++ [AC_MSG_RESULT([no])])]) ++ CFLAGS="$op_avx_cflags_save"]) + + AC_LANG_POP([C]) + ]) +@@ -276,6 +289,12 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + AC_SUBST(MCA_BUILD_OP_AVX2_FLAGS) + AC_SUBST(MCA_BUILD_OP_AVX_FLAGS) + ++ AS_VAR_POPDEF([op_avx_check_avx512]) ++ AS_VAR_POPDEF([op_avx_check_avx2]) ++ AS_VAR_POPDEF([op_avx_check_avx]) ++ AS_VAR_POPDEF([op_avx_check_sse41]) ++ AS_VAR_POPDEF([op_avx_check_sse3]) ++ + OPAL_VAR_SCOPE_POP + # Enable this component iff we have at least the most basic form of support + # for vectorial ISA + +From fcf2766a03e3c2a1001679013878209bcddd50ae Mon Sep 17 00:00:00 2001 +From: George Bosilca +Date: Mon, 28 Dec 2020 12:18:07 -0500 +Subject: [PATCH 2/3] AVX code generation improvements + +1. Allow fallback to a lesser AVX support during make + +Due to the fact that some distro restrict the compiule architecture +during make (while not setting any restrictions during configure) we +need to detect the target architecture also during make in order to +restrict the code we generate. + +2. Add comments and better protect the arch specific code. + +Identify all the vectorial functions used and clasify them according to +the neccesary hardware capabilities. +Use these requirements to protect the code for load and stores (the rest +of the code being automatically generated it is more difficult to +protect). + +3. Correctly check for AVX* support. + +Signed-off-by: George Bosilca +--- + ompi/mca/op/avx/configure.m4 | 28 +-- + ompi/mca/op/avx/op_avx_functions.c | 322 ++++++++++++++++++++++++----- + 2 files changed, 288 insertions(+), 62 deletions(-) + +diff --git a/ompi/mca/op/avx/configure.m4 b/ompi/mca/op/avx/configure.m4 +index f61b7100ef4..f3651f09d43 100644 +--- a/ompi/mca/op/avx/configure.m4 ++++ b/ompi/mca/op/avx/configure.m4 +@@ -44,7 +44,7 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + # + # Check for AVX512 support + # +- AC_CACHE_CHECK([if we are checking for AVX512 support], op_avx_check_avx512, AS_VAR_SET(op_avx_check_avx512, yes)) ++ AC_CACHE_CHECK([for AVX512 support], op_avx_check_avx512, AS_VAR_SET(op_avx_check_avx512, yes)) + AS_IF([test "$op_avx_check_avx512" = "yes"], + [AC_MSG_CHECKING([for AVX512 support (no additional flags)]) + AC_LINK_IFELSE( +@@ -115,14 +115,14 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + # + # Check support for AVX2 + # +- AC_CACHE_CHECK([if we are checking for AVX2 support], op_avx_check_avx2, AS_VAR_SET(op_avx_check_avx2, yes)) ++ AC_CACHE_CHECK([for AVX2 support], op_avx_check_avx2, AS_VAR_SET(op_avx_check_avx2, yes)) + AS_IF([test "$op_avx_check_avx2" = "yes"], + [AC_MSG_CHECKING([for AVX2 support (no additional flags)]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[ +- __m256 vA, vB; +- _mm256_add_ps(vA, vB) ++ __m256i vA, vB, vC; ++ vC = _mm256_and_si256(vA, vB) + ]])], + [op_avx2_support=1 + AC_MSG_RESULT([yes])], +@@ -134,8 +134,8 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[ +- __m256 vA, vB; +- _mm256_add_ps(vA, vB) ++ __m256i vA, vB, vC; ++ vC = _mm256_and_si256(vA, vB) + ]])], + [op_avx2_support=1 + MCA_BUILD_OP_AVX2_FLAGS="-mavx2" +@@ -164,21 +164,21 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + CFLAGS="$op_avx_cflags_save" + ])]) + # +- # What about early AVX support. The rest of the logic is slightly different as ++ # What about early AVX support? The rest of the logic is slightly different as + # we need to include some of the SSE4.1 and SSE3 instructions. So, we first check + # if we can compile AVX code without a flag, then we validate that we have support + # for the SSE4.1 and SSE3 instructions we need. If not, we check for the usage of + # the AVX flag, and then recheck if we have support for the SSE4.1 and SSE3 + # instructions. + # +- AC_CACHE_CHECK([if we are checking for AVX support], op_avx_check_avx, AS_VAR_SET(op_avx_check_avx, yes)) ++ AC_CACHE_CHECK([for AVX support], op_avx_check_avx, AS_VAR_SET(op_avx_check_avx, yes)) + AS_IF([test "$op_avx_check_avx" = "yes"], + [AC_MSG_CHECKING([for AVX support (no additional flags)]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[ +- __m128 vA, vB; +- _mm_add_ps(vA, vB) ++ __m256 vA, vB, vC; ++ vC = _mm256_add_ps(vA, vB) + ]])], + [op_avx_support=1 + AC_MSG_RESULT([yes])], +@@ -186,7 +186,7 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + # + # Check for SSE4.1 support + # +- AC_CACHE_CHECK([if we are checking for SSE4.1 support], op_avx_check_sse41, AS_VAR_SET(op_avx_check_sse41, yes)) ++ AC_CACHE_CHECK([for SSE4.1 support], op_avx_check_sse41, AS_VAR_SET(op_avx_check_sse41, yes)) + AS_IF([test $op_avx_support -eq 1 && test "$op_avx_check_sse41" = "yes"], + [AC_MSG_CHECKING([for SSE4.1 support]) + AC_LINK_IFELSE( +@@ -202,7 +202,7 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + # + # Check for SSE3 support + # +- AC_CACHE_CHECK([if we are checking for SSE3 support], op_avx_check_sse3, AS_VAR_SET(op_avx_check_sse3, yes)) ++ AC_CACHE_CHECK([for SSE3 support], op_avx_check_sse3, AS_VAR_SET(op_avx_check_sse3, yes)) + AS_IF([test $op_avx_support -eq 1 && test "$op_avx_check_sse3" = "yes"], + [AC_MSG_CHECKING([for SSE3 support]) + AC_LINK_IFELSE( +@@ -224,8 +224,8 @@ AC_DEFUN([MCA_ompi_op_avx_CONFIG],[ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[ +- __m128 vA, vB; +- _mm_add_ps(vA, vB) ++ __m256 vA, vB, vC; ++ vC = _mm256_add_ps(vA, vB) + ]])], + [op_avx_support=1 + MCA_BUILD_OP_AVX_FLAGS="-mavx" +diff --git a/ompi/mca/op/avx/op_avx_functions.c b/ompi/mca/op/avx/op_avx_functions.c +index 95a9c9ab84e..ef3f0932906 100644 +--- a/ompi/mca/op/avx/op_avx_functions.c ++++ b/ompi/mca/op/avx/op_avx_functions.c +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2019-2020 The University of Tennessee and The University ++ * Copyright (c) 2019-2021 The University of Tennessee and The University + * of Tennessee Research Foundation. All rights + * reserved. + * Copyright (c) 2020 Research Organization for Information Science +@@ -24,16 +24,42 @@ + #include "ompi/mca/op/avx/op_avx.h" + + #include +- ++/** ++ * The following logic is necessary to cope with distro maintainer's desire to change the compilation ++ * flags after the configure step, leading to inconsistencies between what OMPI has detected and what ++ * code can be generated during make. If we detect that the current code generation architecture has ++ * been changed from our own setting and cannot generate the code we need (AVX512, AVX2) we fall back ++ * to a lesser support (AVX512 -> AVX2, AVX2 -> AVX, AVX -> error out). ++ */ + #if defined(GENERATE_AVX512_CODE) +-#define PREPEND _avx512 +-#elif defined(GENERATE_AVX2_CODE) +-#define PREPEND _avx2 +-#elif defined(GENERATE_AVX_CODE) +-#define PREPEND _avx +-#else +-#error This file should not be compiled in this conditions +-#endif ++# if defined(__AVX512BW__) && defined(__AVX512F__) && defined(__AVX512VL__) ++# define PREPEND _avx512 ++# else ++# undef GENERATE_AVX512_CODE ++# endif /* defined(__AVX512BW__) && defined(__AVX512F__) && defined(__AVX512VL__) */ ++#endif /* defined(GENERATE_AVX512_CODE) */ ++ ++#if !defined(PREPEND) && defined(GENERATE_AVX2_CODE) ++# if defined(__AVX2__) ++# define PREPEND _avx2 ++# else ++# undef GENERATE_AVX2_CODE ++# endif /* defined(__AVX2__) */ ++#endif /* !defined(PREPEND) && defined(GENERATE_AVX2_CODE) */ ++ ++#if !defined(PREPEND) && defined(GENERATE_AVX_CODE) ++# if defined(__AVX__) ++# define PREPEND _avx ++# endif ++#endif /* !defined(PREPEND) && defined(GENERATE_AVX_CODE) */ ++ ++#if !defined(PREPEND) ++# if OMPI_MCA_OP_HAVE_AVX512 || OMPI_MCA_OP_HAVE_AVX2 ++# error The configure step has detected possible support for AVX512 and/or AVX2 but the compiler flags during make are too restrictive. Please disable the AVX component by adding --enable-mca-no-build=op-avx to your configure step. ++# else ++# error This file should not be compiled in this conditions. Please provide the config.log file to the OMPI developers. ++# endif /* OMPI_MCA_OP_HAVE_AVX512 || OMPI_MCA_OP_HAVE_AVX2 */ ++#endif /* !defined(PREPEND) */ + + /* + * Concatenate preprocessor tokens A and B without expanding macro definitions +@@ -46,6 +72,102 @@ + */ + #define OP_CONCAT(A, B) OP_CONCAT_NX(A, B) + ++/* ++ * grep -e "_mm[125][251][862]_.*(" avx512.c -o | sed 's/(//g' | sort | uniq ++ * ++ * https://software.intel.com/sites/landingpage/IntrinsicsGuide ++ * ++ * _mm_add_epi[8,16,32,64] SSE2 ++ * _mm_add_pd SSE2 ++ * _mm_add_ps SSE ++ * _mm_adds_epi[8,16] SSE2 ++ * _mm_adds_epu[8,16] SSE2 ++ * _mm_and_si128 SSE2 ++ * _mm_lddqu_si128 SSE3 ++ * _mm_loadu_pd SSE2 ++ * _mm_loadu_ps SSE ++ * _mm_max_epi8 SSE4.1 ++ * _mm_max_epi16 SSE2 ++ * _mm_max_epi32 SSE4.1 ++ * _mm_max_epi64 AVX512VL + AVX512F ++ * _mm_max_epu8 SSE2 ++ * _mm_max_epu[16,32] SSE4.1 ++ * _mm_max_epu64 AVX512VL + AVX512F ++ * _mm_max_pd SSE2 ++ * _mm_max_ps SSE ++ * _mm_min_epi8 SSE4.1 ++ * _mm_min_epi16 SSE2 ++ * _mm_min_epi32 SSE4.1 ++ * _mm_min_epi64 AVX512VL + AVX512F ++ * _mm_min_epu8 SSE2 ++ * _mm_min_epu[16,32] SSE4.1 ++ * _mm_min_epu64 AVX512VL + AVX512F ++ * _mm_min_pd SSE2 ++ * _mm_min_ps SSE ++ * _mm_mul_pd SSE2 ++ * _mm_mul_ps SSE ++ * _mm_mullo_epi16 SSE2 ++ * _mm_mullo_epi32 SSE4.1 ++ * _mm_mullo_epi64 AVX512VL + AVX512DQ ++ * _mm_or_si128 SSE2 ++ * _mm_storeu_pd SSE2 ++ * _mm_storeu_ps SSE ++ * _mm_storeu_si128 SSE2 ++ * _mm_xor_si128 SSE2 ++ * _mm256_add_epi[8,16,32,64] AVX2 ++ * _mm256_add_p[s,d] AVX ++ * _mm256_adds_epi[8,16] AVX2 ++ * _mm256_adds_epu[8,16] AVX2 ++ * _mm256_and_si256 AVX2 ++ * _mm256_loadu_p[s,d] AVX ++ * _mm256_loadu_si256 AVX ++ * _mm256_max_epi[8,16,32] AVX2 ++ * _mm256_max_epi64 AVX512VL + AVX512F ++ * _mm256_max_epu[8,16,32] AVX2 ++ * _mm256_max_epu64 AVX512VL + AVX512F ++ * _mm256_max_p[s,d] AVX ++ * _mm256_min_epi[8,16,32] AVX2 ++ * _mm256_min_epi64 AVX512VL + AVX512F ++ * _mm256_min_epu[8,16,32] AVX2 ++ * _mm256_min_epu64 AVX512VL + AVX512F ++ * _mm256_min_p[s,d] AVX ++ * _mm256_mul_p[s,d] AVX ++ * _mm256_mullo_epi[16,32] AVX2 ++ * _mm256_mullo_epi64 AVX512VL + AVX512DQ ++ * _mm256_or_si256 AVX2 ++ * _mm256_storeu_p[s,d] AVX ++ * _mm256_storeu_si256 AVX ++ * _mm256_xor_si256 AVX2 ++ * _mm512_add_epi[8,16] AVX512BW ++ * _mm512_add_epi[32,64] AVX512F ++ * _mm512_add_p[s,d] AVX512F ++ * _mm512_adds_epi[8,16] AVX512BW ++ * _mm512_adds_epu[8,16] AVX512BW ++ * _mm512_and_si512 AVX512F ++ * _mm512_cvtepi16_epi8 AVX512BW ++ * _mm512_cvtepi8_epi16 AVX512BW ++ * _mm512_loadu_p[s,d] AVX512F ++ * _mm512_loadu_si512 AVX512F ++ * _mm512_max_epi[8,16] AVX512BW ++ * _mm512_max_epi[32,64] AVX512F ++ * _mm512_max_epu[8,16] AVX512BW ++ * _mm512_max_epu[32,64] AVX512F ++ * _mm512_max_p[s,d] AVX512F ++ * _mm512_min_epi[8,16] AVX512BW ++ * _mm512_min_epi[32,64] AVX512F ++ * _mm512_min_epu[8,16] AVX512BW ++ * _mm512_min_epu[32,64] AVX512F ++ * _mm512_min_p[s,d] AVX512F ++ * _mm512_mul_p[s,d] AVX512F ++ * _mm512_mullo_epi16 AVX512BW ++ * _mm512_mullo_epi32 AVX512F ++ * _mm512_mullo_epi64 AVX512DQ ++ * _mm512_or_si512 AVX512F ++ * _mm512_storeu_p[s,d] AVX512F ++ * _mm512_storeu_si512 AVX512F ++ * _mm512_xor_si512 AVX512F ++ */ ++ + /* + * Since all the functions in this file are essentially identical, we + * use a macro to substitute in names and types. The core operation +@@ -62,13 +184,14 @@ + (((_flag) & mca_op_avx_component.flags) == (_flag)) + + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512F__ + #define OP_AVX_AVX512_FUNC(name, type_sign, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX512F_FLAG|OMPI_OP_AVX_HAS_AVX512BW_FLAG) ) { \ + int types_per_step = (512 / 8) / sizeof(type); \ + for( ; left_over >= types_per_step; left_over -= types_per_step ) { \ +- __m512i vecA = _mm512_loadu_si512((__m512*)in); \ ++ __m512i vecA = _mm512_loadu_si512((__m512*)in); \ + in += types_per_step; \ +- __m512i vecB = _mm512_loadu_si512((__m512*)out); \ ++ __m512i vecB = _mm512_loadu_si512((__m512*)out); \ + __m512i res = _mm512_##op##_ep##type_sign##type_size(vecA, vecB); \ + _mm512_storeu_si512((__m512*)out, res); \ + out += types_per_step; \ +@@ -76,10 +199,14 @@ + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX512F support needed for _mm512_loadu_si512 and _mm512_storeu_si512 ++#endif /* __AVX512F__ */ ++#else + #define OP_AVX_AVX512_FUNC(name, type_sign, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + + #if defined(GENERATE_AVX2_CODE) && defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) ++#if __AVX__ + #define OP_AVX_AVX2_FUNC(name, type_sign, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX2_FLAG | OMPI_OP_AVX_HAS_AVX_FLAG) ) { \ + int types_per_step = (256 / 8) / sizeof(type); /* AVX2 */ \ +@@ -87,30 +214,37 @@ + __m256i vecA = _mm256_loadu_si256((__m256i*)in); \ + in += types_per_step; \ + __m256i vecB = _mm256_loadu_si256((__m256i*)out); \ +- __m256i res = _mm256_##op##_ep##type_sign##type_size(vecA, vecB); \ ++ __m256i res = _mm256_##op##_ep##type_sign##type_size(vecA, vecB); \ + _mm256_storeu_si256((__m256i*)out, res); \ + out += types_per_step; \ + } \ + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX support needed for _mm256_loadu_si256 and _mm256_storeu_si256 ++#endif /* __AVX__ */ ++#else + #define OP_AVX_AVX2_FUNC(name, type_sign, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) */ + + #if defined(GENERATE_SSE3_CODE) && defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) ++#if __SSE3__ + #define OP_AVX_SSE4_1_FUNC(name, type_sign, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_SSE3_FLAG | OMPI_OP_AVX_HAS_SSE4_1_FLAG) ) { \ +- int types_per_step = (128 / 8) / sizeof(type); /* AVX */ \ ++ int types_per_step = (128 / 8) / sizeof(type); \ + for( ; left_over >= types_per_step; left_over -= types_per_step ) { \ + __m128i vecA = _mm_lddqu_si128((__m128i*)in); \ + in += types_per_step; \ + __m128i vecB = _mm_lddqu_si128((__m128i*)out); \ +- __m128i res = _mm_##op##_ep##type_sign##type_size(vecA, vecB); \ ++ __m128i res = _mm_##op##_ep##type_sign##type_size(vecA, vecB); \ + _mm_storeu_si128((__m128i*)out, res); \ + out += types_per_step; \ + } \ + } + #else ++#error Target architecture lacks SSE3 support needed for _mm_lddqu_si128 and _mm_storeu_si128 ++#endif /* __SSE3__ */ ++#else + #define OP_AVX_SSE4_1_FUNC(name, type_sign, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) */ + +@@ -143,12 +277,13 @@ static void OP_CONCAT(ompi_op_avx_2buff_##name##_##type,PREPEND)(const void *_in + } + + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512BW__ && __AVX__ + #define OP_AVX_AVX512_MUL(name, type_sign, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX512F_FLAG | OMPI_OP_AVX_HAS_AVX512BW_FLAG) ) { \ + int types_per_step = (256 / 8) / sizeof(type); \ + for (; left_over >= types_per_step; left_over -= types_per_step) { \ +- __m256i vecA_tmp = _mm256_loadu_si256((__m256i*)in); \ +- __m256i vecB_tmp = _mm256_loadu_si256((__m256i*)out); \ ++ __m256i vecA_tmp = _mm256_loadu_si256((__m256i*)in); \ ++ __m256i vecB_tmp = _mm256_loadu_si256((__m256i*)out); \ + in += types_per_step; \ + __m512i vecA = _mm512_cvtepi8_epi16(vecA_tmp); \ + __m512i vecB = _mm512_cvtepi8_epi16(vecB_tmp); \ +@@ -160,6 +295,9 @@ static void OP_CONCAT(ompi_op_avx_2buff_##name##_##type,PREPEND)(const void *_in + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX512BW and AVX support needed for _mm256_loadu_si256, _mm256_storeu_si256 and _mm512_cvtepi8_epi16 ++#endif /* __AVX512BW__ && __AVX__ */ ++#else + #define OP_AVX_AVX512_MUL(name, type_sign, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + /** +@@ -201,13 +339,14 @@ static void OP_CONCAT( ompi_op_avx_2buff_##name##_##type, PREPEND)(const void *_ + * + */ + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512F__ + #define OP_AVX_AVX512_BIT_FUNC(name, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS( OMPI_OP_AVX_HAS_AVX512F_FLAG) ) { \ + types_per_step = (512 / 8) / sizeof(type); \ + for (; left_over >= types_per_step; left_over -= types_per_step) { \ +- __m512i vecA = _mm512_loadu_si512((__m512i*)in); \ ++ __m512i vecA = _mm512_loadu_si512((__m512i*)in); \ + in += types_per_step; \ +- __m512i vecB = _mm512_loadu_si512((__m512i*)out); \ ++ __m512i vecB = _mm512_loadu_si512((__m512i*)out); \ + __m512i res = _mm512_##op##_si512(vecA, vecB); \ + _mm512_storeu_si512((__m512i*)out, res); \ + out += types_per_step; \ +@@ -215,10 +354,14 @@ static void OP_CONCAT( ompi_op_avx_2buff_##name##_##type, PREPEND)(const void *_ + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX512F support needed for _mm512_loadu_si512 and _mm512_storeu_si512 ++#endif /* __AVX512F__ */ ++#else + #define OP_AVX_AVX512_BIT_FUNC(name, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + + #if defined(GENERATE_AVX2_CODE) && defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) ++#if __AVX__ + #define OP_AVX_AVX2_BIT_FUNC(name, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX2_FLAG | OMPI_OP_AVX_HAS_AVX_FLAG) ) { \ + types_per_step = (256 / 8) / sizeof(type); \ +@@ -226,17 +369,21 @@ static void OP_CONCAT( ompi_op_avx_2buff_##name##_##type, PREPEND)(const void *_ + __m256i vecA = _mm256_loadu_si256((__m256i*)in); \ + in += types_per_step; \ + __m256i vecB = _mm256_loadu_si256((__m256i*)out); \ +- __m256i res = _mm256_##op##_si256(vecA, vecB); \ ++ __m256i res = _mm256_##op##_si256(vecA, vecB); \ + _mm256_storeu_si256((__m256i*)out, res); \ + out += types_per_step; \ + } \ + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX support needed for _mm256_loadu_si256 and _mm256_storeu_si256 ++#endif /* __AVX__ */ ++#else + #define OP_AVX_AVX2_BIT_FUNC(name, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) */ + + #if defined(GENERATE_SSE3_CODE) && defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) ++#if __SSE3__ && __SSE2__ + #define OP_AVX_SSE3_BIT_FUNC(name, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_SSE3_FLAG) ) { \ + types_per_step = (128 / 8) / sizeof(type); \ +@@ -244,12 +391,15 @@ static void OP_CONCAT( ompi_op_avx_2buff_##name##_##type, PREPEND)(const void *_ + __m128i vecA = _mm_lddqu_si128((__m128i*)in); \ + in += types_per_step; \ + __m128i vecB = _mm_lddqu_si128((__m128i*)out); \ +- __m128i res = _mm_##op##_si128(vecA, vecB); \ ++ __m128i res = _mm_##op##_si128(vecA, vecB); \ + _mm_storeu_si128((__m128i*)out, res); \ + out += types_per_step; \ + } \ + } + #else ++#error Target architecture lacks SSE2 and SSE3 support needed for _mm_lddqu_si128 and _mm_storeu_si128 ++#endif /* __SSE3__ && __SSE2__ */ ++#else + #define OP_AVX_SSE3_BIT_FUNC(name, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) */ + +@@ -282,12 +432,13 @@ static void OP_CONCAT(ompi_op_avx_2buff_##name##_##type,PREPEND)(const void *_in + } + + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512F__ + #define OP_AVX_AVX512_FLOAT_FUNC(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX512F_FLAG) ) { \ + types_per_step = (512 / 8) / sizeof(float); \ + for (; left_over >= types_per_step; left_over -= types_per_step) { \ +- __m512 vecA = _mm512_loadu_ps((__m512*)in); \ +- __m512 vecB = _mm512_loadu_ps((__m512*)out); \ ++ __m512 vecA = _mm512_loadu_ps((__m512*)in); \ ++ __m512 vecB = _mm512_loadu_ps((__m512*)out); \ + in += types_per_step; \ + __m512 res = _mm512_##op##_ps(vecA, vecB); \ + _mm512_storeu_ps((__m512*)out, res); \ +@@ -296,28 +447,36 @@ static void OP_CONCAT(ompi_op_avx_2buff_##name##_##type,PREPEND)(const void *_in + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX512F support needed for _mm512_loadu_ps and _mm512_storeu_ps ++#endif /* __AVX512F__ */ ++#else + #define OP_AVX_AVX512_FLOAT_FUNC(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + + #if defined(GENERATE_AVX2_CODE) && defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) ++#if __AVX__ + #define OP_AVX_AVX_FLOAT_FUNC(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX_FLAG) ) { \ + types_per_step = (256 / 8) / sizeof(float); \ + for( ; left_over >= types_per_step; left_over -= types_per_step ) { \ +- __m256 vecA = _mm256_loadu_ps(in); \ ++ __m256 vecA = _mm256_loadu_ps(in); \ + in += types_per_step; \ +- __m256 vecB = _mm256_loadu_ps(out); \ ++ __m256 vecB = _mm256_loadu_ps(out); \ + __m256 res = _mm256_##op##_ps(vecA, vecB); \ +- _mm256_storeu_ps(out, res); \ ++ _mm256_storeu_ps(out, res); \ + out += types_per_step; \ + } \ + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX support needed for _mm256_loadu_ps and _mm256_storeu_ps ++#endif /* __AVX__ */ ++#else + #define OP_AVX_AVX_FLOAT_FUNC(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) */ + + #if defined(GENERATE_AVX_CODE) && defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) ++#if __SSE__ + #define OP_AVX_SSE_FLOAT_FUNC(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_SSE_FLAG) ) { \ + types_per_step = (128 / 8) / sizeof(float); \ +@@ -331,6 +490,9 @@ static void OP_CONCAT(ompi_op_avx_2buff_##name##_##type,PREPEND)(const void *_in + } \ + } + #else ++#error Target architecture lacks SSE support needed for _mm_loadu_ps and _mm_storeu_ps ++#endif /* __SSE__ */ ++#else + #define OP_AVX_SSE_FLOAT_FUNC(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) */ + +@@ -363,13 +525,14 @@ static void OP_CONCAT(ompi_op_avx_2buff_##op##_float,PREPEND)(const void *_in, v + } + + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512F__ + #define OP_AVX_AVX512_DOUBLE_FUNC(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX512F_FLAG) ) { \ + types_per_step = (512 / 8) / sizeof(double); \ + for (; left_over >= types_per_step; left_over -= types_per_step) { \ +- __m512d vecA = _mm512_loadu_pd(in); \ ++ __m512d vecA = _mm512_loadu_pd(in); \ + in += types_per_step; \ +- __m512d vecB = _mm512_loadu_pd(out); \ ++ __m512d vecB = _mm512_loadu_pd(out); \ + __m512d res = _mm512_##op##_pd(vecA, vecB); \ + _mm512_storeu_pd((out), res); \ + out += types_per_step; \ +@@ -377,17 +540,21 @@ static void OP_CONCAT(ompi_op_avx_2buff_##op##_float,PREPEND)(const void *_in, v + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVXF512 support needed for _mm512_loadu_pd and _mm512_storeu_pd ++#endif /* __AVXF512__ */ ++#else + #define OP_AVX_AVX512_DOUBLE_FUNC(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + + #if defined(GENERATE_AVX2_CODE) && defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) ++#if __AVX__ + #define OP_AVX_AVX_DOUBLE_FUNC(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX_FLAG) ) { \ + types_per_step = (256 / 8) / sizeof(double); \ + for( ; left_over >= types_per_step; left_over -= types_per_step ) { \ +- __m256d vecA = _mm256_loadu_pd(in); \ ++ __m256d vecA = _mm256_loadu_pd(in); \ + in += types_per_step; \ +- __m256d vecB = _mm256_loadu_pd(out); \ ++ __m256d vecB = _mm256_loadu_pd(out); \ + __m256d res = _mm256_##op##_pd(vecA, vecB); \ + _mm256_storeu_pd(out, res); \ + out += types_per_step; \ +@@ -395,10 +562,14 @@ static void OP_CONCAT(ompi_op_avx_2buff_##op##_float,PREPEND)(const void *_in, v + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX support needed for _mm256_loadu_pd and _mm256_storeu_pd ++#endif /* __AVX__ */ ++#else + #define OP_AVX_AVX_DOUBLE_FUNC(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) */ + + #if defined(GENERATE_AVX_CODE) && defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) ++#if __SSE2__ + #define OP_AVX_SSE2_DOUBLE_FUNC(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_SSE2_FLAG) ) { \ + types_per_step = (128 / 8) / sizeof(double); \ +@@ -412,6 +583,9 @@ static void OP_CONCAT(ompi_op_avx_2buff_##op##_float,PREPEND)(const void *_in, v + } \ + } + #else ++#error Target architecture lacks SSE2 support needed for _mm_loadu_pd and _mm_storeu_pd ++#endif /* __SSE2__ */ ++#else + #define OP_AVX_SSE2_DOUBLE_FUNC(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) */ + +@@ -580,12 +754,13 @@ static void OP_CONCAT(ompi_op_avx_2buff_##op##_double,PREPEND)(const void *_in, + * routines, needed for some optimizations. + */ + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512F__ + #define OP_AVX_AVX512_FUNC_3(name, type_sign, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX512F_FLAG|OMPI_OP_AVX_HAS_AVX512BW_FLAG) ) { \ + int types_per_step = (512 / 8) / sizeof(type); \ + for (; left_over >= types_per_step; left_over -= types_per_step) { \ +- __m512i vecA = _mm512_loadu_si512(in1); \ +- __m512i vecB = _mm512_loadu_si512(in2); \ ++ __m512i vecA = _mm512_loadu_si512(in1); \ ++ __m512i vecB = _mm512_loadu_si512(in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ + __m512i res = _mm512_##op##_ep##type_sign##type_size(vecA, vecB); \ +@@ -595,10 +770,14 @@ static void OP_CONCAT(ompi_op_avx_2buff_##op##_double,PREPEND)(const void *_in, + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX512F support needed for _mm512_loadu_si512 and _mm512_storeu_si512 ++#endif /* __AVX512F__ */ ++#else + #define OP_AVX_AVX512_FUNC_3(name, type_sign, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + + #if defined(GENERATE_AVX2_CODE) && defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) ++#if __AVX__ + #define OP_AVX_AVX2_FUNC_3(name, type_sign, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX2_FLAG | OMPI_OP_AVX_HAS_AVX_FLAG) ) { \ + int types_per_step = (256 / 8) / sizeof(type); \ +@@ -607,17 +786,21 @@ static void OP_CONCAT(ompi_op_avx_2buff_##op##_double,PREPEND)(const void *_in, + __m256i vecB = _mm256_loadu_si256((__m256i*)in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ +- __m256i res = _mm256_##op##_ep##type_sign##type_size(vecA, vecB); \ ++ __m256i res = _mm256_##op##_ep##type_sign##type_size(vecA, vecB); \ + _mm256_storeu_si256((__m256i*)out, res); \ + out += types_per_step; \ + } \ + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX support needed for _mm256_loadu_si256 and _mm256_storeu_si256 ++#endif /* __AVX__ */ ++#else + #define OP_AVX_AVX2_FUNC_3(name, type_sign, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) */ + + #if defined(GENERATE_SSE3_CODE) && defined(OMPI_MCA_OP_HAVE_SSE41) && (1 == OMPI_MCA_OP_HAVE_SSE41) && defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) ++#if __SSE3__ && __SSE2__ + #define OP_AVX_SSE4_1_FUNC_3(name, type_sign, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_SSE3_FLAG | OMPI_OP_AVX_HAS_SSE4_1_FLAG) ) { \ + int types_per_step = (128 / 8) / sizeof(type); \ +@@ -626,12 +809,15 @@ static void OP_CONCAT(ompi_op_avx_2buff_##op##_double,PREPEND)(const void *_in, + __m128i vecB = _mm_lddqu_si128((__m128i*)in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ +- __m128i res = _mm_##op##_ep##type_sign##type_size(vecA, vecB); \ ++ __m128i res = _mm_##op##_ep##type_sign##type_size(vecA, vecB); \ + _mm_storeu_si128((__m128i*)out, res); \ + out += types_per_step; \ + } \ + } + #else ++#error Target architecture lacks SSE2 and SSE3 support needed for _mm_lddqu_si128 and _mm_storeu_si128 ++#endif /* __SSE3__ && __SSE2__ */ ++#else + #define OP_AVX_SSE4_1_FUNC_3(name, type_sign, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) */ + +@@ -667,12 +853,13 @@ static void OP_CONCAT(ompi_op_avx_3buff_##name##_##type,PREPEND)(const void * re + } + + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512BW__ && __AVX__ + #define OP_AVX_AVX512_MUL_3(name, type_sign, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX512F_FLAG | OMPI_OP_AVX_HAS_AVX512BW_FLAG) ) { \ + int types_per_step = (256 / 8) / sizeof(type); \ + for (; left_over >= types_per_step; left_over -= types_per_step) { \ +- __m256i vecA_tmp = _mm256_loadu_si256((__m256i*)in1); \ +- __m256i vecB_tmp = _mm256_loadu_si256((__m256i*)in2); \ ++ __m256i vecA_tmp = _mm256_loadu_si256((__m256i*)in1); \ ++ __m256i vecB_tmp = _mm256_loadu_si256((__m256i*)in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ + __m512i vecA = _mm512_cvtepi8_epi16(vecA_tmp); \ +@@ -685,6 +872,9 @@ static void OP_CONCAT(ompi_op_avx_3buff_##name##_##type,PREPEND)(const void * re + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX512BW and AVX support needed for _mm256_loadu_si256, _mm256_storeu_si256 and _mm512_cvtepi8_epi16 ++#endif /* __AVX512BW__ && __AVX__ */ ++#else + #define OP_AVX_AVX512_MUL_3(name, type_sign, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + /** +@@ -723,12 +913,13 @@ static void OP_CONCAT(ompi_op_avx_3buff_##name##_##type,PREPEND)(const void * re + } + + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512F__ + #define OP_AVX_AVX512_BIT_FUNC_3(name, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX512F_FLAG) ) { \ + types_per_step = (512 / 8) / sizeof(type); \ + for (; left_over >= types_per_step; left_over -= types_per_step) { \ +- __m512i vecA = _mm512_loadu_si512(in1); \ +- __m512i vecB = _mm512_loadu_si512(in2); \ ++ __m512i vecA = _mm512_loadu_si512(in1); \ ++ __m512i vecB = _mm512_loadu_si512(in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ + __m512i res = _mm512_##op##_si512(vecA, vecB); \ +@@ -738,10 +929,14 @@ static void OP_CONCAT(ompi_op_avx_3buff_##name##_##type,PREPEND)(const void * re + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX512F support needed for _mm512_loadu_si512 and _mm512_storeu_si512 ++#endif /* __AVX512F__ */ ++#else + #define OP_AVX_AVX512_BIT_FUNC_3(name, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + + #if defined(GENERATE_AVX2_CODE) && defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) ++#if __AVX__ + #define OP_AVX_AVX2_BIT_FUNC_3(name, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX2_FLAG | OMPI_OP_AVX_HAS_AVX_FLAG) ) { \ + types_per_step = (256 / 8) / sizeof(type); \ +@@ -750,17 +945,21 @@ static void OP_CONCAT(ompi_op_avx_3buff_##name##_##type,PREPEND)(const void * re + __m256i vecB = _mm256_loadu_si256((__m256i*)in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ +- __m256i res = _mm256_##op##_si256(vecA, vecB); \ ++ __m256i res = _mm256_##op##_si256(vecA, vecB); \ + _mm256_storeu_si256((__m256i*)out, res); \ + out += types_per_step; \ + } \ + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX support needed for _mm256_loadu_si256 and _mm256_storeu_si256 ++#endif /* __AVX__ */ ++#else + #define OP_AVX_AVX2_BIT_FUNC_3(name, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) */ + + #if defined(GENERATE_SSE3_CODE) && defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) ++#if __SSE3__ && __SSE2__ + #define OP_AVX_SSE3_BIT_FUNC_3(name, type_size, type, op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_SSE3_FLAG) ) { \ + types_per_step = (128 / 8) / sizeof(type); \ +@@ -769,12 +968,15 @@ static void OP_CONCAT(ompi_op_avx_3buff_##name##_##type,PREPEND)(const void * re + __m128i vecB = _mm_lddqu_si128((__m128i*)in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ +- __m128i res = _mm_##op##_si128(vecA, vecB); \ ++ __m128i res = _mm_##op##_si128(vecA, vecB); \ + _mm_storeu_si128((__m128i*)out, res); \ + out += types_per_step; \ + } \ + } + #else ++#error Target architecture lacks SSE2 and SSE3 support needed for _mm_lddqu_si128 and _mm_storeu_si128 ++#endif /* __SSE3__ && __SSE2__ */ ++#else + #define OP_AVX_SSE3_BIT_FUNC_3(name, type_size, type, op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) */ + +@@ -809,12 +1011,13 @@ static void OP_CONCAT(ompi_op_avx_3buff_##op##_##type,PREPEND)(const void *_in1, + } + + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512F__ + #define OP_AVX_AVX512_FLOAT_FUNC_3(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX512F_FLAG) ) { \ + types_per_step = (512 / 8) / sizeof(float); \ + for (; left_over >= types_per_step; left_over -= types_per_step) { \ +- __m512 vecA = _mm512_loadu_ps(in1); \ +- __m512 vecB = _mm512_loadu_ps(in2); \ ++ __m512 vecA = _mm512_loadu_ps(in1); \ ++ __m512 vecB = _mm512_loadu_ps(in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ + __m512 res = _mm512_##op##_ps(vecA, vecB); \ +@@ -824,16 +1027,20 @@ static void OP_CONCAT(ompi_op_avx_3buff_##op##_##type,PREPEND)(const void *_in1, + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX512F support needed for _mm512_loadu_ps and _mm512_storeu_ps ++#endif /* __AVX512F__ */ ++#else + #define OP_AVX_AVX512_FLOAT_FUNC_3(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + + #if defined(GENERATE_AVX2_CODE) && defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) ++#if __AVX__ + #define OP_AVX_AVX_FLOAT_FUNC_3(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX_FLAG) ) { \ + types_per_step = (256 / 8) / sizeof(float); \ + for( ; left_over >= types_per_step; left_over -= types_per_step ) { \ +- __m256 vecA = _mm256_loadu_ps(in1); \ +- __m256 vecB = _mm256_loadu_ps(in2); \ ++ __m256 vecA = _mm256_loadu_ps(in1); \ ++ __m256 vecB = _mm256_loadu_ps(in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ + __m256 res = _mm256_##op##_ps(vecA, vecB); \ +@@ -843,10 +1050,14 @@ static void OP_CONCAT(ompi_op_avx_3buff_##op##_##type,PREPEND)(const void *_in1, + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX support needed for _mm256_loadu_ps and _mm256_storeu_ps ++#endif /* __AVX__ */ ++#else + #define OP_AVX_AVX_FLOAT_FUNC_3(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) */ + + #if defined(GENERATE_AVX_CODE) && defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) ++#if __SSE__ + #define OP_AVX_SSE_FLOAT_FUNC_3(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_SSE_FLAG) ) { \ + types_per_step = (128 / 8) / sizeof(float); \ +@@ -861,6 +1072,9 @@ static void OP_CONCAT(ompi_op_avx_3buff_##op##_##type,PREPEND)(const void *_in1, + } \ + } + #else ++#error Target architecture lacks SSE support needed for _mm_loadu_ps and _mm_storeu_ps ++#endif /* __SSE__ */ ++#else + #define OP_AVX_SSE_FLOAT_FUNC_3(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) */ + +@@ -895,12 +1109,13 @@ static void OP_CONCAT(ompi_op_avx_3buff_##op##_float,PREPEND)(const void *_in1, + } + + #if defined(GENERATE_AVX512_CODE) && defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) ++#if __AVX512F__ + #define OP_AVX_AVX512_DOUBLE_FUNC_3(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX512F_FLAG) ) { \ + types_per_step = (512 / 8) / sizeof(double); \ + for (; left_over >= types_per_step; left_over -= types_per_step) { \ +- __m512d vecA = _mm512_loadu_pd((in1)); \ +- __m512d vecB = _mm512_loadu_pd((in2)); \ ++ __m512d vecA = _mm512_loadu_pd((in1)); \ ++ __m512d vecB = _mm512_loadu_pd((in2)); \ + in1 += types_per_step; \ + in2 += types_per_step; \ + __m512d res = _mm512_##op##_pd(vecA, vecB); \ +@@ -910,16 +1125,20 @@ static void OP_CONCAT(ompi_op_avx_3buff_##op##_float,PREPEND)(const void *_in1, + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVXF512 support needed for _mm512_loadu_pd and _mm512_storeu_pd ++#endif /* __AVXF512__ */ ++#else + #define OP_AVX_AVX512_DOUBLE_FUNC_3(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX512) && (1 == OMPI_MCA_OP_HAVE_AVX512) */ + + #if defined(GENERATE_AVX2_CODE) && defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) ++#if __AVX__ + #define OP_AVX_AVX_DOUBLE_FUNC_3(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_AVX_FLAG) ) { \ + types_per_step = (256 / 8) / sizeof(double); \ + for( ; left_over >= types_per_step; left_over -= types_per_step ) { \ +- __m256d vecA = _mm256_loadu_pd(in1); \ +- __m256d vecB = _mm256_loadu_pd(in2); \ ++ __m256d vecA = _mm256_loadu_pd(in1); \ ++ __m256d vecB = _mm256_loadu_pd(in2); \ + in1 += types_per_step; \ + in2 += types_per_step; \ + __m256d res = _mm256_##op##_pd(vecA, vecB); \ +@@ -929,10 +1148,14 @@ static void OP_CONCAT(ompi_op_avx_3buff_##op##_float,PREPEND)(const void *_in1, + if( 0 == left_over ) return; \ + } + #else ++#error Target architecture lacks AVX support needed for _mm256_loadu_pd and _mm256_storeu_pd ++#endif /* __AVX__ */ ++#else + #define OP_AVX_AVX_DOUBLE_FUNC_3(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX2) && (1 == OMPI_MCA_OP_HAVE_AVX2) */ + + #if defined(GENERATE_AVX_CODE) && defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) ++#if __SSE2__ + #define OP_AVX_SSE2_DOUBLE_FUNC_3(op) \ + if( OMPI_OP_AVX_HAS_FLAGS(OMPI_OP_AVX_HAS_SSE2_FLAG) ) { \ + types_per_step = (128 / 8) / sizeof(double); \ +@@ -947,6 +1170,9 @@ static void OP_CONCAT(ompi_op_avx_3buff_##op##_float,PREPEND)(const void *_in1, + } \ + } + #else ++#error Target architecture lacks SSE2 support needed for _mm_loadu_pd and _mm_storeu_pd ++#endif /* __SSE2__ */ ++#else + #define OP_AVX_SSE2_DOUBLE_FUNC_3(op) {} + #endif /* defined(OMPI_MCA_OP_HAVE_AVX) && (1 == OMPI_MCA_OP_HAVE_AVX) */ + + +From 20be3fc25713ac2de3eb4d77b85248d7fe2bc28b Mon Sep 17 00:00:00 2001 +From: George Bosilca +Date: Tue, 5 Jan 2021 22:40:26 -0500 +Subject: [PATCH 3/3] A better test for MPI_OP performance. + +The test now has the ability to add a shift to all or to any of the +input and output buffers to assess the impact of unaligned operations. + +Signed-off-by: George Bosilca +--- + test/datatype/reduce_local.c | 161 ++++++++++++++++++++++------------- + 1 file changed, 104 insertions(+), 57 deletions(-) + +diff --git a/test/datatype/reduce_local.c b/test/datatype/reduce_local.c +index 97890f94227..f227439b714 100644 +--- a/test/datatype/reduce_local.c ++++ b/test/datatype/reduce_local.c +@@ -59,7 +59,7 @@ static int total_errors = 0; + _a < _b ? _a : _b; }) + + static void print_status(char* op, char* type, int type_size, +- int count, double duration, ++ int count, int max_shift, double *duration, int repeats, + int correct ) + { + if(correct) { +@@ -68,7 +68,15 @@ static void print_status(char* op, char* type, int type_size, + printf("%-10s %s [\033[1;31mfail\033[0m]", op, type); + total_errors++; + } +- printf(" count %-10d time %.6f seconds\n", count, duration); ++ if( 1 == max_shift ) { ++ printf(" count %-10d time (seconds) %.8f seconds\n", count, duration[0] / repeats); ++ } else { ++ printf(" count %-10d time (seconds / shifts) ", count); ++ for( int i = 0; i < max_shift; i++ ) { ++ printf("%.8f ", duration[i] / repeats ); ++ } ++ printf("\n"); ++ } + } + + static int do_ops_built = 0; +@@ -115,19 +123,23 @@ do { \ + const TYPE *_p1 = ((TYPE*)(INBUF)), *_p3 = ((TYPE*)(CHECK_BUF)); \ + TYPE *_p2 = ((TYPE*)(INOUT_BUF)); \ + skip_op_type = 0; \ +- for(int _k = 0; _k < min((COUNT), 4); +_k++ ) { \ +- memcpy(_p2, _p3, sizeof(TYPE) * (COUNT)); \ +- tstart = MPI_Wtime(); \ +- MPI_Reduce_local(_p1+_k, _p2+_k, (COUNT)-_k, (MPITYPE), (MPIOP)); \ +- tend = MPI_Wtime(); \ +- if( check ) { \ +- for( i = 0; i < (COUNT)-_k; i++ ) { \ +- if(((_p2+_k)[i]) == (((_p1+_k)[i]) OPNAME ((_p3+_k)[i]))) \ +- continue; \ +- printf("First error at alignment %d position %d (%" TYPE_PREFIX " %s %" TYPE_PREFIX " != %" TYPE_PREFIX ")\n", \ +- _k, i, (_p1+_k)[i], (#OPNAME), (_p3+_k)[i], (_p2+_k)[i]); \ +- correctness = 0; \ +- break; \ ++ for(int _k = 0; _k < min((COUNT), max_shift); +_k++ ) { \ ++ duration[_k] = 0.0; \ ++ for(int _r = repeats; _r > 0; _r--) { \ ++ memcpy(_p2, _p3, sizeof(TYPE) * (COUNT)); \ ++ tstart = MPI_Wtime(); \ ++ MPI_Reduce_local(_p1+_k, _p2+_k, (COUNT)-_k, (MPITYPE), (MPIOP)); \ ++ tend = MPI_Wtime(); \ ++ duration[_k] += (tend - tstart); \ ++ if( check ) { \ ++ for( i = 0; i < (COUNT)-_k; i++ ) { \ ++ if(((_p2+_k)[i]) == (((_p1+_k)[i]) OPNAME ((_p3+_k)[i]))) \ ++ continue; \ ++ printf("First error at alignment %d position %d (%" TYPE_PREFIX " %s %" TYPE_PREFIX " != %" TYPE_PREFIX ")\n", \ ++ _k, i, (_p1+_k)[i], (#OPNAME), (_p3+_k)[i], (_p2+_k)[i]); \ ++ correctness = 0; \ ++ break; \ ++ } \ + } \ + } \ + } \ +@@ -139,20 +151,24 @@ do { \ + const TYPE *_p1 = ((TYPE*)(INBUF)), *_p3 = ((TYPE*)(CHECK_BUF)); \ + TYPE *_p2 = ((TYPE*)(INOUT_BUF)); \ + skip_op_type = 0; \ +- for(int _k = 0; _k < min((COUNT), 4); +_k++ ) { \ +- memcpy(_p2, _p3, sizeof(TYPE) * (COUNT)); \ +- tstart = MPI_Wtime(); \ +- MPI_Reduce_local(_p1+_k, _p2+_k, (COUNT), (MPITYPE), (MPIOP)); \ +- tend = MPI_Wtime(); \ +- if( check ) { \ +- for( i = 0; i < (COUNT); i++ ) { \ +- TYPE _v1 = *(_p1+_k), _v2 = *(_p2+_k), _v3 = *(_p3+_k); \ +- if(_v2 == OPNAME(_v1, _v3)) \ +- continue; \ +- printf("First error at alignment %d position %d (%" TYPE_PREFIX " != %s(%" TYPE_PREFIX ", %" TYPE_PREFIX ")\n", \ +- _k, i, _v1, (#OPNAME), _v3, _v2); \ +- correctness = 0; \ +- break; \ ++ for(int _k = 0; _k < min((COUNT), max_shift); +_k++ ) { \ ++ duration[_k] = 0.0; \ ++ for(int _r = repeats; _r > 0; _r--) { \ ++ memcpy(_p2, _p3, sizeof(TYPE) * (COUNT)); \ ++ tstart = MPI_Wtime(); \ ++ MPI_Reduce_local(_p1+_k, _p2+_k, (COUNT), (MPITYPE), (MPIOP)); \ ++ tend = MPI_Wtime(); \ ++ duration[_k] += (tend - tstart); \ ++ if( check ) { \ ++ for( i = 0; i < (COUNT); i++ ) { \ ++ TYPE _v1 = *(_p1+_k), _v2 = *(_p2+_k), _v3 = *(_p3+_k); \ ++ if(_v2 == OPNAME(_v1, _v3)) \ ++ continue; \ ++ printf("First error at alignment %d position %d (%" TYPE_PREFIX " != %s(%" TYPE_PREFIX ", %" TYPE_PREFIX ")\n", \ ++ _k, i, _v1, (#OPNAME), _v3, _v2); \ ++ correctness = 0; \ ++ break; \ ++ } \ + } \ + } \ + } \ +@@ -163,24 +179,36 @@ int main(int argc, char **argv) + { + static void *in_buf = NULL, *inout_buf = NULL, *inout_check_buf = NULL; + int count, type_size = 8, rank, size, provided, correctness = 1; +- int repeats = 1, i, c; +- double tstart, tend; ++ int repeats = 1, i, c, op1_alignment = 0, res_alignment = 0; ++ int max_shift = 4; ++ double *duration, tstart, tend; + bool check = true; + char type[5] = "uifd", *op = "sum", *mpi_type; + int lower = 1, upper = 1000000, skip_op_type; + MPI_Op mpi_op; + +- while( -1 != (c = getopt(argc, argv, "l:u:t:o:s:n:vfh")) ) { ++ while( -1 != (c = getopt(argc, argv, "l:u:r:t:o:i:s:n:1:2:vfh")) ) { + switch(c) { + case 'l': + lower = atoi(optarg); + if( lower <= 0 ) { +- fprintf(stderr, "The number of elements must be positive\n"); ++ fprintf(stderr, "The lower number of elements must be positive\n"); + exit(-1); + } + break; + case 'u': + upper = atoi(optarg); ++ if( lower <= 0 ) { ++ fprintf(stderr, "The upper number of elements must be positive\n"); ++ exit(-1); ++ } ++ break; ++ case 'i': ++ max_shift = atoi(optarg); ++ if( max_shift <= 0 ) { ++ fprintf(stderr, "The max shift must be positive\n"); ++ exit(-1); ++ } + break; + case 'f': + check = false; +@@ -216,14 +244,32 @@ int main(int argc, char **argv) + exit(-1); + } + break; ++ case '1': ++ op1_alignment = atoi(optarg); ++ if( op1_alignment < 0 ) { ++ fprintf(stderr, "alignment for the first operand must be positive\n"); ++ exit(-1); ++ } ++ break; ++ case '2': ++ res_alignment = atoi(optarg); ++ if( res_alignment < 0 ) { ++ fprintf(stderr, "alignment for the result must be positive\n"); ++ exit(-1); ++ } ++ break; + case 'h': + fprintf(stdout, "%s options are:\n" + " -l : lower number of elements\n" + " -u : upper number of elements\n" + " -s : 8, 16, 32 or 64 bits elements\n" + " -t [i,u,f,d] : type of the elements to apply the operations on\n" ++ " -r : number of repetitions for each test\n" + " -o : comma separated list of operations to execute among\n" + " sum, min, max, prod, bor, bxor, band\n" ++ " -i : shift on all buffers to check alignment\n" ++ " -1 : (mis)alignment in elements for the first op\n" ++ " -2 : (mis)alignment in elements for the result\n" + " -v: increase the verbosity level\n" + " -h: this help message\n", argv[0]); + exit(0); +@@ -233,9 +279,10 @@ int main(int argc, char **argv) + if( !do_ops_built ) { /* not yet done, take the default */ + build_do_ops( "all", do_ops); + } +- in_buf = malloc(upper * sizeof(double)); +- inout_buf = malloc(upper * sizeof(double)); +- inout_check_buf = malloc(upper * sizeof(double)); ++ posix_memalign( &in_buf, 64, (upper + op1_alignment) * sizeof(double)); ++ posix_memalign( &inout_buf, 64, (upper + res_alignment) * sizeof(double)); ++ posix_memalign( &inout_check_buf, 64, upper * sizeof(double)); ++ duration = (double*)malloc(max_shift * sizeof(double)); + + ompi_mpi_init(argc, argv, MPI_THREAD_SERIALIZED, &provided, false); + +@@ -253,8 +300,8 @@ int main(int argc, char **argv) + correctness = 1; + if('i' == type[type_idx]) { + if( 8 == type_size ) { +- int8_t *in_int8 = (int8_t*)in_buf, +- *inout_int8 = (int8_t*)inout_buf, ++ int8_t *in_int8 = (int8_t*)((char*)in_buf + op1_alignment * sizeof(int8_t)), ++ *inout_int8 = (int8_t*)((char*)inout_buf + res_alignment * sizeof(int8_t)), + *inout_int8_for_check = (int8_t*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_int8[i] = 5; +@@ -299,8 +346,8 @@ int main(int argc, char **argv) + } + } + if( 16 == type_size ) { +- int16_t *in_int16 = (int16_t*)in_buf, +- *inout_int16 = (int16_t*)inout_buf, ++ int16_t *in_int16 = (int16_t*)((char*)in_buf + op1_alignment * sizeof(int16_t)), ++ *inout_int16 = (int16_t*)((char*)inout_buf + res_alignment * sizeof(int16_t)), + *inout_int16_for_check = (int16_t*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_int16[i] = 5; +@@ -345,8 +392,8 @@ int main(int argc, char **argv) + } + } + if( 32 == type_size ) { +- int32_t *in_int32 = (int32_t*)in_buf, +- *inout_int32 = (int32_t*)inout_buf, ++ int32_t *in_int32 = (int32_t*)((char*)in_buf + op1_alignment * sizeof(int32_t)), ++ *inout_int32 = (int32_t*)((char*)inout_buf + res_alignment * sizeof(int32_t)), + *inout_int32_for_check = (int32_t*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_int32[i] = 5; +@@ -391,8 +438,8 @@ int main(int argc, char **argv) + } + } + if( 64 == type_size ) { +- int64_t *in_int64 = (int64_t*)in_buf, +- *inout_int64 = (int64_t*)inout_buf, ++ int64_t *in_int64 = (int64_t*)((char*)in_buf + op1_alignment * sizeof(int64_t)), ++ *inout_int64 = (int64_t*)((char*)inout_buf + res_alignment * sizeof(int64_t)), + *inout_int64_for_check = (int64_t*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_int64[i] = 5; +@@ -440,8 +487,8 @@ int main(int argc, char **argv) + + if( 'u' == type[type_idx] ) { + if( 8 == type_size ) { +- uint8_t *in_uint8 = (uint8_t*)in_buf, +- *inout_uint8 = (uint8_t*)inout_buf, ++ uint8_t *in_uint8 = (uint8_t*)((char*)in_buf + op1_alignment * sizeof(uint8_t)), ++ *inout_uint8 = (uint8_t*)((char*)inout_buf + res_alignment * sizeof(uint8_t)), + *inout_uint8_for_check = (uint8_t*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_uint8[i] = 5; +@@ -486,8 +533,8 @@ int main(int argc, char **argv) + } + } + if( 16 == type_size ) { +- uint16_t *in_uint16 = (uint16_t*)in_buf, +- *inout_uint16 = (uint16_t*)inout_buf, ++ uint16_t *in_uint16 = (uint16_t*)((char*)in_buf + op1_alignment * sizeof(uint16_t)), ++ *inout_uint16 = (uint16_t*)((char*)inout_buf + res_alignment * sizeof(uint16_t)), + *inout_uint16_for_check = (uint16_t*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_uint16[i] = 5; +@@ -532,8 +579,8 @@ int main(int argc, char **argv) + } + } + if( 32 == type_size ) { +- uint32_t *in_uint32 = (uint32_t*)in_buf, +- *inout_uint32 = (uint32_t*)inout_buf, ++ uint32_t *in_uint32 = (uint32_t*)((char*)in_buf + op1_alignment * sizeof(uint32_t)), ++ *inout_uint32 = (uint32_t*)((char*)inout_buf + res_alignment * sizeof(uint32_t)), + *inout_uint32_for_check = (uint32_t*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_uint32[i] = 5; +@@ -578,8 +625,8 @@ int main(int argc, char **argv) + } + } + if( 64 == type_size ) { +- uint64_t *in_uint64 = (uint64_t*)in_buf, +- *inout_uint64 = (uint64_t*)inout_buf, ++ uint64_t *in_uint64 = (uint64_t*)((char*)in_buf + op1_alignment * sizeof(uint64_t)), ++ *inout_uint64 = (uint64_t*)((char*)inout_buf + res_alignment * sizeof(uint64_t)), + *inout_uint64_for_check = (uint64_t*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_uint64[i] = 5; +@@ -626,8 +673,8 @@ int main(int argc, char **argv) + } + + if( 'f' == type[type_idx] ) { +- float *in_float = (float*)in_buf, +- *inout_float = (float*)inout_buf, ++ float *in_float = (float*)((char*)in_buf + op1_alignment * sizeof(float)), ++ *inout_float = (float*)((char*)inout_buf + res_alignment * sizeof(float)), + *inout_float_for_check = (float*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_float[i] = 1000.0+1; +@@ -658,8 +705,8 @@ int main(int argc, char **argv) + } + + if( 'd' == type[type_idx] ) { +- double *in_double = (double*)in_buf, +- *inout_double = (double*)inout_buf, ++ double *in_double = (double*)((char*)in_buf + op1_alignment * sizeof(double)), ++ *inout_double = (double*)((char*)inout_buf + res_alignment * sizeof(double)), + *inout_double_for_check = (double*)inout_check_buf; + for( i = 0; i < count; i++ ) { + in_double[i] = 10.0+1; +@@ -691,7 +738,7 @@ int main(int argc, char **argv) + check_and_continue: + if( !skip_op_type ) + print_status(array_of_ops[do_ops[op_idx]].mpi_op_name, +- mpi_type, type_size, count, tend-tstart, correctness); ++ mpi_type, type_size, count, max_shift, duration, repeats, correctness); + } + if( !skip_op_type ) + printf("\n"); diff --git a/8348.patch b/8348.patch new file mode 100644 index 0000000..89d5fd7 --- /dev/null +++ b/8348.patch @@ -0,0 +1,25 @@ +From 838568da9fce85b4555b0e0cbd899c8e8ef75696 Mon Sep 17 00:00:00 2001 +From: George Bosilca +Date: Wed, 6 Jan 2021 13:30:40 -0500 +Subject: [PATCH] A started generalized request should be marked as pending. + +Fixes #8340 + +Signed-off-by: George Bosilca +(cherry picked from commit 434a2515f8aab11f505b2fca0b3d8cc41e24cef2) +--- + ompi/request/grequest.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/ompi/request/grequest.c b/ompi/request/grequest.c +index c895b4232b6..02affd642aa 100644 +--- a/ompi/request/grequest.c ++++ b/ompi/request/grequest.c +@@ -163,6 +163,7 @@ int ompi_grequest_start( + greq->greq_free.c_free = gfree_fn; + greq->greq_cancel.c_cancel = gcancel_fn; + greq->greq_base.req_status = ompi_status_empty; ++ greq->greq_base.req_complete = REQUEST_PENDING; + + *request = &greq->greq_base; + return OMPI_SUCCESS; diff --git a/changelog b/changelog deleted file mode 100644 index e55d506..0000000 --- a/changelog +++ /dev/null @@ -1,881 +0,0 @@ -* Fri Jan 17 2025 Fedora Release Engineering - 5.0.6-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Sat Nov 16 2024 Orion Poplawski - 5.0.6-1 -- Update to 5.0.6 - -* Mon Oct 07 2024 Orion Poplawski - 5.0.5-4 -- Add upstream patch to fix hdf5 tests - -* Mon Sep 02 2024 Miroslav Suchý - 5.0.5-3 -- convert license to SPDX - -* Wed Jul 31 2024 Sandro Mani - 5.0.5-2 -- Rebuild with rpm-mpi-hooks-8-10 to fix provides (#2302033) - -* Wed Jul 31 2024 Orion Poplawski - 5.0.5-1 -- Update to 5.0.5 - -* Thu Jul 18 2024 Fedora Release Engineering - 5.0.3-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Sat Jun 08 2024 Python Maint - 5.0.3-2 -- Rebuilt for Python 3.13 - -* Wed Apr 24 2024 Orion Poplawski - 5.0.3-1 -- Update to 5.0.3 - -* Mon Mar 04 2024 David Abdurachmanov - 5.0.2-2 -- Add support for riscv64 - -* Wed Feb 07 2024 Orion Poplawski - 5.0.2-1 -- Update to 5.0.2 - -* Wed Jan 24 2024 Orion Poplawski - 5.0.1-3 -- Drop unused BR on infinipath-psm - -* Sun Jan 21 2024 Fedora Release Engineering - 5.0.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Thu Dec 21 2023 Orion Poplawski - 5.0.1-1 -- Update to 5.0.1 - -* Tue Oct 31 2023 Yaakov Selkowitz - 5.0.0-2 -- Disable building docs in RHEL builds - -* Fri Oct 27 2023 Orion Poplawski - 5.0.0-1 -- Update to 5.0.0 -- Drops 32-bit i686 support -- Drops C++ bindings -- Add doc sub-package - -* Thu Oct 12 2023 Cristian Le - 4.1.5-8 -- Added CMAKE_PREFIX_PATH to module file - -* Sat Sep 30 2023 Benson Muite - 4.1.5-7 -- Add include and cmake directories for development files for OpenMPI packages - -* Fri Sep 22 2023 Orion Poplawski - 4.1.5-6 -- Rebuild for pmix 4.1.3 (bz#2240042) - -* Thu Jul 20 2023 Fedora Release Engineering - 4.1.5-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Mon Jul 10 2023 Yaakov Selkowitz - 4.1.5-4 -- Disable PSM2 in RHEL 10 builds - -* Thu Jun 22 2023 Yaakov Selkowitz - 4.1.5-3 -- Disable PSM, OrangeFS in RHEL builds - -* Tue Jun 13 2023 Python Maint - 4.1.5-2 -- Rebuilt for Python 3.12 - -* Sun Feb 26 2023 Orion Poplawski - 4.1.5-1 -- Update to 4.1.5 - -* Thu Jan 19 2023 Fedora Release Engineering - 4.1.4-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Fri Nov 11 2022 Orion Poplawski - 4.1.4-7 -- Re-enable IPv6 support - was not the issue - -* Fri Nov 11 2022 Orion Poplawski - 4.1.4-6 -- Disable IPv6 support - appears to break MPI_Init() on koji builders (bz#2141137) - -* Fri Aug 19 2022 Davide Cavalca - 4.1.4-5 -- Enable IPv6 support (bz#2119845) - -* Fri Jul 22 2022 Fedora Release Engineering - 4.1.4-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Sun Jul 10 2022 Orion Poplawski - 4.1.4-3 -- Drop java for i686 (bz#2104085) - -* Mon Jun 13 2022 Python Maint - 4.1.4-2 -- Rebuilt for Python 3.11 - -* Sun May 29 2022 Orion Poplawski - 4.1.4-1 -- Update to 4.1.4 - -* Sat Apr 16 2022 Orion Poplawski - 4.1.3-1 -- Update to 4.1.3 - -* Sat Feb 05 2022 Jiri Vanek - 4.1.2-3 -- Rebuilt for java-17-openjdk as system jdk - -* Thu Jan 20 2022 Fedora Release Engineering - 4.1.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Mon Nov 29 2021 Orion Poplawski - 4.1.2-1 -- Update to 4.1.2 - -* Sun Oct 10 2021 Orion Poplawski - 4.1.2-0.1.rc1 -- Update to 4.1.2rc1 - -* Fri Sep 03 2021 Sandro Mani - 4.1.1-4 -- Also own %%{_libdir}/%%{name}/lib/cmake/ - -* Thu Jul 22 2021 Fedora Release Engineering - 4.1.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Fri Jun 04 2021 Python Maint - 4.1.1-2 -- Rebuilt for Python 3.10 - -* Tue Apr 27 2021 Orion Poplawski - 4.1.1-1 -- Update to 4.1.1 - -* Mon Apr 05 2021 Orion Poplawski - 4.1.1-0.2.rc2 -- Update to 4.1.1rc2 - -* Thu Feb 11 2021 Orion Poplawski - 4.1.1-0.1.rc1 -- Update to 4.1.1rc1 - -* Thu Jan 28 2021 Orion Poplawski - 4.1.0-5 -- Add upstream patch for generalized requests - -* Thu Jan 28 2021 Orion Poplawski - 4.1.0-4 -- Add upstream patch to fix AVX library linkage - -* Tue Jan 26 2021 Fedora Release Engineering - 4.1.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Sun Jan 24 2021 Orion Poplawski - 4.1.0-2 -- Use set_build_flags macro -- Drop old opt_ macros - -* Sun Jan 24 2021 Orion Poplawski - 4.1.0-1 -- Update to 4.1.0 - -* Wed Sep 23 2020 Orion Poplawski - 4.0.5-2 -- Rebuild for libevent 2.1.12 - -* Wed Sep 02 2020 Orion Poplawski - 4.0.5-1 -- Update to 4.0.5 - -* Tue Jul 28 2020 Fedora Release Engineering - 4.0.4-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Sat Jul 11 2020 Jiri Vanek - 4.0.4-2 -- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11 - -* Wed Jun 17 2020 Orion Poplawski - 4.0.4-1 -- Update to 4.0.4 - -* Mon May 25 2020 Miro Hrončok - 4.0.4-0.3.rc1 -- Rebuilt for Python 3.9 - -* Sun May 24 2020 Orion Poplawski - 4.0.4-0.2.rc1 -- Set OMPI_MCA_rmaps_base_oversubscribe=1 in %%_openmpi_load (bz#1839571) - -* Sun May 10 2020 Orion Poplawski - 4.0.4-0.1.rc1 -- Update to 4.0.4 rc1 - -* Thu Mar 05 2020 Orion Poplawski - 4.0.3x-1 -- Update to 4.0.3 (use x to avoid epoch) - -* Sun Mar 01 2020 Orion Poplawski - 4.0.3rc4-1 -- Update to 4.0.3rc4 - -* Sat Feb 1 2020 Orion Poplawski - 4.0.3rc3-1 -- Update to 4.0.3rc3 - -* Wed Jan 29 2020 Fedora Release Engineering - 4.0.2-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Tue Dec 10 2019 Dominik Mierzejewski - 4.0.2-4 -- disable rdma on ARM 32-bit (bz#1780584) - -* Sun Nov 24 2019 Orion Poplawski - 4.0.2-3 -- Add upstream fix for error in calculating aggregators in 32bit mode - -* Fri Nov 15 2019 Orion Poplawski - 4.0.2-2 -- Drop python2 for Fedora 32+ (bz#1773125) - -* Mon Oct 7 2019 Philip Kovacs - 4.0.2-1 -- Update to 4.0.2 - -* Sat Sep 14 2019 Orion Poplawski - 4.0.2-0.4.rc2 -- Update to 4.0.2rc2 -- Re-enable C++ bindings on power64 - -* Fri Sep 6 2019 Philip Kovacs - 4.0.2-0.3.rc1 -- Rebuild for annobin update to correct aarch64 build (bug #1748529) - -* Fri Aug 30 2019 Philip Kovacs - 4.0.2-0.2.rc1 -- Apply upstream PR 6946 to avoid linking to __mmap -- Add build deps to run upstream autogen.pl -- Remove embedded tabs in the spec - -* Thu Aug 29 2019 Philip Kovacs - 4.0.2-0.1.rc1 -- Update to 4.0.2rc1 -- Closes bug #1746564 - -* Thu Aug 29 2019 Zbigniew Jędrzejewski-Szmek - 4.0.1-11 -- Fix MANPATH so normal modules can still be loaded (#1564899) - -* Sun Aug 25 2019 Zbigniew Jędrzejewski-Szmek - 4.0.1-10 -- Rebuilt for hwloc-2.0 - -* Sun Aug 18 2019 Miro Hrončok - 4.0.1-9 -- Rebuilt for Python 3.8 - -* Fri Aug 9 2019 Philip Kovacs - 4.0.1-8 -- Remove torque support (torque retired: bug #1676147) - -* Thu Jul 25 2019 Fedora Release Engineering - 4.0.1-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Fri Jun 21 2019 Orion Poplawski - 4.0.1-6 -- Rebuild for libfabric 1.8 -- Re-enable UCX, hopefully issue fixed in 1.5.2 - -* Mon May 27 2019 Orion Poplawski - 4.0.1-5 -- Drop UCX support for now - -* Wed May 15 2019 Orion Poplawski - 4.0.1-4 -- Add upstream patch OSC/UCX: use correct rkey for atomic_fadd in rget/rput - -* Wed May 15 2019 Orion Poplawski - 4.0.1-3 -- Add upstream patch to fix issue with UCX usage in BTL/UCT - -* Tue May 7 2019 Orion Poplawski - 4.0.1-2 -- Add a guard for python3 version (#1705296) -- Add requires on python(abi) to python packages - -* Sun Apr 28 2019 Orion Poplawski - 4.0.1-1 -- Update to 4.0.1 - -* Sun Apr 28 2019 Orion Poplawski - 3.1.4-1 -- Update to 3.1.4 - -* Mon Apr 22 2019 Björn Esser - 3.1.3-5 -- rebuilt(opensm) - -* Wed Apr 17 2019 Christoph Junghans - 3.1.3-4 -- Rebuild to fix ibosmcomp linkage - -* Sat Mar 2 2019 Orion Poplawski - 3.1.3-3 -- Enable valgrind on s390x -- Cleanup arch conditionals - -* Tue Feb 19 2019 Orion Poplawski - 3.1.3-2 -- Enable PVFS2/OrangeFS MPI-IO support (bug #1655010) - -* Wed Feb 13 2019 Orion Poplawski - 3.1.3-1 -- Update to 3.1.3 -- Drop ppc64le patch fixed upstream -- Use external libevent and pmix, except on EL7 -- Fix EPEL7 builds - -* Sat Feb 2 2019 Orion Poplawski - 2.1.6-1 -- Update to 2.1.6 - -* Fri Feb 01 2019 Fedora Release Engineering - 2.1.6-0.2.rc1 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Wed Nov 28 2018 Orion Poplawski - 2.1.6-0.1.rc1 -- Update to 2.1.6rc1 - -* Thu Oct 11 2018 Orion Poplawski - 2.1.5-1 -- Update to 2.1.5 - -* Sun Jul 22 2018 Orion Poplawski - 2.1.1-14 -- Add BR gcc-c++ (fix FTBFS bug #1605323) - -* Fri Jul 13 2018 Fedora Release Engineering - 2.1.1-13 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Tue Jun 19 2018 Miro Hrončok - 2.1.1-12 -- Rebuilt for Python 3.7 - -* Thu May 10 2018 Troy Dawson - 2.1.1-11 -- Build with rdma-core-devel instead of libibcm-devel - -* Mon Apr 30 2018 Florian Weimer - 2.1.1-10 -- Rebuild with new flags from redhat-rpm-config - -* Fri Feb 09 2018 Igor Gnatenko - 2.1.1-9 -- Escape macros in %%changelog - -* Mon Feb 05 2018 Orion Poplawski - 2.1.1-8 -- Rebuild for rdma-core 16.2 - -* Wed Jan 31 2018 Christoph Junghans - 2.1.1-7 -- Rebuild for gfortran-8 - -* Fri Jan 12 2018 Iryna Shcherbina - 2.1.1-6 -- Update Python 2 dependency declarations to new packaging standards - (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) - -* Wed Aug 23 2017 Adam Williamson - 2.1.1-5 -- Disable RDMA support on 32-bit ARM (#1484155) -- Disable hanging opal_fifo test on ppc64le (gh #2526 / #2966) - -* Thu Aug 03 2017 Fedora Release Engineering - 2.1.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Thu Jul 27 2017 Fedora Release Engineering - 2.1.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Wed Jul 19 2017 Orion Poplawski - 2.1.1-2 -- Provide pkgconfig files in the main namespace as well (1471512) - -* Fri May 12 2017 Orion Poplawski - 2.1.1-1 -- Update to 2.1.1 - -* Thu May 4 2017 Orion Poplawski - 2.1.0-1 -- Update to 2.1.0 - -* Sat Feb 11 2017 Fedora Release Engineering - 2.0.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Thu Feb 2 2017 Orion Poplawski - 2.0.2-1 -- Update to 2.0.2 - -* Sat Jan 28 2017 Björn Esser - 2.0.1-7 -- Rebuilt for GCC-7 - -* Mon Dec 19 2016 Miro Hrončok - 2.0.1-6 -- Rebuild for Python 3.6 - -* Wed Nov 2 2016 Orion Poplawski - 2.0.1-5 -- Split python support into sub-packages (bug #1391157) - -* Thu Oct 27 2016 Dan Horák - 2.0.1-4 -- Temporarily disable C++ bindings on ppc64/ppc64le (#1388561) - -* Mon Oct 24 2016 Orion Poplawski - 2.0.1-3 -- Fix License tag format -- Use /usr/share/modulefiles for modulefile install location - -* Mon Oct 24 2016 Orion Poplawski - 2.0.1-2 -- Add upstream patch for thread wait issue with mpi4py - -* Fri Oct 21 2016 Orion Poplawski - 2.0.1-1 -- Update to 2.0.1 - -* Thu Oct 20 2016 Orion Poplawski - 1.10.4-4 -- Support s390(x) (bug #1358701) - -* Thu Oct 20 2016 Orion Poplawski - 1.10.4-3 -- Enable psm/psm2 support on x86_64 (bug #1263655) - -* Wed Oct 19 2016 Orion Poplawski - 1.10.4-2 -- Enable MPI_THREAD_MULTIPLE support (bug #1369989) - -* Wed Oct 19 2016 Orion Poplawski - 1.10.4-1 -- Update to 1.10.4 - -* Thu Sep 15 2016 Orion Poplawski - 1.10.3-3 -- Rebuild for papi 5.5.0 - -* Fri Jun 24 2016 Orion Poplawski - 1.10.3-2 -- Use bundled libevent, system version causes issues (bug #1235044) - -* Wed Jun 15 2016 Orion Poplawski - 1.10.3-1 -- Update to 1.10.3 -- New javadoc location - -* Thu Feb 04 2016 Fedora Release Engineering - 1.10.2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Tue Jan 26 2016 Orion Poplawski - 1.10.2-2 -- Rebuild for papi 5.4.3 - -* Thu Jan 21 2016 Orion Poplawski - 1.10.2-1 -- Update to 1.10.2 -- Drop upsream nbc_copy patch - -* Tue Nov 10 2015 Orion Poplawski - 1.10.1-3 -- Add upstream patch to fix zero size message - -* Tue Nov 10 2015 Fedora Release Engineering - 1.10.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 - -* Thu Nov 5 2015 Orion Poplawski - 1.10.1-1 -- Update to 1.10.1 -- Require environment(modules) -- Fixup fortran module install (bug #1154982) - -* Tue Oct 6 2015 Orion Poplawski - 1.10.0-3 -- Do not set CFLAGS in %%_openmpi_load - -* Wed Sep 16 2015 Orion Poplawski - 1.10.0-2 -- Add patch to add needed opal/util/argv.h includes - -* Tue Sep 15 2015 Orion Poplawski - 1.10.0-1 -- Update to 1.10.0 - -* Thu Aug 27 2015 Zbigniew Jędrzejewski-Szmek - 1.8.8-5 -- Use .pth files to set the python path (https://fedorahosted.org/fpc/ticket/563) - -* Mon Aug 24 2015 Orion Poplawski 1.8.8-4 -- Disable valgrind only on s390 - -* Mon Aug 17 2015 Orion Poplawski 1.8.8-3 -- Do not filter libvt* provides as some dependencies link to it - -* Mon Aug 10 2015 Sandro Mani - 1.8.8-2 -- Require, BuildRequire: rpm-mpi-hooks - -* Mon Aug 10 2015 Orion Poplawski 1.8.8-1 -- Update to 1.8.8 -- Drop atomic patch applied upstream - -* Wed Jul 15 2015 Orion Poplawski 1.8.7-1 -- Update to 1.8.7 - -* Tue Jun 23 2015 Orion Poplawski 1.8.6-1 -- Update to 1.8.6 - -* Thu Jun 18 2015 Fedora Release Engineering - 1.8.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Tue May 5 2015 Orion Poplawski 1.8.5-1 -- Update to 1.8.5 - -* Fri May 1 2015 Orion Poplawski 1.8.5-0.2.rc3 -- Update to 1.8.5rc3 - -* Sun Apr 5 2015 Orion Poplawski 1.8.5-0.1.rc1 -- Update to 1.8.5rc1 - -* Mon Mar 30 2015 Orion Poplawski 1.8.4-7.20150324gitg9ad2aa8 -- Add upstream patch to fix race/hang on 32bit machines - -* Fri Mar 27 2015 Orion Poplawski 1.8.4-6.20150324gitg9ad2aa8 -- Update to latest 1.8.4 snapshot -- Add upstream patch to fix atomics on 32bit - -* Mon Mar 23 2015 Zbigniew Jędrzejewski-Szmek - 1.8.4-5.20150228gitgd83fb30 -- Rebuild for fortran update (#1204420) - -* Mon Mar 16 2015 Orion Poplawski 1.8.4-4.99.20150228gitgd83fb30 -- Own and ship pkgconfig files, set PKG_CONFIG_PATH in modulefile (bug #1113626) -- Drop old configure settings - -* Wed Mar 4 2015 Orion Poplawski 1.8.4-3.99.20150228gitgd83fb30 -- Update to 1.8.4.99 snapshot - -* Fri Feb 13 2015 Orion Poplawski 1.8.4-2 -- Fix MPI_FORTRAN_MOD_DIR (bug #1154982) - -* Tue Dec 23 2014 Orion Poplawski 1.8.4-1 -- Update to 1.8.4 - -* Mon Nov 17 2014 Orion Poplawski 1.8.3-3 -- Rebuild for papi soname change - -* Fri Oct 3 2014 Orion Poplawski 1.8.3-2 -- Fix typo in oshmem library name - -* Sat Sep 27 2014 Orion Poplawski 1.8.3-1 -- Update to 1.8.3 - -* Tue Sep 16 2014 Peter Robinson 1.8.2-2 -- ppc64le now has valgrind - -* Tue Aug 26 2014 Orion Poplawski 1.8.2-1 -- Update to 1.8.2 - -* Sun Aug 17 2014 Fedora Release Engineering - 1.8.1-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Wed Aug 6 2014 Peter Robinson 1.8.1-6 -- Rebuild (papi) - -* Mon Aug 4 2014 Dan Horák 1.8.1-5 -- no valgrind on ppc64le yet - -* Sat Aug 2 2014 Peter Robinson 1.8.1-4 -- aarch64 now has valgrind - -* Thu Jul 17 2014 Orion Poplawski 1.8.1-3 -- Add patch to prevent shmem wrappers from adding extra libs - -* Sat Jun 07 2014 Fedora Release Engineering - 1.8.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Wed Apr 23 2014 Orion Poplawski 1.8.1-1 -- Update to 1.8.1, fixes bug #1089044 - -* Tue Apr 1 2014 Orion Poplawski 1.8-1 -- Update to 1.8 - -* Tue Mar 25 2014 Orion Poplawski 1.7.5-2 -- Update provides filter - -* Mon Mar 24 2014 Orion Poplawski 1.7.5-1 -- Update to 1.7.5 - -* Fri Feb 21 2014 Orion Poplawski - 1.7.4-3 -- Require java-headless - -* Sat Feb 8 2014 Ville Skyttä - 1.7.4-2 -- Install macros to %%{_rpmconfdir}/macros.d where available. - -* Wed Feb 5 2014 Orion Poplawski 1.7.4-1 -- Update to 1.7.4 -- Drop format patch fixed upstream -- Build against system libevent -- Build Java mpi bindings, ship in -java sub-package -- Add requires openssh-clients - -* Tue Jan 28 2014 Peter Robinson 1.7.3-5 -- Drop mode/modeflag. mode no longer used, modeflag obsolete as set in CFLAGS -- Use distro LDFLAGS for hardened build -- Drop armv5tel options -- General spec cleanups - -* Thu Jan 16 2014 Orion Poplawski 1.7.3-4 -- Rebuild with papi 5.3.0 - -* Wed Dec 4 2013 Peter Robinson 1.7.3-3 -- valgrind not currently supported on aarch64 - -* Tue Dec 3 2013 Orion Poplawski 1.7.3-2 -- Fix compilation with -Werror=format-security (bug #1037231) - -* Sun Oct 20 2013 Orion Poplawski 1.7.3-1 -- Update to 1.7.3 -- Upstream no longer ships license incompatible files - -* Fri Aug 16 2013 Orion Poplawski 1.7.2-7 -- Move orte* compiler wrappers to devel sub-package (bug #997330) - -* Thu Aug 08 2013 Dennis Gilmore - 1.7.2-6 -- rebuild for papi soname bump bz#995092 - -* Sat Aug 03 2013 Petr Pisar - 1.7.2-5 -- Perl 5.18 rebuild - -* Fri Jul 26 2013 Orion Poplawski 1.7.2-4 -- Fix build issue with _cc_name_suffix (bug #986664) - -* Mon Jul 22 2013 Deji Akingunola - 1.7.2-3 -- Rebuild for papi's shared lib fix - -* Wed Jul 17 2013 Petr Pisar - 1.7.2-2 -- Perl 5.18 rebuild - -* Thu Jun 27 2013 Orion Poplawski 1.7.2-1 -- Update to 1.7.2 - -* Wed Apr 17 2013 Orion Poplawski 1.7.1-1 -- Update to 1.7.1 -- Add BR on hwloc -- Add BR on papi-devel - -* Tue Apr 16 2013 Orion Poplawski 1.7-1 -- Update to 1.7 -- Rebase patch to handle removed components -- Drop esmtp - no longer used - -* Sat Feb 23 2013 Orion Poplawski 1.6.4-2 -- Exclude libopen-trace.* from requires - -* Fri Feb 22 2013 Orion Poplawski 1.6.4-1 -- Update to 1.6.4 -- Drop f90sover and arm-atomics patch fixed upstream - -* Mon Jan 28 2013 Orion Poplawski 1.6.3-7 -- Make __requires_exclude more specific so we don't exclude needed libs - (bug #905263) - -* Sun Nov 18 2012 Peter Robinson 1.6.3-6 -- Update atomics patch for ARM (thanks to Jon Masters) - -* Sun Nov 11 2012 Peter Robinson 1.6.3-5 -- Atomics patch to fix building on ARM (thanks to Jon Masters) - -* Mon Nov 5 2012 Orion Poplawski 1.6.3-4 -- Add patch to fix libmpi_f90.so version -- Add patch to link tests with system libltdl -- Run make check - -* Fri Nov 2 2012 Orion Poplawski 1.6.3-3 -- Set enable-opal-multi-threads for IB support - -* Thu Nov 1 2012 Orion Poplawski 1.6.3-2 -- Update rpm macros to use the new module location - -* Wed Oct 31 2012 Orion Poplawski 1.6.3-1 -- Update to 1.6.3 - -* Sat Oct 13 2012 Orion Poplawski 1.6.2-1 -- Update to 1.6.2 -- Add BR torque-devel to enable torque support -- Drop old module file location (bug #838467) - -* Thu Sep 13 2012 Orion Poplawski 1.6.1-2 -- Drop adding -fPIC, no longer needed -- Set --disable-silent-rules for more verbose build logs -- Don't add opt_*flags to the wrappers -- Only use $RPM_OPT_FLAGS if not using the opt_*flags - -* Thu Aug 23 2012 Orion Poplawski 1.6.1-1 -- Update to 1.6.1 -- Drop hostfile patch applied upstream - -* Fri Jul 20 2012 Fedora Release Engineering - 1.6-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Tue May 15 2012 Orion Poplawski 1.6-2 -- Add patch from upstream to fix default hostfile location - -* Tue May 15 2012 Orion Poplawski 1.6-1 -- Update to 1.6 -- Drop arm patch, appears to be addressed upstream -- Remove extraneous wrapper link libraries (bug 814798) - -* Tue Apr 3 2012 Peter Robinson - 1.5.5-1 -- Update to 1.5.5 - -* Tue Feb 28 2012 Fedora Release Engineering - 1.5.4-5.1 -- Rebuilt for c++ ABI breakage - -* Wed Feb 22 2012 Orion Poplawski 1.5.4-4.1 -- Rebuild with hwloc 1.4 - -* Wed Feb 15 2012 Peter Robinson - 1.5.4-4 -- Rebuild for hwloc soname bump - -* Fri Jan 20 2012 Doug Ledford - 1.5.4-3 -- Move modules file to mpi directory and make it conflict with any other - mpi module (bug #651074) - -* Sun Jan 8 2012 Orion Poplawski 1.5.4-2 -- Rebuild with gcc 4.7 (bug #772443) - -* Thu Nov 17 2011 Orion Poplawski 1.5.4-1 -- Update to 1.5.4 -- Drop dt-textrel patch fixed upstream -- Fixup handling removed files (bug #722534) -- Uses hwloc instead of plpa -- Exclude private libraries from provides/requires (bug #741104) -- Drop --enable-mpi-threads & --enable-openib-ibcm, no longer recognized - -* Sat Jun 18 2011 Peter Robinson 1.5-4 -- Exclude ARM platforms due to current lack of "atomic primitives" on the platform - -* Thu Mar 17 2011 Jay Fenlason 1.5-3 -- Add dt-textrel patch to close - Resolves: bz679489 -- Add memchecker and esmtp support - Resolves: bz647011 - -* Tue Feb 08 2011 Fedora Release Engineering - 1.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Mon Oct 18 2010 Jay Fenlason 1.5-1 -- set MANPATH in openmpi module file -- Upgrade to 1.5 -- Workaround for rhbz#617766 appears to no longer be needed for 1.5 -- remove pkgconfig files in instal -- Remove orteCC.1 dangling symlink -- Adjust the files entries for share/openmpi/help* and share/openmpi/mca* -- Adjust the files entries for share/openmpi/mpi* -- Add files entry for share/openmpi/orte*.txt - -* Sun Sep 05 2010 Dennis Gilmore - 1.4.1-7 -- disable valgrind support on sparc arches - -* Sat Jul 24 2010 David Malcolm - 1.4.1-6 -- workaround for rhbz#617766 - -* Wed Jul 21 2010 David Malcolm - 1.4.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild - -* Mon Mar 29 2010 Jay Fenlason - 1.4.1-4 -- Update to fix licencing and packaging issues: - Use the system plpa and ltdl librarires rather than the ones in the tarball - Remove licence incompatible files from the tarball. -- update module.in to prepend-path PYTHONPATH - -* Tue Mar 9 2010 Jay Fenlason - 1.4.1-3 -- remove the pkgconfig file completely like we did in RHEL. - -* Tue Jan 26 2010 Jay Fenlason - 1.4.1-2 -- BuildRequires: python - -* Tue Jan 26 2010 Jay Fenlason - 1.4.1-1 -- New upstream version, which includes the changeset_r22324 patch. -- Correct a typo in the Source0 line in this spec file. - -* Fri Jan 15 2010 Doug Ledford - 1.4-4 -- Fix an issue with usage of _cc_name_suffix that cause a broken define in - our module file - -* Fri Jan 15 2010 Doug Ledford - 1.4-3 -- Fix pkgconfig file substitution -- Bump version so we are later than the equivalent version from Red Hat - Enterprise Linux - -* Wed Jan 13 2010 Doug Ledford - 1.4-1 -- Update to latest upstream stable version -- Add support for libibcm usage -- Enable sge support via configure options since it's no longer on by default -- Add patch to resolve allreduce issue (bz538199) -- Remove no longer needed patch for Chelsio cards - -* Tue Sep 22 2009 Jay Fenlason - 1.3.3-6 -- Create and own man* directories for use by dependent packages. - -* Wed Sep 16 2009 Jay Fenlason - 1.3.3-5 -- Move the module file from %%{_datadir}/Modules/modulefiles/%%{namearch} to - %%{_sysconfdir}/modulefiles/%%{namearch} where it belongs. -- Have the -devel subpackage own the man1 and man7 directories for completeness. -- Add a blank line before the clean section. -- Remove --enable-mpirun-prefix-by-default from configure. - -* Wed Sep 9 2009 Jay Fenlason - 1.3.3-4 -- Modify packaging to conform to - https://fedoraproject.org/wiki/PackagingDrafts/MPI (bz521334). -- remove --with-ft=cr from configure, as it was apparently causing problems - for some people. -- Add librdmacm-devel and librdmacm to BuildRequires (related bz515565). -- Add openmpi-bz515567.patch to add support for the latest Chelsio device IDs - (related bz515567). -- Add exclude-arch (s390 s390x) because we don't have required -devel packages - there. - -* Sat Jul 25 2009 Fedora Release Engineering - 1.3.3-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Tue Jul 21 2009 Doug Ledford - 1.3.3-2 -- Add MPI_BIN and MPI_LIB to the modules file (related bz511099) - -* Tue Jul 21 2009 Doug Ledford - 1.3.3-1 -- Make sure all created dirs are owned (bz474677) -- Fix loading of pkgconfig file (bz476844) -- Resolve file conflict between us and libotf (bz496131) -- Resolve dangling symlinks issue (bz496909) -- Resolve unexpanded %%{mode} issues (bz496911) -- Restore -devel subpackage (bz499851) -- Make getting the default openmpi devel environment easier (bz504357) -- Make the -devel package pull in the base package (bz459458) -- Make it easier to use alternative compilers to build package (bz246484) - -* Sat Jul 18 2009 Jussi Lehtola - 1.3.1-4 -- Add Provides: openmpi-devel to fix other package builds in rawhide. - -* Fri May 08 2009 Lubomir Rintel - 1.3.1-3 -- Treat i586 the same way as i386 - -* Wed Apr 22 2009 Doug Ledford - 1.3.1-2 -- fixed broken update -- Resolves: bz496909, bz496131, bz496911 - -* Tue Apr 14 2009 Tom "spot" Callaway - 1.3.1-1 -- update to 1.3.1, cleanup alternatives, spec, make new vt subpackage - -* Thu Feb 26 2009 Fedora Release Engineering - 1.2.4-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Mon Feb 18 2008 Fedora Release Engineering - 1.2.4-2 -- Autorebuild for GCC 4.3 - -* Wed Oct 17 2007 Doug Ledford - 1.2.4-1 -- Update to 1.2.4 upstream version -- Build against libtorque -- Pass a valid mode to open -- Resolves: bz189441, bz265141 - -* Tue Aug 28 2007 Fedora Release Engineering - 1.2.3-5 -- Rebuild for selinux ppc32 issue. - -* Mon Jul 16 2007 Doug Ledford - 1.2.3-4 -- Fix a directory permission problem on the base openmpi directories - -* Thu Jul 12 2007 Florian La Roche - 1.2.3-3 -- requires alternatives for various sub-rpms - -* Mon Jul 02 2007 Doug Ledford - 1.2.3-2 -- Fix dangling symlink issue caused by a bad macro usage -- Resolves: bz246450 - -* Wed Jun 27 2007 Doug Ledford - 1.2.3-1 -- Update to latest upstream version -- Fix file ownership on -libs package -- Take a swing at solving the multi-install compatibility issues - -* Mon Feb 19 2007 Doug Ledford - 1.1.1-7 -- Bump version to be at least as high as the RHEL4U5 openmpi -- Integrate fixes made in RHEL4 openmpi into RHEL5 (fix a multilib conflict - for the openmpi.module file by moving from _datadir to _libdir, make sure - all sed replacements have the g flag so they replace all instances of - the marker per line, not just the first, and add a %%defattr tag to the - files section of the -libs package to avoid install errors about - brewbuilder not being a user or group) -- Resolves: bz229298 - -* Wed Jan 17 2007 Doug Ledford - 1.1.1-5 -- Remove the FORTIFY_SOURCE and stack protect options -- Related: bz213075 - -* Fri Oct 20 2006 Doug Ledford - 1.1.1-4 -- Bump and build against the final openib-1.1 package - -* Wed Oct 18 2006 Doug Ledford - 1.1.1-3 -- Fix an snprintf length bug in opal/util/cmd_line.c -- RESOLVES: rhbz#210714 - -* Wed Oct 18 2006 Doug Ledford - 1.1.1-2 -- Bump and build against openib-1.1-0.pre1.1 instead of 1.0 - -* Tue Oct 17 2006 Doug Ledford - 1.1.1-1 -- Update to upstream 1.1.1 version - -* Fri Oct 13 2006 Doug Ledford - 1.1-7 -- ia64 can't take -m64 on the gcc command line, so don't set it there - -* Wed Oct 11 2006 Doug Ledford - 1.1-6 -- Bump rev to match fc6 rev -- Fixup some issue with alternatives support -- Split the 32bit and 64bit libs ld.so.conf.d files into two files so - multilib or single lib installs both work properly -- Put libs into their own package -- Add symlinks to /usr/share/openmpi/bin%%{mode} so that opal_wrapper-%%{mode} - can be called even if it isn't the currently selected default method in - the alternatives setup (opal_wrapper needs to be called by mpicc, mpic++, - etc. in order to determine compile mode from argv[0]). - -* Sun Aug 27 2006 Doug Ledford - 1.1-4 -- Make sure the post/preun scripts only add/remove alternatives on initial - install and final removal, otherwise don't touch. - -* Fri Aug 25 2006 Doug Ledford - 1.1-3 -- Don't ghost the mpi.conf file as that means it will get removed when - you remove 1 out of a number of alternatives based packages -- Put the .mod file in -devel - -* Mon Aug 7 2006 Doug Ledford - 1.1-2 -- Various lint cleanups -- Switch to using the standard alternatives mechanism instead of a home - grown one - -* Wed Aug 2 2006 Doug Ledford - 1.1-1 -- Upgrade to 1.1 -- Build with Infiniband support via openib - -* Mon Jun 12 2006 Jason Vas Dias - 1.0.2-1 -- Upgrade to 1.0.2 - -* Wed Feb 15 2006 Jason Vas Dias - 1.0.1-1 -- Import into Fedora Core -- Resolve LAM clashes - -* Wed Jan 25 2006 Orion Poplawski - 1.0.1-2 -- Use configure options to install includes and libraries -- Add ld.so.conf.d file to find libraries -- Add -fPIC for x86_64 - -* Tue Jan 24 2006 Orion Poplawski - 1.0.1-1 -- 1.0.1 -- Use alternatives - -* Sat Nov 19 2005 Ed Hill - 1.0-2 -- fix lam conflicts - -* Fri Nov 18 2005 Ed Hill - 1.0-1 -- initial specfile created diff --git a/macros.openmpi b/macros.openmpi index b4f7fa5..1ee6a3c 100644 --- a/macros.openmpi +++ b/macros.openmpi @@ -1,7 +1,7 @@ %_openmpi_load \ . /etc/profile.d/modules.sh; \ module load mpi/openmpi-%{_arch}; \ - export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe + export OMPI_MCA_rmaps_base_oversubscribe=1 %_openmpi_unload \ . /etc/profile.d/modules.sh; \ module unload mpi/openmpi-%{_arch}; diff --git a/openmpi-braces.patch b/openmpi-braces.patch deleted file mode 100644 index 61b3c59..0000000 --- a/openmpi-braces.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/oshmem/mca/memheap/base/memheap_base_frame.c b/oshmem/mca/memheap/base/memheap_base_frame.c -index 53a71b27a9..82658e0979 100644 ---- a/oshmem/mca/memheap/base/memheap_base_frame.c -+++ b/oshmem/mca/memheap/base/memheap_base_frame.c -@@ -33,9 +33,9 @@ - - int mca_memheap_base_output = -1; - int mca_memheap_base_key_exchange = 1; --opal_list_t mca_memheap_base_components_opened = {{0}}; -+opal_list_t mca_memheap_base_components_opened = {}; - int mca_memheap_base_already_opened = 0; --mca_memheap_map_t mca_memheap_base_map = {{{{0}}}}; -+mca_memheap_map_t mca_memheap_base_map = {}; - int mca_memheap_num_segments_warn = 32; - - static int mca_memheap_base_register(mca_base_register_flag_t flags) diff --git a/openmpi-drop-recommonmark.patch b/openmpi-drop-recommonmark.patch deleted file mode 100644 index 9ee88a1..0000000 --- a/openmpi-drop-recommonmark.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff -ru openmpi-5.0.10/config/oac/oac_setup_sphinx.m4 openmpi-5.0.10-new/config/oac/oac_setup_sphinx.m4 ---- openmpi-5.0.10/config/oac/oac_setup_sphinx.m4 2026-02-23 21:21:40.731399193 +0100 -+++ openmpi-5.0.10-new/config/oac/oac_setup_sphinx.m4 2026-07-27 17:10:12.450825327 +0200 -@@ -115,7 +115,7 @@ - author = 'Testing' - import sphinx_rtd_theme - # Note the extra quoting needed for square brackets because this is m4 --extensions = [[ 'recommonmark', 'sphinx_rtd_theme', 'sphinx.ext.extlinks' ]] -+extensions = [[ 'sphinx_rtd_theme', 'sphinx.ext.extlinks' ]] - html_theme = 'sphinx_rtd_theme' - EOF - echo "Hello world" > index.rst -diff -ru openmpi-5.0.10/docs/conf.py openmpi-5.0.10-new/docs/conf.py ---- openmpi-5.0.10/docs/conf.py 2026-02-23 21:21:10.775279351 +0100 -+++ openmpi-5.0.10-new/docs/conf.py 2026-07-27 17:10:34.017830912 +0200 -@@ -174,7 +174,6 @@ - # ones. - import sphinx_rtd_theme - extensions = [ -- 'recommonmark', - "sphinx_rtd_theme", - "sphinx.ext.extlinks", - ] -diff -ru openmpi-5.0.10/docs/requirements.txt openmpi-5.0.10-new/docs/requirements.txt ---- openmpi-5.0.10/docs/requirements.txt 2026-02-23 21:21:10.811279501 +0100 -+++ openmpi-5.0.10-new/docs/requirements.txt 2026-07-27 17:10:43.482113314 +0200 -@@ -1,4 +1,3 @@ - sphinx>=4.2.0 --recommonmark - docutils - sphinx-rtd-theme diff --git a/openmpi-inline.patch b/openmpi-inline.patch deleted file mode 100644 index dd901e8..0000000 --- a/openmpi-inline.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/ompi/mca/part/persist/part_persist.h b/ompi/mca/part/persist/part_persist.h -index ccc8f8f197..86fb9bac42 100644 ---- a/ompi/mca/part/persist/part_persist.h -+++ b/ompi/mca/part/persist/part_persist.h -@@ -490,7 +490,7 @@ mca_part_persist_psend_init(const void* buf, - return err; - } - --__opal_attribute_always_inline__ static inline int -+static inline int - mca_part_persist_start(size_t count, ompi_request_t** requests) - { - int err = OMPI_SUCCESS; diff --git a/openmpi.module.in b/openmpi.module.in index 71cdbc3..41583c4 100644 --- a/openmpi.module.in +++ b/openmpi.module.in @@ -6,7 +6,6 @@ conflict mpi prepend-path PATH @LIBDIR@/bin prepend-path LD_LIBRARY_PATH @LIBDIR@/lib prepend-path PKG_CONFIG_PATH @LIBDIR@/lib/pkgconfig -prepend-path CMAKE_PREFIX_PATH @LIBDIR@ prepend-path MANPATH :@MANDIR@ setenv MPI_BIN @LIBDIR@/bin setenv MPI_SYSCONFIG @ETCDIR@ @@ -14,6 +13,8 @@ setenv MPI_FORTRAN_MOD_DIR @FMODDIR@ setenv MPI_INCLUDE @INCDIR@ setenv MPI_LIB @LIBDIR@/lib setenv MPI_MAN @MANDIR@ +setenv MPI_PYTHON_SITEARCH @PY2SITEARCH@ +setenv MPI_PYTHON2_SITEARCH @PY2SITEARCH@ setenv MPI_PYTHON3_SITEARCH @PY3SITEARCH@ setenv MPI_COMPILER @COMPILER@ setenv MPI_SUFFIX @SUFFIX@ diff --git a/openmpi.pth.py2 b/openmpi.pth.py2 new file mode 100644 index 0000000..a2dc353 --- /dev/null +++ b/openmpi.pth.py2 @@ -0,0 +1 @@ +import sys, os; s = os.getenv('MPI_PYTHON2_SITEARCH'); s and (s in sys.path or sys.path.append(s)) diff --git a/openmpi.spec b/openmpi.spec index c0ecb85..52b5fcc 100644 --- a/openmpi.spec +++ b/openmpi.spec @@ -5,74 +5,48 @@ %global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d) -# ucx on ppc64le/power10 is broken https://github.com/openucx/ucx/issues/10780 -%ifarch aarch64 x86_64 +%if 0%{?fedora} >= 32 || 0%{?rhel} >= 8 +%bcond_with python2 +%else +%bcond_without python2 +%endif + +%ifarch aarch64 ppc64le x86_64 %bcond_without ucx %else %bcond_with ucx %endif +# ARM 32-bit is not supported by rdma +# https://bugzilla.redhat.com/show_bug.cgi?id=1780584 +%ifarch %{arm} +%bcond_with rdma +%else %bcond_without rdma - -# No more Java on i686 -%ifarch %{java_arches} -%bcond_without java -%else -%bcond_with java %endif -%if %{defined rhel} -%bcond_with orangefs -%bcond_with sphinx -%else -%bcond_without orangefs -%bcond_without sphinx -%endif - -%ifarch x86_64 -%if 0%{?rhel} >= 10 -%bcond_with psm2 -%else -%bcond_without psm2 -%endif -%else -%bcond_with psm2 -%endif - -# Some RCs require unreleased pmix version - at least let us test builds -%bcond_without pmix - # Run autogen - needed for some patches -%bcond autogen 1 +# For Patch0 +%bcond_without autogen Name: openmpi%{?_cc_name_suffix} -Version: 5.0.10 -Release: %autorelease +Version: 4.1.0 +Release: 5%{?dist} Summary: Open Message Passing Interface -# Automatically converted from old format: BSD and MIT and Romio - review is highly recommended. -# main code is BSD-3-Clause-Open-MPI -# 3rd-party/romio341 is mpich2 -# 3rd-party/treematch is BSD-3-Clause -# oshmem/mca/memheap/ptmalloc/malloc.c is LicenseRef-Fedora-Public-Domain -# opal/util/qsort.c is BSD-4-Clause-UC -# java/ (in subpackage) is Apache-2.0 -# 3rd-party/openpmix/src/mca/psec/munge/psec_munge.c is LGPL-2.0-or-later -# doc/ see bellow in subpackage -License: BSD-3-Clause-Open-MPI AND mpich2 AND BSD-3-Clause AND LicenseRef-Fedora-Public-Domain AND BSD-4-Clause-UC +License: BSD and MIT and Romio URL: http://www.open-mpi.org/ -ExcludeArch: %{ix86} # We can't use %%{name} here because of _cc_name_suffix -Source0: https://www.open-mpi.org/software/ompi/v5.0/downloads/openmpi-%{version}.tar.bz2 +Source0: https://www.open-mpi.org/software/ompi/v4.1/downloads/openmpi-%{version}.tar.bz2 Source1: openmpi.module.in +Source2: openmpi.pth.py2 Source3: openmpi.pth.py3 Source4: macros.openmpi -# Fix always inline failure - https://github.com/open-mpi/ompi/pull/13756 -Patch: openmpi-inline.patch -# Fix brace initialization - https://github.com/open-mpi/ompi/pull/13758 -Patch: openmpi-braces.patch -# Drop unused recommonmark - https://github.com/open-mpi/ompi/pull/14215 -Patch: openmpi-drop-recommonmark.patch + +# Fix AVX library linkage +Patch0: https://patch-diff.githubusercontent.com/raw/open-mpi/ompi/pull/8322.patch +# Fix generalized requests (mpi4py test failure) +Patch1: https://patch-diff.githubusercontent.com/raw/open-mpi/ompi/pull/8348.patch BuildRequires: gcc-c++ BuildRequires: gcc-gfortran @@ -82,10 +56,9 @@ BuildRequires: libtool BuildRequires: perl(Data::Dumper) BuildRequires: perl(File::Find) %endif -%ifarch %{valgrind_arches} BuildRequires: valgrind-devel -%endif %if %{with rdma} +BuildRequires: opensm-devel > 3.3.0 BuildRequires: rdma-core-devel %endif # Doesn't compile: @@ -93,46 +66,41 @@ BuildRequires: rdma-core-devel # loop->getLoopHead()->getStartAddress(), loop_stmts ); #BuildRequires: dyninst-devel BuildRequires: hwloc-devel -%if %{with java} -BuildRequires: java-25-devel -%else -Obsoletes: %{name}-java < %{version}-%{release} -Obsoletes: %{name}-java-devel < %{version}-%{release} -%endif +# So configure can find lstopo +BuildRequires: hwloc-gui +BuildRequires: java-devel # Old libevent causes issues +%if !0%{?el7} BuildRequires: libevent-devel +%endif BuildRequires: libfabric-devel -%ifnarch s390x +%ifnarch s390 s390x BuildRequires: papi-devel %endif -%if %{with orangefs} BuildRequires: orangefs-devel -%endif BuildRequires: perl-generators BuildRequires: perl-interpreter BuildRequires: perl(Getopt::Long) -%if %{with pmix} -BuildRequires: pmix-devel >= 4.2.7 -%endif -BuildRequires: prrte-devel +BuildRequires: pmix-devel BuildRequires: python%{python3_pkgversion}-devel -%if %{with psm2} +%ifarch x86_64 +BuildRequires: infinipath-psm-devel BuildRequires: libpsm2-devel %endif %if %{with ucx} BuildRequires: ucx-devel %endif BuildRequires: zlib-devel +%if !0%{?el7} BuildRequires: rpm-mpi-hooks -%if %{with sphinx} -# For docs -BuildRequires: /usr/bin/sphinx-build -BuildRequires: python3-sphinx_rtd_theme %endif Provides: mpi +%if 0%{?rhel} +# Need this for /etc/profile.d/modules.sh +Requires: environment-modules +%endif Requires: environment(modules) -Requires: prrte # openmpi currently requires ssh to run # https://svn.open-mpi.org/trac/ompi/ticket/4228 Requires: openssh-clients @@ -154,47 +122,48 @@ researchers. For more information, see http://www.open-mpi.org/ . Summary: Development files for openmpi Requires: %{name} = %{version}-%{release}, gcc-gfortran Provides: mpi-devel +%if !0%{?el7} Requires: rpm-mpi-hooks # Make sure this package is rebuilt with correct Python version when updating # Otherwise mpi.req from rpm-mpi-hooks doesn't work # https://bugzilla.redhat.com/show_bug.cgi?id=1705296 Requires: (python(abi) = %{python3_version} if python3) +%endif %description devel Contains development headers and libraries for openmpi. -%package doc -Summary: HTML documentation for openmpi -License: BSD-3-Clause AND BSD-3-Clause-Open-MPI AND mpich2 AND MIT AND (MIT OR GPL-2.0-or-later) AND (OFL-1.1 AND MIT) -BuildArch: noarch - -%description doc -HTML documentation for openmpi. - -%if %{with java} %package java Summary: Java library -License: Apache-2.0 Requires: %{name} = %{version}-%{release} -Requires: java-25-headless +Requires: java-headless %description java Java library. %package java-devel Summary: Java development files for openmpi -License: Apache-2.0 Requires: %{name}-java = %{version}-%{release} -Requires: java-25-devel +Requires: java-devel %description java-devel Contains development wrapper for compiling Java with openmpi. -%endif # We set this to for convenience, since this is the unique dir we use for this # particular package, version, compiler %global namearch openmpi-%{_arch}%{?_cc_name_suffix} +%if %{with python2} +%package -n python2-openmpi +Summary: OpenMPI support for Python 2 +BuildRequires: python2-devel +Requires: %{name} = %{version}-%{release} +Requires: python(abi) = %{python2_version} + +%description -n python2-openmpi +OpenMPI support for Python 2. +%endif + %package -n python%{python3_pkgversion}-openmpi Summary: OpenMPI support for Python 3 Requires: %{name} = %{version}-%{release} @@ -205,7 +174,7 @@ OpenMPI support for Python 3. %prep -%autosetup -p1 -n %{name}-%{version} +%autosetup -p1 %if %{with autogen} ./autogen.pl --force %endif @@ -219,23 +188,15 @@ OpenMPI support for Python 3. --sysconfdir=%{_sysconfdir}/%{namearch} \ --disable-silent-rules \ --enable-builtin-atomics \ - --enable-ipv6 \ -%if %{with java} + --enable-mpi-cxx \ --enable-mpi-java \ -%endif --enable-mpi1-compatibility \ -%if %{with sphinx} - --enable-sphinx \ -%endif - --with-prrte=external \ --with-sge \ -%ifarch %{valgrind_arches} --with-valgrind \ --enable-memchecker \ -%endif --with-hwloc=/usr \ +%if !0%{?el7} --with-libevent=external \ -%if %{with pmix} --with-pmix=external \ %endif @@ -245,6 +206,10 @@ OpenMPI support for Python 3. %make_install find %{buildroot}%{_libdir}/%{name}/lib -name \*.la | xargs rm find %{buildroot}%{_mandir}/%{namearch} -type f | xargs gzip -9 +ln -s mpicc.1.gz %{buildroot}%{_mandir}/%{namearch}/man1/mpiCC.1.gz +# Remove dangling symlink +rm %{buildroot}%{_mandir}/%{namearch}/man1/mpiCC.1 +mkdir %{buildroot}%{_mandir}/%{namearch}/man{2,4,5,6,8,9,n} # Make the environment-modules file mkdir -p %{buildroot}%{_datadir}/modulefiles/mpi @@ -254,6 +219,11 @@ sed 's#@LIBDIR@#%{_libdir}/%{name}#; s#@FMODDIR@#%{_fmoddir}/%{name}#; s#@INCDIR@#%{_includedir}/%{namearch}#; s#@MANDIR@#%{_mandir}/%{namearch}#; +%if %{with python2} + s#@PY2SITEARCH@#%{python2_sitearch}/%{name}#; +%else + /@PY2SITEARCH@/d; +%endif s#@PY3SITEARCH@#%{python3_sitearch}/%{name}#; s#@COMPILER@#openmpi-%{_arch}%{?_cc_name_suffix}#; s#@SUFFIX@#%{?_cc_name_suffix}_openmpi#' \ @@ -277,24 +247,20 @@ cd %{buildroot}%{_libdir}/pkgconfig ln -s ../%{name}/lib/pkgconfig/*.pc . cd - -# Create cmake dir -mkdir -p %{buildroot}%{_libdir}/%{name}/lib/cmake/ - -# Create directories for OpenMPI packages with development files -mkdir -p %{buildroot}%{_libdir}/%{name}/lib/openmpi/cmake -mkdir -p %{buildroot}%{_libdir}/%{name}/include - # Remove extraneous wrapper link libraries (bug 814798) sed -i -e s/-ldl// -e s/-lhwloc// \ %{buildroot}%{_libdir}/%{name}/share/openmpi/*-wrapper-data.txt # install .pth files +%if %{with python2} +mkdir -p %{buildroot}/%{python2_sitearch}/%{name} +install -pDm0644 %{SOURCE2} %{buildroot}/%{python2_sitearch}/openmpi.pth +%endif mkdir -p %{buildroot}/%{python3_sitearch}/%{name} install -pDm0644 %{SOURCE3} %{buildroot}/%{python3_sitearch}/openmpi.pth %check -fail=1 -make check || ( cat test/*/test-suite.log && exit $fail ) +make check %files %license LICENSE @@ -303,54 +269,58 @@ make check || ( cat test/*/test-suite.log && exit $fail ) %dir %{_libdir}/%{name}/bin %dir %{_libdir}/%{name}/lib %dir %{_libdir}/%{name}/lib/openmpi -%dir %{_libdir}/%{name}/include %dir %{_mandir}/%{namearch} %dir %{_mandir}/%{namearch}/man* %config(noreplace) %{_sysconfdir}/%{namearch}/* %{_libdir}/%{name}/bin/mpi[er]* %{_libdir}/%{name}/bin/ompi* +%{_libdir}/%{name}/bin/orte[-dr_]* %if %{with ucx} %{_libdir}/%{name}/bin/oshmem_info -%endif %{_libdir}/%{name}/bin/oshrun -%if %{without pmix} -%{_libdir}/%{name}/bin/pattrs -%{_libdir}/%{name}/bin/pctrl -%{_libdir}/%{name}/bin/pevent -%{_libdir}/%{name}/bin/plookup -%{_libdir}/%{name}/bin/pmix_info -%{_libdir}/%{name}/bin/pmixcc -%{_libdir}/%{name}/bin/pps -%{_libdir}/%{name}/bin/pquery -%{_libdir}/%{name}/lib/libpmix.so.2* -%{_libdir}/%{name}/lib/pmix/ -%{_libdir}/%{name}/share/pmix/ -%{_mandir}/%{namearch}/man1/pmix_info.1* -%{_mandir}/%{namearch}/man5/openpmix.5* +%{_libdir}/%{name}/bin/shmemrun %endif -%{_mandir}/%{namearch}/man7/Open-MPI.7* %{_libdir}/%{name}/lib/*.so.40* -%{_libdir}/%{name}/lib/*.so.80* -%{_mandir}/%{namearch}/man1/mpirun.1* -%{_mandir}/%{namearch}/man1/mpisync.1* +%{_libdir}/%{name}/lib/libmca_common_ofi.so.10* +%{_libdir}/%{name}/lib/libmca*.so.41* +%{_libdir}/%{name}/lib/libmca*.so.50* +%if 0%{?el7} +%{_libdir}/%{name}/lib/pmix/ +%endif +%{_mandir}/%{namearch}/man1/mpi[er]* %{_mandir}/%{namearch}/man1/ompi* +%{_mandir}/%{namearch}/man1/orte[-dr_]* %if %{with ucx} %{_mandir}/%{namearch}/man1/oshmem_info* +%{_mandir}/%{namearch}/man1/oshrun* +%{_mandir}/%{namearch}/man1/shmemrun* %endif +%{_mandir}/%{namearch}/man7/ompi_* +%{_mandir}/%{namearch}/man7/opal_* +%{_mandir}/%{namearch}/man7/orte* %{_libdir}/%{name}/lib/openmpi/* %{_datadir}/modulefiles/mpi/ %dir %{_libdir}/%{name}/share %dir %{_libdir}/%{name}/share/openmpi %{_libdir}/%{name}/share/openmpi/amca-param-sets %{_libdir}/%{name}/share/openmpi/help*.txt +%if %{with rdma} +%{_libdir}/%{name}/share/openmpi/mca-btl-openib-device-params.ini +%endif +%if 0%{?el7} +%{_libdir}/%{name}/share/pmix/ +%endif %files devel %dir %{_includedir}/%{namearch} +%{_libdir}/%{name}/bin/aggregate_profile.pl %{_libdir}/%{name}/bin/mpi[cCf]* %{_libdir}/%{name}/bin/opal_* +%{_libdir}/%{name}/bin/orte[cCf]* %if %{with ucx} %{_libdir}/%{name}/bin/osh[cCf]* %endif +%{_libdir}/%{name}/bin/profile2mat.pl %if %{with ucx} %{_libdir}/%{name}/bin/shmem[cCf]* %endif @@ -358,13 +328,11 @@ make check || ( cat test/*/test-suite.log && exit $fail ) %{_fmoddir}/%{name}/ %{_libdir}/%{name}/lib/*.so %{_libdir}/%{name}/lib/*.mod -%{_libdir}/%{name}/lib/cmake/ %{_libdir}/%{name}/lib/pkgconfig/ %{_libdir}/pkgconfig/*.pc %{_mandir}/%{namearch}/man1/mpi[cCf]* %if %{with ucx} %{_mandir}/%{namearch}/man1/osh[cCf]* -%{_mandir}/%{namearch}/man1/oshmem-wrapper-compiler.1* %{_mandir}/%{namearch}/man1/shmem[cCf]* %endif %{_mandir}/%{namearch}/man1/opal_* @@ -373,20 +341,20 @@ make check || ( cat test/*/test-suite.log && exit $fail ) %{_libdir}/%{name}/share/openmpi/*-wrapper-data.txt %{macrosdir}/macros.%{namearch} -%files doc -%license LICENSE -%doc %{_libdir}/%{name}/share/doc/ -%exclude %{_libdir}/%{name}/share/doc/openmpi/javadoc-openmpi - -%if %{with java} %files java %{_libdir}/%{name}/lib/mpi.jar %files java-devel %{_libdir}/%{name}/bin/mpijavac %{_libdir}/%{name}/bin/mpijavac.pl -%doc %{_libdir}/%{name}/share/doc/openmpi/javadoc-openmpi +# Currently this only contaings openmpi/javadoc +%{_libdir}/%{name}/share/doc/ %{_mandir}/%{namearch}/man1/mpijavac.1.gz + +%if %{with python2} +%files -n python2-openmpi +%dir %{python2_sitearch}/%{name} +%{python2_sitearch}/openmpi.pth %endif %files -n python%{python3_pkgversion}-openmpi @@ -395,4 +363,753 @@ make check || ( cat test/*/test-suite.log && exit $fail ) %changelog -%autochangelog +* Thu Jan 28 2021 Orion Poplawski - 4.1.0-5 +- Add upstream patch for generalized requests + +* Thu Jan 28 2021 Orion Poplawski - 4.1.0-4 +- Add upstream patch to fix AVX library linkage + +* Tue Jan 26 2021 Fedora Release Engineering - 4.1.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Sun Jan 24 2021 Orion Poplawski - 4.1.0-2 +- Use set_build_flags macro +- Drop old opt_ macros + +* Sun Jan 24 2021 Orion Poplawski - 4.1.0-1 +- Update to 4.1.0 + +* Wed Sep 23 2020 Orion Poplawski - 4.0.5-2 +- Rebuild for libevent 2.1.12 + +* Wed Sep 02 2020 Orion Poplawski - 4.0.5-1 +- Update to 4.0.5 + +* Tue Jul 28 2020 Fedora Release Engineering - 4.0.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Sat Jul 11 2020 Jiri Vanek - 4.0.4-2 +- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11 + +* Wed Jun 17 2020 Orion Poplawski - 4.0.4-1 +- Update to 4.0.4 + +* Mon May 25 2020 Miro Hrončok - 4.0.4-0.3.rc1 +- Rebuilt for Python 3.9 + +* Sun May 24 2020 Orion Poplawski - 4.0.4-0.2.rc1 +- Set OMPI_MCA_rmaps_base_oversubscribe=1 in %%_openmpi_load (bz#1839571) + +* Sun May 10 2020 Orion Poplawski - 4.0.4-0.1.rc1 +- Update to 4.0.4 rc1 + +* Thu Mar 05 2020 Orion Poplawski - 4.0.3x-1 +- Update to 4.0.3 (use x to avoid epoch) + +* Sun Mar 01 2020 Orion Poplawski - 4.0.3rc4-1 +- Update to 4.0.3rc4 + +* Sat Feb 1 2020 Orion Poplawski - 4.0.3rc3-1 +- Update to 4.0.3rc3 + +* Wed Jan 29 2020 Fedora Release Engineering - 4.0.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Tue Dec 10 2019 Dominik Mierzejewski - 4.0.2-4 +- disable rdma on ARM 32-bit (bz#1780584) + +* Sun Nov 24 2019 Orion Poplawski - 4.0.2-3 +- Add upstream fix for error in calculating aggregators in 32bit mode + +* Fri Nov 15 2019 Orion Poplawski - 4.0.2-2 +- Drop python2 for Fedora 32+ (bz#1773125) + +* Mon Oct 7 2019 Philip Kovacs - 4.0.2-1 +- Update to 4.0.2 + +* Sat Sep 14 2019 Orion Poplawski - 4.0.2-0.4.rc2 +- Update to 4.0.2rc2 +- Re-enable C++ bindings on power64 + +* Fri Sep 6 2019 Philip Kovacs - 4.0.2-0.3.rc1 +- Rebuild for annobin update to correct aarch64 build (bug #1748529) + +* Fri Aug 30 2019 Philip Kovacs - 4.0.2-0.2.rc1 +- Apply upstream PR 6946 to avoid linking to __mmap +- Add build deps to run upstream autogen.pl +- Remove embedded tabs in the spec + +* Thu Aug 29 2019 Philip Kovacs - 4.0.2-0.1.rc1 +- Update to 4.0.2rc1 +- Closes bug #1746564 + +* Thu Aug 29 2019 Zbigniew Jędrzejewski-Szmek - 4.0.1-11 +- Fix MANPATH so normal modules can still be loaded (#1564899) + +* Sun Aug 25 2019 Zbigniew Jędrzejewski-Szmek - 4.0.1-10 +- Rebuilt for hwloc-2.0 + +* Sun Aug 18 2019 Miro Hrončok - 4.0.1-9 +- Rebuilt for Python 3.8 + +* Fri Aug 9 2019 Philip Kovacs - 4.0.1-8 +- Remove torque support (torque retired: bug #1676147) + +* Thu Jul 25 2019 Fedora Release Engineering - 4.0.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Jun 21 2019 Orion Poplawski - 4.0.1-6 +- Rebuild for libfabric 1.8 +- Re-enable UCX, hopefully issue fixed in 1.5.2 + +* Mon May 27 2019 Orion Poplawski - 4.0.1-5 +- Drop UCX support for now + +* Wed May 15 2019 Orion Poplawski - 4.0.1-4 +- Add upstream patch OSC/UCX: use correct rkey for atomic_fadd in rget/rput + +* Wed May 15 2019 Orion Poplawski - 4.0.1-3 +- Add upstream patch to fix issue with UCX usage in BTL/UCT + +* Tue May 7 2019 Orion Poplawski - 4.0.1-2 +- Add a guard for python3 version (#1705296) +- Add requires on python(abi) to python packages + +* Sun Apr 28 2019 Orion Poplawski - 4.0.1-1 +- Update to 4.0.1 + +* Sun Apr 28 2019 Orion Poplawski - 3.1.4-1 +- Update to 3.1.4 + +* Mon Apr 22 2019 Björn Esser - 3.1.3-5 +- rebuilt(opensm) + +* Wed Apr 17 2019 Christoph Junghans - 3.1.3-4 +- Rebuild to fix ibosmcomp linkage + +* Sat Mar 2 2019 Orion Poplawski - 3.1.3-3 +- Enable valgrind on s390x +- Cleanup arch conditionals + +* Tue Feb 19 2019 Orion Poplawski - 3.1.3-2 +- Enable PVFS2/OrangeFS MPI-IO support (bug #1655010) + +* Wed Feb 13 2019 Orion Poplawski - 3.1.3-1 +- Update to 3.1.3 +- Drop ppc64le patch fixed upstream +- Use external libevent and pmix, except on EL7 +- Fix EPEL7 builds + +* Sat Feb 2 2019 Orion Poplawski - 2.1.6-1 +- Update to 2.1.6 + +* Fri Feb 01 2019 Fedora Release Engineering - 2.1.6-0.2.rc1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Nov 28 2018 Orion Poplawski - 2.1.6-0.1.rc1 +- Update to 2.1.6rc1 + +* Thu Oct 11 2018 Orion Poplawski - 2.1.5-1 +- Update to 2.1.5 + +* Sun Jul 22 2018 Orion Poplawski - 2.1.1-14 +- Add BR gcc-c++ (fix FTBFS bug #1605323) + +* Fri Jul 13 2018 Fedora Release Engineering - 2.1.1-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 2.1.1-12 +- Rebuilt for Python 3.7 + +* Thu May 10 2018 Troy Dawson - 2.1.1-11 +- Build with rdma-core-devel instead of libibcm-devel + +* Mon Apr 30 2018 Florian Weimer - 2.1.1-10 +- Rebuild with new flags from redhat-rpm-config + +* Fri Feb 09 2018 Igor Gnatenko - 2.1.1-9 +- Escape macros in %%changelog + +* Mon Feb 05 2018 Orion Poplawski - 2.1.1-8 +- Rebuild for rdma-core 16.2 + +* Wed Jan 31 2018 Christoph Junghans - 2.1.1-7 +- Rebuild for gfortran-8 + +* Fri Jan 12 2018 Iryna Shcherbina - 2.1.1-6 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Wed Aug 23 2017 Adam Williamson - 2.1.1-5 +- Disable RDMA support on 32-bit ARM (#1484155) +- Disable hanging opal_fifo test on ppc64le (gh #2526 / #2966) + +* Thu Aug 03 2017 Fedora Release Engineering - 2.1.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 2.1.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jul 19 2017 Orion Poplawski - 2.1.1-2 +- Provide pkgconfig files in the main namespace as well (1471512) + +* Fri May 12 2017 Orion Poplawski - 2.1.1-1 +- Update to 2.1.1 + +* Thu May 4 2017 Orion Poplawski - 2.1.0-1 +- Update to 2.1.0 + +* Sat Feb 11 2017 Fedora Release Engineering - 2.0.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 2 2017 Orion Poplawski - 2.0.2-1 +- Update to 2.0.2 + +* Sat Jan 28 2017 Björn Esser - 2.0.1-7 +- Rebuilt for GCC-7 + +* Mon Dec 19 2016 Miro Hrončok - 2.0.1-6 +- Rebuild for Python 3.6 + +* Wed Nov 2 2016 Orion Poplawski - 2.0.1-5 +- Split python support into sub-packages (bug #1391157) + +* Thu Oct 27 2016 Dan Horák - 2.0.1-4 +- Temporarily disable C++ bindings on ppc64/ppc64le (#1388561) + +* Mon Oct 24 2016 Orion Poplawski - 2.0.1-3 +- Fix License tag format +- Use /usr/share/modulefiles for modulefile install location + +* Mon Oct 24 2016 Orion Poplawski - 2.0.1-2 +- Add upstream patch for thread wait issue with mpi4py + +* Fri Oct 21 2016 Orion Poplawski - 2.0.1-1 +- Update to 2.0.1 + +* Thu Oct 20 2016 Orion Poplawski - 1.10.4-4 +- Support s390(x) (bug #1358701) + +* Thu Oct 20 2016 Orion Poplawski - 1.10.4-3 +- Enable psm/psm2 support on x86_64 (bug #1263655) + +* Wed Oct 19 2016 Orion Poplawski - 1.10.4-2 +- Enable MPI_THREAD_MULTIPLE support (bug #1369989) + +* Wed Oct 19 2016 Orion Poplawski - 1.10.4-1 +- Update to 1.10.4 + +* Thu Sep 15 2016 Orion Poplawski - 1.10.3-3 +- Rebuild for papi 5.5.0 + +* Fri Jun 24 2016 Orion Poplawski - 1.10.3-2 +- Use bundled libevent, system version causes issues (bug #1235044) + +* Wed Jun 15 2016 Orion Poplawski - 1.10.3-1 +- Update to 1.10.3 +- New javadoc location + +* Thu Feb 04 2016 Fedora Release Engineering - 1.10.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Tue Jan 26 2016 Orion Poplawski - 1.10.2-2 +- Rebuild for papi 5.4.3 + +* Thu Jan 21 2016 Orion Poplawski - 1.10.2-1 +- Update to 1.10.2 +- Drop upsream nbc_copy patch + +* Tue Nov 10 2015 Orion Poplawski - 1.10.1-3 +- Add upstream patch to fix zero size message + +* Tue Nov 10 2015 Fedora Release Engineering - 1.10.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 + +* Thu Nov 5 2015 Orion Poplawski - 1.10.1-1 +- Update to 1.10.1 +- Require environment(modules) +- Fixup fortran module install (bug #1154982) + +* Tue Oct 6 2015 Orion Poplawski - 1.10.0-3 +- Do not set CFLAGS in %%_openmpi_load + +* Wed Sep 16 2015 Orion Poplawski - 1.10.0-2 +- Add patch to add needed opal/util/argv.h includes + +* Tue Sep 15 2015 Orion Poplawski - 1.10.0-1 +- Update to 1.10.0 + +* Thu Aug 27 2015 Zbigniew Jędrzejewski-Szmek - 1.8.8-5 +- Use .pth files to set the python path (https://fedorahosted.org/fpc/ticket/563) + +* Mon Aug 24 2015 Orion Poplawski 1.8.8-4 +- Disable valgrind only on s390 + +* Mon Aug 17 2015 Orion Poplawski 1.8.8-3 +- Do not filter libvt* provides as some dependencies link to it + +* Mon Aug 10 2015 Sandro Mani - 1.8.8-2 +- Require, BuildRequire: rpm-mpi-hooks + +* Mon Aug 10 2015 Orion Poplawski 1.8.8-1 +- Update to 1.8.8 +- Drop atomic patch applied upstream + +* Wed Jul 15 2015 Orion Poplawski 1.8.7-1 +- Update to 1.8.7 + +* Tue Jun 23 2015 Orion Poplawski 1.8.6-1 +- Update to 1.8.6 + +* Thu Jun 18 2015 Fedora Release Engineering - 1.8.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue May 5 2015 Orion Poplawski 1.8.5-1 +- Update to 1.8.5 + +* Fri May 1 2015 Orion Poplawski 1.8.5-0.2.rc3 +- Update to 1.8.5rc3 + +* Sun Apr 5 2015 Orion Poplawski 1.8.5-0.1.rc1 +- Update to 1.8.5rc1 + +* Mon Mar 30 2015 Orion Poplawski 1.8.4-7.20150324gitg9ad2aa8 +- Add upstream patch to fix race/hang on 32bit machines + +* Fri Mar 27 2015 Orion Poplawski 1.8.4-6.20150324gitg9ad2aa8 +- Update to latest 1.8.4 snapshot +- Add upstream patch to fix atomics on 32bit + +* Mon Mar 23 2015 Zbigniew Jędrzejewski-Szmek - 1.8.4-5.20150228gitgd83fb30 +- Rebuild for fortran update (#1204420) + +* Mon Mar 16 2015 Orion Poplawski 1.8.4-4.99.20150228gitgd83fb30 +- Own and ship pkgconfig files, set PKG_CONFIG_PATH in modulefile (bug #1113626) +- Drop old configure settings + +* Wed Mar 4 2015 Orion Poplawski 1.8.4-3.99.20150228gitgd83fb30 +- Update to 1.8.4.99 snapshot + +* Fri Feb 13 2015 Orion Poplawski 1.8.4-2 +- Fix MPI_FORTRAN_MOD_DIR (bug #1154982) + +* Tue Dec 23 2014 Orion Poplawski 1.8.4-1 +- Update to 1.8.4 + +* Mon Nov 17 2014 Orion Poplawski 1.8.3-3 +- Rebuild for papi soname change + +* Fri Oct 3 2014 Orion Poplawski 1.8.3-2 +- Fix typo in oshmem library name + +* Sat Sep 27 2014 Orion Poplawski 1.8.3-1 +- Update to 1.8.3 + +* Tue Sep 16 2014 Peter Robinson 1.8.2-2 +- ppc64le now has valgrind + +* Tue Aug 26 2014 Orion Poplawski 1.8.2-1 +- Update to 1.8.2 + +* Sun Aug 17 2014 Fedora Release Engineering - 1.8.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Wed Aug 6 2014 Peter Robinson 1.8.1-6 +- Rebuild (papi) + +* Mon Aug 4 2014 Dan Horák 1.8.1-5 +- no valgrind on ppc64le yet + +* Sat Aug 2 2014 Peter Robinson 1.8.1-4 +- aarch64 now has valgrind + +* Thu Jul 17 2014 Orion Poplawski 1.8.1-3 +- Add patch to prevent shmem wrappers from adding extra libs + +* Sat Jun 07 2014 Fedora Release Engineering - 1.8.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed Apr 23 2014 Orion Poplawski 1.8.1-1 +- Update to 1.8.1, fixes bug #1089044 + +* Tue Apr 1 2014 Orion Poplawski 1.8-1 +- Update to 1.8 + +* Tue Mar 25 2014 Orion Poplawski 1.7.5-2 +- Update provides filter + +* Mon Mar 24 2014 Orion Poplawski 1.7.5-1 +- Update to 1.7.5 + +* Fri Feb 21 2014 Orion Poplawski - 1.7.4-3 +- Require java-headless + +* Sat Feb 8 2014 Ville Skyttä - 1.7.4-2 +- Install macros to %%{_rpmconfdir}/macros.d where available. + +* Wed Feb 5 2014 Orion Poplawski 1.7.4-1 +- Update to 1.7.4 +- Drop format patch fixed upstream +- Build against system libevent +- Build Java mpi bindings, ship in -java sub-package +- Add requires openssh-clients + +* Tue Jan 28 2014 Peter Robinson 1.7.3-5 +- Drop mode/modeflag. mode no longer used, modeflag obsolete as set in CFLAGS +- Use distro LDFLAGS for hardened build +- Drop armv5tel options +- General spec cleanups + +* Thu Jan 16 2014 Orion Poplawski 1.7.3-4 +- Rebuild with papi 5.3.0 + +* Wed Dec 4 2013 Peter Robinson 1.7.3-3 +- valgrind not currently supported on aarch64 + +* Tue Dec 3 2013 Orion Poplawski 1.7.3-2 +- Fix compilation with -Werror=format-security (bug #1037231) + +* Sun Oct 20 2013 Orion Poplawski 1.7.3-1 +- Update to 1.7.3 +- Upstream no longer ships license incompatible files + +* Fri Aug 16 2013 Orion Poplawski 1.7.2-7 +- Move orte* compiler wrappers to devel sub-package (bug #997330) + +* Thu Aug 08 2013 Dennis Gilmore - 1.7.2-6 +- rebuild for papi soname bump bz#995092 + +* Sat Aug 03 2013 Petr Pisar - 1.7.2-5 +- Perl 5.18 rebuild + +* Fri Jul 26 2013 Orion Poplawski 1.7.2-4 +- Fix build issue with _cc_name_suffix (bug #986664) + +* Mon Jul 22 2013 Deji Akingunola - 1.7.2-3 +- Rebuild for papi's shared lib fix + +* Wed Jul 17 2013 Petr Pisar - 1.7.2-2 +- Perl 5.18 rebuild + +* Thu Jun 27 2013 Orion Poplawski 1.7.2-1 +- Update to 1.7.2 + +* Wed Apr 17 2013 Orion Poplawski 1.7.1-1 +- Update to 1.7.1 +- Add BR on hwloc +- Add BR on papi-devel + +* Tue Apr 16 2013 Orion Poplawski 1.7-1 +- Update to 1.7 +- Rebase patch to handle removed components +- Drop esmtp - no longer used + +* Sat Feb 23 2013 Orion Poplawski 1.6.4-2 +- Exclude libopen-trace.* from requires + +* Fri Feb 22 2013 Orion Poplawski 1.6.4-1 +- Update to 1.6.4 +- Drop f90sover and arm-atomics patch fixed upstream + +* Mon Jan 28 2013 Orion Poplawski 1.6.3-7 +- Make __requires_exclude more specific so we don't exclude needed libs + (bug #905263) + +* Sun Nov 18 2012 Peter Robinson 1.6.3-6 +- Update atomics patch for ARM (thanks to Jon Masters) + +* Sun Nov 11 2012 Peter Robinson 1.6.3-5 +- Atomics patch to fix building on ARM (thanks to Jon Masters) + +* Mon Nov 5 2012 Orion Poplawski 1.6.3-4 +- Add patch to fix libmpi_f90.so version +- Add patch to link tests with system libltdl +- Run make check + +* Fri Nov 2 2012 Orion Poplawski 1.6.3-3 +- Set enable-opal-multi-threads for IB support + +* Thu Nov 1 2012 Orion Poplawski 1.6.3-2 +- Update rpm macros to use the new module location + +* Wed Oct 31 2012 Orion Poplawski 1.6.3-1 +- Update to 1.6.3 + +* Sat Oct 13 2012 Orion Poplawski 1.6.2-1 +- Update to 1.6.2 +- Add BR torque-devel to enable torque support +- Drop old module file location (bug #838467) + +* Thu Sep 13 2012 Orion Poplawski 1.6.1-2 +- Drop adding -fPIC, no longer needed +- Set --disable-silent-rules for more verbose build logs +- Don't add opt_*flags to the wrappers +- Only use $RPM_OPT_FLAGS if not using the opt_*flags + +* Thu Aug 23 2012 Orion Poplawski 1.6.1-1 +- Update to 1.6.1 +- Drop hostfile patch applied upstream + +* Fri Jul 20 2012 Fedora Release Engineering - 1.6-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue May 15 2012 Orion Poplawski 1.6-2 +- Add patch from upstream to fix default hostfile location + +* Tue May 15 2012 Orion Poplawski 1.6-1 +- Update to 1.6 +- Drop arm patch, appears to be addressed upstream +- Remove extraneous wrapper link libraries (bug 814798) + +* Tue Apr 3 2012 Peter Robinson - 1.5.5-1 +- Update to 1.5.5 + +* Tue Feb 28 2012 Fedora Release Engineering - 1.5.4-5.1 +- Rebuilt for c++ ABI breakage + +* Wed Feb 22 2012 Orion Poplawski 1.5.4-4.1 +- Rebuild with hwloc 1.4 + +* Wed Feb 15 2012 Peter Robinson - 1.5.4-4 +- Rebuild for hwloc soname bump + +* Fri Jan 20 2012 Doug Ledford - 1.5.4-3 +- Move modules file to mpi directory and make it conflict with any other + mpi module (bug #651074) + +* Sun Jan 8 2012 Orion Poplawski 1.5.4-2 +- Rebuild with gcc 4.7 (bug #772443) + +* Thu Nov 17 2011 Orion Poplawski 1.5.4-1 +- Update to 1.5.4 +- Drop dt-textrel patch fixed upstream +- Fixup handling removed files (bug #722534) +- Uses hwloc instead of plpa +- Exclude private libraries from provides/requires (bug #741104) +- Drop --enable-mpi-threads & --enable-openib-ibcm, no longer recognized + +* Sat Jun 18 2011 Peter Robinson 1.5-4 +- Exclude ARM platforms due to current lack of "atomic primitives" on the platform + +* Thu Mar 17 2011 Jay Fenlason 1.5-3 +- Add dt-textrel patch to close + Resolves: bz679489 +- Add memchecker and esmtp support + Resolves: bz647011 + +* Tue Feb 08 2011 Fedora Release Engineering - 1.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Oct 18 2010 Jay Fenlason 1.5-1 +- set MANPATH in openmpi module file +- Upgrade to 1.5 +- Workaround for rhbz#617766 appears to no longer be needed for 1.5 +- remove pkgconfig files in instal +- Remove orteCC.1 dangling symlink +- Adjust the files entries for share/openmpi/help* and share/openmpi/mca* +- Adjust the files entries for share/openmpi/mpi* +- Add files entry for share/openmpi/orte*.txt + +* Sun Sep 05 2010 Dennis Gilmore - 1.4.1-7 +- disable valgrind support on sparc arches + +* Sat Jul 24 2010 David Malcolm - 1.4.1-6 +- workaround for rhbz#617766 + +* Wed Jul 21 2010 David Malcolm - 1.4.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Mon Mar 29 2010 Jay Fenlason - 1.4.1-4 +- Update to fix licencing and packaging issues: + Use the system plpa and ltdl librarires rather than the ones in the tarball + Remove licence incompatible files from the tarball. +- update module.in to prepend-path PYTHONPATH + +* Tue Mar 9 2010 Jay Fenlason - 1.4.1-3 +- remove the pkgconfig file completely like we did in RHEL. + +* Tue Jan 26 2010 Jay Fenlason - 1.4.1-2 +- BuildRequires: python + +* Tue Jan 26 2010 Jay Fenlason - 1.4.1-1 +- New upstream version, which includes the changeset_r22324 patch. +- Correct a typo in the Source0 line in this spec file. + +* Fri Jan 15 2010 Doug Ledford - 1.4-4 +- Fix an issue with usage of _cc_name_suffix that cause a broken define in + our module file + +* Fri Jan 15 2010 Doug Ledford - 1.4-3 +- Fix pkgconfig file substitution +- Bump version so we are later than the equivalent version from Red Hat + Enterprise Linux + +* Wed Jan 13 2010 Doug Ledford - 1.4-1 +- Update to latest upstream stable version +- Add support for libibcm usage +- Enable sge support via configure options since it's no longer on by default +- Add patch to resolve allreduce issue (bz538199) +- Remove no longer needed patch for Chelsio cards + +* Tue Sep 22 2009 Jay Fenlason - 1.3.3-6 +- Create and own man* directories for use by dependent packages. + +* Wed Sep 16 2009 Jay Fenlason - 1.3.3-5 +- Move the module file from %%{_datadir}/Modules/modulefiles/%%{namearch} to + %%{_sysconfdir}/modulefiles/%%{namearch} where it belongs. +- Have the -devel subpackage own the man1 and man7 directories for completeness. +- Add a blank line before the clean section. +- Remove --enable-mpirun-prefix-by-default from configure. + +* Wed Sep 9 2009 Jay Fenlason - 1.3.3-4 +- Modify packaging to conform to + https://fedoraproject.org/wiki/PackagingDrafts/MPI (bz521334). +- remove --with-ft=cr from configure, as it was apparently causing problems + for some people. +- Add librdmacm-devel and librdmacm to BuildRequires (related bz515565). +- Add openmpi-bz515567.patch to add support for the latest Chelsio device IDs + (related bz515567). +- Add exclude-arch (s390 s390x) because we don't have required -devel packages + there. + +* Sat Jul 25 2009 Fedora Release Engineering - 1.3.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Jul 21 2009 Doug Ledford - 1.3.3-2 +- Add MPI_BIN and MPI_LIB to the modules file (related bz511099) + +* Tue Jul 21 2009 Doug Ledford - 1.3.3-1 +- Make sure all created dirs are owned (bz474677) +- Fix loading of pkgconfig file (bz476844) +- Resolve file conflict between us and libotf (bz496131) +- Resolve dangling symlinks issue (bz496909) +- Resolve unexpanded %%{mode} issues (bz496911) +- Restore -devel subpackage (bz499851) +- Make getting the default openmpi devel environment easier (bz504357) +- Make the -devel package pull in the base package (bz459458) +- Make it easier to use alternative compilers to build package (bz246484) + +* Sat Jul 18 2009 Jussi Lehtola - 1.3.1-4 +- Add Provides: openmpi-devel to fix other package builds in rawhide. + +* Fri May 08 2009 Lubomir Rintel - 1.3.1-3 +- Treat i586 the same way as i386 + +* Wed Apr 22 2009 Doug Ledford - 1.3.1-2 +- fixed broken update +- Resolves: bz496909, bz496131, bz496911 + +* Tue Apr 14 2009 Tom "spot" Callaway - 1.3.1-1 +- update to 1.3.1, cleanup alternatives, spec, make new vt subpackage + +* Thu Feb 26 2009 Fedora Release Engineering - 1.2.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 18 2008 Fedora Release Engineering - 1.2.4-2 +- Autorebuild for GCC 4.3 + +* Wed Oct 17 2007 Doug Ledford - 1.2.4-1 +- Update to 1.2.4 upstream version +- Build against libtorque +- Pass a valid mode to open +- Resolves: bz189441, bz265141 + +* Tue Aug 28 2007 Fedora Release Engineering - 1.2.3-5 +- Rebuild for selinux ppc32 issue. + +* Mon Jul 16 2007 Doug Ledford - 1.2.3-4 +- Fix a directory permission problem on the base openmpi directories + +* Thu Jul 12 2007 Florian La Roche - 1.2.3-3 +- requires alternatives for various sub-rpms + +* Mon Jul 02 2007 Doug Ledford - 1.2.3-2 +- Fix dangling symlink issue caused by a bad macro usage +- Resolves: bz246450 + +* Wed Jun 27 2007 Doug Ledford - 1.2.3-1 +- Update to latest upstream version +- Fix file ownership on -libs package +- Take a swing at solving the multi-install compatibility issues + +* Mon Feb 19 2007 Doug Ledford - 1.1.1-7 +- Bump version to be at least as high as the RHEL4U5 openmpi +- Integrate fixes made in RHEL4 openmpi into RHEL5 (fix a multilib conflict + for the openmpi.module file by moving from _datadir to _libdir, make sure + all sed replacements have the g flag so they replace all instances of + the marker per line, not just the first, and add a %%defattr tag to the + files section of the -libs package to avoid install errors about + brewbuilder not being a user or group) +- Resolves: bz229298 + +* Wed Jan 17 2007 Doug Ledford - 1.1.1-5 +- Remove the FORTIFY_SOURCE and stack protect options +- Related: bz213075 + +* Fri Oct 20 2006 Doug Ledford - 1.1.1-4 +- Bump and build against the final openib-1.1 package + +* Wed Oct 18 2006 Doug Ledford - 1.1.1-3 +- Fix an snprintf length bug in opal/util/cmd_line.c +- RESOLVES: rhbz#210714 + +* Wed Oct 18 2006 Doug Ledford - 1.1.1-2 +- Bump and build against openib-1.1-0.pre1.1 instead of 1.0 + +* Tue Oct 17 2006 Doug Ledford - 1.1.1-1 +- Update to upstream 1.1.1 version + +* Fri Oct 13 2006 Doug Ledford - 1.1-7 +- ia64 can't take -m64 on the gcc command line, so don't set it there + +* Wed Oct 11 2006 Doug Ledford - 1.1-6 +- Bump rev to match fc6 rev +- Fixup some issue with alternatives support +- Split the 32bit and 64bit libs ld.so.conf.d files into two files so + multilib or single lib installs both work properly +- Put libs into their own package +- Add symlinks to /usr/share/openmpi/bin%%{mode} so that opal_wrapper-%%{mode} + can be called even if it isn't the currently selected default method in + the alternatives setup (opal_wrapper needs to be called by mpicc, mpic++, + etc. in order to determine compile mode from argv[0]). + +* Sun Aug 27 2006 Doug Ledford - 1.1-4 +- Make sure the post/preun scripts only add/remove alternatives on initial + install and final removal, otherwise don't touch. + +* Fri Aug 25 2006 Doug Ledford - 1.1-3 +- Don't ghost the mpi.conf file as that means it will get removed when + you remove 1 out of a number of alternatives based packages +- Put the .mod file in -devel + +* Mon Aug 7 2006 Doug Ledford - 1.1-2 +- Various lint cleanups +- Switch to using the standard alternatives mechanism instead of a home + grown one + +* Wed Aug 2 2006 Doug Ledford - 1.1-1 +- Upgrade to 1.1 +- Build with Infiniband support via openib + +* Mon Jun 12 2006 Jason Vas Dias - 1.0.2-1 +- Upgrade to 1.0.2 + +* Wed Feb 15 2006 Jason Vas Dias - 1.0.1-1 +- Import into Fedora Core +- Resolve LAM clashes + +* Wed Jan 25 2006 Orion Poplawski - 1.0.1-2 +- Use configure options to install includes and libraries +- Add ld.so.conf.d file to find libraries +- Add -fPIC for x86_64 + +* Tue Jan 24 2006 Orion Poplawski - 1.0.1-1 +- 1.0.1 +- Use alternatives + +* Sat Nov 19 2005 Ed Hill - 1.0-2 +- fix lam conflicts + +* Fri Nov 18 2005 Ed Hill - 1.0-1 +- initial specfile created + diff --git a/sources b/sources index 34f655a..ebb82c2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (openmpi-5.0.10.tar.bz2) = 24d29c2e88549e5a59f47dac0a2327db99644c59fd2991441d0ec23edb95aa7328fcd67bd44601ce9f11b0af90d36fddf82643e23f0f6e7c013c99f9bbd9738e +SHA512 (openmpi-4.1.0.tar.bz2) = eaf086ab4929ce5a9a3e867c8315bf802ff4dc75d3f05d740e22dfd97803a4559212dacbe06920d42ac6644f46057eb6980cccf5a8b0a7df9c5bdf5bffc0b3a6