在“ / tmp / tmpxft_0000120b_0000000-10_my_program”中对“ cublasCreate_v2”的未定义引用

问题描述

我尝试使用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库。这与普通主机用法不同,并且需要特殊的编译/链接步骤。您需要:

  1. 针对正确的设备架构进行编译(必须为cc3.5或更高版本)
  2. 使用可重定位设备代码链接
  3. cublas 设备库中的
  4. 链接(除了cublas主机库之外)
  5. CUDA设备运行时库中的链接
  6. 在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)。