diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index e842573..d1fdec9 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -12,8 +12,8 @@ on: jobs: buildTestAnalyze: # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - # The reason to use ubuntu-22.04: https://bugs.launchpad.net/ubuntu/+source/mpich/+bug/2072338 - runs-on: ubuntu-22.04 + # A known bug using MPICH ubuntu-24.04: https://bugs.launchpad.net/ubuntu/+source/mpich/+bug/2072338 + runs-on: ubuntu-24.04 strategy: matrix: compiler: @@ -41,7 +41,7 @@ jobs: - name: Install mpi run: | sudo apt-get update -yq - sudo apt-get install -yq mpich libmpich-dev + sudo apt-get install -yq openmpi-bin libopenmpi-dev - name: ADIOS2 Create Build Environment run: /usr/bin/cmake -E make_directory ${{runner.workspace}}/build-adios2 @@ -147,6 +147,7 @@ jobs: run: /usr/bin/cmake $GITHUB_WORKSPACE/redev -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_C_COMPILER=mpicc + -DMPIEXEC_PREFLAGS="--oversubscribe" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DADIOS2_DIR=${{runner.workspace}}/build-adios2/install/lib/cmake/adios2/ -DADIOS2_HAVE_SST=ON diff --git a/CMakeLists.txt b/CMakeLists.txt index e2d2f17..f89dd23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,7 @@ include(CTest) if(BUILD_TESTING) message(STATUS "MPIEXEC_EXECUTABLE: ${MPIEXEC_EXECUTABLE}") message(STATUS "MPIEXEC_NUMPROC_FLAG: ${MPIEXEC_NUMPROC_FLAG}") + message(STATUS "MPIEXEC_PREFLAGS: ${MPIEXEC_PREFLAGS}") set(ADIOS2_BPLS_PATH CACHE FILEPATH "Path to the ADIOS2 bpls utility") if(ADIOS2_BPLS_PATH AND NOT EXISTS ${ADIOS2_BPLS_PATH}) @@ -91,7 +92,7 @@ if(BUILD_TESTING) removeAdiosFiles(${TESTNAME}_cleanup) add_test( NAME ${TESTNAME} - COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${PROCS} ${VALGRIND} ${VALGRIND_ARGS} ${EXE} ${ARGN} + COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${PROCS} ${VALGRIND} ${VALGRIND_ARGS} ${EXE} ${ARGN} ) endfunction(mpi_test) @@ -103,6 +104,7 @@ if(BUILD_TESTING) add_test(NAME ${DUALTEST_TESTNAME} COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/runMultipleMpiJobs.sh ${MPIEXEC_EXECUTABLE} + ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${DUALTEST_NAME1} ${DUALTEST_PROCS1} ${DUALTEST_EXE1} "${DUALTEST_ARGS1}" ${DUALTEST_NAME2} ${DUALTEST_PROCS2} ${DUALTEST_EXE2} "${DUALTEST_ARGS2}") @@ -117,6 +119,7 @@ if(BUILD_TESTING) add_test(NAME ${TRITEST_TESTNAME} COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/runMultipleMpiJobs.sh ${MPIEXEC_EXECUTABLE} + ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${TRITEST_NAME1} ${TRITEST_PROCS1} ${TRITEST_EXE1} "${TRITEST_ARGS1}" ${TRITEST_NAME2} ${TRITEST_PROCS2} ${TRITEST_EXE2} "${TRITEST_ARGS2}" diff --git a/runMultipleMpiJobs.sh b/runMultipleMpiJobs.sh index f7665e0..b064f8d 100755 --- a/runMultipleMpiJobs.sh +++ b/runMultipleMpiJobs.sh @@ -1,20 +1,28 @@ #!/bin/bash -x -[[ $# != 10 && $# != 14 && $# != 20 ]] && \ - echo "Usage: ... " && \ +if [[ $# == 10 || $# == 14 || $# == 20 ]]; then + # Old format: no preflags + runCmd=${1} + numProcsFlag=${2} + preFlags="" + shift 2 +elif [[ $# == 11 || $# == 15 || $# == 21 ]]; then + # New format: with preflags + runCmd=${1} + preFlags=${2} + numProcsFlag=${3} + shift 3 +else + echo "Usage: ... " && \ exit 1 -runCmd=${1} -numProcsFlag=${2} -shift 2 +fi -declare -a PIDS -declare -a LOGS run() { local name=${1} local procs=${2} local exe=${3} local args=${4} IFS=';' read -a argsArray <<< "${args}" #split the cmake list of args - ${runCmd} ${numProcsFlag} ${procs} ${exe} ${argsArray[@]} &> ${name}.log & + ${runCmd} ${preFlags} ${numProcsFlag} ${procs} ${exe} ${argsArray[@]} &> ${name}.log & PIDS+=($!) LOGS+=(${name}.log) }