高通骁龙性能分析器指标解读

这是一个关于 Qualcomm Snapdragon Profiler (高通骁龙性能分析器) 中各项性能指标的详细中文解释。这些指标对于分析 Android 游戏或图形应用的 GPU 瓶颈(Bottleneck)至关重要。

为了方便理解,我将这些杂乱的指标按逻辑类别进行了分类整理和解释。


一、 纹理与缓存访问 (Texture & Cache Access)

这部分指标主要反映 GPU 读取贴图(纹理)时的效率。这是移动端 GPU 常见的瓶颈来源。

  • % Texture L1 Miss (L1 纹理缓存缺失率)
    • 定义: L1 缓存缺失次数 / L1 缓存总请求次数。
    • 解释: L1 缓存非常小且快。如果不命中,GPU 就要去 L2 找。该值高通常意味着纹理采样局部性差(比如采样跨度大)。
  • % Texture L2 Miss (L2 纹理缓存缺失率)
    • 定义: L2 缓存缺失次数 / L2 缓存总请求次数。
    • 解释: 关键指标。如果 L2 也没命中,GPU 就必须去读取缓慢的系统内存(DDR)。这会导致严重的性能下降和功耗增加。
  • L1 Texture Cache Miss Per Pixel (每像素 L1 缺失数)
    • 定义: 平均每个像素渲染时发生的 L1 缺失次数。
    • 解释: 值越低越好。如果该值很高,建议使用压缩纹理(ETC2/ASTC),或者检查 UV 映射是否过于混乱。
  • % Texture Fetch Stall (纹理读取停顿率)
    • 定义: 着色器(Shader)因为等待纹理数据而无法继续工作的时钟周期百分比。
    • 解释: 高值意味着由于纹理读取慢,导致 GPU 算力被浪费。通常是由高 L2 Miss 或显存带宽不足引起的。
  • % Stalled on System Memory (系统内存停顿率)
    • 定义: L2 缓存为了等待系统内存(DRAM)的数据而停顿的周期百分比。
    • 解释: 这是最严重的停顿。说明显存带宽不够用了,或者缓存完全失效。
  • % Non-Base Level Textures (非基础级纹理采样率)
    • 解释: 采样的纹理像素来自 Mipmap 层级(非 Level 0)的比例。
    • 意义: 正常场景下应该有较高比例。如果通过 Mipmap 采样,能显著降低 L2 Miss。如果该值为 0 且物体很远,说明没开 Mipmap,性能会很差。
  • 纹理过滤方式占比:
    • % Nearest Filtered: 最近邻过滤(最快,马赛克感)。
    • % Linear Filtered: 线性过滤(标准质量)。
    • % Anisotropic Filtered: 各向异性过滤(高质量,消耗最大)。

二、 几何与光栅化 (Geometry & Rasterization)

这部分关注顶点处理、多边形裁剪和剔除。

  • % Vertex Fetch Stall (顶点读取停顿率)
    • 定义: GPU 因为无法及时获取顶点数据而停顿的时间百分比。
    • 解释: 如果高,说明顶点数据量过大(顶点属性太多),或者顶点缓冲(VBO)布局不合理。
  • Pre-clipped Polygons / Second (裁剪前多边形数)
    • 解释: 提交给 GPU 的原始多边形数量。
  • % Prims Trivially Rejected (图元由于在视口外被剔除率)
    • 定义: 图元完全在屏幕可视范围之外,被光栅化器直接丢弃的比例。
    • 解释: 越高越好(前提是确实看不见)。这是一种廉价的剔除,不需要复杂的计算。
  • % Prims Clipped (图元裁剪率)
    • 定义: 图元一部分在屏幕内,一部分在屏幕外,需要硬件生成新顶点进行裁剪的比例。
    • 解释: 裁剪是很昂贵的操作。应该利用 Guardband(保护带,视口外的一圈区域)来减少裁剪发生。
  • Average Vertices / Polygon (每多边形平均顶点数)
    • 解释: 三角形列表(Triangle List)通常是 3,三角带(Triangle Strip)接近 1。接近 1 说明模型导出优化得好,共享了顶点。
  • Reused Vertices / Second (顶点复用率)
    • 解释: 顶点着色器计算后的顶点被缓存复用的次数。
    • 意义: 高值表示顶点索引(Indices)设置得当,减少了 Vertex Shader 的重复计算。
  • Average Polygon Area (平均多边形面积)
    • 解释: 每个多边形覆盖的像素数。
    • 意义: 对于 Adreno 这种分块渲染(Binning)架构,如果多边形极小(Micro-triangles),会导致分块效率低下,性能受损。

三、 着色器性能 (Shader Performance)

这部分反映 Vertex Shader (VS) 和 Fragment Shader (FS) 的计算负载。

  • % Shaders Busy (着色器忙碌率)
    • 解释: 所有 Shader 核心都在工作的百分比。如果接近 100%,说明 GPU 瓶颈在于计算(ALU Bound)。
  • ALU vs EFU (算术单元 vs 特殊函数单元)
    • ALU (Arithmetic Logic Unit): 处理加减乘除等基础运算。
    • EFU (Elementary Function Unit): 处理 sin, cos, pow, sqrt, log 等复杂数学函数。EFU 指令通常比 ALU 慢且少。
  • Full Precision vs Half Precision (全精度 vs 半精度)
    • Full (Highp): 32位浮点。
    • Half (Mediump): 16位浮点。
    • 关键点: 在移动端,2 个半精度指令通常等同于 1 个全精度指令的开销。尽量使用 Half (mediump) 能大幅提升性能。
  • 指令数密度指标:
    • ALU / Fragment: 每个片元执行的 ALU 指令平均数。越高说明 Shader 越复杂。
    • EFU / Fragment: 每个片元执行的 EFU 指令平均数。应尽量减少 EFU 使用。
    • Textures / Fragment: 每个片元采样的纹理数。
  • Vertices/Fragments Shaded (着色顶点/片元总数)
    • 解释: GPU 实际处理的数量。

四、 带宽与内存 (Bandwidth & Memory)

直接反映数据传输量。

  • Read/Write Total (Bytes/sec): GPU 读写显存的总带宽。
  • Texture Memory Read BW: 专门用于读取纹理的带宽。
  • Vertex Memory Read: 专门用于读取顶点的带宽。
  • Avg Bytes / Fragment: 平均每个片元消耗的带宽。如果过高,说明 Overdraw 严重或者纹理未压缩。

五、 CPU 与系统状态 (CPU & System)

  • Temperature (Die/GPU Temperature): 芯片温度。温度过高会触发降频(Throttling)。
  • CPU Utilization / Frequency: CPU 使用率和频率。用于判断是否是 CPU 瓶颈(比如 CPU 没喂饱 GPU)。
  • Preemptions / second (每秒抢占次数)
    • 解释: GPU 任务被系统打断(如切换上下文)的次数。过高会导致 GPU 流水线气泡,降低效率。

六、 总结:如何利用这些数据?

  1. 卡顿分析:

    • % Stalled on System Memory% Texture Fetch Stall。如果高,说明卡在内存读取上。
    • Texture L2 Miss,如果高,检查 Mipmap 和纹理压缩。
  2. 发热/耗电分析:

    • Memory Read/Write Total。读写内存最耗电。
    • 看 **ALU / Fragment (Full)**。全精度计算比半精度耗电。
  3. 几何瓶颈:

    • % Prims Clipped。裁剪太多说明模型在视口边缘处理得不好。
    • Average Polygon Area。如果面积很小(< 5-10 像素),说明模型面数过高,对当前屏幕分辨率是浪费。