【问题标题】:CUDA synchronize function fails during long running kernel长时间运行内核期间 CUDA 同步功能失败
【发布时间】:2018-10-26 01:21:26
【问题描述】:

我正在使用 PyCuda 运行一个预计至少需要两个小时才能完成的内核,但它在大约一小时后失败,并出现以下简单错误:

pycuda._driver.Error: cuCtxSynchronize failed: unknown error

我使用的是 Windows,我添加了注册表项 TdrDelay 并将其设置为 120000000 以确保 Windows 不会使我的内核超时。

当我调整内核参数时不会发生此错误,因此预计会在大约 30 分钟内完成。为什么内核运行时间长了同步调用会失败?

我的显卡会不会过热并抢先终止内核?如果内核运行时间过长,是否存在终止内核的 CUDA 设置?在 NVidia Visual Profiler 中运行内核能否帮助找出问题所在?

【问题讨论】:

  • 我的猜测是您仍然遇到 tdr 超时。我不确定您的设置是否符合您的想法。是的,您的显卡可能会过热,但这通常是不可能的(GPU 应该具有管理温度的机制,无论负载如何)。您可以使用nvidia-smi 监控温度。没有 CUDA 设置可以终止长时间运行的内核(除了前面提到的 windows WDDM TDR)。我怀疑视觉分析器会对此提供任何有用的信息。
  • TdrDelay 肯定会有所作为,因为在我添加该密钥之前,我的内核在两秒后超时。也许 TdrDelay 有一些最大值。

标签: cuda pycuda


【解决方案1】:

通过在“TdrDelay”旁边添加注册表项“TdrLevel”并将其值设置为 0,我能够正确完成长时间运行的内核。

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多