我有一个OpenCL内核,根据参数的不同,它可能需要很长时间才能执行。(没有消息,但屏幕 Flink ,东西崩溃)。我尝试了几种方法来禁用超时,但是什么都不起作用。所以我试着拆分内核。我现在做几个调用,而不是一个长的内核调用,每个调用的执行时间更短。这是可调的,我试着不同的“长度”(更多的调用,更少的每次调用的时间),但这并没有太大的区别。我仍然得到一个 Flink 的屏幕,有时崩溃(虽然有点不那么频繁)。
这种方法不应该奏效吗?那么windows和其他任务应该让GPU在内核调用之间响应它们吗?或者我需要在内核调用之间放一个Sleep
命令吗?什么是处理内核需要很长时间的合适方法?
编辑
我也许应该提到,只有当总时间(无论在这段时间内内核调用的数量)超过几秒时才会发生超时。
编辑2
对于有类似问题的人阅读这:它实际上解决了问题,当我把(在C++的情况下)Sleep
内核调用之间。这似乎给给予GPU足够的时间来响应Windows。只要5毫秒就足够了。
1条答案
按热度按时间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。