Enable compiling CUDA device code with clang
commit8be6f1ac64cb0338d55e706e0ff1c60a7ceeaf38
authorSzilárd Páll <pall.szilard@gmail.com>
Wed, 25 Jan 2017 01:53:17 +0000 (25 02:53 +0100)
committerSzilárd Páll <pall.szilard@gmail.com>
Tue, 3 Oct 2017 13:21:13 +0000 (3 15:21 +0200)
tree8e7ad6c36ccad40fba68f8292268b7848fb061a3
parent451b1a61910b63d04e137772bf6ec4a865da4241
Enable compiling CUDA device code with clang

clang can be used as a device compiler by setting GMX_CLANG_CUDA=ON. A
CUDA toolkit (>=7.0) is also needed. Workarounds required:
- texture operations are not supported, use the LDG/direct load-based
  fallback in such cases;
- CMake does not support natively clang for CUDA, but it's easy to
  convince it by setting CXX as compiler and few extra flags for *.cu.

Note that clang support is experimental and it is aimed at improving
portability and to allow using clang sanitizers without hassle in
CUDA builds.

TODO/investigate:
- CMake seems to not track some files properly with clang, changes
  to nbnxn_cuda_kernel{,_fermi}.cuh do not trigger a recompile (likely
  due to the indirect include through a macro in nbnxn_cuda_kernels.cuh).
- Full rebuild is triggered even if only CUDA compile flags are changed.

Change-Id: I3543469d9f0fda37c186ba8bb474980018bd5c54
15 files changed:
CMakeLists.txt
admin/builds/gromacs.py
admin/builds/post-submit-matrix.txt
cmake/gmxClangCudaUtils.cmake [copied from src/CMakeLists.txt with 60% similarity]
cmake/gmxManageClangCudaConfig.cmake [new file with mode: 0644]
cmake/gmxManageGPU.cmake
docs/dev-manual/build-system.rst
docs/install-guide/index.rst
src/CMakeLists.txt
src/buildinfo.h.cmakein
src/gromacs/CMakeLists.txt
src/gromacs/gpu_utils/cuda_arch_utils.cuh
src/gromacs/mdlib/nbnxn_cuda/nbnxn_cuda.cu
src/gromacs/mdlib/nbnxn_cuda/nbnxn_cuda_kernel_utils.cuh
src/gromacs/utility/binaryinformation.cpp