修复NVIDIA HPC SDK与CMake兼容问题

CMakeGCC+NVCC+OpenMPI那一套屁事没有,但CMakePGI+NVCC+OpenMPI就经常出现各种各样的毛病,哦现在PGI改名叫NVIDIA HPC SDK了,改名也只是把错误信息改了改,反正还是照样报错。

找不到CUDA Toolkit

CMakeCould NOT find CUDA (missing: CUDA_INCLUDE_DIRS CUDA_CUDART_LIBRARY)这样的错误,可以通过手动指定CUDA Toolkit的目录解决。有趣的是NVIDIA HPC SDK里自带的精简版CUDA Toolkit是可以给CMake使用的。

CMake指定参数CUDA_TOOLKIT_ROOT_DIR,比如:

1
2
3
4
# 使用NVIDIA HPC SDK里自带的精简版Toolkit
cmake -DCUDA_TOOLKIT_ROOT_DIR=/home/apac/hpc_sdk/Linux_x86_64/2020/cuda/11.0
# 或者使用常规方法安装的Toolkit
cmake -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.0

NVCC不兼容编译器

make的时候报错nvcc fatal : Unsupported PGI compiler found. pgc++ is the only PGI compiler that is supported.或者Host compiler targets unsupported OS,这个时候可以通过make VERBOSE=1来输出更多调试信息。

在输出中的出错的那几句话中找到调用nvcc的命令,然后找名为--ccbin的参数,这个参数可能会被愚蠢的CMake设置成了gcc或者nvc等一票C编译器而不是C++编译器,因此通过手动指定一个Host端的C++编译器可以解决问题。

给CMake指定参数DCUDA_HOST_COMPILER,比如:

1
2
# 使用mpic++包装的C++编译器
cmake -DCUDA_HOST_COMPILER=$(which mpic++)