OpenCL 内核执行时间较长,我将其拆分以避免超时,但它们仍然发生

问题描述 投票:0回答:1

我有这个 OpenCL 内核,根据参数的不同,它可能需要很长时间才能执行。然后我收到某种超时错误(没有消息,但屏幕闪烁并且崩溃)。我尝试了几种禁用超时的方法,但没有任何效果。所以我尝试分割内核。现在,我不再进行一次较长的内核调用,而是进行多次调用,每次调用的执行时间都较短。这是可调整的,我尝试了不同的“长度”(更多的呼叫,更少的每次呼叫时间),但这并没有多大区别。我仍然会遇到屏幕闪烁的情况,有时还会崩溃(尽管频率稍微低一些)。

这个方法不应该有效吗?那么 Windows 和其他任务应该让 GPU 在内核调用之间做出响应吗?或者我是否需要在内核调用之间放置一个

Sleep
命令?处理需要很长时间的内核的适当方法是什么?

编辑

我也许应该提到,只有当总时间(无论这段时间内内核调用的数量)超过几秒时,才会发生超时。

kernel opencl
1个回答
0
投票

超时崩溃是 Windows 的一个错误。某些计算机上的 Windows 会杀死任何运行时间超过 2 秒的单个 GPU 内核,并重置显卡驱动程序,因此屏幕闪烁。

解决方案:在 Windows 注册表(Win+R、regedit、Enter)Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers 中,创建一个名为 TdrDelay 的 32 位 DWORD,并将其十进制值设置为 300。这会将阈值增加到将显卡驱动程序从 2 秒重置为 5 分钟(= 300 秒)。修改注册表后不要忘记重启电脑。

© www.soinside.com 2019 - 2024. All rights reserved.