axom
axom copied to clipboard
Compilation error in CUDA configurations without RAJA
In working through a user configuration error, I discovered a bug in CUDA-based configurations of axom without RAJA.
It shows up in a few places, e.g.
<axom>/src/axom/primal/tests/primal_zip.cpp(524): error: namespace "axom" has no member "CUDA_EXEC"
<axom>/src/axom/spin/tests/spin_uniform_grid.cpp(498): error: namespace "axom" has no member "CUDA_EXEC"
<axom>/src/axom/spin/tests/spin_uniform_grid.cpp(498): error: namespace "axom" has no member "CUDA_EXEC"
Looks like CUDA_EXEC
is not properly guarded for this use-case:
https://github.com/LLNL/axom/blob/631e5ef14952ab2a982498c0d31f972724155c23/src/axom/core/execution/internal/cuda_exec.hpp#L12-L17
Details
I used the following host-config on LLNL's blueos platform which configures axom w/o any third-party libs:
#------------------------------------------------------------------------------
# !!!! Adapted from axom's rzansel-clang-cuda host-config
#------------------------------------------------------------------------------
# CMake executable path: /usr/tce/packages/cmake/cmake-3.21.1/bin/cmake
#------------------------------------------------------------------------------
set(COMPILER_VERSION "clang-ibm-14.0.5" CACHE STRING "")
set(CUDA_VERSION "cuda-12.0.0" CACHE STRING "")
set(GCC_HOME "/usr/tce/packages/gcc/gcc-11.2.1" CACHE PATH "")
set(BLT_C_FLAGS "--gcc-toolchain=${GCC_HOME}" CACHE STRING "")
set(BLT_CXX_FLAGS "--gcc-toolchain=${GCC_HOME}" CACHE STRING "")
#------------------------------------------------------------------------------
# Compilers
#------------------------------------------------------------------------------
set(CMAKE_C_COMPILER "/usr/tce/packages/clang/${COMPILER_VERSION}/bin/clang" CACHE PATH "")
set(CMAKE_CXX_COMPILER "/usr/tce/packages/clang/${COMPILER_VERSION}/bin/clang++" CACHE PATH "")
set(CMAKE_GENERATOR "Unix Makefiles" CACHE STRING "")
set(ENABLE_FORTRAN OFF CACHE BOOL "")
set(BLT_EXE_LINKER_FLAGS "--gcc-toolchain=${GCC_HOME}" CACHE STRING "")
#------------------------------------------------------------------------------
# MPI
#------------------------------------------------------------------------------
set(ENABLE_MPI ON CACHE BOOL "")
set(MPI_C_COMPILER "/usr/tce/packages/spectrum-mpi/spectrum-mpi-rolling-release-${COMPILER_VERSION}/bin/mpicc" CACHE PATH "")
set(MPI_CXX_COMPILER "/usr/tce/packages/spectrum-mpi/spectrum-mpi-rolling-release-${COMPILER_VERSION}/bin/mpicxx" CACHE PATH "")
set(MPIEXEC_EXECUTABLE "/usr/tce/packages/spectrum-mpi/spectrum-mpi-rolling-release-${COMPILER_VERSION}/bin/mpirun" CACHE PATH "")
set(MPIEXEC_NUMPROC_FLAG "-np" CACHE STRING "")
set(BLT_MPI_COMMAND_APPEND "mpibind" CACHE STRING "")
#------------------------------------------------
# Cuda
#------------------------------------------------
set(ENABLE_CUDA ON CACHE BOOL "")
set(CUDAToolkit_ROOT "/usr/tce/packages/cuda/${CUDA_VERSION}" CACHE PATH "")
set(CMAKE_CUDA_COMPILER "${CUDAToolkit_ROOT}/bin/nvcc" CACHE PATH "")
set(CMAKE_CUDA_HOST_COMPILER "${CMAKE_CXX_COMPILER}" CACHE PATH "")
set(CUDA_TOOLKIT_ROOT_DIR "/usr/tce/packages/cuda/${CUDA_VERSION}" CACHE PATH "")
set(CMAKE_CUDA_ARCHITECTURES "70" CACHE STRING "")
set(CMAKE_CUDA_SEPARABLE_COMPILATION ON CACHE BOOL "")
set(AXOM_ENABLE_ANNOTATIONS ON CACHE BOOL "")
set(CMAKE_CUDA_ARCHITECTURES "70" CACHE STRING "")
set(gtest_disable_pthreads ON CACHE BOOL "") # nvcc does not like gtest's 'pthreads' flag
set(CMAKE_CUDA_FLAGS "-restrict --expt-extended-lambda -Xcompiler=--gcc-toolchain=${GCC_HOME}" CACHE STRING "")
#------------------------------------------------
# Other
#------------------------------------------------
# The following allows us to build axom w/o any TPLs
set(AXOM_ENABLE_SIDRE OFF CACHE BOOL "")
set(AXOM_ENABLE_KLEE OFF CACHE BOOL "")
set(AXOM_ENABLE_INLET OFF CACHE BOOL "")
set(ENABLE_OPENMP OFF CACHE BOOL "")
set(ENABLE_GTEST_DEATH_TESTS OFF CACHE BOOL "")
set(ENABLE_DOCS OFF CACHE BOOL "")
set(ENABLE_TESTS ON CACHE BOOL "")