分析紋理記憶體頻寬用量

紋理資料的記憶體頻寬可能會成為應用程式 GPU 效能的瓶頸。AGI 系統設定檔中有幾個計數器可協助診斷紋理記憶體頻寬問題。

Qualcomm Adreno 計數器

在搭載 Qualcomm Adreno GPU 的裝置上,一些值得注意的計數器包括:

計數器 說明
紋理記憶體讀取頻寬 (位元組/秒) 從外部記憶體讀取的紋理資料頻寬。
% Texture L1 Miss 從擷取紋理發生 L1 快取失敗。
% 非基本層級紋理 mipmap 的紋理擷取百分比。
非均質過濾百分比 經過非均向性過濾的紋素百分比。

ARM Mali 計數器

在搭載 ARM Mali GPU 的裝置上,一些值得注意的計數器包括:

計數器 說明
從外部記憶體讀取紋理的節拍 紋理單元從外部記憶體讀取的資料節拍,在著色器核心中平均。
從 L2 快取讀取紋理 紋理單元從 L2 快取讀取的資料節拍,在著色器核心中取平均值。
[更多]

如要根據平均讀取節拍計算整體頻寬,請將計數器值乘以匯流排寬度 (通常為 16 個位元組) 和著色器核心總數。

計數器分析

如要測量這些計數器的行為,請測量單一 GPU 影格的平均和尖峰頻寬,然後以連續的 GPU 使用率區塊劃分。

單一影格的紋理記憶體讀取頻寬,平均值為 565 MBps,峰值為 2.30 GBps
圖 1 單一影格的紋理記憶體讀取頻寬,平均值為 565 MBps,峰值為 2.30 GBps

建議平均紋理記憶體讀取頻寬不超過 1 GBps,尖峰頻寬不超過 3 GBps。紋理 L1 快取失敗的次數也不應超過 10%。頻寬或 L1 快取的值越高,可能表示紋理問題越嚴重,包括:

  • 紋理所占空間過大:紋理過大會增加套件大小,而且成本較高,可能會降低快取效率。
  • 紋理未壓縮:所有 Android 手機都支援某幾種紋理壓縮類型,無論是 ETC1 或 ASTC。紋理應壓縮,以縮減套件大小和紋理頻寬。
  • 其他:應考量各種其他紋理問題,包括 2 的乘冪紋理、mipmap、非均質過濾等。如要觀察其中某些問題,可以查看下文所述的系統設定檔,其他問題則可能需要深入調查。

如果是具有自由相機的三維遊戲,紋理素材應使用 mipmap,這樣一來,遠離相機的物件就能減少記憶體頻寬、提升紋理快取效率,以及提高影像品質。如果是使用 Qualcomm Adreno GPU 的裝置,平均「非基本層級紋理」計數器低於 10%,可能表示 mipmapping 不足。

單一影格的非基礎層級紋理,平均值為 9.2%
圖 2. 單一影格的非基礎層級紋理,平均值為 9.2%

另一個考量因素是使用非均質過濾,這會由 Qualcomm Adreno GPU 的「% Anisotropic Filtered」(非等向性篩選的比例) 計數器說明,代表非等向性篩選的紋素比例。雖然這項功能可提升部分遊戲的畫質,但費用可能非常高,因此使用時應考量 GPU 效能成本。

單一影格的非等向性篩選百分比,平均值為 10.8%
圖 3 單一影格的非等向性篩選百分比,平均值為 10.8%

如要診斷更具體的特定問題,最好的方法是擷取影格剖析追蹤記錄,然後分析紋理素材。