
测试指标主要含义:
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文件当中。


