【问题标题】:What does the Tiler Utilization statistic mean in the iPhone OpenGL ES instrument?iPhone OpenGL ES 工具中的 Tiler Utilization 统计数据是什么意思?
【发布时间】:2010-11-20 05:50:44
【问题描述】:

我一直在尝试执行一些 OpenGL ES 性能优化,以提高我在 iPhone 应用程序中每秒能够渲染的三角形数量,但我遇到了障碍。我尝试将我的 OpenGL ES 数据类型从固定转换为浮点(每个 Apple's recommendation),交错我的顶点缓冲区对象,并最小化绘图状态的变化,但这些变化都没有对渲染速度产生影响。无论如何,我似乎无法在运行 3.0 操作系统的 iPhone 3G 上将我的应用程序推到 320,000 个三角形/秒以上。根据this benchmark 的说法,使用我使用的平滑着色,我应该能够在此硬件上达到 687,000 个三角形/秒。

在我的测试中,当我在 Instruments 中针对正在运行的设备运行 OpenGL ES 性能工具时,我看到在渲染我的基准测试时统计“Tiler Utilization”接近 100%,但“Renderer Utilization”只是越来越到 30% 左右。这可能提供了关于显示过程中的瓶颈是什么的线索,但我不知道这些值是什么意思,也没有找到任何关于它们的文档。有人对 iPhone OpenGL ES 仪器中的这个和其他统计数据代表什么有很好的描述吗?我知道 iPhone 3G 中的 PowerVR MBX Lite 是 tile-based deferred renderer,但我不确定该架构中的 Renderer 和 Tiler 之间会有什么区别。

如果它有任何帮助,如果你想自己下载和测试它,这个应用程序的(BSD 许可)源代码is available。在当前配置下,每次加载新的分子结构时都会启动一个小基准测试并将三角形/s 输出到控制台。

【问题讨论】:

  • 你的三角形有多大?我认为其中一个统计数据更多的是关于像素数,另一个是关于三角形数。如果您缩小屏幕以减少屏幕填充,相对利用率数字会发生变化吗?
  • 这取决于我加载的模型,但它们往往很小。无论模型的缩放级别如何,数字似乎都保持不变。此外,我尝试将 OpenGL 视图大小减小到现在的一半,但没有任何效果,这似乎排除了填充率限制。

标签: iphone opengl-es instruments


【解决方案1】:

Tiler Utilization 和 Renderer Utilization 百分比分别衡量顶点和片段处理硬件的占空比。在 MBX 上,Tiler Utilization 通常随着发送到 GPU 的顶点数据量(根据顶点数量和每个顶点发送的属性大小)而缩放,并且 Fragment Utilization 通常随着过度绘制和纹理采样而增加.

在您的情况下,最好的办法是减少您发送的每个顶点的大小。对于初学者,我会尝试按颜色对原子和键进行分箱,并使用恒定颜色而不是数组发送这些分箱中的每一个。我还建议调查一下短裤是否适合您的位置和法线,并给出适当的缩放比例。在这种情况下,您可能还必须按位置分箱,如果按比例缩放以提供足够精度的短裤无法覆盖您需要的范围。这些技术可能需要额外的绘图调用,但我怀疑顶点吞吐量的提高将超过每次绘图调用的额外 CPU 开销。

请注意,确保每个顶点属性从 32 位边界开始通常是有益的(在 MBX 和其他地方),这意味着如果将位置和法线切换为短裤,则应将它们填充到 4 个组件。 MBX 平台的特殊性也使得您希望在这种情况下在调用 glVertexPointer 时实际包含位置的 W 组件。

您还可以考虑为多边形数据(尤其是球体)采用替代照明方法(例如 DOT3),但这需要特别小心,以确保您不会使渲染片段受限,或无意中发送比以前更多的顶点数据.

【讨论】:

  • 这与我第一次提出问题以来的经验一致。我将我的顶点和法线数据减少到短裤,用额外的组件填充以达到 32 位边界,这将渲染性能提高了 30%。剔除背面和调整深度测试又增加了 10%。我将看一下颜色分级,看看它有什么效果。感谢您的详细回复。
  • 我有一个愚蠢的问题.....在此处 Pivot 的回答中使用的动词“bin”是什么意思?
  • @Andrew Garrison:在这种情况下,它意味着对某种类型的项目进行分组。当他说“按颜色分类你的原子和键”时,他的意思是我应该将所有共享相同颜色的项目的顶点分组,然后只为该颜色提交一次这些项目。这避免了必须为每个顶点指定一种颜色,从而减少了正在发送的几何图形的大小。
  • 作为另一个后续,我终于开始为我的分子渲染实现颜色分级。它导致传递给 GPU 的几何尺寸减少了约 20%,我观察到每个 OpenGL ES 帧的渲染速度提高了 17%。我称之为胜利。
  • 回答得很好,但我想指出,应谨慎使用按颜色分类。它将增加绘图调用的数量。当进行大约 200 次以上的绘制调用时,iPhone 将使其 CPU 过载。
【解决方案2】:

很好的答案,@Pivot!作为参考,this Apple doc 定义了这些术语:

  • 渲染器利用率 %。 GPU 用于执行片段处理的时间百分比。
  • 平铺利用率 %。 GPU 用于执行顶点处理和平铺的时间百分比。
  • 设备利用率%。 GPU 用于平铺或渲染工作的时间百分比。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2011-09-28
    相关资源
    最近更新 更多