頂點資料的記憶體頻寬可能是遊戲 GPU 效能的潛在瓶頸。AGI 系統設定檔中有一些計數器,可以協助診斷頂點記憶體頻寬問題。
Qualcomm Adreno 計數器
在搭載 Qualcomm Adreno GPU 的裝置上,一些著名的計數器包括:
議價 | 說明 |
---|---|
Vertex 記憶體讀取量 | 從外部記憶體讀取的頂點資料頻寬。 |
平均位元組數/Vertex | 頂點資料的平均大小,以位元組為單位。 |
Vertex 擷取攤位百分比 | 頂點資料中 GPU 遭到封鎖的時鐘週期百分比。 |
ARM Mali 計數器 (WIP)
在搭載 ARM Mali GPU 的裝置上,一些著名的計數器包括:
議價 | 說明 |
---|---|
載入/儲存外部記憶體中的讀取節拍 | 載入/儲存單元從外部記憶體讀取的資料訊號,是著色器核心的平均值。 |
從 L2 快取載入/儲存讀取訊號 | 載入/商店單位從 L2 快取讀取的資料訊號,是著色器核心的平均值。 |
[更多] |
為了根據平均讀取訊號計算整體頻寬,計數器值會乘以匯流排寬度 (通常為 16 個位元組) 和著色器核心總數。[更多]
計數器分析
如要測量這些計數器的行為,您可以測量單一 GPU 影格在內的平均值和尖峰頻寬,而這個做法可透過連續的「GPU 使用率」區塊進行去解。
![單一影格的 Vertex 記憶體讀取頻寬,平均值為 327 MBps,最大值為 1.16 GBps](https://developer.android.google.cn/static/images/agi/vertex-memory-bw-images/sample_vert_bw.png?authuser=19&hl=zh-tw)
建議的最高頂點記憶體讀取頻寬不超過 1.5 GBps,且平均頻寬不超過 500 MBps。值越大,表示可能有下列其中一項常見問題:
- 頂點大小過大:Vertice 可能有大型的頂點屬性或大量頂點屬性,影響頂點的陰影時間。
- 不會分割 Vertex 屬性串流:Vertex 屬性會與單一緩衝區交錯,因此降低快取效率。
- 每個影格提交的頂點過多:較複雜的模型和/或大量模型可能會佔用較大的頻寬,且需要較長時間才能遮蔽。
Vertex 大小問題也可以透過平均位元組 / Vertex 測試群組來診斷,建議不超過 32 個位元組或頂點。
![單一影格的平均頂點大小,平均值為 31.3 個位元組](https://developer.android.google.cn/static/images/agi/vertex-memory-bw-images/sample_bytes_per_vert.png?authuser=19&hl=zh-tw)
如要診斷可能發生的問題,最好的方法就是執行影格設定檔追蹤記錄來分析頂點格式。