纹理数据的内存带宽可能是您应用 GPU 性能的潜在瓶颈。**AGI 系统分析结果**中有一些计数器可以帮助诊断纹理内存带宽问题。
Qualcomm Adreno 计数器
在配备 Qualcomm Adreno GPU 的设备上,一些值得注意的计数器包括:
计数器 | 描述 |
---|---|
纹理内存读取带宽 (字节/秒) | 从外部内存读取纹理数据的带宽。 |
% 纹理 L1 未命中 | 获取纹理时的 L1 缓存未命中。 |
% 非基础级别纹理 | 纹理获取中是 mipmap 的百分比。 |
% 各向异性过滤 | 经过各向异性过滤的纹素百分比。 |
ARM Mali 计数器
在配备 ARM Mali GPU 的设备上,一些值得注意的计数器包括:
计数器 | 描述 |
---|---|
从外部内存读取纹理节拍 | 纹理单元从外部内存读取的数据节拍,平均分布在着色器核心上。 |
从 L2 缓存读取纹理节拍 | 纹理单元从 L2 缓存读取的数据节拍,平均分布在着色器核心上。 |
[更多] |
要计算从平均读取节拍得出的总带宽,需要将计数器值乘以总线宽度(通常为 16 字节)和着色器核心总数。
计数器分析
要测量这些计数器的行为,请测量单个 GPU 帧过程中平均和峰值带宽,然后用连续的 GPU 利用率块进行界定。
我们建议平均纹理内存读取带宽不高于 1 GBps,峰值带宽不高于 3 GBps。纹理 L1 缓存未命中率也不应高于 10%。带宽或 L1 缓存的较高值可能是更深层纹理问题的指标,包括:
- 纹理太大:大型纹理会增加包大小,成本更高,并可能降低缓存效率。
- 纹理未压缩:所有 Android 手机都支持某些类型的纹理压缩,无论是 ETC1 还是 ASTC。应压缩纹理以减小包大小并降低纹理带宽。
- 其他:应考虑各种其他纹理问题,包括 2 的幂纹理、mipmapping、各向异性过滤等。其中一些可以从下面讨论的系统分析结果中观察到,而其他一些则可能需要更深入的调查。
对于具有自由相机的三维游戏,纹理资源应使用 mipmapping,以便远离相机的物体将具有降低的内存带宽、更好的纹理缓存效率和更好的图像质量。对于使用 Qualcomm Adreno GPU 的设备,平均值低于 10% 的 % **非基础级别纹理**计数器可能表示 mipmapping 不足。
另一个考虑因素是各向异性过滤的使用,对于 Qualcomm Adreno GPU,它由 **% 各向异性过滤**计数器描述,用于描述经过各向异性过滤的纹素比例。虽然这可能会提高某些游戏的视觉质量,但它也可能非常昂贵,因此应权衡其 GPU 性能成本。
诊断更具体问题的最佳方法是进行帧分析跟踪以分析纹理资源。