一般来说,在windows上使用CUDA时,需要保证单个内核的执行时间不超过2秒左右。如果执行时间变长,您可能会遇到 Windows TDR 事件。这是一个 Windows 看门狗计时器,如果它在一定时间内没有响应,它将重置 GPU 驱动程序。这样的重置会暂停内核的执行并生成虚假结果,通常还会在系统托盘中显示短暂的“黑色”显示和简短消息。如果您的内核执行触发了 Windows 看门狗计时器,您有几个选择:
- 如果您有可能在您的系统中使用多个 GPU(即这里通常不谈论笔记本电脑)并且您的 GPU 之一是 Quadro 或 Tesla 设备,则 Quadro 或 Tesla 设备通常可以置于 TCC 模式。这将意味着 GPU 不能再驱动物理显示器(如果它正在驱动物理显示器)并且它已从 WDDM 子系统中移除,因此不再受看门狗定时器的约束。您可以使用
nvidia-smi.exe
NVIDIA GPU 驱动程序附带的工具将给定 GPU 的设置从 WDDM 修改为 TCC。使用您的 Windows 文件搜索功能查找nvidia-smi.exe
,然后用于nvidia-smi --help
获取有关如何从 WDDM 切换到 TCC 模式的命令行帮助。
- 如果您无法使用上述方法(没有 2 个 GPU,没有 Quadro 或 Tesla GPU...),那么您可能需要研究更改看门狗定时器设置。不幸的是,这需要修改系统注册表,并且进程和特定密钥因操作系统而异。网络上有许多资源,例如来自 Microsoft 的此处,以及有关 Stack Overflow 的其他问题,例如此处,可能对此有所帮助。
- 第三种选择只是限制内核的执行时间。连续的操作可能会分解为多个内核调用。内核调用之间的“间隙”将允许显示驱动程序响应操作系统,并防止看门狗超时。
关于 TCC 支持的声明是一般性的。并非所有 Quadro GPU 都受支持。在特定 GPU 上支持(或不支持)TCC 的最终决定因素是nvidia-smi
工具。此处的任何内容都不应被解释为在您的特定 GPU 上支持 TCC 的保证。