分析纹理内存带宽使用率

纹理数据的内存带宽可能是您应用 GPU 性能的潜在瓶颈。**AGI 系统分析结果**中有一些计数器可以帮助诊断纹理内存带宽问题。

Qualcomm Adreno 计数器

在配备 Qualcomm Adreno GPU 的设备上,一些值得注意的计数器包括:

计数器 描述
纹理内存读取带宽 (字节/秒) 从外部内存读取纹理数据的带宽。
% 纹理 L1 未命中 获取纹理时的 L1 缓存未命中。
% 非基础级别纹理 纹理获取中是 mipmap 的百分比。
% 各向异性过滤 经过各向异性过滤的纹素百分比。

ARM Mali 计数器

在配备 ARM Mali GPU 的设备上,一些值得注意的计数器包括:

计数器 描述
从外部内存读取纹理节拍 纹理单元从外部内存读取的数据节拍,平均分布在着色器核心上。
从 L2 缓存读取纹理节拍 纹理单元从 L2 缓存读取的数据节拍,平均分布在着色器核心上。
[更多]

要计算从平均读取节拍得出的总带宽,需要将计数器值乘以总线宽度(通常为 16 字节)和着色器核心总数。

计数器分析

要测量这些计数器的行为,请测量单个 GPU 帧过程中平均和峰值带宽,然后用连续的 GPU 利用率块进行界定。

Texture memory read bandwidth for a single frame, with average value of 565 MBps and peak value of 2.30 GBps
图 1. 单帧纹理内存读取带宽,平均值为 565 MBps,峰值为 2.30 GBps

我们建议平均纹理内存读取带宽不高于 1 GBps,峰值带宽不高于 3 GBps。纹理 L1 缓存未命中率也不应高于 10%。带宽或 L1 缓存的较高值可能是更深层纹理问题的指标,包括:

  • 纹理太大:大型纹理会增加包大小,成本更高,并可能降低缓存效率。
  • 纹理未压缩:所有 Android 手机都支持某些类型的纹理压缩,无论是 ETC1 还是 ASTC。应压缩纹理以减小包大小并降低纹理带宽。
  • 其他:应考虑各种其他纹理问题,包括 2 的幂纹理、mipmapping、各向异性过滤等。其中一些可以从下面讨论的系统分析结果中观察到,而其他一些则可能需要更深入的调查。

对于具有自由相机的三维游戏,纹理资源应使用 mipmapping,以便远离相机的物体将具有降低的内存带宽、更好的纹理缓存效率和更好的图像质量。对于使用 Qualcomm Adreno GPU 的设备,平均值低于 10% 的 % **非基础级别纹理**计数器可能表示 mipmapping 不足。

Non-base level textures for a single frame, with an average value of 9.2%
图 2. 单帧非基础级别纹理,平均值为 9.2%

另一个考虑因素是各向异性过滤的使用,对于 Qualcomm Adreno GPU,它由 **% 各向异性过滤**计数器描述,用于描述经过各向异性过滤的纹素比例。虽然这可能会提高某些游戏的视觉质量,但它也可能非常昂贵,因此应权衡其 GPU 性能成本。

Perecentage of anisotropic filtered for a single frame, with average value of 10.8%
图 3. 单帧各向异性过滤百分比,平均值为 10.8%

诊断更具体问题的最佳方法是进行帧分析跟踪以分析纹理资源。