测试指标主要含义:

ALU / Fragment 和 ALU / Vertex

  • ALU / Fragment 表示每个片元执行的算术逻辑单元(ALU)操作的数量。这通常反映了片元着色器的复杂度。片元着色器处理像素颜色、纹理贴图等细节。
  • ALU / Vertex 表示每个顶点执行的ALU操作的数量。这反映了顶点着色器的复杂度,顶点着色器负责处理顶点位置、光照计算等。

💡

  • 减少这些指标意味着顶点或片元着色器中的计算量减少,可能是通过简化计算逻辑或减少顶点数量实现的。
  • 如果优化后这些值减少,通常意味着正优化,因为减少了GPU的计算负担

EFU / Fragment 和 EFU / Vertex

  • EFU / Fragment 和 EFU / Vertex 可能指扩展功能单元(Extended Function Units)操作的数量,通常涉及特定的图形处理函数,如几何计算或特殊效果处理。

💡 减少EFU操作同样意味着降低了每个顶点或片元处理的复杂度,这应当提高性能。

Textures / Fragment 和 Textures / Vertex

  • Textures / Fragment 和 Textures / Vertex 反映了片元和顶点着色器访问纹理的频率。高频率可能表明大量纹理采样,这可能会成为GPU性能的瓶颈

💡

  • 优化这些指标通常涉及减少纹理采样次数,使用更高效的纹理压缩格式,或优化纹理缓存
  • 减少纹理采样可以减轻内存带宽的压力,改善渲染性能。

GPU clocks

  • GPU clocks 反映了GPU的工作负荷,即GPU在一定时间内的时钟周期数。更多的GPU时钟周期通常表示GPU在更长时间内保持高负荷状态。

💡

  • 如果GPU时钟周期减少,可能意味着GPU处理相同任务的效率提高了,或者渲染任务的复杂度降低了。

Read Total和Write Total

  • Read Total: 衡量在特定时间段内,GPU从内存(包括显存和系统内存)读取的数据总量。高读取量可能指示大量数据传输,可能会导致内存带宽成为性能瓶颈。
  • Write Total: 衡量GPU在相同时间内写入内存的总数据量,包括对帧缓冲区的写入、深度和模板缓冲区更新等。

💡

  • 优化纹理和数据使用:简化纹理使用,优化MIP贴图级别和纹理压缩,这可以显著减少读取总量。
  • 减少渲染目标数量:每个额外的渲染目标都需要额外的写入操作。
  • 使用更有效的数据结构:优化数据访问模式和数据结构,确保数据在内存中是紧凑的。
  • 使用实例化渲染:当需要渲染大量相似的对象时,使用实例化可以减少顶点数据的读取需求。

总结

💡 当进行优化并使用Snapdragon Profiler对比优化前后的性能时,应注意以下变化:

  • 减少ALU操作:表示着色器的计算负荷减轻
  • 减少EFU操作:可能反映了几何处理或特效计算的优化
  • 减少纹理采样:减轻了内存带宽的需求,提高了性能。
  • 减少GPU clocks:GPU效率提高,处理相同任务的时间减少
  • 减少带宽读写:优化了纹理访问策略和渲染输出,减少过度绘制

抓取system trace

在Snapdragon中选择system trace,想分析哪个进程,选择好后勾选process中的上述指标,抓取trace后,导出trace结果

准备脚本分析环境

sudo apt-get install pip
python3 -m pip install --upgrade pip
python3 -m pip install ipykernel
python3 -m pip install pandas numpy perfetto matplotlib bezier tqdm opencv_python

执行脚本

脚本1

python3 performance_gpu_quota.py 文件目录
# 例:python3 performance_gpu_quota.py test.csv

脚本2

[附件: text/x-python]

输出结果

最终会在终端输出如下结果及图片,该文字和图片也会同步保存在目录下的data文件当中。