使用OpenGL时的Qt CPU使用率
Qt CPU usage while using OpenGL
我用两个使用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。不幸的是,除了限制应用程序绘制的频率外,您自己对此无能为力。
相关文章:
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 如何降低应用程序的 CPU 使用率?
- 如何以编程方式获取任务管理器进程CPU使用率(不是PerfMon API)
- 一段时间后 CPU 使用率高
- 高CPU使用率,在API桌面复制中获取帧之间具有不同的超时间隔
- GetDC ReleaseDC 在特定上下文中的高 CPU 使用率
- 从 C++11 代码中获取系统内存和 CPU 使用率
- 在 Visual Studio 中记录 CPU 使用率
- C++如何允许等待而不会过多的 CPU 使用率
- Qtcreator 冻结,CPU 使用率为 100%
- 使用 fgets() c++ 读取大型 txt 文件时的 CPU 使用率为 99%
- OpenCL 的 CPU 使用率意外
- Loop Wregex始终返回false和高CPU使用率约50%
- 简单的C++SFML程序高CPU使用率
- 使用 PID 获取内存和 CPU 使用率
- 如何在TCP端口上实时传输数据期间减少CPU使用率
- WinAPI:在WM_PAINT省略 BeginPaint 和 EndPaint 会导致 100% 的 CPU 使用率
- 当CPU使用率高时,OpenCV会堆积内存吗
- 如何在运行SDL程序时降低CPU使用率