From d6733a3718e9ce70ddcd8de460aaa6cd91bb75a4 Mon Sep 17 00:00:00 2001 From: Scott Wittenburg Date: Mon, 30 Oct 2023 16:30:24 -0600 Subject: [PATCH] ci: Use mpich built with ch3:sock:tp for faster tests --- .github/workflows/everything.yml | 11 ++- plugins/operators/CMakeLists.txt | 3 + scripts/ci/cmake/ci-el8-icc-mpich.cmake | 37 ++++++++++ scripts/ci/cmake/ci-el8-oneapi-mpich.cmake | 38 ++++++++++ .../cmake/ci-ubuntu20.04-clang10-mpich.cmake | 49 ++++++++++++ .../cmake/ci-ubuntu20.04-clang6-mpich.cmake | 51 +++++++++++++ .../ci/cmake/ci-ubuntu20.04-gcc10-mpich.cmake | 13 +++- .../ci/cmake/ci-ubuntu20.04-gcc11-mpich.cmake | 49 ++++++++++++ .../ci/cmake/ci-ubuntu20.04-gcc8-mpich.cmake | 50 +++++++++++++ .../ci/cmake/ci-ubuntu20.04-gcc8-ompi.cmake | 3 + .../ci/cmake/ci-ubuntu20.04-gcc9-mpich.cmake | 49 ++++++++++++ .../images/0001-mpich-support-ch3-sock.patch | 74 +++++++++++++++++++ scripts/ci/images/Dockerfile.ci-el8-intel | 12 +-- .../Dockerfile.ci-spack-ubuntu20.04-base | 36 ++++----- scripts/ci/images/packages.yaml | 4 +- scripts/ci/images/specs.yaml | 5 -- 16 files changed, 445 insertions(+), 39 deletions(-) create mode 100644 scripts/ci/cmake/ci-el8-icc-mpich.cmake create mode 100644 scripts/ci/cmake/ci-el8-oneapi-mpich.cmake create mode 100644 scripts/ci/cmake/ci-ubuntu20.04-clang10-mpich.cmake create mode 100644 scripts/ci/cmake/ci-ubuntu20.04-clang6-mpich.cmake create mode 100644 scripts/ci/cmake/ci-ubuntu20.04-gcc11-mpich.cmake create mode 100644 scripts/ci/cmake/ci-ubuntu20.04-gcc8-mpich.cmake create mode 100644 scripts/ci/cmake/ci-ubuntu20.04-gcc9-mpich.cmake create mode 100644 scripts/ci/images/0001-mpich-support-ch3-sock.patch delete mode 100644 scripts/ci/images/specs.yaml diff --git a/.github/workflows/everything.yml b/.github/workflows/everything.yml index a2eb4a60de..706b3a4645 100644 --- a/.github/workflows/everything.yml +++ b/.github/workflows/everything.yml @@ -127,14 +127,17 @@ jobs: os: [ubuntu20.04] compiler: [gcc8, gcc9, gcc10, gcc11, clang6, clang10] shared: [shared] - parallel: [ompi] + parallel: [mpich] include: - os: ubuntu20.04 - compiler: gcc10 - parallel: mpich + compiler: gcc8 + parallel: ompi - os: ubuntu20.04 compiler: gcc8 parallel: serial + - os: ubuntu20.04 + compiler: clang6 + parallel: ompi - os: ubuntu20.04 compiler: clang6 parallel: serial @@ -215,7 +218,7 @@ jobs: matrix: os: [el8] compiler: [icc, oneapi] - parallel: [ompi] + parallel: [mpich] steps: - uses: actions/checkout@v4 diff --git a/plugins/operators/CMakeLists.txt b/plugins/operators/CMakeLists.txt index 44f9a0f2a2..abea93e0dc 100644 --- a/plugins/operators/CMakeLists.txt +++ b/plugins/operators/CMakeLists.txt @@ -8,6 +8,9 @@ if(ADIOS2_HAVE_Sodium) EncryptionOperator.cpp ) target_link_libraries(EncryptionOperator adios2_core sodium) + if (NOT CMAKE_SKIP_INSTALL_RPATH) + set_target_properties(EncryptionOperator PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) + endif() install(TARGETS EncryptionOperator EXPORT adios2Exports RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT adios2_core-runtime LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT adios2_core-libraries NAMELINK_COMPONENT adios2_core-development diff --git a/scripts/ci/cmake/ci-el8-icc-mpich.cmake b/scripts/ci/cmake/ci-el8-icc-mpich.cmake new file mode 100644 index 0000000000..cf1bf07c66 --- /dev/null +++ b/scripts/ci/cmake/ci-el8-icc-mpich.cmake @@ -0,0 +1,37 @@ +include(ProcessorCount) +ProcessorCount(NCPUS) +math(EXPR N2CPUS "${NCPUS}*2") + +set(ENV{CC} icc) +set(ENV{CXX} icpc) +set(ENV{FC} ifort) + +set(dashboard_cache " +BUILD_TESTING:BOOL=ON +ADIOS2_BUILD_EXAMPLES:BOOL=ON + +ADIOS2_USE_BZip2:BOOL=ON +ADIOS2_USE_Blosc:BOOL=ON +ADIOS2_USE_DataMan:BOOL=ON +ADIOS2_USE_DataSpaces:BOOL=OFF +ADIOS2_USE_Fortran:BOOL=OFF +ADIOS2_USE_HDF5:BOOL=ON +ADIOS2_USE_MPI:BOOL=ON +ADIOS2_USE_Python:BOOL=ON +ADIOS2_USE_SZ:BOOL=ON +ADIOS2_USE_ZeroMQ:STRING=ON +ADIOS2_USE_ZFP:BOOL=ON + +CMAKE_C_COMPILER_LAUNCHER=ccache +CMAKE_CXX_COMPILER_LAUNCHER=ccache +CMAKE_C_FLAGS:STRING=-Wall -diag-disable=10441 +CMAKE_C_FLAGS_DEBUG:STRING=-g -O0 +CMAKE_CXX_FLAGS:STRING=-Wall -diag-disable=10441 +CMAKE_CXX_FLAGS_DEBUG:STRING=-g -O0 + +MPIEXEC_MAX_NUMPROCS:STRING=${N2CPUS} +") + +set(CTEST_CMAKE_GENERATOR "Unix Makefiles") +list(APPEND CTEST_UPDATE_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}") +include(${CMAKE_CURRENT_LIST_DIR}/ci-common.cmake) diff --git a/scripts/ci/cmake/ci-el8-oneapi-mpich.cmake b/scripts/ci/cmake/ci-el8-oneapi-mpich.cmake new file mode 100644 index 0000000000..7a837a984a --- /dev/null +++ b/scripts/ci/cmake/ci-el8-oneapi-mpich.cmake @@ -0,0 +1,38 @@ +include(ProcessorCount) +ProcessorCount(NCPUS) +math(EXPR N2CPUS "${NCPUS}*2") + +set(ENV{CC} icx) +set(ENV{CXX} icpx) +set(ENV{FC} ifort) # oneapi fortran compiler currently has issues + +set(dashboard_cache " +BUILD_TESTING:BOOL=ON +ADIOS2_BUILD_EXAMPLES:BOOL=ON + +ADIOS2_USE_BZip2:BOOL=ON +ADIOS2_USE_Blosc:BOOL=OFF +ADIOS2_USE_DataMan:BOOL=ON +ADIOS2_USE_DataSpaces:BOOL=OFF +ADIOS2_USE_Fortran:BOOL=OFF +ADIOS2_USE_HDF5:BOOL=ON +ADIOS2_USE_MPI:BOOL=ON +ADIOS2_USE_Python:BOOL=ON +ADIOS2_USE_SZ:BOOL=ON +ADIOS2_USE_ZeroMQ:STRING=ON +ADIOS2_USE_ZFP:BOOL=ON + +CMAKE_C_COMPILER_LAUNCHER=ccache +CMAKE_CXX_COMPILER_LAUNCHER=ccache +CMAKE_C_FLAGS:STRING=-Wall +CMAKE_C_FLAGS_DEBUG:STRING=-g -O0 +CMAKE_CXX_FLAGS:STRING=-Wall +CMAKE_CXX_FLAGS_DEBUG:STRING=-g -O0 +CMAKE_Fortran_FLAGS:STRING=-W1 + +MPIEXEC_MAX_NUMPROCS:STRING=${N2CPUS} +") + +set(CTEST_CMAKE_GENERATOR "Unix Makefiles") +list(APPEND CTEST_UPDATE_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}") +include(${CMAKE_CURRENT_LIST_DIR}/ci-common.cmake) diff --git a/scripts/ci/cmake/ci-ubuntu20.04-clang10-mpich.cmake b/scripts/ci/cmake/ci-ubuntu20.04-clang10-mpich.cmake new file mode 100644 index 0000000000..fd1ab9be47 --- /dev/null +++ b/scripts/ci/cmake/ci-ubuntu20.04-clang10-mpich.cmake @@ -0,0 +1,49 @@ +include(ProcessorCount) +ProcessorCount(NCPUS) +math(EXPR N2CPUS "${NCPUS}*2") + +set(ENV{CC} clang-10) +set(ENV{CXX} clang++-10) +set(ENV{FC} gfortran-11) + +execute_process( + COMMAND "python3-config" "--prefix" + OUTPUT_VARIABLE PY_ROOT + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(dashboard_cache " +BUILD_TESTING:BOOL=ON +ADIOS2_BUILD_EXAMPLES:BOOL=ON + +ADIOS2_USE_Blosc:BOOL=ON +ADIOS2_USE_BZip2:BOOL=ON +ADIOS2_USE_DataMan:BOOL=ON +ADIOS2_USE_Fortran:BOOL=ON +ADIOS2_USE_HDF5:BOOL=ON +ADIOS2_USE_MPI:BOOL=ON +ADIOS2_USE_Python:BOOL=ON +ADIOS2_USE_SZ:BOOL=ON +ADIOS2_USE_ZeroMQ:STRING=ON +ADIOS2_USE_ZFP:BOOL=ON + +Python_ROOT_DIR:PATH=${PY_ROOT} +Python_FIND_STRATEGY:STRING=LOCATION +Python_FIND_FRAMEWORK:STRING=FIRST + +CMAKE_C_COMPILER_LAUNCHER=ccache +CMAKE_CXX_COMPILER_LAUNCHER=ccache +CMAKE_C_FLAGS:STRING=-Wall +CMAKE_CXX_FLAGS:STRING=-Wall +CMAKE_Fortran_FLAGS:STRING=-Wall + +MPIEXEC_MAX_NUMPROCS:STRING=${N2CPUS} +") + +# TODO: The Kill* and PreciousTimeStep tests fail (due to timeout) when +# TODO: adios2 is built "--with-device=ch3:sock:tcp". Once this is fixed +# TODO: in the mpi_dp, we can re-enable these tests. +set(CTEST_TEST_ARGS EXCLUDE "KillReader|KillWriter|PreciousTimestep") + +set(CTEST_CMAKE_GENERATOR "Ninja") +list(APPEND CTEST_UPDATE_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}") +include(${CMAKE_CURRENT_LIST_DIR}/ci-common.cmake) diff --git a/scripts/ci/cmake/ci-ubuntu20.04-clang6-mpich.cmake b/scripts/ci/cmake/ci-ubuntu20.04-clang6-mpich.cmake new file mode 100644 index 0000000000..cb2977eeb6 --- /dev/null +++ b/scripts/ci/cmake/ci-ubuntu20.04-clang6-mpich.cmake @@ -0,0 +1,51 @@ +include(ProcessorCount) +ProcessorCount(NCPUS) +math(EXPR N2CPUS "${NCPUS}*2") + +set(ENV{CC} clang-6.0) +set(ENV{CXX} clang++-6.0) +set(ENV{FC} gfortran-11) + +execute_process( + COMMAND "python3-config" "--prefix" + OUTPUT_VARIABLE PY_ROOT + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(dashboard_cache " +BUILD_TESTING:BOOL=ON +ADIOS2_BUILD_EXAMPLES:BOOL=ON + +ADIOS2_USE_Blosc:BOOL=ON +ADIOS2_USE_BZip2:BOOL=ON +ADIOS2_USE_DataMan:BOOL=ON +ADIOS2_USE_Fortran:BOOL=ON +ADIOS2_USE_HDF5:BOOL=ON +ADIOS2_USE_MGARD:BOOL=OFF +ADIOS2_USE_MPI:BOOL=ON +ADIOS2_USE_Python:BOOL=ON +ADIOS2_USE_SZ:BOOL=ON +ADIOS2_USE_ZeroMQ:STRING=ON +ADIOS2_USE_ZFP:BOOL=ON + +Python_ROOT_DIR:PATH=${PY_ROOT} +Python_FIND_STRATEGY:STRING=LOCATION +Python_FIND_FRAMEWORK:STRING=FIRST + +CMAKE_C_COMPILER_LAUNCHER=ccache +CMAKE_CXX_COMPILER_LAUNCHER=ccache +CMAKE_C_FLAGS:STRING=-Wall +CMAKE_CXX_FLAGS:STRING=-Wall +CMAKE_Fortran_FLAGS:STRING=-Wall + +MPIEXEC_MAX_NUMPROCS:STRING=${N2CPUS} +") + +# We have a dedicated build for clang6 + serial, so we exclude ".Serial$" +# TODO: The Kill* and PreciousTimeStep tests fail (due to timeout) when +# TODO: adios2 is built "--with-device=ch3:sock:tcp". Once this is fixed +# TODO: in the mpi_dp, we can re-enable these tests. +set(CTEST_TEST_ARGS EXCLUDE "KillReader|KillWriter|PreciousTimestep|.Serial$") + +set(CTEST_CMAKE_GENERATOR "Ninja") +list(APPEND CTEST_UPDATE_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}") +include(${CMAKE_CURRENT_LIST_DIR}/ci-common.cmake) diff --git a/scripts/ci/cmake/ci-ubuntu20.04-gcc10-mpich.cmake b/scripts/ci/cmake/ci-ubuntu20.04-gcc10-mpich.cmake index 12ff984d21..f4c486289f 100644 --- a/scripts/ci/cmake/ci-ubuntu20.04-gcc10-mpich.cmake +++ b/scripts/ci/cmake/ci-ubuntu20.04-gcc10-mpich.cmake @@ -39,8 +39,17 @@ CMAKE_Fortran_FLAGS:STRING=-Wall MPIEXEC_MAX_NUMPROCS:STRING=${N2CPUS} ") -set(CTEST_TEST_ARGS - EXCLUDE "Engine.BPEngineTest.SzComplex.MPI|Engine.BPEngineTest.ZfpComplex.MPI|.Serial$") +# TODO: The Kill* and PreciousTimeStep tests fail (due to timeout) when +# TODO: adios2 is built "--with-device=ch3:sock:tcp". Once this is fixed +# TODO: in the mpi_dp, we can re-enable these tests. +list(APPEND EXCLUDE_EXPRESSIONS + "Engine.BPEngineTest.SzComplex.MPI" + "Engine.BPEngineTest.ZfpComplex.MPI" + "KillReader" + "KillWriter" + "PreciousTimestep") +list(JOIN EXCLUDE_EXPRESSIONS "|" TEST_EXCLUDE_STRING) +set(CTEST_TEST_ARGS EXCLUDE "${TEST_EXCLUDE_STRING}") set(CTEST_CMAKE_GENERATOR "Ninja") list(APPEND CTEST_UPDATE_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}") diff --git a/scripts/ci/cmake/ci-ubuntu20.04-gcc11-mpich.cmake b/scripts/ci/cmake/ci-ubuntu20.04-gcc11-mpich.cmake new file mode 100644 index 0000000000..e83c946898 --- /dev/null +++ b/scripts/ci/cmake/ci-ubuntu20.04-gcc11-mpich.cmake @@ -0,0 +1,49 @@ +include(ProcessorCount) +ProcessorCount(NCPUS) +math(EXPR N2CPUS "${NCPUS}*2") + +set(ENV{CC} gcc) +set(ENV{CXX} g++) +set(ENV{FC} gfortran) + +execute_process( + COMMAND "python3-config" "--prefix" + OUTPUT_VARIABLE PY_ROOT + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(dashboard_cache " +BUILD_TESTING:BOOL=ON +ADIOS2_BUILD_EXAMPLES:BOOL=ON + +ADIOS2_USE_BZip2:BOOL=ON +ADIOS2_USE_Blosc:BOOL=ON +ADIOS2_USE_DataMan:BOOL=ON +ADIOS2_USE_Fortran:BOOL=ON +ADIOS2_USE_HDF5:BOOL=ON +ADIOS2_USE_MPI:BOOL=ON +ADIOS2_USE_Python:BOOL=ON +ADIOS2_USE_SZ:BOOL=ON +ADIOS2_USE_ZeroMQ:STRING=ON +ADIOS2_USE_ZFP:BOOL=ON + +Python_ROOT_DIR:PATH=${PY_ROOT} +Python_FIND_STRATEGY:STRING=LOCATION +Python_FIND_FRAMEWORK:STRING=FIRST + +CMAKE_C_COMPILER_LAUNCHER=ccache +CMAKE_CXX_COMPILER_LAUNCHER=ccache +CMAKE_C_FLAGS:STRING=-Wall +CMAKE_CXX_FLAGS:STRING=-Wall +CMAKE_Fortran_FLAGS:STRING=-Wall + +MPIEXEC_MAX_NUMPROCS:STRING=${N2CPUS} +") + +# TODO: The Kill* and PreciousTimeStep tests fail (due to timeout) when +# TODO: adios2 is built "--with-device=ch3:sock:tcp". Once this is fixed +# TODO: in the mpi_dp, we can re-enable these tests. +set(CTEST_TEST_ARGS EXCLUDE "KillReader|KillWriter|PreciousTimestep") + +set(CTEST_CMAKE_GENERATOR "Ninja") +list(APPEND CTEST_UPDATE_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}") +include(${CMAKE_CURRENT_LIST_DIR}/ci-common.cmake) diff --git a/scripts/ci/cmake/ci-ubuntu20.04-gcc8-mpich.cmake b/scripts/ci/cmake/ci-ubuntu20.04-gcc8-mpich.cmake new file mode 100644 index 0000000000..4824d437ba --- /dev/null +++ b/scripts/ci/cmake/ci-ubuntu20.04-gcc8-mpich.cmake @@ -0,0 +1,50 @@ +include(ProcessorCount) +ProcessorCount(NCPUS) +math(EXPR N2CPUS "${NCPUS}*2") + +set(ENV{CC} gcc) +set(ENV{CXX} g++) +set(ENV{FC} gfortran) + +execute_process( + COMMAND "python3-config" "--prefix" + OUTPUT_VARIABLE PY_ROOT + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(dashboard_cache " +BUILD_TESTING:BOOL=ON +ADIOS2_BUILD_EXAMPLES:BOOL=ON + +ADIOS2_USE_BZip2:BOOL=ON +ADIOS2_USE_Blosc:BOOL=ON +ADIOS2_USE_DataMan:BOOL=ON +ADIOS2_USE_Fortran:BOOL=ON +ADIOS2_USE_HDF5:BOOL=ON +ADIOS2_USE_MPI:BOOL=ON +ADIOS2_USE_Python:BOOL=ON +ADIOS2_USE_SZ:BOOL=ON +ADIOS2_USE_ZeroMQ:STRING=ON +ADIOS2_USE_ZFP:BOOL=ON + +Python_ROOT_DIR:PATH=${PY_ROOT} +Python_FIND_STRATEGY:STRING=LOCATION +Python_FIND_FRAMEWORK:STRING=FIRST + +CMAKE_C_COMPILER_LAUNCHER=ccache +CMAKE_CXX_COMPILER_LAUNCHER=ccache +CMAKE_C_FLAGS:STRING=-Wall +CMAKE_CXX_FLAGS:STRING=-Wall +CMAKE_Fortran_FLAGS:STRING=-Wall + +MPIEXEC_MAX_NUMPROCS:STRING=${N2CPUS} +") + +# We have a dedicated build for gcc8 + serial, so we exclude ".Serial$" +# TODO: The Kill* and PreciousTimeStep tests fail (due to timeout) when +# TODO: adios2 is built "--with-device=ch3:sock:tcp". Once this is fixed +# TODO: in the mpi_dp, we can re-enable these tests. +set(CTEST_TEST_ARGS EXCLUDE "KillReader|KillWriter|PreciousTimestep|.Serial$") + +set(CTEST_CMAKE_GENERATOR "Ninja") +list(APPEND CTEST_UPDATE_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}") +include(${CMAKE_CURRENT_LIST_DIR}/ci-common.cmake) diff --git a/scripts/ci/cmake/ci-ubuntu20.04-gcc8-ompi.cmake b/scripts/ci/cmake/ci-ubuntu20.04-gcc8-ompi.cmake index a686bb0c87..6463d8f72a 100644 --- a/scripts/ci/cmake/ci-ubuntu20.04-gcc8-ompi.cmake +++ b/scripts/ci/cmake/ci-ubuntu20.04-gcc8-ompi.cmake @@ -33,6 +33,9 @@ CMAKE_CXX_FLAGS:STRING=-Wall CMAKE_Fortran_FLAGS:STRING=-Wall ") +# We have a dedicated build for this setup without MPI +set(CTEST_TEST_ARGS EXCLUDE ".Serial$") + set(CTEST_CMAKE_GENERATOR "Ninja") list(APPEND CTEST_UPDATE_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}") include(${CMAKE_CURRENT_LIST_DIR}/ci-common.cmake) diff --git a/scripts/ci/cmake/ci-ubuntu20.04-gcc9-mpich.cmake b/scripts/ci/cmake/ci-ubuntu20.04-gcc9-mpich.cmake new file mode 100644 index 0000000000..e83c946898 --- /dev/null +++ b/scripts/ci/cmake/ci-ubuntu20.04-gcc9-mpich.cmake @@ -0,0 +1,49 @@ +include(ProcessorCount) +ProcessorCount(NCPUS) +math(EXPR N2CPUS "${NCPUS}*2") + +set(ENV{CC} gcc) +set(ENV{CXX} g++) +set(ENV{FC} gfortran) + +execute_process( + COMMAND "python3-config" "--prefix" + OUTPUT_VARIABLE PY_ROOT + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(dashboard_cache " +BUILD_TESTING:BOOL=ON +ADIOS2_BUILD_EXAMPLES:BOOL=ON + +ADIOS2_USE_BZip2:BOOL=ON +ADIOS2_USE_Blosc:BOOL=ON +ADIOS2_USE_DataMan:BOOL=ON +ADIOS2_USE_Fortran:BOOL=ON +ADIOS2_USE_HDF5:BOOL=ON +ADIOS2_USE_MPI:BOOL=ON +ADIOS2_USE_Python:BOOL=ON +ADIOS2_USE_SZ:BOOL=ON +ADIOS2_USE_ZeroMQ:STRING=ON +ADIOS2_USE_ZFP:BOOL=ON + +Python_ROOT_DIR:PATH=${PY_ROOT} +Python_FIND_STRATEGY:STRING=LOCATION +Python_FIND_FRAMEWORK:STRING=FIRST + +CMAKE_C_COMPILER_LAUNCHER=ccache +CMAKE_CXX_COMPILER_LAUNCHER=ccache +CMAKE_C_FLAGS:STRING=-Wall +CMAKE_CXX_FLAGS:STRING=-Wall +CMAKE_Fortran_FLAGS:STRING=-Wall + +MPIEXEC_MAX_NUMPROCS:STRING=${N2CPUS} +") + +# TODO: The Kill* and PreciousTimeStep tests fail (due to timeout) when +# TODO: adios2 is built "--with-device=ch3:sock:tcp". Once this is fixed +# TODO: in the mpi_dp, we can re-enable these tests. +set(CTEST_TEST_ARGS EXCLUDE "KillReader|KillWriter|PreciousTimestep") + +set(CTEST_CMAKE_GENERATOR "Ninja") +list(APPEND CTEST_UPDATE_NOTES_FILES "${CMAKE_CURRENT_LIST_FILE}") +include(${CMAKE_CURRENT_LIST_DIR}/ci-common.cmake) diff --git a/scripts/ci/images/0001-mpich-support-ch3-sock.patch b/scripts/ci/images/0001-mpich-support-ch3-sock.patch new file mode 100644 index 0000000000..908c0eda30 --- /dev/null +++ b/scripts/ci/images/0001-mpich-support-ch3-sock.patch @@ -0,0 +1,74 @@ +From bde001bcdf8d14f9b6d6c3c216ab8c00f74b3c08 Mon Sep 17 00:00:00 2001 +From: Scott Wittenburg +Date: Tue, 14 Nov 2023 13:46:37 -0700 +Subject: [PATCH] mpich: Support ch3:sock for a non busy-polling option + +--- + var/spack/repos/builtin/packages/mpich/package.py | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py +index b66c0b8fd4..ccc1082e79 100644 +--- a/var/spack/repos/builtin/packages/mpich/package.py ++++ b/var/spack/repos/builtin/packages/mpich/package.py +@@ -70,16 +70,14 @@ class Mpich(AutotoolsPackage, CudaPackage, ROCmPackage): + description="""Abstract Device Interface (ADI) + implementation. The ch4 device is in experimental state for versions + before 3.4.""", +- values=("ch3", "ch4"), ++ values=("ch3", "ch4", "ch3:sock"), + multi=False, + ) + variant( + "netmod", + default="ofi", + description="""Network module. Only single netmod builds are +-supported. For ch3 device configurations, this presumes the +-ch3:nemesis communication channel. ch3:sock is not supported by this +-spack package at this time.""", ++supported, and netmod is ignored if device is ch3:sock.""", + values=("tcp", "mxm", "ofi", "ucx"), + multi=False, + ) +@@ -121,6 +119,7 @@ class Mpich(AutotoolsPackage, CudaPackage, ROCmPackage): + depends_on("yaksa+cuda", when="+cuda ^yaksa") + depends_on("yaksa+rocm", when="+rocm ^yaksa") + conflicts("datatype-engine=yaksa", when="device=ch3") ++ conflicts("datatype-engine=yaksa", when="device=ch3:sock") + + variant( + "hcoll", +@@ -135,8 +134,10 @@ class Mpich(AutotoolsPackage, CudaPackage, ROCmPackage): + # overriding the variant from CudaPackage. + conflicts("+cuda", when="@:3.3") + conflicts("+cuda", when="device=ch3") ++ conflicts("+cuda", when="device=ch3:sock") + conflicts("+rocm", when="@:4.0") + conflicts("+rocm", when="device=ch3") ++ conflicts("+rocm", when="device=ch3:sock") + conflicts("+cuda", when="+rocm", msg="CUDA must be disabled to support ROCm") + + provides("mpi@:4.0") +@@ -271,6 +272,7 @@ class Mpich(AutotoolsPackage, CudaPackage, ROCmPackage): + conflicts("netmod=tcp", when="device=ch4") + conflicts("pmi=pmi2", when="device=ch3 netmod=ofi") + conflicts("pmi=pmix", when="device=ch3") ++ conflicts("pmi=pmix", when="device=ch3:sock") + conflicts("pmi=pmix", when="+hydra") + conflicts("pmi=cray", when="+hydra") + +@@ -556,7 +558,10 @@ def configure_args(self): + elif "device=ch3" in spec: + device_config = "--with-device=ch3:nemesis:" + +- if "netmod=ucx" in spec: ++ # Do not apply any netmod if device is ch3:sock ++ if "device=ch3:sock" in spec: ++ device_config = "--with-device=ch3:sock" ++ elif "netmod=ucx" in spec: + device_config += "ucx" + elif "netmod=ofi" in spec: + device_config += "ofi" +-- +2.25.1 + diff --git a/scripts/ci/images/Dockerfile.ci-el8-intel b/scripts/ci/images/Dockerfile.ci-el8-intel index d43abe663a..4470f3a703 100644 --- a/scripts/ci/images/Dockerfile.ci-el8-intel +++ b/scripts/ci/images/Dockerfile.ci-el8-intel @@ -23,11 +23,11 @@ RUN dnf install -y \ libpng-devel \ Lmod \ make \ - openmpi-devel \ + mpich-devel \ patch \ patchelf \ python3-devel \ - python3-mpi4py-openmpi \ + python3-mpi4py-mpich \ python3-pip \ tar \ tcl \ @@ -42,9 +42,9 @@ RUN dnf install -y \ COPY oneAPI.repo /etc/yum.repos.d/ RUN pip3 install numpy && \ dnf install -y \ - intel-oneapi-compiler-dpcpp-cpp-2023.1.0 \ - intel-oneapi-compiler-fortran-2023.1.0 \ - intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.1.0 + intel-oneapi-compiler-dpcpp-cpp-2023.2.1 \ + intel-oneapi-compiler-fortran-2023.2.1 \ + intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.2.1 RUN dnf clean all # Setup module files for the compilers @@ -66,7 +66,7 @@ RUN curl -L https://github.com/szcompressor/SZ/releases/download/v2.1.12.5/SZ-2. cd .. && \ rm -rf SZ-2.1.12.5 build -ENV PATH /opt/cmake/bin:/opt/sz/2.1.12.5/bin:/usr/lib64/openmpi/bin:${PATH} +ENV PATH /opt/cmake/bin:/opt/sz/2.1.12.5/bin:/usr/lib64/mpich/bin:${PATH} ENV LD_LIBRARY_PATH /opt/sz/2.1.12.5/lib64:${LD_LIBRARY_PATH} ENV CMAKE_PREFIX_PATH /opt/sz/2.1.12.5:${CMAKE_PREFIX_PATH} diff --git a/scripts/ci/images/Dockerfile.ci-spack-ubuntu20.04-base b/scripts/ci/images/Dockerfile.ci-spack-ubuntu20.04-base index 6f55304208..12e64f7abe 100644 --- a/scripts/ci/images/Dockerfile.ci-spack-ubuntu20.04-base +++ b/scripts/ci/images/Dockerfile.ci-spack-ubuntu20.04-base @@ -1,16 +1,27 @@ # vim: ft=dockerfile -FROM ecpe4s/ubuntu20.04:23.05 +FROM ecpe4s/ubuntu20.04-runner-amd64-gcc-11.4:2023.08.01 + +ARG E4S_VERSION=23.08 + +# Clone and patch spack +RUN cd / && \ + git clone --depth 1 --single-branch --branch e4s-${E4S_VERSION} https://github.com/spack/spack COPY packages.yaml /etc/spack/packages.yaml +# TODO: Patch only needed until we merge https://github.com/spack/spack/pull/40964 +COPY 0001-mpich-support-ch3-sock.patch /spack -# Install Base specs -RUN . /spack/share/spack/setup-env.sh && \ +# Install base specs +RUN cd spack && \ + git apply 0001-mpich-support-ch3-sock.patch && \ + . /spack/share/spack/setup-env.sh && \ + spack mirror add E4S "https://cache.e4s.io/${E4S_VERSION}" && \ export ADIOS_SPEC_NO_MPI="adios2~mpi" && \ export ADIOS_SPEC_OPENMPI="adios2+mpi^openmpi" && \ export ADIOS_SPEC_MPICH="adios2+mpi^mpich" && \ spack config add "config:checksum:false" && \ spack config add "config:build_jobs:$(nproc)" && \ - spack config add "concretizer:unify:false" && \ + spack config add "concretizer:unify:true" && \ spack env create adios2-ci-serial && \ spack -e adios2-ci-serial add ${ADIOS_SPEC_NO_MPI} && \ spack -e adios2-ci-serial concretize && \ @@ -38,23 +49,6 @@ RUN . /spack/share/spack/setup-env.sh && \ spack clean -a && \ echo "source /spack/share/spack/setup-env.sh" >> /etc/profile.d/zz-spack.sh -# Install deps -RUN pip install shyaml -COPY specs.yaml /tmp/specs.yaml -RUN . /spack/share/spack/setup-env.sh && \ - spack env create adios2-ci-deps /tmp/specs.yaml && \ - spack -e adios2-ci-deps install \ - --no-check-signature \ - --include-build-deps \ - --fail-fast && \ - spack -e adios2-ci-serial add $(shyaml get-values spack.specs < /tmp/specs.yaml) && \ - spack -e adios2-ci-serial concretize && \ - spack -e adios2-ci-ompi add $(shyaml get-values spack.specs < /tmp/specs.yaml) && \ - spack -e adios2-ci-ompi concretize && \ - spack -e adios2-ci-mpich add $(shyaml get-values spack.specs < /tmp/specs.yaml) && \ - spack -e adios2-ci-mpich concretize && \ - spack clean -a - ### Other missing packages (compared to el8 base): RUN apt-get update && apt-get install -y \ ccache \ diff --git a/scripts/ci/images/packages.yaml b/scripts/ci/images/packages.yaml index b034552fcb..484d7bef60 100644 --- a/scripts/ci/images/packages.yaml +++ b/scripts/ci/images/packages.yaml @@ -4,6 +4,8 @@ packages: adios2: require: '+blosc+bzip2+zfp+sz+png+sst+dataman+ssc+hdf5+python+fortran' mpich: - require: 'device=ch3 netmod=tcp' + require: 'device=ch3:sock' openmpi: require: '@4.1' + mgard: + require: '@2023-01-10' diff --git a/scripts/ci/images/specs.yaml b/scripts/ci/images/specs.yaml deleted file mode 100644 index 7ec02d9a41..0000000000 --- a/scripts/ci/images/specs.yaml +++ /dev/null @@ -1,5 +0,0 @@ -spack: - view: true - specs: - # https://github.com/ornladios/ADIOS2/issues/3754 - - mgard@2023-01-10