分析紋理記憶體頻寬用量

紋理資料的記憶體頻寬可能是應用程式 GPU 效能的潛在瓶頸。AGI 系統設定檔有一些計數器,可以協助診斷紋理記憶體頻寬問題。

Qualcomm Adreno 計數器

在搭載 Qualcomm Adreno GPU 的裝置上,一些著名的計數器包括:

議價 說明
紋理記憶體讀取 BW (位元組/秒) 從外部記憶體讀取的紋理資料頻寬。
紋理 L1 失敗百分比 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 和非均質過濾等。其中有些可能是從系統設定檔觀察到的,有些則需要進一步調查。

如果是配備免費相機的 3D 遊戲,紋理資產應使用 mipmapping,讓距離相機遠處的物件能夠降低記憶體頻寬、改善紋理快取效率,以及提升影像品質。對於使用 Qualcomm Adreno GPU 的裝置,平均如果非基本程度紋理計數器低於 10%,可能表示 inadequate mipmapping。

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

另一個考量因素是使用非均質過濾,如 Qualcomm Adreno GPU 的 % 非均質過濾計數器功能,可瞭解非均質過濾的紋素比例。雖然這樣或許能提升部分遊戲的視覺品質,但也可能非常昂貴,而且使用時應與 GPU 效能成本相同。

針對單一影格篩選非均質生物量,平均值為 10.8%
圖 3 針對單一影格篩選非均質物的濃度,平均值為 10.8%

如要診斷更具體的問題,最好的方法是執行影格設定檔追蹤記錄來分析紋理資產。