メインコンテンツへスキップ
このトピックでは、XBOX Series X Dev Kitまたは XBOX One 開発キット上でデプロイおよび実行されるゲームに対して、プロファイル ガイド付き最適化 (PGO) を使用する方法について説明します。PGO は、重要またはパフォーマンス重視のユーザー シナリオを実行中に収集されたプロファイリング データを使用して、タイトルの最適化バージョンをビルドするランタイム コンパイラ最適化技術です。 プロファイル ガイド付き最適化は、タイトルが小売環境でどのように使用される可能性があるかに基づくため、従来の静的最適化に対して大きな利点があります。PGO は、一般的なユーザー シナリオに対応するコード パスでは速度を優先し、一般的でないユーザー シナリオではサイズを優先します。その結果、一般的なシナリオではより高速なコード、あまり頻繁に使用されないシナリオではより小さなコードが得られます。 PGO によるパフォーマンス向上はタイトルによって異なりますが、5〜30 パーセントの向上が期待できます。PGO はアプリケーションの GPU 中心の部分のパフォーマンスには対応しないことに注意してください。

計測ビルドの作成

PGO によるトレーニングは、PGO 計測を含むタイトルのビルドに依存します。PGO はこの計測を使用して、どのコード パスが最も頻繁に実行されるかを判断します。計測ビルドを作成するために必要なのは、Visual Studio で 2 つのビルド プロパティを設定するだけです。

計測ビルドを作成するには

  1. ソリューション エクスプローラー でプロジェクトを右クリックし、プロパティ を選択します。
  2. プロパティ ページ ダイアログ ボックスで、構成プロパティ および C/C++ ノードを展開します。
  3. 最適化 プロパティ ページを選択し、プログラム全体の最適化 を はい に設定します (図 1)。図 1. プログラム全体の最適化プロパティの設定。 Screenshot that shows the location of the Whole Program Optimization property
  4. リンカー ノードを展開します。
  5. 最適化 プロパティ ページを選択し、リンク時のコード生成 を プロファイル ガイド付き最適化 - 計測 に設定します (図 2)。図 2. 計測ビルド用のリンク時のコード生成プロパティの設定。 Screenshot that shows the location of the Link Time Code Generation property, set to create an instrumented build [!NOTE] この手順で説明した 2 つのプロパティは、MSBuild における /GL コンパイラ スイッチと /LTCG:PGInstrument リンカー スイッチに対応しています。
  6. 計測ビルドをビルドして XBOX コンソールにデプロイします。タイトルの実行中、PGO ファイルが図 3 のようにタイトルの一部としてデプロイされていることが確認できます。図 3. 計測ビルドによってデプロイされる PGO ファイル。 CLI directory that shows the deployed PGO files

必要なファイルのデプロイ

Microsoft Game Development Kit (GDK) には、PGO を使用するためにタイトルと一緒にデプロイする必要がある 3 つのファイルが含まれています。1 つは psapi.dll という名前で、C:\Program Files (x86)\Microsoft GDK\edition\GXDK\bin にインストールされます。他の 2 つ、pgort140.dll と pgosweep.exe は、Visual Studio のインストールに含まれています。 MSBuild を使用してタイトルをビルドしている場合、計測ビルドを作成すると、これらのファイルは自動的に Layout ディレクトリにコピーされます。 makefiles を使用してタイトルをビルドしている場合は、これら 3 つのファイルを Layout ディレクトリに手動で追加して、タイトルとともにデプロイされるようにする必要があります。Visual Studio でこれらのファイルをプロジェクトに追加し、ビルドから除外することは、ファイルを Layout ディレクトリにコピーしてタイトルとともにデプロイする便利な方法です。

Visual Studio プロジェクトに必要なファイルを追加するには

  1. ソリューション エクスプローラー でプロジェクトを右クリックし、追加、次に 既存の項目 を選択します (図 4)。図 4. プロジェクトへの PGO ファイルの追加。 Screenshot that shows how to add a file to a project
  2. C:\Program Files (x86)\Microsoft GDK\edition\GXDK\bin に移動し、PGO ファイル (psapi.dll) を選択して、追加 を選択してファイルをプロジェクトに追加します。
  3. ツールセット用の C:\Program Files (x86)\Microsoft Visual Studio\2019\edition\VC\Tools\MSVC\version\bin\Hostx64\x64\onecore または C:\Program Files\Microsoft Visual Studio\2022\edition\VC\Tools\MSVC\version\bin\Hostx64\x64\onecore に移動し、PGO ファイル (pgort140.dll と pgosweep.exe) を選択します。次に 追加 を選択してファイルをプロジェクトに追加します。
  4. ソリューション エクスプローラー で pgort140.dll を右クリックし、プロパティ を選択します。
  5. プロパティ ページ ダイアログ ボックスで、構成プロパティ ノードを展開し、全般 プロパティ ページを選択します。
  6. ビルドから除外 を はい に設定し、次に 項目の種類 を ビルドに参加しません に設定します (図 5)。図 5. ビルドからの PGO ファイルの除外。 Screenshot that shows how to exclude a PGO file from builds
これで、PGO ファイルは Layout ディレクトリにコピーされ、タイトルとともにデプロイされます。

計測ビルドでのトレーニング

トレーニングは PGO の最も重要なフェーズです。PGO で得られるパフォーマンスの向上は、アプリケーションがどれだけよくトレーニングされたかに直接的に依存します。PGO のトレーニング フェーズでは、タイトルを実行しながら一般的なパフォーマンス重視のシナリオを実行します。 一般的なパフォーマンス シナリオを実行した後、トレーニング データをキャプチャする PGO 成果物 (.pgc) ファイルの収集を開始します。pgosweep.exe を使用して .pgc ファイルを生成します (図 6)。 図 6. pgosweep.exe の実行。 Screenshot that shows pgosweep.exe being run by using the command "xbrun /x/title /O g:\pgosweep.exe Direct3DGame1.exe d:\Direct3DGame1!1.pgc" この例では、Direct3DGame1!1.pgc という名前の .pgc ファイルを作成しました。.pgc ファイルを作成する際、通常は titlename!#.pgc という規則を使用します。ここで titlename は実行中のタイトルの名前で、# は以前に作成した titlename!#.pgc ファイルの数に 1 を足した値です。 pgosweep.exe を実行するたびに個別の .pgc ファイルが作成されます。理想的には、さまざまなパフォーマンス重視のシナリオを表す多数の .pgc ファイルを作成します。.pgc ファイルの作成が完了すると、図 7 のようにコンソールの D:\ ディレクトリ (すなわち SystemScratch) で確認できます。 図 7. 連続した名前が付けられた .pgc ファイル。 Screenshot that shows a directory listing of three sequentially named .pgc files 次に、.pgc ファイルを .pgd ファイルという別の PGO 成果物にマージする必要があります。.pgd ファイルは PGO の最終フェーズである最適化においてコンパイラによって使用されます。 最適化を開始する前に、xbcp.exe を使用してコンソールから PC に .pgc ファイルをコピーします。.pgc ファイルはビルド出力ディレクトリにコピーする必要があります (図 8 では、ビルド出力ディレクトリは C:\temp\Direct3DGame1\Gaming.Xbox.XboxOne.x64\Release です)。 図 8. .pgc ファイルをビルド出力ディレクトリにコピーする。 Screenshot that shows .pgc files being copied from the console to a build output directory

最適化ビルドの作成

最適化ビルドを作成するには、リンク時のコード生成 プロパティを プロファイル ガイド付き最適化 - 更新 に設定します (図 9)。 図 9. 最適化ビルド用のリンク時のコード生成プロパティの設定。 Screenshot that shows the location of the Link Time Code Generation property, set to create an optimized build
このプロパティは MSBuild の /LTCG:PGOptimize リンカー スイッチに対応します。
タイトルを再ビルドすると、ビルド出力には図 10 のような PGO 関連のメッセージが含まれます。 図 10. ビルド出力の PGO 関連メッセージ。 Screenshot that shows an excerpt of build output that includes PGO-related messages

XBOX 向け PGO の推奨事項

前述の手順は、組み込みの Visual Studio プロジェクト プロパティを使用して、XBOX 上の Microsoft Game Development Kit (GDK) で PGO を使用するための概要を提供します。ただし、Visual C++ コンパイラは、Visual Studio 2019 および Visual Studio 2022 の Visual Studio プロジェクト プロパティが制御する /LTCG:PGInstrument、/LTCG:PGOptimize、/LTCG:PGUpdate スイッチを介した PGO の使用を非推奨としています。 推奨される置き換えは次のとおりです。
  • C/C++ コンパイラでは、/GL を使用します (先の図 1 に示すように、プログラム全体の最適化 プロパティを はい (/GL) に設定します)。
  • リンカーでは、/LTCG を使用します (図 11 に示すように、リンク時のコード生成 プロパティを リンク時のコード生成を使用する (/LTCG) に設定します)。図 11. リンク時のコード生成プロパティの設定。 Screenshot that shows the location of the Link Time Code Generation property
次に、コマンド ライン プロパティ ページの 追加オプション ボックスに次の新しいリンカー スイッチのいずれかを追加して使用します:
  • PGO プロファイルを生成するには /FASTGENPROFILE または /GENPROFILE を使用します (図 12)。これらのスイッチの詳細については、Microsoft Docs の /GENPROFILE、/FASTGENPROFILE (プロファイリング計測ビルドの生成) を参照してください。図 12. PGO プロファイルを生成するリンカー スイッチの設定。 Screenshot that shows the /FASTGENPROFILE linker switch added to the Command Line property page
  • PGO プロファイルのセットに対して最適化を行うには /USEPROFILE を使用します (図 13)。このスイッチの詳細については、Microsoft Docs の /USEPROFILE (スレッド セーフ モードでの PGO の実行) を参照してください。図 13. PGO プロファイルのセットに対して最適化を行うリンカー スイッチの設定。 Screenshot that shows the /USEPROFILE linker switch added to the Command Line property page

PGO のトラブルシューティング

実行時パフォーマンス

計測ビルドをプロファイリングする際、ツールがパフォーマンスの問題を引き起こす可能性があります。このような問題により、タイトルの制御が困難になる場合があります。/FASTGENPROFILE スイッチは、インタラクティブなゲーム セッションのプロファイリング用に計測ビルドを高速化するのに適した選択肢です。

依存関係

PGO 計測を有効にした後、タイトルが読み込まれなくなった場合、タイトルの .exe ファイルと同じフォルダーに pgort140.dll と vcruntime140.dll があることを確認してください。 pgosweep.exe の実行が失敗した場合 (通常は STATUS_DLL_NOT_FOUND エラー)、タイトルの .exe ファイルと同じフォルダーに pgort140.dll、psapi.dll、vcruntime140.dll が存在することを確認してください。 また、pgort140.dll と pgosweep.exe の x64 onecore バージョンを使用していることを確認してください。

メモリ使用量

PGO はプロファイルをキャプチャするためにメモリを使用しますが、これは利用可能なメモリの大部分を使用するタイトルにとって課題になる場合があります。PGO を正常に実行するには、xbconfig.exe の ExtraTitleMemory 設定、XMemTransferMemory 関数、またはその両方を使用する必要がある場合があります。 /LTCG:PGInstrument または /GENPROFILE の代わりに /FASTGENPROFILE を使用すると、同様の結果でメモリ フットプリントが小さくなります。 [!NOTE] 2020 年 6 月の GDK (およびその QFE) に同梱される PGO のバージョンはタイトル メモリを使用します。PGO は今後のリリースでツーリング メモリを適切に使用するように更新されます。

関連項目

プロファイル ガイド付き最適化 XBOX コンソールゲーム開発 (環境とツール)
最終更新日 2026年10月20日