Ubuntu18.04 CUDA常见问题汇总
最近在Ubuntu下使用CUDA进行加速,遇到一些常见问题以及解决方案,在这里汇总一下,笔者也是最近接触CUDA编程,不对之处望谅解。
1.NVIDIA驱动失效
主要针对之前已经安装驱动,但是现在驱动失效的问题,报错如下:
// 命令行输入 nvidia-smi
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver
解决方案:
第一步:nvcc -V,检查驱动和cuda
// 输出如下,证明驱动存在:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85
第二步:ls /usr/src | grep nvidia 查看已安装驱动版本信息
// 输出如下,得到驱动版本信息:
nvidia-470.103.01
第三步:依次输入以下命令
sudo apt-get install dkms
sudo dkms install -m nvidia -v 450.57
第四步:再次输入 nvidia-smi,查看GPU状态,
第五步,如果还是没用,可以尝试一下回退Ubuntu内核版本,但是之前试过,发现也没有用。可以尝试重启电脑,再试一下。
2.CUDA和C++联合编译CMakeLists.txt编写
CUDA和C++联合编译的CMakeLists.txt文件有很多种编译方式,但是主要思想都是一致的,就是将CUDA代码与最终的可执行文件链接。
第一步:找到CUDA包,并链接CUDA库
find_package(CUDA REQUIRED)
include_directories(${CUDA_INCLUDE_DIRS})
link_directories(${CUDA_LIBRARIES})
第二步:设置nvcc
// comput_70,code=sm_70; 后面数字和你的GPU有关,选择合适的数字
set(CUDA_NVCC_FLAGS -gencode arch=compute_70,code=sm_70;-G;-g)
第三步:CUDA文件 add_library
cuda_add_library(gpu src/CUDA_file.cu)
第四步:链接到可执行文件
add_executable(test test.cc)
target_link_libraries(test gpu)
这样就可以通过 test.cc 文件调用 CUDA_file.cu 函数。但是还有一个问题,如果不是可执行文件来调用 CUDA_file.cu 文件,而是其他文件,就找不到 CUDA_file.cu 的函数。这时候需要类或者命名空间帮助找到相应的函数,做法就是在 CUDA_file.cu 的函数前面加上需要调用的文件的类名。
未完待续…