Arm Mobile Studio 2023.5 推出 Frame Advisor
点击上方 Arm 社区 关注我们
作者:Arm 战略与生态系统部开发者技术推广主任工程师 Julie Gaskin
在 Arm ® Mobile Studio 2023.5 的版本中伴随了 Frame Advisor 首个版本的推出,Frame Advisor 是一款基于帧的全新性能分析工具,有助于优化 Arm Immortalis™ 和 Mali™ GPU 的渲染工作负载。 Frame Advisor 旨在提供性能反馈和最佳实践建议,其结果会自动与应用所提交的特定 API 可见工作负载相关联。如此一来,将减少解读硬件原始数据的工作量,从而简化应用优化的过程。
Frame Advisor 1.0 为早期访问版本,支持的功能集有限,主要侧重渲染通道的高效使用和几何图形资产的高效编码。这是应用 API 的两大关键使用场景,对 Arm GPU 的渲染效率非常重要。我们计划添加更多分析功能,从而涵盖绘制状态和着色器反馈等 API 特性。
推出 Frame Advisor 的缘由
Arm GPU 使用基于图块的渲染来处理渲染通道。也就是说每次渲染都要先处理几何图形,然后将图元分配到其所覆盖的屏幕空间小图块上。几何图形处理结束后,这些小图块会经过片段着色,随后才会被写入内存。
此方法的优势在于这些图块小到足以存储在 GPU 内部的本地 RAM 中,于是便能将片段着色的工作集保留在芯片上,而无需使用高能耗的外部 DRAM 带宽。 不过,这种处理方式增加了特征分析的难度。
在使用基于图块的渲染时,每次绘制调用的处理工作量都会被分割成小块,并与其他绘制调用交错执行。此外,渲染通道通常采用管线化方式,并与其他并行运行的渲染通道重叠。因此,如果只依赖硬件数据源,例如使用 Arm Streamline 采集基于时间的描述,就很难获得明确的建议。硬件计数器可以让我们发现问题,但我们不一定能清楚该问题来自应用程序的哪个部分。 Frame Advisor 就是要填补这个空白,提供与 API 相关的建议。
Frame Advisor 能提供哪些见解?
Frame Advisor 是一款深度分析器,能让我们清楚特定帧运行缓慢的原因。 它可在使用 Streamline 分析器或引擎内分析器等其他工具识别出慢速帧区域后派上用场。
Frame Advisor 可采集问题区域的那几帧游戏画面,包括这些帧的所有 API 调用记录和跨 API 边界的数据,以及这些帧的 GPU 输出记录。 这有助于在工具分析过程中切实掌握工作负载情况以及 GPU 对这些负载的处理方式。 信息采集过程会对应用性能产生影响,但采集和分析所需数据的过程仅需几秒钟。
渲染图形
渲染通道是图形帧的主干, 高效利用渲染通道能够确保我们受益于 GPU 内部的高能效片上图块内存 。 如果渲染通道未能充分利用基于图块的渲染,就难以节省内存带宽,从而导致性能下降。
那么我们该如何判断渲染通道有没有得到高效处理呢?Frame Advisor 在采集帧时,会将该帧的渲染过程可视化,这可以帮助我们发现问题。
该工具可在渲染图中展示为创建最终渲染帧而执行的渲染操作概况,包括帧中渲染通道之间的数据流,以及纹理等资源的产生和消耗过程。 这可以帮助我们了解数据在渲染通道之间的流动效率,从而发现实现优化的机会。
渲染图中,每个渲染通道都被表示为一个方框,输入和输出套接字包含在各个附件中。渲染开始时,输入附件会从 DRAM 读入图块内存。渲染结束后,输出附件会被写回 DRAM。访问这些内存的成本较高,应尽量避免。那我们如何才能做到这一点呢?
在进行任何绘制调用之前,渲染通道中的第一个命令应该清除任何输入附件或使之失效,除非我们有意将该附件作为该渲染通道的起点。这可以避免每次启动时从 DRAM 进行不必要的回读。同样,每个输出附件都必须作废,以避免存储到内存中。
此外,在渲染过程中,前一次渲染的输出附件可能会被读取为后一次渲染的输入附件,而中间并没有使用任何纹理。这些渲染通道可以合并为一个通道,以避免不必要地读写 DRAM。
当我们发现有些渲染通道没有在后续处理中被使用,就说明它们对最终渲染输出没有任何贡献,因而可将它们移除,以节省算力和带宽。
通常情况下,对渲染通道的构建方式进行上述调整可以显著提高性能,而无需对屏幕上的对象进行任何更改。 除此之外,Frame Advisor 能让我们更细致地查看屏幕上正在渲染的内容,并了解渲染的效率,从而有助于节省算力。
发现多余的绘制调用
处理绘制调用需要占用大量 CPU 资源,因此必须确保高效使用,并减少多余调用的次数。 Frame Advisor 可以让我们查看渲染通道中的所有绘制调用,并逐一检查是否为帧缓冲区带来了明显变化。
如此一来,我们就很容易发现低效的渲染,比如那些在视锥体之外或被其他物体遮挡的绘制操作,这些情况可以通过应用软件进行优化。我们也可以使用一系列软件剔除技术来防止类似事情发生。此外,还能轻松发现许多单独绘制的相同对象,这样就可以将它们合并为一次绘制。这些都是减少 CPU 和 GPU 计算量的简便方法。
通过逐步查看绘制调用并观察帧缓冲区输出的变化,我们可以轻松了解不透明几何体是否被高效渲染。不透明物体应以从前到后的顺序进行渲染,也就是从最靠近镜头的物体开始,向远处渲染。如果对象是从前到后渲染的,GPU 就可以使用 Early ZS 测试来识别,并丢弃隐藏在其他对象后面的三角形。这样就可以在片段着色前省去不必要的工作。
检查几何体的绘制是否高效
通常情况下,当角色在屏幕的远处时,复杂的角色网格会消耗过多带宽和算力。此时网格中的三角形会变得非常小,以致于会开始造成严重的性能问题,并且通常收效甚微,几乎不会带来明显的视觉改善效果。 Frame Advisor 会显示每次绘制调用所绘制的图元数。此外,你还可以根据图元数量对渲染通道中的所有对象进行排序。 因此,可以毫不费力地找到场景中最复杂的物体,并研究是否可以将其简化。
在模型无法简化的情况下,必须确保模型的绘制效率。Frame Advisor 中的指标详情视图列出了当前所选绘图调用的一系列实际指标,例如:
“顶点效率评估” 表明未使用的顶点是否被着色,这可能是由于着色过度,或对象网格的位置不佳导致的,进而导致顶点被多次处理。
“索引率” 表示网格中每个三角形使用了多少个唯一顶点。理想情况下,这个数值应该接近一,表明每个顶点都能被三个三角形高效复用。最糟糕的情况是三,这表明每个三角形都使用了三个唯一的顶点。
“重复顶点” 的数量如果与模型中的另一个顶点完全相同,就表示算力被浪费了。
(上下滑动,查看全图)
学习并免费试用 Frame Advisor 功能
Frame Advisor 为 Arm Mobile Studio 安卓分析工具套件的一部分,供开发者免费使用。你可通过以下视频教程,了解 Frame Advisor 如何运作、学习以下功能,并获取免费下载链接:
从一部联网的安卓设备上运行的移动游戏中采集一帧画面
使用渲染图识别多余的渲染通道
通过绘制调用来评估场景的构建方法
查找场景中的复杂网格,并获得与其复杂原因有关的指标详情
查找场景中的低效率网格并查看相关指标,从而采取优化操作
此外,你也可参阅 Frame Advisor 用户指南 ( https://developer.arm.com/documentation/102693/latest/ ) ,了解全部功能。
帮助我们改进 Frame Advisor
Frame Advisor 的首个版本只是一个开始,我们计划在接下来的几个版本中添加更多的功能和特性。与此同时,我们也乐见获取你们宝贵的建议与想法,帮助我们不断改进。比如,你是如何采集和分析画面的?你希望未来增加哪些功能?欢迎将你的反馈发送电子邮件至 mobilestudio@arm.com
温馨提示:由于这是这一新工具的首个版本,其中可能存在一些错误和已知问题。有关详情,请参阅 Arm Mobile Studio 发行说明。
* 本文为 Arm 原创文章,转载请留言联系获得授权并注明出处。
点击阅读原文,下载 Arm Mobile Studio