このトピックでは、ユニバーサル Windows プラットフォーム (UWP) アプリにプロファイル ガイド付き最適化 (PGO) を適用するための詳細なガイドを提供します。 デスクトップ アプリで使用できるすべての手順が UWP アプリで使用できるわけではないため、PGO を組み込むために必要なプロセスを説明して、UWP 開発者が最適化を容易にし、アクセスしやすくすることです。
Visual Studio 2015 Update 3 を使用して既定の DirectX 11 アプリ (UWP) テンプレートに PGO を適用する基本的なチュートリアルを次に示します。
このガイド全体のスクリーンショットは、次の新しいプロジェクトに基づいています。
DirectX 11 アプリ テンプレートに PGO を適用するには:
- ソリューション構成を [リリース
に設定するか、リリース用に最適化されたコードを生成するソリューション構成を選択します。 理論的にはデバッグ ビルドで PGO を実行できますが、PGO を使用して最適化されていないビルドを最適化するのは効果がありません。
- プロジェクトのプロパティ (Properties>C/C++>Optimization) で、プログラム全体の最適化 の /GL フラグを使用してビルドしていることを確認します (これは構成によって既に設定されている可能性があります)。
- リンカー プロパティ (
リンカー 最適化 プロパティ) に移動し、リンク時間コード生成 を プロファイルガイド付き最適化 - インストルメント (LTCG:PGInstrument) に設定します。
- [ソリューション
ビルド] を選択し、[ソリューション 展開] を選択します。
ビルド出力の場所を確認し、.pgd ファイルが生成されたことを確認することで、すべてが正常に機能していることを再確認できます。 この例では、ビルド出力と共に次のファイルが生成されたことを意味します。
C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1.pgd
既定では、.pgd ファイルは実行可能ファイルと同じ名前になります。 また、Profile Guided Database リンカー オプションを変更することによって生成される .pgd ファイルの名前を変更することもできます。
- Visual Studio VC バイナリ ディレクトリに移動します (既定では、これは
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
のようになります)。 x86 実行可能ファイルの場合は、pgort140.dll
コピーします。x64 実行可能ファイルの場合は、amd64\pgort140.dll
から x64 バージョンをコピーします。 展開されたパッケージのルートに適切なバージョンのpgort140.dll
を貼り付けます。 このサンプルのパスは次のとおりです。
C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\AppX\
UWP アプリはパッケージ内に存在するライブラリのみを読み込むことができるため、この手順が必要です。
- [スタート] メニューから、または Visual Studio デバッグ メニューから、[デバッグなしで開始] オプションを使用してアプリ 実行します。
- 現在実行中のビルドがインストルメント化され、PGO データが生成されます。 この時点で、最適化しようとしている最も一般的なシナリオのいくつかを通してアプリケーションを実行する必要があります。 プログラムが目的のシナリオを実行したら、適切なバージョンの
pgort140.dll
が見つかったのと同じフォルダーにある pgosweep.exe ツールを見つけます。 または、Visual Studio (x86/x64) Native Tools コマンド プロンプトのパスに適切なバージョンが既に設定されています。 PGO データを収集するには、アプリケーションの実行中に次のコマンドを実行して、プロファイル データを含む .pgc ファイルを生成します。
pgosweep.exe <executable name> <output file>
また、pgosweep.exe ヘルプ (pgosweep.exe /help
) を参照して、PGO データの収集方法を制御するためのその他の省略可能な引数を表示することもできます。
.pgd が配置されているビルドの場所に .pgc ファイルを出力し、ファイルに <PGDName>!<RunIdentifier>.pgc
名前を付けるのもお勧めします。 この例では、次の意味です。
pgosweep.exe App1.exe "C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1!1.pgc"
さらに、App1!CoreScenario.pgc
、App1!UseCase5.pgc
などの収集を行うこともできます。.pgc ファイルがこのように命名され、.pgd と共にビルド出力の場所に配置されている場合、手順9でリンクするときに自動的にマージされます。
- 省略可能: 既定では、手順 7 で指定され、.pgd の横に配置された .pgc ファイルはすべてリンク時にマージされ、均等に重み付けされますが、特定の実行の重み付け方法をより詳細に制御することもできます。 これを行うには、最初に のコピーを見つけたのと同じフォルダーにある
pgort140.dll
ツールを使用します。 たとえば、CoreScenario
実行を他の実行の優先度の 3 倍にマージするには、次のコマンドを使用できます。
pgomgr.exe -merge:3 "C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1!CoreScenario.pgc" "C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1.pgd"
- 1 つ以上の .pgc ファイルを生成し、それらを .pgd と一緒に配置するか、手動でマージした後 (手順 8)、リンカーを使用して最終的な最適化されたビルドを作成できるようになりました。 リンカー プロパティ (
プロパティ リンカー 最適化 ) に戻り、リンク時間コード生成を プロファイルガイド付き最適化 - 最適化 (LTCG:PGOptimize) に設定し、使用するプロファイルガイド付きデータベース が .pgd を指していることを確認します (これを変更していない場合は、 すべて順に並べ替える必要があります)。
- プロジェクトがビルドされると、リンカーは pgomgr.exe を呼び出して、既定の重み 1 で
<PGDName>!*.pgc
ファイルを .pgd にマージし、結果のアプリケーションはプロファイリング データに基づいて最適化されます。