From a81e810248a21ff802c552184f1ee8b2013ba6e4 Mon Sep 17 00:00:00 2001 From: Gilles Grospellier Date: Mon, 5 Feb 2024 19:23:14 +0100 Subject: [PATCH] Use the right runtime for GPU tests. Add a CMake macro 'arcanefem_add_gpu_test' to handle that. --- CMakeLists.txt | 5 +---- cmake/Utils.cmake | 47 ++++++++++++++++++++++++++++++++++++++++++ poisson/CMakeLists.txt | 12 +++++------ 3 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 cmake/Utils.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index cacea3a..e021936 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,11 +4,8 @@ project(ArcaneFem LANGUAGES C CXX) find_package(Arcane REQUIRED) arcane_accelerator_enable() -if(ARCANE_HAS_ACCELERATOR) - message(STATUS "Arcane has been compiled with cuda. Enabling features that need CUDA.") -endif() - enable_testing() +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Utils.cmake) set(MSH_DIR ${CMAKE_SOURCE_DIR}/meshes/msh) diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake new file mode 100644 index 0000000..5f27baf --- /dev/null +++ b/cmake/Utils.cmake @@ -0,0 +1,47 @@ + +unset(ARCANE_ACCELERATOR_RUNTIME) +if(ARCANE_HAS_ACCELERATOR) + if(ARCANE_HAS_CUDA) + message(STATUS "Arcane has been compiled with CUDA.") + set(ARCANE_ACCELERATOR_RUNTIME "cuda") + endif() + if(ARCANE_HAS_HIP) + message(STATUS "Arcane has been compiled with ROCM/HIP.") + set(ARCANE_ACCELERATOR_RUNTIME "hip") + endif() +endif() + +# ---------------------------------------------------------------------------- +# Usage: +# +# arcanefem_add_gpu_test(NAME test_name [NB_MPI n] COMMAND exe_fileARGS exe_args) +# +macro(arcanefem_add_gpu_test) + set(options NB_MPI) + set(oneValueArgs NAME COMMAND) + set(multiValueArgs ARGS) + cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if (NOT ARGS_NAME) + message(FATAL_ERROR "No arg NAME for macro 'arcanefem_add_gpu_test'") + endif() + if (NOT ARGS_COMMAND) + message(FATAL_ERROR "No arg COMMAND for macro 'arcanefem_add_gpu_test'") + endif() + if(ARCANE_HAS_ACCELERATOR) + set(_RUNTIME_ARGS "-A,AcceleratorRuntime=${ARCANE_ACCELERATOR_RUNTIME}") + if (ARGS_NB_MPI) + if (MPIEXEC_EXECUTABLE) + add_test(NAME ${ARGS_NAME} COMMAND ${MPIEXEC_EXECUTABLE} -n ${ARGS_NB_MPI} ${ARGS_COMMAND} ${_RUNTIME_ARGS} ${ARGS_ARGS}) + endif() + else() + add_test(NAME ${ARGS_NAME} COMMAND ${ARGS_COMMAND} ${_RUNTIME_ARGS} ${ARGS_ARGS}) + endif() + endif() +endmacro() + +# ---------------------------------------------------------------------------- +# Local Variables: +# tab-width: 2 +# indent-tabs-mode: nil +# coding: utf-8-with-signature +# End: diff --git a/poisson/CMakeLists.txt b/poisson/CMakeLists.txt index bd8fa5f..fecca39 100644 --- a/poisson/CMakeLists.txt +++ b/poisson/CMakeLists.txt @@ -106,13 +106,11 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC) endif() -if(ARCANE_HAS_ACCELERATOR) - add_test(NAME [poisson]poisson_gpu COMMAND ./Poisson -A,AcceleratorRuntime=cuda Test.poisson.petsc.arc) - if(FEMUTILS_HAS_SOLVER_BACKEND_HYPRE) - add_test(NAME [poisson]poisson_hypre_direct_gpu COMMAND ./Poisson -A,AcceleratorRuntime=cuda Test.poisson.hypre_direct.arc) - if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE) - add_test(NAME [poisson]poisson_hypre_direct_gpu_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Poisson -A,AcceleratorRuntime=cuda Test.poisson.hypre_direct.arc) - endif() +arcanefem_add_gpu_test(NAME [poisson]poisson_gpu COMMAND ./Poisson ARGS Test.poisson.petsc.arc) +if(FEMUTILS_HAS_SOLVER_BACKEND_HYPRE) + arcanefem_add_gpu_test(NAME [poisson]poisson_hypre_direct_gpu COMMAND ./Poisson ARGS Test.poisson.hypre_direct.arc) + if(FEMUTILS_HAS_PARALLEL_SOLVER) + arcanefem_add_gpu_test(NAME [poisson]poisson_hypre_direct_gpu_4pe NB_MPI 4 COMMAND ./Poisson ARGS Test.poisson.hypre_direct.arc) endif() endif()