2

我正在使用 OpenGL 计算着色器对数据进行一些计算。一切正常,只是运行一个着色器似乎不可能超过 10 秒。我用glBeginQuery(...)和测量时间glEndQuery(...)。着色器在 1 毫秒到 10 秒之间运行良好。我只是在没有任何着色器调用的情况下添加一些数据来增加着色器所需的时间。但是当着色器需要超过 10 秒时,我无法添加更多数据。然后,程序冻结,我不能再做任何事情了。我测得的最高值是 11.02 秒。

那么,计算着色器有时间边界吗?还是有什么明显的我做错了?

一些附加信息:我在一个装有 Nvidia GT 555M 的笔记本上工作。我使用 bumblebee 并启动 QtCreator 以optirun使用 Nvidia 卡运行它。如果您需要更多信息来帮助我,请尽管询问。我只是不知道,需要什么来回答它。

4

1 回答 1

2

听起来您正在达到 Windows 的超时检测和恢复限制。

通常默认值为 2 秒,而不是 10 或 11 秒,但有可能某事或某人修改了您的注册表。

看看这里,看看您的注册表项是否设置为您将获得 10/11 秒的 TDR。

如果这是您自己的应用程序,您只打算在自己的机器上运行,那么可以随意将此限制增加到您喜欢的任何值。但是,如果您打算让其他人运行您的应用程序,那么不要指望其他人修改他们的注册表设置以适应您的应用程序。

您应该将您的计算工作分解为可管理的工作块,这些工作(最多)需要几十毫秒,而不是几千毫秒。

编辑:

由于您评论说您使用的是 Linux,因此 NVIDIA 驱动程序可以选择覆盖“看门狗”计时器。

于 2015-04-20T22:51:53.240 回答