如何防止WindowsGPU"Timeout Detection and Recovery"?
How to prevent Windows GPU "Timeout Detection and Recovery"?
如果我在 GPU 设备上 运行 长 运行ning 内核,2 秒后(默认情况下)windows TDR (Timeout Detection and Recovery) 将终止运行ning 内核。我明白了,但是如果你无法预测内核将 运行 持续多长时间怎么办,因为你需要进行大量计算并且你不知道实际用户的底层 GPU capacity/speed,谁 运行 是你的程序?
解决此问题的最佳做法是什么?
我找到了 3 种方法来防止它发生,但其中 none 对我来说似乎是一个很好的解决方案:
你需要确保你的内核不会太耗时:
内核很耗时,虽然我可以做某种碎片而不是 运行 100 万,但 2*500k 或 4*250k,但我仍然无法预测它是否适合默认的 2 秒在实际用户的 GPU 上。 (我的想法是将数量减半,直到您的内核不会丢弃 CL_INVALID_COMMAND_QUEUE 错误,然后您只需多次调用它,但数量较少,但老实说,这听起来很老套,并且还有一些其他缺点.)
您可以关闭看门狗定时器(或增加延迟):GPU超时检测和恢复:
这是通过注册表编辑完成的,需要重启Windows才能生效。您不能在用户的机器上执行此操作。
您可以 运行 未连接显示器的 GPU 上的内核 :
您如何确保 GPU 未连接到用户计算机上的显示器?即使在我的笔记本电脑中,我的主要 GPU 是 Intel HD4000,NVidia GPU 未用于显示(我认为是),但 TDR 仍然会杀死我的内核。
你列出了我知道的所有解决方案。由于解决方案 2 使机器处于不可用状态,而您的内核 运行s(不是一个好的做法),因此应该避免。由于添加另一个 GPU(解决方案 3)对您来说不切实际,您最好的选择是专注于解决方案 1。我不知道您为什么要尽可能长时间地将工作量最大化到 运行 以避免时域反射率。相反,您应该以大约 10 毫秒或更短的时间为目标(如果您 运行 许多内核需要更长的时间,GUI 会非常缓慢)。因此,与其考虑 4*250000,不如考虑 400*2500。您可能需要在每个(或 10 个,或其他)之间进行一些 clFinish 调用。保持较小的执行时间(10 毫秒)并且不会使队列过满将允许 GPU 在内核之间做其他事情,并且您不会获得 TDR 重置也不会使机器无法使用,但 GPU 会非常繁忙。
如果我在 GPU 设备上 运行 长 运行ning 内核,2 秒后(默认情况下)windows TDR (Timeout Detection and Recovery) 将终止运行ning 内核。我明白了,但是如果你无法预测内核将 运行 持续多长时间怎么办,因为你需要进行大量计算并且你不知道实际用户的底层 GPU capacity/speed,谁 运行 是你的程序?
解决此问题的最佳做法是什么?
我找到了 3 种方法来防止它发生,但其中 none 对我来说似乎是一个很好的解决方案:
你需要确保你的内核不会太耗时: 内核很耗时,虽然我可以做某种碎片而不是 运行 100 万,但 2*500k 或 4*250k,但我仍然无法预测它是否适合默认的 2 秒在实际用户的 GPU 上。 (我的想法是将数量减半,直到您的内核不会丢弃 CL_INVALID_COMMAND_QUEUE 错误,然后您只需多次调用它,但数量较少,但老实说,这听起来很老套,并且还有一些其他缺点.)
您可以关闭看门狗定时器(或增加延迟):GPU超时检测和恢复: 这是通过注册表编辑完成的,需要重启Windows才能生效。您不能在用户的机器上执行此操作。
您可以 运行 未连接显示器的 GPU 上的内核 : 您如何确保 GPU 未连接到用户计算机上的显示器?即使在我的笔记本电脑中,我的主要 GPU 是 Intel HD4000,NVidia GPU 未用于显示(我认为是),但 TDR 仍然会杀死我的内核。
你列出了我知道的所有解决方案。由于解决方案 2 使机器处于不可用状态,而您的内核 运行s(不是一个好的做法),因此应该避免。由于添加另一个 GPU(解决方案 3)对您来说不切实际,您最好的选择是专注于解决方案 1。我不知道您为什么要尽可能长时间地将工作量最大化到 运行 以避免时域反射率。相反,您应该以大约 10 毫秒或更短的时间为目标(如果您 运行 许多内核需要更长的时间,GUI 会非常缓慢)。因此,与其考虑 4*250000,不如考虑 400*2500。您可能需要在每个(或 10 个,或其他)之间进行一些 clFinish 调用。保持较小的执行时间(10 毫秒)并且不会使队列过满将允许 GPU 在内核之间做其他事情,并且您不会获得 TDR 重置也不会使机器无法使用,但 GPU 会非常繁忙。