- 了解渲染过程
- 了解GPU流水线
- 了解基于平铺的渲染
- Mali Bifrost着色器核心简介
- 测量帧之间的时间以确定帧率。
- 测量CPU负载以确定是否有CPU瓶颈。
- 测量GPU负载以确定是否有GPU瓶颈。
- 检查CPU和GPU负载的操作流程,以确定应用程序是否会因为GPU数据供给导致在图形管线中产生气泡。
- 将位置着色器调用的总数与应用程序索引缓冲区进行比较。如果GPU着色的顶点比应用程序提交更多,那么这可能表示索引局部性不佳,导致位置缓存的颠簸并强制重新绘形。
- 将位置着色器调用的总数与输入基元的总数进行比较。对于大多数内容,多个相邻三角形应该使用同一个顶点来尽可能地分摊成本,争取每个三角形的平均少于一个顶点。
- 通过简化场景内容减少创建的批处理的数量,或
- 优化着色器程序以降低每个线程消耗的Cycle数。
- 计算利用率图和片段利用率图显示着色器核心用于处理该类型的工作负荷的时间百分比,包括所有固定功能逻辑,诸如光栅化和块写回。
- 执行核心利用率图显示可编程核心在GPU运行中使用百分比;如果长时间低于100%,这可能说明可编程核心工作量供给不足。
- 片段FPK利用率图显示等待进入片段线程的四边形数量占队列长度百分比。如果长时间低于100%,这可能表明我们未能为着色器核心生成足够快的新片段。这可能是由于很多只能生成少量片段的大量微三角形引起的,但也可能是该负载在很多Tile上没有任何几何体,例如常见类型的阴影贴图。
- 执行引擎的利用率图展示着色器核心运算单元的活动状态时间百分比。
- 插值单元利用率图展示的是固定功能的插值单元活动状态时间百分比。
- 纹理单元利用率图展示的是固定功能纹理采样和滤波单元活动状态时间百分比。
- “ 存取单元利用率” 利用率图展示的是通用内存访问单元处于活动状态的时间百分比。
- 直接减少工作量:减少每帧必须加载的变量总数。
- 降低精度:从32位highp 切换到16位mediump 将使插值器性能要求减半,这通常会导致着色器逻辑的连锁改进。
- 变量打包:将16位变量打包到矢量中,这些矢量是32位的倍数,可以最大限度地减少因未使用的插值器通道而导致的丢失周期。例如,打包后进vec4进行插值比分别对一个float和单独vec3插值更快。
- 压缩纹理访问表显示使用基于块的压缩的纹理格式如ASTC和游戏渲染应尽可能使用块压缩纹理以减少内存带宽占用。
- Mipmapped访问表显示使用mipmapped纹理访问的百分比。游戏渲染应该使用mipmapped纹理来处理所有3D场景,以提高性能和图像质量。
- 三线性过滤纹理访问表显示使用三线性过滤纹理样本的百分比。这些访问只有双线性访问速率的一半。
- 3D纹理访问图显示3D纹理样本访问的百分比。这些访问以2D纹理访问的一半速率运行。
- 存取单元流量显示所有对缓存和通过image() 进行的数据存取的带宽占用。
- 纹理单元流量与着色器中texture() 访问相关带宽,包括在渲染过程开始时,恢复没清空或重置相关单元的切片缓冲区内容所需的隐式加载。
- Tile缓冲区流量显示在渲染最后阶段将所有帧缓冲数据写回内存占用的带宽。
本文来源:
https://community.arm.com/cn/b/blog/posts/arm-mobile-studio-mali-gpu