diff --git a/CMakeLists.txt b/CMakeLists.txt index c2db988..30cc645 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,7 @@ project(hpc_stencil_demo LANGUAGES CXX) option(ENABLE_MPI "Build MPI executable" ON) option(ENABLE_TESTS "Build tests" ON) option(ENABLE_BENCHMARKS "Enable benchmark CTest labels" ON) +option(ENABLE_MPI_OVERSUBSCRIBE "Allow MPI tests to oversubscribe small CI runners" ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -49,11 +50,32 @@ if(ENABLE_TESTS) add_test(NAME stencil_unit_tests COMMAND stencil_unit_tests) if(ENABLE_MPI) - add_test(NAME stencil_mpi_smoke COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 2 $ --size 1000 --steps 20) + set(HPC_DEMO_MPIEXEC_PREFLAGS "") + if(ENABLE_MPI_OVERSUBSCRIBE) + list(APPEND HPC_DEMO_MPIEXEC_PREFLAGS "--oversubscribe") + endif() + + function(add_hpc_demo_mpi_test test_name ranks) + add_test( + NAME ${test_name} + COMMAND + ${MPIEXEC_EXECUTABLE} + ${MPIEXEC_NUMPROC_FLAG} ${ranks} + ${HPC_DEMO_MPIEXEC_PREFLAGS} + $ + ${ARGN} + ) + set_tests_properties(${test_name} + PROPERTIES + ENVIRONMENT "OMPI_ALLOW_RUN_AS_ROOT=1;OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1" + ) + endfunction() + + add_hpc_demo_mpi_test(stencil_mpi_smoke 2 --size 1000 --steps 20) endif() if(ENABLE_BENCHMARKS AND ENABLE_MPI) - add_test(NAME benchmark_stencil_mpi COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 4 $ --size 200000 --steps 200) + add_hpc_demo_mpi_test(benchmark_stencil_mpi 4 --size 200000 --steps 200) set_tests_properties(benchmark_stencil_mpi PROPERTIES LABELS benchmark) endif() endif() @@ -68,4 +90,3 @@ if(ENABLE_MPI) endif() install(DIRECTORY include/ DESTINATION include) -