在 MacOS 上使用 OpenGL 的 GPU 时序

Posted

技术标签:

【中文标题】在 MacOS 上使用 OpenGL 的 GPU 时序【英文标题】:GPU Timings with OpenGL on MacOSX 【发布时间】:2012-02-06 14:57:15 【问题描述】:

我需要处理 gpu 端的一组绘图调用所需的时间跨度。 OpenGL 3.2+ 有“GL_ARB_timer_query”扩展。不幸的是,MacOSX 仍然不支持该扩展。

你如何能够在 gpu 端测量时间,必须有一种老式的方式或不同的方式来做到这一点。

【问题讨论】:

ARB_timer_query 甚至不需要 GL 3.2(无论如何,它不是扩展,而是核心的一部分)。我什至在我的 2.1-only 7850GT 上安装了它,但它不是 Mac ;) 你能评价更多吗?据我所知,该扩展程序完全不可用... 就像说的那样,我不知道 MacOSX 的情况,因为我从未使用过它。我只是想说,ARB_timer_query 扩展不需要 GL 3.2 硬件或驱动程序,只要硬件和驱动程序支持与 GL 3.2 完全分离的扩展(无论如何它都不是扩展) ,而是一个核心功能)。 【参考方案1】:

你如何能够在 gpu 端测量时间,必须有一种老式的方式或不同的方式来做到这一点。

为什么一定要有一个?事实上,ARB_timer_query 的存在是因为从来没有一种方法来为 GPU 操作计时。这就是它的用途,它是 OpenGL 必须做到的唯一准确机制。

一直有通用的分析技术,例如更改分辨率以测试您是否受“填充率”限制等等。但是除了 ARB_timer_query 之外,没有办法在 OpenGL 中实际测量 GPU 处理时间。

【讨论】:

【参考方案2】:

glFinish() 不能与主机端计时器一起工作吗?

【讨论】:

好吧,当绘制调用不是您想要执行的最后一个操作时,或者当您只是不想停止整个管道或阻塞整个 CPU 应用程序时,它至少会成为一个问题。但是,好吧,对于专门的测试运行,也许吧。 那么我将不得不在单独的线程中运行 glFinish 和主机端计时器,因为否则我会强制在主线程和 gpu 之间建立另一个同步点,如果我这么想的话。我需要 gpu 将下一帧定时不在同一帧上,所以这个同步点是不必要的。我可能应该事先提到这一点...... 您也可以尝试使用主机端计时器的 ARB_sync。虽然这可能更棘手。 @ronag 与 glFinish 相同的问题,它强制同步点 @niktehpui:不一定。您只需要查询围栏状态,而不是等待它。设置栅栏,glFlush 然后轮询状态。

以上是关于在 MacOS 上使用 OpenGL 的 GPU 时序的主要内容,如果未能解决你的问题,请参考以下文章

使用 CentOS 在 AWS GPU 实例上运行 OpenGL

如何在较旧的 GPU 上测试 OpenGL 应用程序?

opengl 代码是不是在 GPU 上运行?

OpenGL 三角形不会在 macOS 上渲染?

何时使用 openGL 将数据发送到 GPU

在 openGL 中,模型坐标应该在我的 CPU 上还是通过 OpenGL 调用在 GPU 上计算?