テクスチャのメモリ帯域幅の使用量を分析する

テクスチャ データのメモリ帯域幅は、アプリの GPU パフォーマンスのボトルネックになる可能性があります。AGI システム プロファイルには、テクスチャのメモリ帯域幅の問題の診断に役立つカウンタがあります。

Qualcomm Adreno カウンタ

Qualcomm Adreno GPU を搭載したデバイスでは、次のような重要なカウンタがあります。

対案を出す 説明
テクスチャ メモリ読み取り帯域幅(バイト/秒) 外部メモリから読み取られたテクスチャ データの帯域幅。
テクスチャ L1 ミス(%) テクスチャの取得による L1 キャッシュミス。
ベース以外のテクスチャの割合(%) mipmap のテクスチャ取得の割合。
異方性フィルタ(%) 異方性でフィルタリングされたテクセルの割合。

ARM マリ カウンタ

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、異方性フィルタリングなど、その他のさまざまなテクスチャの問題も考慮する必要があります。後述のとおり、システム プロファイルから確認できる場合もありますが、詳細な調査が必要になる場合もあります。

無料のカメラを使った 3 次元ゲームの場合、テクスチャ アセットで mipmap を使用する必要があります。これにより、カメラから遠くにあるオブジェクトのメモリ帯域幅が減り、テクスチャのキャッシュ効率が高まり、画質が向上します。Qualcomm Adreno GPU を使用しているデバイスの場合、[Non-Base Level Textures] カウンタの割合が平均 10% 未満の場合、mipmap が不十分である可能性があります。

単一フレームに対する非ベースレベルのテクスチャ(平均値は 9.2%)
図 2. 単一フレームに対する非ベースレベルのテクスチャ、平均値は 9.2%

もう 1 つの考慮事項は、異方性フィルタリングの使用です。これは、Qualcomm Adreno GPU の [異方性フィルタリング率] カウンタで示され、異方性フィルタリングされたテクセルの割合を示します。これにより、一部のゲームの画質が向上する可能性がありますが、非常にコストが高くなることもあるため、GPU のパフォーマンス コストと比較検討する必要があります。

1 フレームでフィルタされた異方性の割合(平均値は 10.8%)
図 3. 1 フレームでフィルタされた異方性の割合(平均値は 10.8%)

より具体的な問題を診断する最善の方法は、フレーム プロファイル トレースを取得してテクスチャ アセットを分析することです。