如何防止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 对我来说似乎是一个很好的解决方案:

你列出了我知道的所有解决方案。由于解决方案 2 使机器处于不可用状态,而您的内核 运行s(不是一个好的做法),因此应该避免。由于添加另一个 GPU(解决方案 3)对您来说不切实际,您最好的选择是专注于解决方案 1。我不知道您为什么要尽可能长时间地将工作量最大化到 运行 以避免时域反射率。相反,您应该以大约 10 毫秒或更短的时间为目标(如果您 运行 许多内核需要更长的时间,GUI 会非常缓慢)。因此,与其考虑 4*250000,不如考虑 400*2500。您可能需要在每个(或 10 个,或其他)之间进行一些 clFinish 调用。保持较小的执行时间(10 毫秒)并且不会使队列过满将允许 GPU 在内核之间做其他事情,并且您不会获得 TDR 重置也不会使机器无法使用,但 GPU 会非常繁忙。