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

xdnvmnnf  于 6个月前  发布在  Windows
关注(0)|答案(1)|浏览(56)

我有一个OpenCL内核,根据参数的不同,它可能需要很长时间才能执行。(没有消息,但屏幕 Flink ,东西崩溃)。我尝试了几种方法来禁用超时,但是什么都不起作用。所以我试着拆分内核。我现在做几个调用,而不是一个长的内核调用,每个调用的执行时间更短。这是可调的,我试着不同的“长度”(更多的调用,更少的每次调用的时间),但这并没有太大的区别。我仍然得到一个 Flink 的屏幕,有时崩溃(虽然有点不那么频繁)。
这种方法不应该奏效吗?那么windows和其他任务应该让GPU在内核调用之间响应它们吗?或者我需要在内核调用之间放一个Sleep命令吗?什么是处理内核需要很长时间的合适方法?

编辑

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

编辑2

对于有类似问题的人阅读这:它实际上解决了问题,当我把(在C++的情况下)Sleep内核调用之间。这似乎给给予GPU足够的时间来响应Windows。只要5毫秒就足够了。

svmlkihl

svmlkihl1#

超时崩溃是一个Windows错误。某些计算机上的Windows将杀死任何运行超过2秒的单个GPU内核,并重置图形驱动程序,因此屏幕 Flink 。
解决方案:在Windows注册表(Win+R,regedit,Enter)中的Computer\HKEY_MACHINE_SYSTEM\CurrentControlSet\Control\GraphicsDrivers中,创建一个名为TdrDelay的32位DWORD,并将其十进制值设置为300。这将使重置图形驱动程序的阈值从2秒增加到5分钟(= 300秒)。不要忘记在注册表修改后重新启动PC。

相关问题