プロファイルに基づく最適化のサポートは AGDE バージョン 22.2.71 で導入されました。
PGO 設定の場所を確認する
ソリューション エクスプローラーからプロジェクト設定を開きます。
図 1: Visual Studio のソリューション エクスプローラー ウィンドウ
[プラットフォーム] が Android 構成(Android-arm64-v8a など)に設定されていることを確認します。
左側のパネルで、[構成プロパティ] > [General] を選択し、[PGO] というプロパティ グループを探します。
図 2: プロジェクト プロパティ ダイアログ
プロジェクトで PGO 計測ビルドを有効にする
プロジェクトに「Instrumented」という新しい構成を追加します。これは、開発中にテストに使用する構成に基づいており、この構成は従来の最適化されたビルドです(追加のデバッグ機能はコンパイラの最適化設定を維持している限り引き続き有効にできます)。
プロパティ ページ ダイアログで [構成マネージャー...] をクリックします。
図 3: 構成マネージャー ダイアログ
構成マネージャー ダイアログで [アクティブ ソリューション構成] プルダウンを選択し、[<新規作成…>] を選択します。
図 4: 新しいビルド構成を作成する
さらに新しい「PGO-Instrumented」構成を作成します。
図 5: [新しいソリューション構成] ダイアログ
PGO 計測モードでのビルドを有効にして、ゲームのプロファイルを生成できるようにするには、[Profile-Guided Optimization Mode] 設定のオプションのリストから [Instrumented] を選択します。
図 6: [PGO] 設定がハイライト表示されているプロジェクト プロパティ ダイアログ
[Profile Guided Optimization Profiles] に、未加工の出力プロファイル データ ファイルを Android デバイスに書き込むフォルダのパスを入力します。通常、この値は /data/data/<package
name>/cache/
のようになります。ここで、<package name>
は APK の完全なパッケージ名です(例: com.google.sample.tunnel)。
この仕組みの詳細については、Clang のドキュメントをご覧ください。
PGO 計測プロファイル データをデバイスに書き込む
通常、PGO データは、プロセスの終了時に PGO 計測システムがデバイスに書き込みます。Android の場合、アプリは終了せず、常に停止されます。したがって、デフォルトの「ディスクへの書き込み」機能はトリガーされず、アプリが PGO データを明示的に書き込む必要があります。
アプリは __llvm_profile_write_file
を明示的に呼び出して、プロファイル データを書き出す必要があります。このシンボルは、PGO 計測ビルドをビルドしている場合にのみ使用できるため、__llvm_profile_write_file
を前方宣言する際に次のパターンを使用することをおすすめします。
#ifdef PGO_INSTRUMENT
extern "C" int __llvm_profile_write_file(void);
#else
extern "C" int __llvm_profile_write_file(void) { return 0; }
#endif
この関数を呼び出すと、先ほど指定したフォルダにプロファイル データが書き込まれます。
プロファイル実行を完了する
プロファイルを生成するには、PGO 計測でビルドされた APK をターゲット デバイスで実行します。十分にコードを実行してから、__llvm_profile_write_file
関数の呼び出しをトリガーすると、アプリがプロファイル データをストレージに書き込みます。
この時点で、コンパイラが使用するプロファイルをデバイスからコピーします。
コンパイラが使用するプロファイル データを準備する
単独で使用する場合、Android NDK に Clang/LLVM の一部として同梱されているコマンドライン ツール llvm-profdata
を使用して、コンパイラがプロファイルに基づくビルドの最適化を行う際に使用するプロファイル データ ファイルを準備します。
この手順は、AGDE が自動的に行います。具体的には、プロジェクトに追加されたプロファイル データ ファイルをすべてマージし、プロジェクト プロパティ ページの [Profile-Guided Optimization Mode] 設定を [Optimized] に設定します。
プロファイルに基づく最適化を有効にしてプロジェクトをビルドする
プロファイルをキャプチャしてプロジェクトに追加したので、コンパイラはそのデータを使用してビルドの最適化を微調整できるようになりました。
PGO 最適化ビルドの新しいプロジェクト構成を作成して、必要なときにだけ、このモードでビルドするようにします。
図 7: 新しい PGO-Optimized ビルド構成を作成する
プロジェクト プロパティ ページの [Profile-Guided Optimization Mode] 設定を [Optimized] に設定します。
図 8: PGO 最適化モードを [Optimized] に設定する
デバイスからファイルをコピーして、ソリューション エクスプローラーでプロジェクトに追加します。これらのプロファイル データ ファイルは、次回 PGO 最適化構成をビルドする際にコンパイラが取得し、コードの最適化方法を調整するために使用します。
ADB を使用してデバイスから、または Android Device Explorer を使用して、プロファイル データ ファイルをプロジェクトにコピーできます。
AGDE の外部でプロファイルに基づく最適化を使用する
AGDE でサポートされていないビルドシステムを使用している場合は、ビルドを直接編集する必要があります。Clang の
ドキュメント
必要なスイッチ(-fprofile-generate
)について説明し、
-fprofile-use
。
ゲームにミドルウェア エンジンを使用している場合は、エンジンのドキュメントを参照し、PGO を有効にする方法を確認してください(サポートされている場合)。