为什么这个CUDA程序会冻结我的显示器?

3

我刚接触CUDA,尝试编写一个程序来充分利用我的GPU。唯一的问题是,我同时也在使用这张显卡来显示屏幕,这导致我的屏幕冻结并需要重新启动。

__global__ void cuda_burn(int* sum)
{
    int x = 0;
    for(int i = 0; i < 1000000000; i++)
    {
        x += i;
    }
    atomicAdd(sum, x);
}

我最初像这样启动它:cuda_burn<<<1024, 1024>>>(sum_d);,这导致我的显示器死机。这对我来说是有道理的,因为我有足够的块和线程来充分利用我的GPU,这不会给图形留下时间。
接下来,我尝试像这样启动它:cuda_burn<<<1, 1024>>>(sum_d);。我认为由于我只使用了一个块,它将无法充分利用GPU资源,也不会冻结我的显示器。不幸的是它仍然冻结了。为什么?
另外奇怪的是鼠标没有冻结?
此外,有比重新启动更好的解决方法吗?

1024个线程仍然在所有CUDA核心中执行,因此仍可能导致屏幕冻结。 - Klaus
是的,但我认为由于所有这些线程都在同一个块中,它们只能占用一个SM。 - chasep255
你使用的是什么显卡? - Klaus
Nvidia GTX 960带有2GB。 - chasep255
看起来显卡工作正常,问题可能出在其他地方。 - Klaus
1个回答

4

目前,CUDA和显示任务无法同时运行。当CUDA内核在运行时,无论它使用GPU的多少,显示任务都将被“冻结”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接