无法将cuda示例链接到clang++-Ubuntu18.04下的9
我正在努力学习这个例子 我使用Ubuntu18.04.3 LTS,9.0.0-2版本 我拥有的设备是(deviceQuery输出的片段): 我运行命令:无法将cuda示例链接到clang++-Ubuntu18.04下的9,cuda,ubuntu-18.04,clang++,Cuda,Ubuntu 18.04,Clang++,我正在努力学习这个例子 我使用Ubuntu18.04.3 LTS,9.0.0-2版本 我拥有的设备是(deviceQuery输出的片段): 我运行命令: clang++-9 --verbose --cuda-path=/usr/local/cuda-10.2 axpy.cu -o axpy --cuda-gpu-arch=sm_61 -L/usr/local/cuda-10.2 -lcudart_static -ldl -lrt -pthread 输出为: clang version 9.0.
clang++-9 --verbose --cuda-path=/usr/local/cuda-10.2 axpy.cu -o axpy --cuda-gpu-arch=sm_61 -L/usr/local/cuda-10.2 -lcudart_static -ldl -lrt -pthread
输出为:
clang version 9.0.0-2~ubuntu18.04.1 (tags/RELEASE_900/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0
Candidate multilib: .;@m64
Selected multilib: .;@m64
Found CUDA installation: /usr/local/cuda-10.2, version unknown
clang: error: cannot find libdevice for sm_61. Provide path to different CUDA installation via --cuda-path, or pass -nocudalib to build without linking with libdevice.
据我所知,libdevice正处于其应有的位置:
~>ls /usr/local/cuda-10.2/nvvm/libdevice/
libdevice.10.bc
我做错了什么
于2020年11月添加:
在@ArtemB comment之后,我尝试使用clang++-10运行它,它会发出警告,但编译和运行都很好。简短回答:我的驱动程序支持的cuda版本(10.2)对于我的clang(9.0.0)来说太新了 以下是我的机器上的
nvidia smi
输出的顶部:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01 Driver Version: 440.33.01 CUDA Version: 10.2 |
所以我的驱动程序确实支持cuda-10.2。但是,clang 9.0.0似乎不支持此版本。实际上,当使用额外标志-nocudalib
运行上述命令时,会得到以下响应(仅显示最后几行):
包含在以下文件中:1:
/usr/lib/llvm-9/lib/clang/9.0.0/include/\uu clang\u cuda\u runtime\u wrapper.h:52:2:错误:“不支持的cuda版本!”
#错误“不支持CUDA版本!”
^
axpy.cu:23:7:错误:使用未声明的标识符cudaConfigureCall
axpy(a,设备x,设备y);
^
为sm_61编译时生成2个错误。
检查有问题的文件(clang cuda运行时包装器)时,在第48-53行中可以看到以下内容:
#include "cuda.h"
#if !defined(CUDA_VERSION)
#error "cuda.h did not define CUDA_VERSION"
#elif CUDA_VERSION < 7000 || CUDA_VERSION > 10010
#error "Unsupported CUDA version!"
#endif
#包括“cuda.h”
#如果!已定义(CUDA_版本)
#错误“cuda.h未定义cuda_版本”
#elif CUDA|U版本<7000|CUDA|U版本>10010
#错误“不支持CUDA版本!”
#恩迪夫
直到最近,clang对CUDA版本还是相当挑剔的。我最近放松了一点,所以clang-10更为宽松,将尝试以与最新支持的CUDA版本(目前为10.1)相同的功能使用较新的CUDA版本。它还将发出警告。它与CUDA-11.0的配合非常好,足以编译Tensorflow
CUDA-11.1(我相信windows上的11.0更新1)已经从发行版中删除了version.txt文件,这将再次破坏CUDA编译和当前发布的clang版本。这应该在clang-11.0.1发布时修复(与CUDA的版本匹配纯属巧合)。您真的确定只安装了一台libdevice吗?clang的详细输出显示了什么?+talonmies,a)有两个CUDA,但我指出了10.2。我对问题进行了编辑,以包含显式指向10.2的命令(使用cuda路径)、详细参数和输出(当然是同一个问题)。谢天谢地,直到最近clang对CUDA版本相当挑剔。我最近放松了一点,所以clang-10更为宽松,并将尝试以与最新支持的CUDA版本相同的功能使用较新的CUDA版本。它还将发出警告。它与CUDA-11配合得很好,足以编译Tensorflow。@ArtemB:谢谢。我试试看again@ArtemB,如果你把它作为答案写下来,我会把“接受”从我的答案移到你的答案上——我试过了,它成功地添加了一个关于最新发展的答案。
In file included from <built-in>:1:
/usr/lib/llvm-9/lib/clang/9.0.0/include/__clang_cuda_runtime_wrapper.h:52:2: error: "Unsupported CUDA version!"
#error "Unsupported CUDA version!"
^
axpy.cu:23:7: error: use of undeclared identifier cudaConfigureCall
axpy<<<1, kDataLen>>>(a, device_x, device_y);
^
2 errors generated when compiling for sm_61.
#include "cuda.h"
#if !defined(CUDA_VERSION)
#error "cuda.h did not define CUDA_VERSION"
#elif CUDA_VERSION < 7000 || CUDA_VERSION > 10010
#error "Unsupported CUDA version!"
#endif