頂点のメモリ帯域幅の使用量を分析する

頂点データのメモリ帯域幅は、ゲームの 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)
図 1: 単一フレームの Vertex メモリ読み取り帯域幅、平均値は 327 MBps、ピーク値は 1.16 GBps

ピーク時のメモリ読み取り帯域幅は 1.5 GBps 以下、平均帯域幅は 500 MBps 以下にすることをおすすめします。値が大きいほど、一般的な問題があることを示します。

  • 頂点のサイズが大きすぎる: 頂点の属性が大きい、または多数の頂点属性が存在するため、頂点のシェーディング時間に影響を与える可能性があります。
  • Vertex 属性ストリームは分割されない: Vertex 属性は単一のバッファにインターリーブされるため、キャッシュ効率が低下します。
  • フレームごとに送信された頂点が多すぎる: 複雑なモデルやモデルが多数ある場合は、使用する帯域幅が大きくなり、シェードに時間がかかることがあります。

頂点のサイズの問題は、Average Bytes / Vertex トラックで診断することもできます。このトラックは、32 バイトまたは頂点以下にすることをおすすめします。

単一フレームの平均頂点サイズ(平均値は 31.3 バイト)
図 2: 単一フレームの平均頂点サイズ、平均値は 31.3 バイト

直面している可能性のある問題のどれを診断する最善の方法は、フレーム プロファイル トレースを取得して頂点の形式を分析することです。