【发布时间】:2012-04-07 22:10:54
【问题描述】:
我通过两个使用 GQLWidget 的 OpenGL 应用程序验证了这一点。如果屏幕更新非常频繁,比如 30 fps,和/或分辨率很高,则其中一个内核的 CPU 使用率会飙升。我正在寻找有关如何解决此问题和/或验证它是否也发生在 Windows 上的解决方案。
【问题讨论】:
-
你有什么类型的显卡,在默认窗口大小下运行“glxgears”可以获得多少 FPS?
我通过两个使用 GQLWidget 的 OpenGL 应用程序验证了这一点。如果屏幕更新非常频繁,比如 30 fps,和/或分辨率很高,则其中一个内核的 CPU 使用率会飙升。我正在寻找有关如何解决此问题和/或验证它是否也发生在 Windows 上的解决方案。
【问题讨论】:
根据我的经验,QGLWidget 本身是一个非常有效的 GL 和窗口系统的瘦包装器;如果您使用它的 CPU 使用率很高,那么您很可能使用任何其他实现 OpenGL 应用程序的方式也有很高的 CPU 使用率。
如果您使用 OpenGL 时 CPU 使用率较高,则可能是:
您提到显示分辨率作为一个因素的事实表明了前一个问题。
【讨论】:
您需要获取任何分析器,分析您的代码并查看瓶颈在哪里。由于您的程序会占用 CPU 资源(而不是 GPU),因此这应该相当容易。 据我所知,“AQTime 7 Standard”(windows)目前是免费提供的。或者您可以使用 gprof - 取决于您的工具包/平台。
一种非常可能的情况(除了软件 OpenGL 回退)是您过于频繁地使用动态内存分配或运行调试构建。如果每帧有 100000+ 个多边形,立即模式可能会成为问题。
【讨论】:
我见过一些 GL 实现在最大限度地减少主机 CPU 使用率方面非常糟糕。在很多情况下,CPU 会在 GPU 绘制时忙于等待。通常,只需在卡片设置中打开垂直同步,您的应用就会减少绘制频率,但仍会占用同样多的 CPU。 不幸的是,除了限制应用绘制的频率之外,您自己对此无能为力。
【讨论】: