Cuda 7.5和Visual Studio 2013:一些示例有效,但其他示例返回cudaErrorDevicesUnavailable

时间:2015-09-16 14:58:56

标签: c++ visual-studio visual-studio-2013 cuda

我最近在Windows 8.1中安装了CUDA 7.5和Visual Studio 2013。经过测试实例,它对某些人来说非常有效,例如Mandelbrot或matrixMul。但是,测试例如Marching Cubes和双边过滤,我收到以下错误:

" CUDA Runtime API错误46:所有支持CUDA的设备都忙或不可用"

我已经测试了" deviceQuery"它起作用了。另外,我在配备Geforce GT630m的华硕笔记本中使用CUDA。我已经尝试将计算模式设置为DEFAULT,但它没有任何区别。

1 个答案:

答案 0 :(得分:2)

大多数采用英特尔CPU且包含NVIDIA“分立”GPU的现代Windows笔记本电脑也采用英特尔“集成”显卡,合作安排,NVIDIA品牌Optimus

基本思想是NVIDIA GPU将在某些情况下执行一些图形任务,但其他任务(可能在其他情况下)将由英特尔图形执行。

通常,普通CUDA应用程序将在此方案中正常运行。正确检测到CUDA GPU,CUDA运行时处理NVIDIA GPU上与CUDA相关的所有内容。

根据Optimus启发式算法,与CUDA无关的图形任务也将在英特尔或NVIDIA设备上运行,其详细信息与此无关。

但是,对于使用某种形式的图形“Interop”与CUDA的应用程序,可能需要对Optimus启发式进行一些修改。 CUDA /图形互操作requires表示CUDA“上下文”和图形“上下文”都在NVIDIA GPU上建立(出于这个问题的目的,只存在一个NVIDIA GPU)。如果首先建立图形上下文,并且没有考虑到这一点,则可以在Intel设备上建立图形上下文,并且在该场景中CUDA图形互操作将失败。

解决方案是强制在NVIDIA设备上为这些应用程序建立图形上下文,NVIDIA显示驱动程序控制面板提供了一种机制("profiles")来实现这一目标。