GPU卡在2秒后重置

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

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

您链接到的文章包含控制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上运行。 当然,这假设它不是你内核中的错误!

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

 cudaGetDeviceProperties(&prop,i) prop.kernelExecTimeoutEnabled 

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

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