opengl - OpenGL 计算着色器有时间限制吗?

标签 opengl shader compute-shader

我正在使用 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/

相关文章:

c++ - 移动鼠标时抖动

c++ - 反转 X 轴 OpenGL

opengl - 使用 openGL 着色器 (glsl) 在 LibGDX 中将纹理内部边框淡化为透明

opengl - 有什么优雅的方法可以处理 OpenGL 计算着色器中的数组边距吗?

opengl - 将计算着色器输出渲染到屏幕

vulkan - 如何创建具有两个计算着色器的 Vulkan 图形管道

opengl - 有没有办法以一种独立于语言的方式表达 OpenGL 指令?

c++ - 如何在现代 Opengl 中添加 View 矩阵

opengl-es - 如何在 webgl 渲染 channel 之间传递高精度 uv 坐标?

c++ - 我应该如何设计 GLSL 着色器以在 crossfire/SLI 上运行