【问题标题】:GPU card resets after 2 secondsGPU 卡在 2 秒后重置
【发布时间】:2012-03-25 00:43:19
【问题描述】:

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

【问题讨论】:

  • 这显然不是编程问题。投票迁移到超级用户。
  • 不是显卡“给出错误”,而是 Windows WDDM 子系统,它旨在防止任何用户空间程序占用显示 GPU 超过预定义的时间.

标签: c cuda gpu gpgpu


【解决方案1】:

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

cudaGetDeviceProperties(&prop,i)
prop.kernelExecTimeoutEnabled

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

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

【讨论】:

    【解决方案2】:

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

    article you linked to 包含控制 Microsoft WDDM 超时检测和恢复机制的注册表项列表。正如 talonmies 所评论的,这不是卡给出错误,而是 Microsoft Windows WDDM TDR 机制检测到长时间运行的内核并杀死它以恢复 GPU 以进行显示。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多