Ausführung der Profile Guided Optimization auf Universal Windows Platform-Apps

Dieses Thema enthält eine schrittweise Anleitung zum Anwenden von Profile Guided Optimization (PGO) auf Universal Windows Platform- (UWP) Apps. Nicht alle der für Desktop-Apps verfügbaren Schritte sind für UWP-Apps verfügbar. Aus diesem Grund besteht das Ziel darin, den Prozess zu erläutern, der zur Integration von PGO erforderlich ist, um die Optimierung für UWP-Entwickler*innen einfacher und zugänglicher zu machen.

Im folgenden finden eine grundlegende exemplarische Vorgehensweise für die Anwendung von PGO für die Standard-DirectX 11-App (UWP)-Vorlage mit Visual Studio 2015 Update 3.

Die Screenshots in dieser Anleitung basieren auf dem folgenden neuen Projekt: Screenshot showing the New Project dialog box showing Installed > Templates > Visual C plus plus selected and the Direct 11 App option highlighted.

So wenden Sie PGO auf die DirectX 11-App-Vorlage an:

  1. Legen Sie die Lösungskonfiguration auf Freigabe fest, oder wählen Sie eine Lösungskonfiguration, in der Sie zur Freigabe bestimmten optimierten Code generieren. Zwar können Sie PGO theoretisch auf einem Debug-Build ausführen, es wäre jedoch ineffektiv, PGO für die Optimierung eines ansonsten nicht optimierten Builds zu verwenden.

App1 window

  1. Überprüfen Sie in den Eigenschaften ihres Projekts (Eigenschaften>C/C++>Optimierung), ob Sie mit dem /GL-Flag für Optimierung des ganzen Programms arbeiten (dies ist möglicherweise bereits durch Ihre Konfiguration festgelegt).

Whole Program Optimization

  1. Gehen Sie zu Ihren Linker-Eigenschaften (Eigenschaften>Linker>Optimierung), und setzen Sie Link-Zeitcode-Generierung auf Profilgeführte Optimierung - Instrument (LTCG:PGInstrument) .

Link Time Code Generation

  1. Wählen Sie Projektmappe, und wählen Sie dann Projektmappe bereitstellen.

Screenshot showing the Build dropdown list with red arrows pointing to the Build Solution and Deploy Solution options.

Sie können sich vergewissern, dass alles korrekt funktioniert hat, indem Sie den Ausgabespeicherort des Builds betrachten und prüfen, ob eine.pgd-Datei generiert wurde. In diesem Beispielfall bedeutet dies, dass die folgenden Datei zusammen mit der Build-Ausgabe generiert wurde.

C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1.pgd

Standardmäßig hat die PGD-Datei den gleichen Namen wie die .exe-Datei. Sie können den Namen der generierten .pgd-Datei ändern, indem Sie die Linker-Option Profilegeführte Datenbank ändern.

  1. Navigieren Sie zu Ihrem Visual Studio-VC-Binärdateien-Verzeichnis (standardmäßig sieht dies wie folgt aus C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin). Kopieren Sie für x86-.exe-Dateien pgort140.dll; für x64-.exe-Dateien die x64-Version von amd64\pgort140.dll. Fügen Sie die entsprechende Version von pgort140.dllin das Stammverzeichnis des bereitgestellten Pakets ein. Für dieses Beispiel lautet der Pfad:

C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\AppX\

Dieser Schritt ist erforderlich, da UWP-Apps nur Bibliotheken laden können, die in ihrem Paket vorhanden sind.

Screenshot of a File Explorer window showing the contents of the AppX folder.

  1. Führen Sie die App aus dem Menü Start-Menü oder aus dem Visual Studio Debug-Menü mit der Option Starten ohne Debugging.

Screenshot showing the Debug dropdown list with he Start Without Debugging option highlighted.

  1. Der Build, der jetzt ausgeführt wird, ist instrumentiert und generiert PGO Daten. An dieser Stelle sollten Sie die Anwendung mit einem der üblichsten Szenarien ausführen, das Sie optimieren möchten. Nach Ausführung des Programms mit den beabsichtigten Szenarien finden Sie das pgosweep.exe-Tool im selben Ordner, in dem Sie die entsprechende Version von pgort140.dll gefunden haben. Alternativ hat eine native Visual Studio (x86/x64)-Eingabeaufforderung die korrekte Version bereits in ihrem Pfad. Um die PGO Daten zu erfassen, führen Sie den folgenden Befehl durch, während die Anwendung noch läuft, um eine .pgc-Datei zu erstellen, die die Profilierungsdaten enthält:

pgosweep.exe <executable name> <output file>

Sie können auch die pgosweep.exe-Hilfe konsultieren (pgosweep.exe /help), um andere optionale Argumente für die Steuerung der Erfassung von PGO-Daten zu finden.

Es ist sinnvoll, die .pgc-Dateien an dem Build-Speicherort auszugeben, an dem sich die .pgd-Datei befindet, und die Dateien als <PGDName>!<RunIdentifier>.pgc zu bezeichnen. In diesem Beispiel bedeutet dies:

pgosweep.exe App1.exe "C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1!1.pgc"

Weitere Erfassungen können auch App1!CoreScenario.pgc, App1!UseCase5.pgc usw. sein. Wenn die .pgc-Dateien auf diese Weise benannt werden und sich zusammen mit der .pgd-Datei am Build-Speicherort befinden, werden Sie bei der Verknüpfung in Schritt 9 automatisch verknüpft.

  1. OPTIONAL: Standardmäßig werden alle .pgc-Dateien, die wie in Schritt 7 angegeben benannt und neben der .pgd-Datei abgelegt sind, bei der Verknüpfung zusammengeführt und gleich gewichtet, Sie können jedoch weiter steuern, wie bestimmte Durchläufe gewichtet werden. Zu diesem Zweck verwenden Sie das pgomgr.exe-Tool, das sich im selben Ordner befindet, in dem Sie zuerst die Kopie von pgort140.dll gefunden haben. Um beispielsweise den CoreScenario-Durchlauf mit der dreifachen Priorität anderer Durchläufe zusammenzuführen, kann der folgende Befehl verwendet werden:
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. Nachdem Sie eine oder mehrere .pgc-Dateien generiert und sie entweder neben Ihre .pgd-Datei gesetzt oder manuell zusammengeführt haben (Schritt 8), können Sie mit dem Linker den abschließenden optimierten Build erstellen. Wechseln Sie zurück zu Ihren Linker-Eigenschaften (Eigenschaften>Linker>Optimierung) und setzen Sie Link-Zeitcode-Generierung auf Profilgeführte Optimierung - Optimierung (LTCG: PGOPTIMIZE) ; stellen Sie sicher, dass Profilgeführte Datenbank auf die .pgd-Datei verweist, die Sie verwenden möchten (wenn Sie dies nicht geändert haben, sollte alles in Ordnung sein).

Screenshot of the App 1 Property Pages dialog box showing Configuration Properties > Linker > Optimization selected with the Link Time Code Generation option and Profile Guided Optimization - Optimization L T C G : P G Optimize options highlighted.

  1. Nachdem das Projekt erstellt wurde, ruft der Linker pgomgr.exe zur Zusammenführung aller <PGDName>!*.pgc-Datei in die .pgd-Datei mit dem Standard-Gewicht 1 auf, und die resultierende Anwendung wird auf der Grundlage der Profilierungsdaten optimiert.

Siehe auch