我正在使用 OpenGL 计算着色器对数据进行一些计算。一切工作正常,只是一个着色器的运行时间似乎不可能超过 10 秒。
我使用 glBeginQuery(...)
和 glEndQuery(...)
测量时间。着色器的运行时间在 1 毫秒到 10 秒之间,效果良好。我只是添加一些数据而不调用任何着色器来增加着色器所需的时间。但当着色器需要 10 秒多一点时,我无法添加更多数据。然后,程序卡住,我无法再做任何事情。我测得的最高值是 11.02 秒。
那么,计算着色器有时间限制吗?还是我犯了一些明显的错误?
一些附加信息:我使用配备 Nvidia GT 555M 的笔记本电脑。我使用 bumblebee 并使用 optirun
启动 QtCreator,以使用 Nvidia 卡运行它。
如果您需要更多信息来帮助我,请尽管询问。我只是不知道,需要什么来回答它。
最佳答案
听起来您已经达到了 Windows 的超时检测和恢复限制。
通常默认值为 2 秒,而不是 10 或 11 秒,但有可能某些东西或某人修改了您的注册表。
看看here并查看您的注册表项是否设置为您可以获得 10/11 秒 TDR。
如果这是您自己的应用程序,您只想在自己的计算机上运行,那么请随意将此限制增加到您喜欢的任何值。但是,如果您打算让其他人运行您的应用程序,那么不要指望其他人会修改他们的注册表设置来适应您的应用程序。
您应该将计算工作分解为可管理的工作 block ,这些工作 block 最多需要数十毫秒,而不是数千毫秒。
编辑:
既然您评论说您使用的是 Linux,那么 NVIDIA 驱动程序有 an option覆盖“看门狗”计时器。
关于opengl - OpenGL 计算着色器有时间限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29745168/