暗示GPU从空闲频率开始全速运行

时间:2016-09-27 15:47:08

标签: qt opengl

在我的OpenGL CAD应用程序中,GPU在大多数情况下都是空闲的,偶尔会刷新帧。当场景的变焦和平移发生时,我需要GPU立即以有效频率运行。

这是我的问题 - 我的系统GPU需要大约100毫秒来感知活动并从125毫赫兹空闲频率激活到900毫赫兹的活动频率 - 因此我的应用程序的用户将感觉15 fps持续100毫秒,然后在GPU达到正常频率时顺畅地跟随130 fps。

我的问题 - 是否有标准的OpenGL方法来暗示“GPU'在一段时间不活动后渲染第一个新帧之前从空闲速度唤醒?我希望GPU从这个提示唤醒而不是工作负载感知(由于滞后)。

2 个答案:

答案 0 :(得分:1)

我认为这个"提示"即使在扩展上也不存在,并且它永远不会存在,因为GPU需要时间来唤醒",这不仅仅是工作负载检测延迟的问题。除非你能提前预测到"醒来"你赢得的GPU无法以这种方式隐藏电源状态开关的延迟。

但是,有多种解决方案/解决方法:

  • 改善您的应用效果。如果工作负荷很低,即使是低功耗模式就足够了。
  • 当GPU闲置很长一段时间后,减少程序工作量。有时您可以控制输出的质量,将其减少几帧。这包括:使用较低的分辨率,停用抗锯齿,使用低多边形模型,使用更简单的着色器......
  • 使用其他GPU。电源模式切换时间取决于硬件,每个GPU都有不同的特性。
  • 让GPU保持高功率状态。如果程序不断重绘,即使没有任何更改,GPU也将被强制在高功率状态下运行。当然,这不节能。用户可以配置一些驱动程序(至少是Nvidia)以避免低功耗模式(因此您不需要重新绘制所有时间)。

答案 1 :(得分:0)

不直接回答你的问题,而是一个愚蠢的建议(处理如此)

为什么CAD需要130 fps?

我的 CAD 具有使用双缓冲的恒定帧速率~30 fps,因此如果不更改场景,则使用旧缓冲区而不是完全渲染。突然移动或缩放时没有明显的性能影响。

如果您在每次缩放平移增量后重绘,那么这不是一个好方法(特别是在较慢的计算机上),更好的是在视图中的任何更改上设置一个bool _redraw CAD 如果_redraw设置,则在计时器中重设数据和重绘/重置。这个时间应用程序将闲置大部分非活动时间,并且当开始做东西仍然足够快。如果你的应用程序能顺利完成,那么如果你错过了少量的第一帧就没有问题。