CUDA运行时API错误38:未检测到支持CUDA的设备

时间:2012-10-24 17:12:48

标签: cuda nvidia

情况

我有一个2 gpu服务器(Ubuntu 12.04),我用一台GTX 670切换了Tesla C1060。比我在4.2上安装了CUDA 5.0。之后我编译了所有execpt for simpleMPI而没有错误。但是当我运行./devicequery时,我收到以下错误消息:

foo@bar-serv2:~/NVIDIA_CUDA-5.0_Samples/bin/linux/release$ ./deviceQuery
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected

我尝试了什么

为了解决这个问题,我尝试了CUDA-capable device推荐的所有想法,但无济于事:

  • /dev/nvidia*在那里,权限是666(crw-rw-rw-)和所有者root:root

     foo@bar-serv2:/dev$ ls -l nvidia*
     crw-rw-rw- 1 root root 195,   0 Oct 24 18:51 nvidia0
     crw-rw-rw- 1 root root 195,   1 Oct 24 18:51 nvidia1
     crw-rw-rw- 1 root root 195, 255 Oct 24 18:50 nvidiactl
    
  • 我尝试用sudo执行代码

  • CUDA 5.0同时安装驱动程序和库

PS 这里是lspci | grep -i nvidia:

foo@bar-serv2:/dev$ lspci | grep -i nvidia
03:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 670] (rev a1)
03:00.1 Audio device: NVIDIA Corporation GK104 HDMI Audio Controller (rev a1)
04:00.0 VGA compatible controller: NVIDIA Corporation G94 [Quadro FX 1800] (rev a1)

[更新]

foo@bar-serv2:~/NVIDIA_CUDA-5.0_Samples/bin/linux/release$  nvidia-smi -a
NVIDIA: API mismatch: the NVIDIA kernel module has version 295.59,
but this NVIDIA driver component has version 304.54.  Please make
sure that the kernel module and all NVIDIA driver components
have the same version.
Failed to initialize NVML: Unknown Error

如果我使用CUDA 5.0安装程序同时安装驱动程序和库,那怎么可能呢。可能旧的4.2版本,仍然在乱糟糟的东西?

5 个答案:

答案 0 :(得分:10)

我遇到了这个问题,正在运行

nvidia-smi

通知我API不匹配。问题是我的Linux发行版安装了需要重新启动系统的更新,因此重新启动解决了这个问题。

答案 1 :(得分:3)

请参阅此堆栈溢出问题Installing cuda 5 samples in Ubuntu 12.10

  1. Ubuntu 12不是受支持的Linux发行版(尚未推出)。有关参考,请参阅CUDA 5.0 Toolkit Release Notes And Errata

    **目前支持的分发

    Distribution       32 64  Kernel                 GCC         GLIBC        
    -----------------  -- --  ---------------------  ----------  -------------
    Fedora 16          X  X   3.1.0-7.fc16           4.6.2       2.14.90      
    ICC Compiler 12.1     X                                                   
    OpenSUSE 12.1         X   3.1.0-1.2-desktop      4.6.2       2.14.1       
    Red Hat RHEL 6.x      X   2.6.32-131.0.15.el6    4.4.5       2.12         
    Red Hat RHEL 5.5+     X   2.6.18-238.el5         4.1.2       2.5          
    SUSE SLES 11 SP2      X   3.0.13-0.27-pae        4.3.4       2.11.3       
    SUSE SLES 11.1     X  X   2.6.32.12-0.7-pae      4.3.4       2.11.1       
    Ubuntu 11.10       X  X   3.0.0-19-generic-pae   4.6.1       2.13         
    Ubuntu 10.04       X  X   2.6.35-23-generic      4.4.5       2.12.1    
    
  2. 如果您想在Ubuntu 12上运行,请参阅rpardo的答案。看起来这个发行版而不是安装64位库/usr/lib64将它们安装到/usr/lib/x86_64-linux-gnu/

  3. 我建议在系统上搜索libcuda.solibnvidia-ml.so的所有实例。由于驱动程序不支持此发行版,因此可能已将库安装到LD_LIBRARY_PATH未指向的路径。然后移动库和/或更改LD_LIBRARY_PATH以指向此位置(它应该是左侧的第一个路径)。然后重试nvidia-smideviceQuery

    祝你好运

答案 2 :(得分:1)

我在使用GTX980 GPU的Windows机器上获得了cudaGetDeviceCount的错误38。 我从NVIDIA网站下载了最新的GTX 980驱动程序后,安装并重新启动,一切都很好。看起来CUDA安装程序没有安装最新的驱动程序。

答案 3 :(得分:0)

尝试使用sudo运行示例(或者,您可以执行“sudo su'”,将LD_LIBRARY_PATH设置为cuda库的路径并在root时运行示例)。显然,由于您可能使用sudo安装了CUDA 5.0,因此样本不会与普通用户一起运行。但是,如果您使用root运行示例,那么您也可以使用普通用户运行示例!我还没有重新启动系统,看看即使重启后样本是否与普通用户一起工作,或者每次你应该至少运行一个带root权限的CUDA应用程序。

如果在不使用sudo的情况下安装CUDA TookKit,问题可能会完全消失。

答案 4 :(得分:0)

我在Debian上遇到了类似的问题,结果表明加载的nvidia模块的版本与libcuda1不同。

要检查已安装的nvidia模块,您应执行以下操作:

  $ sudo modinfo nvidia-current | grep version
  version:        319.82

如果它与libcuda1的版本不符合您问题的根源。