使用OpenGL时的Qt CPU使用率

Qt CPU usage while using OpenGL

本文关键字:CPU 使用率 Qt 时的 OpenGL 使用      更新时间:2023-10-16

我用两个使用OpenGL的应用程序验证了这一点,使用GQLWidget。如果屏幕更新非常频繁,比如 30 fps,和/或分辨率很高,其中一个内核的 CPU 使用率就会飙升。我正在寻找有关如何解决此问题和/或验证它是否也发生在 Windows 上的解决方案。

根据我的经验,QGLWidget本身是一个非常有效的GL和窗口系统的薄包装器;如果你使用它的CPU使用率很高,那么使用任何其他实现OpenGL应用程序的方式,你很可能也会有很高的CPU使用率。

如果使用 OpenGL 的 CPU 使用率很高,则可能是:

  • 您正在回退到软件OpenGL实现(即Mesa);例如,如果您不安装任何图形设备,Debian 将执行此操作司机。
  • 您使用的是老式的即时模式 OpenGL:glBegin,...顶点...,glEnd. 改为进入 VCO。

您提到显示分辨率作为一个因素的事实表明了前一个问题。

你需要获取任何分析器,分析你的代码并查看瓶颈在哪里。由于您的程序消耗 CPU 资源(而不是 GPU),这应该相当容易。据我所知,"AQTime 7 Standard"(windows)目前是免费提供的。或者你可以使用 gprof - 这取决于你的工具包/平台。

一种非常可能的情况(除了软件 OpenGL 回退)是过于频繁地使用动态内存分配或运行调试版本。如果每帧有 100000+ 个多边形,则即时模式可能会有问题。

我见过一些GL实现,它们在最小化主机CPU使用率方面很糟糕。 似乎在很多情况下,CPU 将忙于等待 GPU 绘制。 通常,只需在卡片设置中打开垂直同步,您的应用绘制频率降低,并且仍然占用同样多的 CPU。不幸的是,除了限制应用程序绘制的频率外,您自己对此无能为力。