頂点データのメモリ帯域幅は、ゲームの GPU パフォーマンスにおけるボトルネックになる可能性があります。AGI システム プロファイルには、頂点のメモリ帯域幅の問題の診断に役立つカウンタがあります。
Qualcomm Adreno カウンタ
Qualcomm Adreno GPU を搭載したデバイスでは、次のような重要なカウンタがあります。
対案を出す | 説明 |
---|---|
Vertex メモリ読み取り | 外部メモリから読み取られた頂点データの帯域幅。 |
頂上の平均バイト数 | 頂点データの平均サイズ(バイト単位)。 |
Vertex Fetch Stall の割合(%) | 頂点データで GPU がブロックされるクロック サイクルの割合。 |
ARM マリ カウンタ(WIP)
ARM Mali GPU を搭載したデバイスでは、次のような重要なカウンタがあります。
対案を出す | 説明 |
---|---|
外部メモリから読み取りビートを読み込んで保存する | 読み込み/ストア単位別に外部メモリから読み取られたデータビート(シェーダーコア全体で平均)。 |
L2 キャッシュからの読み取りビートの読み込み/保存 | 読み込み/ストアユニットによって L2 キャッシュから読み取られたデータビート(シェーダーコアで平均化)。 |
[その他] |
平均読み取りビートから全体の帯域幅を計算するには、このカウンタ値にバス幅(通常は 16 バイト)とシェーダー コアの合計数を掛けます。[その他]
カウンタ分析
これらのカウンタの動作を測定するには、単一の GPU フレームにおける平均帯域幅とピーク帯域幅を測定し、これらは [GPU 使用率] の連続したブロックで表すことができます。
![単一フレームの頂点メモリ読み取り帯域幅(平均値は 327 MBps、ピーク値は 1.16 GBps)](https://developer.android.com/static/images/agi/vertex-memory-bw-images/sample_vert_bw.png?authuser=8&hl=ja)
ピーク時のメモリ読み取り帯域幅は 1.5 GBps 以下、平均帯域幅は 500 MBps 以下にすることをおすすめします。値が大きいほど、一般的な問題があることを示します。
- 頂点のサイズが大きすぎる: 頂点の属性が大きい、または多数の頂点属性が存在するため、頂点のシェーディング時間に影響を与える可能性があります。
- Vertex 属性ストリームは分割されない: Vertex 属性は単一のバッファにインターリーブされるため、キャッシュ効率が低下します。
- フレームごとに送信された頂点が多すぎる: 複雑なモデルやモデルが多数ある場合は、使用する帯域幅が大きくなり、シェードに時間がかかることがあります。
頂点のサイズの問題は、Average Bytes / Vertex トラックで診断することもできます。このトラックは、32 バイトまたは頂点以下にすることをおすすめします。
![単一フレームの平均頂点サイズ(平均値は 31.3 バイト)](https://developer.android.com/static/images/agi/vertex-memory-bw-images/sample_bytes_per_vert.png?authuser=8&hl=ja)
直面している可能性のある問題のどれを診断する最善の方法は、フレーム プロファイル トレースを取得して頂点の形式を分析することです。