不是Bug的bug-CUDA程序显卡驱动在2秒以后恢复

        最近遇到一个诡异的CUDA程序bug,我的Kernel里面有一个循环,遍历整个数据集。当数据量小的时候,程序没有问题,但当数据量增大的时候,整个屏幕会突然卡住,动不了,然后windows显示我的显卡驱动崩溃并恢复了,当然程序也挂了。

       仔细检查程序的逻辑,怎么也找不到问题,在同桌小小哥的提示下,本想查看了CUDA的Sample程序deviceQuery看看内存到底用了多少,无意间发现一个配置项“Run time limit on kernels”,即deviceProp.kernelExecTimeoutEnabled。原来Kernel函数还有时间限制,在网上搜索了了解到其实这是windows的一个机制(TimeoutDetection and Recovery mechanism,TDR),即当Kernel函数运行的时候,由于这时候GPU在进行大量的运算,屏幕不能刷新,导致用户体验变差,为了防止这种情况,当Kernel函数运行时间超过一定限制时,windows会中断该程序,并恢复显卡驱动,保证用户体验的流畅,特别是大型游戏,GPU的运算量会很大。当然这是默认选项,在注册表里面可以更改该配置。

     如果需要更改该配置项,在注册表中修改HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers 下面的TdrLevel项(没有就自己添加),改为0(disable)即可。

参考:

1,  Stackoverflow问题GPU card resets after 2 seconds

2,  Timeout Detection and Recovery of GPUs (TDR)

3,  TDR Registry Keys

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值