有时,我的CUDA程序中的错误会导致桌面图形中断(在Windows中)。通常情况下,屏幕仍然有些可读,但是当图形发生变化时,例如拖动窗口时,会出现大量半随机彩色像素和小块。
我尝试通过更改桌面分辨率来重置GPU和驱动程序,但这没有用。我找到的唯一解决方法是重启计算机。
是否有一个程序或我可以使用一些技巧让驱动程序和GPU重置而不重新启动?
背景:
我有1.0,1.1,1.3和2.0卡,但我现在只有1.1和2.0卡。我在1.0和1.1上看过这个问题。我很确定我在1.3上看过它。我不确定2.0。内存保护是否在1.3左右增加了一些时间?我几乎可以肯定这不是由于硬件不稳定,因为问题似乎是由我的代码中的错误引发的,并且在修复错误时消失了。运行完成的代码后,卡已稳定。我在1.1卡上看到这个问题之后写了这个问题,但是在我修复了一个bug之后它就消失了,现在我没有任何代码可以重现它。也许我应该尝试写入1.1卡上的随机位置,看看是否有任何事情......
答案 0 :(得分:8)
修改强>
如果您使用Linux上的Tesla硬件并且可以运行nvidia-smi,那么您可以使用
重置GPUnvidia-smi -r
或
nvidia-smi --gpu-reset
以下是此开关的man
输出:
重置GPU状态。可用于清除双位ECC错误或 恢复挂GPU。需要-i切换到特定设备的目标。 仅适用于Linux。
...否则
真正重置硬件的方法是重启。
你所描述的不应该发生。我建议使用不同的硬件进行测试,并告知我们是否仍然存在。
答案 1 :(得分:2)
我在NVDIA GPU SDK 4.2上有GeForce GTX 260,我遇到了一些问题。 有时开发我在程序中有bug。这会导致屏幕显示此帖中描述的随机彩色像素。
如上所述,如果我改变分辨率,它们就不会消失。此外,如果我只将COLOR DEPTH从32位更改为16位,则随机彩色像素消失,但返回32位(不重新启动)会使它们再次出现。 导致此行为的最后一个错误是使用__constant__内存但将其作为指针传递:
test<<<grid, threadsPerBlock>>>( cuda_malloc_data, cuda_constant_data );
如果我没有通过cudb_constant_data
,那么就没有错误(因此,随机彩色像素不会出现)。
答案 2 :(得分:2)
由于有时在Unix上也会发生相同的问题,并且google将我转发到该线程,所以希望对其他人有所帮助。
在ubuntu上卸载和重新加载nvidia内核模块对我来说解决了这个问题:
sudo rmmod nvidia_uvm
sudo modprobe nvidia_uvm
答案 3 :(得分:1)
要在Windows中重置图形堆栈,请按 Win + Ctrl + Shift + B 。
答案 4 :(得分:0)
你去了。