问题描述
我尝试使用NVIDIA Tesla P100图形卡(Ubuntu版本16.04)上的CUDA 9.0工具包编译代码,并且代码中使用了CUBLAS库。为了进行编译,我使用以下命令来编译“ my_program.cu”
nvcc -std=c++11 -L/usr/local/cuda-9.0/lib64 my_program.cu -o mu_program.o -lcublas
但是,我遇到了以下错误:
nvlink error: Undefined reference to 'cublasCreate_v2’in '/tmp/tmpxft_0000120b_0000000-10_my_program’
由于我已经在编译命令中链接了库路径,为什么仍然出现错误。请帮助我解决此错误。
解决方法
似乎很明显,您正在尝试使用设备代码中的CUBLAS库。这与普通主机用法不同,并且需要特殊的编译/链接步骤。您需要:
- 针对正确的设备架构进行编译(必须为cc3.5或更高版本)
- 使用可重定位设备代码链接 cublas 设备库中的
- 链接(除了cublas主机库之外)
- CUDA设备运行时库中的链接
- 在CUDA 10.0之前使用CUDA工具包
编译命令行中的以下新增内容应该可以帮助您:
nvcc -std=c++11 my_program.cu -o my_program.o -lcublas -arch=sm_60 -rdc=true -lcublas_device -lcudadevrt
以上内容假设您实际上使用的是CUDA 9.0的正确安装。不建议使用CUBLAS设备库,现在已从较新的CUDA工具包中将其删除(请参见here)。