如何使用Clang的CUDA编译器?

时间:2018-04-11 16:38:18

标签: c++ cuda clang++

我在Ubuntu 17.10上。我安装了NVIDIA的CUDA 9.1 SDK。

这就是我的尝试:

~/GrinGoldMiner/src/Cudacka$ clang++-5.0 -Wl,--cuda-path=/usr/local/cuda-9.1 kernel.cu
clang: error: cannot find libdevice for sm_20. Provide path to different CUDA installation via --cuda-path, or pass -nocudalib to build without linking with libdevice.
clang: error: cannot find CUDA installation.  Provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes.
clang: error: cannot find CUDA installation.  Provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes.

显然它不起作用。似乎链接器标志没有通过。我怎样才能正确传递它们?

2 个答案:

答案 0 :(得分:2)

似乎clang++-5.0不支持CUDA 9.X ......

clang++能够使用CUDA 8.0编译CUDA内核:

$ clang++-5.0 -O0 -g --cuda-gpu-arch=sm_50 --cuda-path=/usr/local/cuda-8.0 -o t1 t1.cu -L/usr/local/cuda-8.0/lib64 -lcudart

但是当使用CUDA 9.X时,我会得到与您相同的错误:

$ clang++-5.0 --cuda-gpu-arch=sm_50 --cuda-path=/usr/local/cuda-9.0 -o t1 t1.cu -L/usr/local/cuda-9.0/lib64 -lcudart
clang: error: cannot find libdevice for sm_50. Provide path to different CUDA installation via --cuda-path, or pass -nocudalib to build without linking with libdevice.

他们在此提交中添加了对Volta(sm_70)和CUDA 9.0的支持:6d4cb40。 哪个只在master分支上提供:

$ git clone https://github.com/llvm-mirror/clang.git 
$ cd clang/ 
$ git branch --contains 6d4cb40
* master

$ git checkout release_50
Branch release_50 set up to track remote branch release_50 from origin.
Switched to a new branch 'release_50'
$ git log | grep 6d4cb40
$ (output was empty)

答案 1 :(得分:0)

我尝试在Ubuntu 17.10下构建GrinGoldMiner的Cudacka,我所要做的就是:

make

这在我的机器上生成了两个命令(经过一些清理):

/usr/local/cuda-9.1/bin/nvcc -ccbin g++ -m64 -Xcompiler -fpermissive -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_70,code=compute_70 -o cudacka.o -c kernel.cu
/usr/local/cuda-9.1/bin/nvcc -ccbin g++ -m64 -Xcompiler -fpermissive -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_70,code=compute_70 -o Cudacka.exe cudacka.o

他们成功生成了可执行文件Cudacka.exe

如果您对clang特别感兴趣:

当我尝试将g++替换为clang++-5.0时,我收到了此错误:

nvcc fatal   : The version ('50000') of the host compiler ('clang') is not supported

如果我使用-std=c++11 -ccbin clang++代替-ccbin g++,我会收到此错误:

kernel.cu(397): error: explicit instantiation definition directive for __global__ functions with clang host compiler is not yet supported

所以,我怀疑你可以使用clang为Ubuntu编译代码。