cufftmp.h header not found
Summary
The cufftmp header is not reliably found
GROMACS version
release-2024, e.g. 4bb8b92c
Steps to reproduce
Environment has
NVHPC=/opt/hpc_software/sdk/nvidia/hpc_sdk
NVHPC_ROOT=/opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11
from an nvhpc sdk module for 23.11
I used
cmake .. -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DGMX_MPI=on -DGMX_GPU=CUDA '-DGMX_CUDA_TARGET_SM=80;90' '-DGMX_CUDA_TARGET_COMPUTE=80;90' -DGMX_USE_CUFFTMP=on -DcuFFTMp_ROOT=/opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11/math_libs/12.3/targets/x86_64-linux -DGMX_NVSHMEM=on -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install -DCMAKE_EXPORT_COMPILE_COMMANDS=on -G Ninja
ninja src/gromacs/CMakeFiles/libgromacs.dir/fft/gpu_3dfft.cpp.o
What is the current bug behavior?
+ ninja src/gromacs/CMakeFiles/libgromacs.dir/fft/gpu_3dfft.cpp.o
[2/2] Building CXX object src/gromacs/CMakeFiles/libgromacs.dir/fft/gpu_3dfft.cpp.o
FAILED: src/gromacs/CMakeFiles/libgromacs.dir/fft/gpu_3dfft.cpp.o
/opt/hpc_software/compilers/gnu/12.1.0/bin/g++ -DGMX_DOUBLE=0 -DHAVE_CONFIG_H -DTMPI_EXPORTS -DTMPI_USE_VISIBILITY -DUSE_STD_INTTYPES_H -Dlibgromacs_EXPORTS -I/nfs/site/home/markjame/git/gromacs/r2024/src/include -I/nfs/site/home/markjame/git/gromacs/r2024/build-cmake-mpi-cuda-relwithdebinfo/src/include -I/nfs/site/home/markjame/git/gromacs/r2024/src -I/nfs/site/home/markjame/git/gromacs/r2024/api/legacy/include -I/nfs/site/home/markjame/git/gromacs/r2024/build-cmake-mpi-cuda-relwithdebinfo/api/legacy/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/analysisdata/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/applied_forces/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/commandline/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/compat/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/coordinateio/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/correlationfunctions/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/fft/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/gpu_utils/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/math/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/timing/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/utility/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/domdec/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/mdlib/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/pbcutil/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/pulling/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/topology/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/energyanalysis/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/fileio/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/essentialdynamics/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/ewald/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/gmxana/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/gmxlib/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/gmxpreprocess/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/mdtypes/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/hardware/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/imd/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/linearalgebra/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/listed_forces/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/mdrun/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/mdrunutility/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/mdspan/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/mimic/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/modularsimulator/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/nbnxm/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/onlinehelp/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/options/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/random/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/restraint/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/selection/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/simd/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/statistics/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/swap/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/tables/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/taskassignment/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/tools/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/trajectory/include -I/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/trajectoryanalysis/include -isystem /nfs/site/home/markjame/git/gromacs/r2024/src/external/thread_mpi/include -isystem /opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/12.3/hpcx/hpcx-2.16/ompi/include -isystem /opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/12.3/hpcx/hpcx-2.16/ompi/include/openmpi -isystem /opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/12.3/hpcx/hpcx-2.16/ompi/include/openmpi/opal/mca/hwloc/hwloc201/hwloc/include -isystem /opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/12.3/hpcx/hpcx-2.16/ompi/include/openmpi/opal/mca/event/libevent2022/libevent -isystem /opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/12.3/hpcx/hpcx-2.16/ompi/include/openmpi/opal/mca/event/libevent2022/libevent/include -isystem /nfs/site/home/markjame/spack/opt/spack/linux-ubuntu22.04-skylake_avx512/gcc-12.1.0/fftw-3.3.10-zq5qaxnsgglpmabbp7ubylmfnc4x3has/include -isystem /nfs/site/home/markjame/git/gromacs/r2024/src/external -isystem /opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11/comm_libs/nvshmem/include -isystem /opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11/cuda/12.3/targets/x86_64-linux/include -isystem /nfs/site/home/markjame/git/gromacs/r2024/src/external/tng_io/include -isystem /nfs/site/home/markjame/git/gromacs/r2024/build-cmake-mpi-cuda-relwithdebinfo/tng/include -isystem /nfs/site/home/markjame/git/gromacs/r2024/src/external/muparser/include -isystem /nfs/site/home/markjame/git/gromacs/r2024/src/external/lmfit -isystem /nfs/site/home/markjame/git/gromacs/r2024/src/external/colvars -O2 -g -DNDEBUG -std=c++17 -fPIC -fexcess-precision=fast -funroll-all-loops -mavx512f -mfma -mavx512vl -mavx512dq -mavx512bw -Wall -Wextra -Wpointer-arith -Wmissing-declarations -Wundef -Wstringop-truncation -Wno-missing-field-initializers -pthread -Wno-cast-function-type-strict -fopenmp -MD -MT src/gromacs/CMakeFiles/libgromacs.dir/fft/gpu_3dfft.cpp.o -MF src/gromacs/CMakeFiles/libgromacs.dir/fft/gpu_3dfft.cpp.o.d -o src/gromacs/CMakeFiles/libgromacs.dir/fft/gpu_3dfft.cpp.o -c /nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/fft/gpu_3dfft.cpp
In file included from /nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/fft/gpu_3dfft.cpp:75:
/nfs/site/home/markjame/git/gromacs/r2024/src/gromacs/fft/gpu_3dfft_cufftmp.h:44:10: fatal error: cufftMp.h: No such file or directory
44 | #include <cufftMp.h>
| ^~~~~~~~~~~
What did you expect the correct behavior to be?
I expected GROMACS to find this file:
$ find /opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11 -name cufftMp.h
/opt/hpc_software/sdk/nvidia/hpc_sdk/Linux_x86_64/23.11/math_libs/12.3/targets/x86_64-linux/include/cufftmp/cufftMp.h
and use CMake include paths to set up the compilation command so that that would work.
GROMACS is currently using
cuda_include_directories(${cuFFTMp_INCLUDE_DIR})
in src/gromacs/CMakeLists.txt
which clearly isn't working in this case (and is excessively general). I see that the cache variable cuFFTMp_INCLUDE_DIR contains the correct value.
Possible fixes
Using
target_include_directories(libgromacs PRIVATE ${cuFFTMp_INCLUDE_DIR})
after creating libgromacs
target is effective.