我正在使用OpenGL Compute Shaders对数据进行一些计算。一切正常,但似乎不可能运行一个着色器超过10秒。
我使用glBeginQuery(...)
和glEndQuery(...)
衡量时间。着色器在1毫秒到10秒之间运行良好。我只是在没有任何着色器调用的情况下添加一些数据,以增加着色器所需的时间。但是当着色器需要超过10秒时,我无法添加更多数据。然后,程序冻结,我不能再做任何事情了。我测量的最高值是11.02秒。
那么,计算着色器是否有时间边界?或者有哪些明显的错误?
一些额外的信息:我在一台配有Nvidia GT 555M的笔记本电脑上工作。我使用bumblebee并使用optirun
启动QtCreator以使用Nvidia卡运行它。
如果您需要更多信息来帮助我,请问。我只是不知道,回答它需要什么。
答案 0 :(得分:2)
听起来你正在达到Windows的超时检测和恢复限制。
通常默认为2秒,而不是10或11,但可能是某些人或某人修改了您的注册表。
查看here,看看您的注册表项是否已设置好,以便获得10/11秒的TDR。
如果这是您自己的应用程序,您只打算在自己的计算机上运行,那么随时可以将此限制增加到您喜欢的任何内容。但是,如果您打算让其他人运行您的应用程序,那么不要指望任何其他人修改其注册表设置以适应您的应用程序。
你应该将你的Compute工作分解成可管理的工作块,这些工作最多需要花费数十毫秒,而不是数千毫秒。
编辑:
由于您已经评论说您使用的是Linux,因此NVIDIA驱动程序an option会覆盖“看门狗”计时器。