【发布时间】: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 有一些最大值。