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

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

Qualcomm Adreno のカウンタ

Qualcomm Adreno GPU を搭載したデバイスでは、次のようなカウンタが注目されます。

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

ARM Mali のカウンタ

ARM Mali GPU を搭載したデバイスでは、次のようなカウンタが注目されます。

カウンタ 説明
外部メモリからのテクスチャ読み取りビート シェーダー コアで平均化された、テクスチャ ユニットによる外部メモリからのデータビートの読み取り。
L2 キャッシュからのテクスチャ読み取りビート シェーダー コアで平均化された、テクスチャ ユニットによる L2 キャッシュからのデータビートの読み取り。
[詳細]

読み取りビートの平均値から全体の帯域幅を計算するには、カウンタの値にバス幅(通常は 16 バイト)とシェーダー コアの合計数を掛けます。

カウンタの分析

これらのカウンタの動作を測定するには、1 つの GPU フレームの平均帯域幅とピーク帯域幅を測定し、GPU 使用率の連続したブロックで区切ります。

単一フレームのテクスチャ メモリ読み取り帯域幅。平均値は 565 MBps、ピーク値は 2.30 GBps
図 1. 1 フレームのテクスチャ メモリ読み取り帯域幅。平均値は 565 MB/秒、ピーク値は 2.30 GB/秒

テクスチャ メモリ読み取り帯域幅の平均値は 1 GB/秒以下、ピーク帯域幅は 3 GB/秒以下にすることをおすすめします。また、テクスチャ L1 キャッシュミスは 10% 以下にする必要があります。帯域幅または L1 キャッシュの値が高い場合は、次のようなテクスチャのより深い問題を示している可能性があります。

  • テクスチャが大きすぎる __: テクスチャが大きいと、パッケージ サイズが膨らみ、コストが高くなり、キャッシュ効率が低下する可能性があります。
  • テクスチャが圧縮されていない __: Android スマートフォンはすべて、ETC1 または ASTC のいずれかのテクスチャ圧縮をサポートしています。テクスチャを圧縮して、パッケージ サイズとテクスチャ帯域幅を削減する必要があります。
  • その他: 2 の累乗のテクスチャ、mipmap、異方性フィルタリングなど、さまざまなテクスチャに関する問題が考えられます。これらの問題の一部は、後述のようにシステム プロファイルから確認できますが、より詳細な調査が必要になる場合もあります。

フリーカメラを備えた 3D ゲームの場合、テクスチャ アセットは mipmap を使用する必要があります。これにより、カメラから離れたオブジェクトのメモリ帯域幅が減少し、テクスチャ キャッシュの効率が向上し、画質が向上します。Qualcomm Adreno GPU を搭載したデバイスの場合、% 非ベースレベル テクスチャ カウンタが平均で 10% 未満の場合は、mipmap が不十分であることを示している可能性があります。

単一フレームの非ベースレベルのテクスチャ。平均値は 9.2%
図 2. 1 フレームの非ベースレベル テクスチャ。平均値は 9.2%

もう 1 つ考慮すべき点は、異方性フィルタリングの使用です。これは、Qualcomm Adreno GPU の % 異方性フィルタリング カウンタで、異方性フィルタリングされたテクセルの割合として表されます。これにより、一部のゲームでは画質が向上する可能性がありますが、コストが非常に高くなる可能性もあります。そのため、GPU パフォーマンスのコストと照らし合わせて使用を検討する必要があります。

単一フレームで異方性フィルタリングされた割合。平均値は 10.8%
図 3. 1 フレームの異方性フィルタリングの割合。平均値は 10.8%

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