纹理数据的内存带宽可能是应用 GPU 性能的潜在瓶颈。**AGI 系统分析**中有一些计数器可以帮助诊断纹理内存带宽问题。
高通 Adreno 计数器
在使用高通 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 的幂纹理、mipmap、各向异性过滤等。其中一些可以通过下面讨论的系统分析观察到,而另一些则可能需要更深入的调查。
对于具有自由摄像机的 3D 游戏,纹理资产应使用 mipmap,以便远离摄像机的对象将具有减少的内存带宽、更好的纹理缓存效率和更好的图像质量。对于使用高通 Adreno GPU 的设备,平均低于 10% 的 % 非基础级别纹理计数器可能表明 mipmap 不足。
另一个考虑因素是各向异性过滤的使用,对于高通 Adreno GPU,它由 % 各向异性过滤计数器描述,用于经过各向异性过滤的纹素的比例。虽然这可能会提高某些游戏的视觉质量,但它也可能非常昂贵,并且应权衡其使用与 GPU 性能成本。
诊断更具体问题的最佳方法是进行帧分析跟踪以分析纹理资产。