GPU卡在2秒后重置

时间:2012-03-07 13:23:10

标签: c cuda gpu gpgpu

我正在使用NVIDIA geforce卡,如果我尝试在其上运行一些CUDA程序,则会在2秒后发出错误。我读了here您可以使用TDRlevel中的HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers密钥。但是,我在注册表中看不到任何此类密钥。是否需要自己添加?有其他人遇到过这个问题。如果是这样,你是如何解决的?感谢。

2 个答案:

答案 0 :(得分:6)

我假设您使用的是Windows Vista或更高版本。

article you linked to包含控制Microsoft WDDM超时检测和恢复机制的注册表项列表。正如talonmies评论的那样,不是卡片发出错误的是Microsoft Windows WDDM TDR机制,它检测到长时间运行的内核并将其杀死以恢复GPU用于显示目的。

如果你的内核运行任何时间长度,那么GPU就会被计算工作占用而无法更新你的显示器,你自然可以想象大多数人会认为这很糟糕。一些开发人员选择增加延迟以允许开发更长时间运行的内核,并了解他们的系统可能会在几秒钟内无响应。如果您使用带有WDDM GPU的调试器(NVIDIA Tesla GPU支持TCC,这可以避免所有WDDM问题),您可能还必须禁用TDR。

如果密钥不存在,您应该创建它们。我建议:

  • TdrLevel 3(即启用)
  • TdrDelay 5(即5秒)
  • TdrLimitTime 10
  • TdrLimitCount 10(即10秒内最多10次超时)

替代方案是使用第二个GPU执行或调整您的问题集以确保内核时间少于2秒 - 真正的大问题应该在专用GPU上运行。当然,这假设它不是你内核中的错误!

答案 1 :(得分:2)

如果你的cuda内核在连接到显示器的显卡上运行时间超过2秒,你就会超时。因此,为了避免这种情况,您需要将程序拆分为几个内核调用,每个调用都低于2秒的限制。另一种选择是使用未连接到显示器的图形卡。然后就没有超时限制了。

cudaGetDeviceProperties(&prop,i)
prop.kernelExecTimeoutEnabled

上面的代码显示您是否启用了超时。

最后我也读到了注册表项,但似乎不鼓励(使用GNU / Linux所以不是一个选项)。我可能错了,但我认为你需要自己添加这样一个密钥。