CUDA issue:cudaGetDeviceCount()错误
问题
cuda编程cudaGetDeviceCount()出问题。检测:运行cuda sample——deviceQuery,Fail,原因:no CUDA-capable device is detected。但是之前编译caffe(含cuda和cudnn),以及nvcc 编译自己编写的.cu程序都OK。(怪不得caffe这次安装了cudnn,运行mnist,还很慢)
常用命令
nvcc -V
:可以查看cuda版本 prime-select query
:可以查看正在运行的显卡 prime-selecr intel/nvidia
:可以切换工作的显卡
现在上面都运行正常的。
猜测推理
既然显卡运行正常,那么Nvidia显卡驱动应该是没有问题的。所以重新安装cuda。
先整理现在的软件和cuda有依赖的:
caffe-master,caffe-bsd;cuda安装在/usr/local/cuda-7.0(默认),有一个cuda的文件夹软链接。此外在/etc/ld.so.conf.d/中有个cuda.conf的文件含有/usr/local/cuda-7.0/lib64;在cuda-7.0中还有cudnn的include和lib文件。
猜测:cuda重新安装后,安装在原来的位置,那么include,库和bin都能够被需要cuda的文件找到,所以caffe-master,caffe-bsd应该可以不用重新编译。此外,cudaSamples也应该不用重新编译。
然而,运行nvidia-smi,出现NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.的错误,所以Nvidia驱动可能会出错。暂且先认为它工作正常。先重新安装cuda。
重装cuda7.0
卸载cuda:.run 文件安装的,在cuda-7.0/bin下有uninstall_cuda_7.0.pl,直接./运行
卸载后查看/proc/driver/nvidia,没有这个文件。
按照之前安装cuda的教程(.run)重新安装了cuda。
检验
cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 352.63nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Mon_Feb_16_22:59:02_CST_2015
Cuda compilation tools, release 7.0, V7.0.27nvidia-smi
| NVIDIA-SMI 352.63 Driver Version: 352.63 |
| GPU Name Persistence-M| Memory-Usage | GPU-Util Compute M. |
| 0 GeForce GT 740M Off | 120MiB / 2047MiB | N/A Default |
| Processes: GPU Memory |
| GPU:0|- check
/dev/nvidia*
存在nvidia0 - 测试./deviceQuery,./bandwidthTest
(这之前先要ldconfig),运行cudaSamples(上次编译的)./deviceQuery,PASS;./bandwidthTest,PASS prime-select query
查看:nvidia,切换到intel。./deviceQuery和./bandwidthTest仍成功。- 运行caffe_mnist
(cudnn)运行成功,但是速度并没有很快。
(说明之前的猜测是对的,caffe-master,cudaSamples都不用重新编译。cuda只要头文件,库,bin即可)
处理依赖:
sudo ldconfig
——在/etc/ld.so.conf.d/中有个cuda.conf的文件含有/usr/local/cuda-7.0/lib64- 重新解压cudnn到cuda的文件中,ldconfig
原因
cuda可能是更新,或者期间安装卸载其他软件软件的影响吧。具体原因未知。