NVIDIA Cuda错误“;所有支持CUDA的设备都忙或不可用”;关于OSX

NVIDIA Cuda错误“;所有支持CUDA的设备都忙或不可用”;关于OSX,cuda,Cuda,通常,我会让CUDA库完全失败,并返回错误46(“所有支持CUDA的设备都忙或不可用”),即使是像CUDAMALOC这样的简单调用。如果我重新启动计算机,代码会成功运行,但这远远不够理想。这个问题显然是个问题 我的设置如下所示: OSX 10.6.8 NVIDIA CUDA驱动程序:CUDA驱动程序版本:4.0.31(最新) GPU驱动程序版本:1.6.36.10(256.00.35f11) 我尝试了英伟达论坛的许多解决方案,但都没用。我不想每次都重新启动。我还尝试用我认为正确(可能不正确)

通常,我会让CUDA库完全失败,并返回错误46(“所有支持CUDA的设备都忙或不可用”),即使是像CUDAMALOC这样的简单调用。如果我重新启动计算机,代码会成功运行,但这远远不够理想。这个问题显然是个问题

我的设置如下所示:

  • OSX 10.6.8
  • NVIDIA CUDA驱动程序:CUDA驱动程序版本:4.0.31(最新)
  • GPU驱动程序版本:1.6.36.10(256.00.35f11)
我尝试了英伟达论坛的许多解决方案,但都没用。我不想每次都重新启动。我还尝试用我认为正确(可能不正确)的程序卸载和重新加载驱动程序

但它仍然不起作用。如何让GPU(或CUDA)恢复正常

这是设备查询结果

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

Found 1 CUDA Capable device(s)

Device 0: "GeForce 9400M"
  CUDA Driver Version / Runtime Version          4.0 / 4.0
  CUDA Capability Major/Minor version number:    1.1
  Total amount of global memory:                 254 MBytes (265945088 bytes)
  ( 2) Multiprocessors x ( 8) CUDA Cores/MP:     16 CUDA Cores
  GPU Clock Speed:                               1.10 GHz
  Memory Clock rate:                             1075.00 Mhz
  Memory Bus Width:                              128-bit
  Max Texture Dimension Size (x,y,z)             1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048)
  Max Layered Texture Size (dim) x layers        1D=(8192) x 512, 2D=(8192,8192) x 512
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       16384 bytes
  Total number of registers available per block: 8192
  Warp size:                                     32
  Maximum number of threads per block:           512
  Maximum sizes of each dimension of a block:    512 x 512 x 64
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 1
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             256 bytes
  Concurrent copy and execution:                 No with 0 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            Yes
  Support host page-locked memory mapping:       Yes
  Concurrent kernel execution:                   No
  Alignment requirement for Surfaces:            Yes
  Device has ECC support enabled:                No
  Device is using TCC driver mode:               No
  Device supports Unified Addressing (UVA):      No
  Device PCI Bus ID / PCI location ID:           2 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 4.0, CUDA Runtime Version = 4.0, NumDevs = 1, Device = GeForce 9400M
[deviceQuery] test results...
PASSED
CUDA设备查询(运行时API)版本(CUDART静态链接)
找到1个支持CUDA的设备
装置0:“GeForce 9400M”
CUDA驱动程序版本/运行时版本4.0/4.0
CUDA能力主要/次要版本号:1.1
全局内存总量:254 MB(265945088字节)
(2)多处理器x(8)个CUDA核/MP:16个CUDA核
GPU时钟速度:1.10GHz
内存时钟频率:1075.00 Mhz
内存总线宽度:128位
最大纹理尺寸大小(x,y,z)1D=(8192),2D=(6553632768),3D=(204820482048)
最大分层纹理大小(dim)x层1D=(8192)x 512,2D=(81928192)x 512
恒定内存总量:65536字节
每个块的共享内存总量:16384字节
每个块可用的寄存器总数:8192
经纱尺寸:32
每个块的最大线程数:512
块的每个维度的最大大小:512 x 512 x 64
网格各尺寸的最大尺寸:65535 x 65535 x 1
最大内存间距:2147483647字节
纹理对齐:256字节
并发复制和执行:没有,复制引擎为0
内核的运行时间限制:是
集成GPU共享主机内存:是
支持主机页锁定内存映射:是
并发内核执行:否
表面对齐要求:是
设备已启用ECC支持:否
设备正在使用变矩器离合器驱动模式:否
设备支持统一寻址(UVA):否
设备PCI总线ID/PCI位置ID:2/0
计算模式:

deviceQuery,CUDA驱动程序=CUDART,CUDA驱动程序版本=4.0,CUDA运行时版本=4.0,NumDevs=1,设备=GeForce 9400M
[deviceQuery]测试结果。。。
通过
这是一个可能失败的代码示例(尽管在正常情况下不会失败)

#包括
__全局无效添加(整数a、整数b、整数*c){
*c=a+b;
}
内部主(空){
INTC;
国际发展中心;
cudamaloc((void**)和dev_c,sizeof(int));//在这里失败,返回46
增加(2,7,发展委员会);
cudaMemcpy(&c、dev_c、sizeof(int)、cudamemcpydevicetoost);
printf(“你好,世界,%d\n”,c);
cudaFree(开发中心);
返回0;
}

我还发现,偶尔我可以在不重新启动的情况下恢复正常的行为。我仍然不知道是什么触发了它。

我确认了我的帖子中的评论。如果其他应用程序控制GPU,GPU可能无法工作。在我的例子中,firefox中的flash播放器显然占用了卡上所有可用的资源。我关闭了flash的firefox插件,该卡立即重新开始工作

您可以这样做来节省时间:

os.environ['CUDA_VISIBLE_DEVICES'] = '0'

<>这对我起作用。< / P> < P>重启我的电脑,对我来说是个骗局。< /P> < P> >改变英伟达驱动版本Ubuntu(NVIDIA 450)作品

你是在一个MacBook Pro上运行一个离散GPU吗?如果是这样,请查看,它允许您强制OS X使用离散GPU。GPU有有限的硬件资源,而MacOSX本身使用CUDA资源(因为它只是用于3d渲染的GPU硬件)。因此,可能是gpu太弱,无法完成您分配给它的CUDA任务:(Post gpu info!@przemo\u li我在测试中分配了非常少的内存,但它们失败了。添加信息您使用的是哪种编译标志,您针对的是哪种体系结构?我有一个类似的Mac,我为
sm\u 10
sm\u 20
-从未见过那个错误,但我只使用CUDA 3.2。即使您不知道如果有任何GPU使用程序,可能有一个?GPU上的浏览器渲染或其他东西。如果你杀死一些应用程序(和SystemUIServer之类的东西),它会重新开始工作吗?也许你可以通过测试来隔离一个。我很高兴你和其他人发布了这篇文章。这节省了我大量的时间,也让我不至于焦头烂额。谢谢!在OSX 10.7上,停止firefox确实可以让
Cudamaloc
工作。我发现你也可以取消选中Preferences->“Advanc”中的“可用时使用硬件加速”选项ed'tab->'General'子选项卡将Firefox与另一个GPU应用程序一起运行。我有类似的问题,这会有什么帮助?这基本上导致程序只能看到指定的设备(在您的示例中是ID为0的设备).它总是有效的,但这不是永久的解决方案。完全同意。有人想快速解决问题,可以试试。每次你“醒来”的时候,重新启动jupyter实验室都会工作您必须关闭Jupyter并运行此命令的计算机:
sudo rmmod nvidia_uvm&&sudo modprobe nvidia_uvm
。这是nvidia_uvm中的一个漏洞,已经存在多年了(或者以某些工具与之交互的方式存在)
#include <stdio.h>

__global__ void add(int a, int b, int *c) {
    *c = a + b;
}

int main(void) {
    int c;
    int *dev_c;

    cudaMalloc( (void **) &dev_c, sizeof(int)); // fails here, returning 46

    add<<<1,1>>>(2,7,dev_c);
    cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost);
    printf("hello world, %d\n",c);
    cudaFree( dev_c);
    return 0;
}
os.environ['CUDA_VISIBLE_DEVICES'] = '0'