OpenGL Compute Shaders 有时间限制吗?

Is there a time border for OpenGL Compute Shaders?

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

那么,计算着色器是否有时间界限?或者我有什么明显的错误吗?

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

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

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

看看 here 并查看您的注册表项是否设置为您将获得 10/11 秒的 TDR。

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

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

编辑:

由于您评论说您正在使用 Linux,NVIDIA 驱动程序已 an option 覆盖 'watchdog' 计时器。