Arm Maliオフラインコンパイラでシェーダーパフォーマンスを最適化する方法
目次:
- はじめに
- Mali Offline Compilerとは
- Mali Offline Compilerの実行方法
- シェーダープログラムの概要
- シェーダーパフォーマンスの予測
- ワークレジスタの使用削減
- 変数精度の削減
- スタックメモリへのスピリング
- 算術演算の精度選択
- 機能ユニットごとのサイクルコスト
- シェーダープロパティの最適化
- レポートのエクスポートと使用
マリ オフライン コンパイラでシェーダーパフォーマンスを最適化する方法 🚀
マリ オフライン コンパイラは、シェーダープログラムの静的解析ツールであり、デバイスに接続する必要はありません。このツールを使用することで、アクセス権限のないデバイスの予想されるパフォーマンスを予測することができます。
1. はじめに
ゲーム内で敵兵士が死亡した際に発生するディゾルブ効果を担当するフラグメントシェーダープログラムがあります。このシェーダープログラムを解析するために、マリ オフライン コンパイラを使用します。
2. Mali Offline Compilerとは
Mali Offline Compilerは、Mali GPU上でのシェーダーパフォーマンスを予測するための静的解析ツールです。デバイスに接続する必要はなく、コマンドラインから実行することができます。
3. Mali Offline Compilerの実行方法
マリ オフライン コンパイラを実行するためには、コマンドラインから特定のコマンド、シェーダープログラム、および解析対象のGPUを指定する必要があります。例えば、マリ-G72という一般的なBifrost GPUを使用して解析を行う場合、以下のようなコマンドを実行します。
malioc --shader-program fragment_shader.glsl --gpu Mali-G72
4. シェーダープログラムの概要
次に、解析対象のフラグメントシェーダープログラムを見てみましょう。このシェーダープログラムは、ゲーム内の敵兵士が死亡した際に発生するディゾルブ効果を担当しています。
// フラグメントシェーダープログラムのコード
5. シェーダーパフォーマンスの予測
レポートの最初の部分では、シェーダーの情報と実行の設定に関する情報が提供されます。GPUのアーキテクチャやドライバのバージョン、解析対象のシェーダータイプなどの情報が表示されます。
また、シェーダーが使用するワークレジスタの数や変数の精度、スタックメモリへのスピリングなどの情報も含まれています。特にワークレジスタの使用削減や変数精度の削減は、パフォーマンス向上に寄与することがあります。
6. ワークレジスタの使用削減
ワークレジスタの使用削減は、シェーダーのスレッドの同時実行数を増やすことができます。これにより、GPUの利用率を向上させることができます。ワークレジスタの使用削減のためには、変数の精度を高p(32ビット)からmediump(16ビット)に減らすことが有効です。
7. 変数精度の削減
ValhallとBifrostのGPUでは、変数がスタックメモリにスピルされるかどうか、スピルされる場合のスレッドごとのバイト数などを確認することができます。スタックメモリへのスピリングは、GPUの負荷が高くなる原因となります。変数の精度を減らす、変数のライブ範囲を短くする、またはシェーダープログラムをシンプルにするなどの方法で、スタックメモリへのスピリングを削減することができます。
8. 算術演算の精度選択
16ビット以下の精度で行われる算術演算の割合を確認することで、シェーダープログラムの最適化のヒントを得ることができます。16ビット精度は、32ビット精度のhighpに比べて2倍高速です。この情報を基に、32ビット精度のhighpからmediumpに精度を下げることで、パフォーマンスを向上させることができます。
9. 機能ユニットごとのサイクルコスト
Maliシェーダーコアの各機能ユニットのサイクルコストの分解も報告書に含まれています。特に算術ユニットのサイクルコストが高い場合、演算の回数や精度を最適化することで、パフォーマンスを向上させることができます。
10. シェーダープロパティの最適化
シェーダープロパティのセクションでは、シェーダーの実行パフォーマンスに影響を与える言語機能の使用状況が示されます。例えば、uniformな計算は、描画時にCPUで実行されるべきであり、シェーダーコード内で実行する必要はありません。
また、シェーダープログラム内でフラグメントカバレッジマスクを変更する場合は、late ZSアップデートを使用する必要があります。しかし、可能な限りdiscard文やalpha-to-coverageの使用を最小限に抑えるべきです。
11. レポートのエクスポートと使用
Mali Offline Compilerのレポートは、ファイルとしてエクスポートすることもできます。また、JSON形式でエクスポートすることで、継続的インテグレーション環境でのシェーダーパフォーマンスの監視や解析も可能です。
各セクションの詳細な説明と具体的な最適化方法については、公式のドキュメントを参照してください。
よくある質問と回答
Q: Mali Offline Compilerはどのように使われますか?
A: Mali Offline Compilerは、シェーダープログラムの静的解析を行い、パフォーマンスの予測をするために使用されます。
Q: ワークレジスタの使用削減の影響はありますか?
A: ワークレジスタの使用削減は、シェーダーの同時実行数を増やすことができます。これにより、GPUの利用率を向上させることができます。
Q: スタックメモリへのスピリングを削減する方法はありますか?
A: スタックメモリへのスピリングを削減するためには、変数の精度を減らす、ライブ範囲を短くする、シェーダープログラムをシンプルにするなどの方法があります。
リソース: