Freigeben über


Ausführen der profilgesteuerten Optimierung auf Apps der universellen Windows-Plattform

Dieses Thema enthält eine schrittweise Anleitung zum Anwenden von Profile Guided Optimization (PGO) auf UWP-Apps (Universelle Windows-Plattform). Nicht alle Für Desktop-Apps verfügbaren Schritte sind für UWP-Apps verfügbar. Daher ist unser Ziel, den Prozess zu erläutern, der erforderlich ist, um PGO zu integrieren, um die Optimierung für UWP-Entwickler zu vereinfachen und barrierefreier zu machen.

Im Folgenden finden Sie eine grundlegende Anleitung zur Anwendung von PGO auf die DirectX 11-Standard-App-Vorlage (UWP) mithilfe von Visual Studio 2015 Update 3.

Die Screenshots in diesem Leitfaden basieren auf dem folgenden neuen Projekt: Screenshot mit dem Dialogfeld

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

  1. Legen Sie die Lösungskonfiguration auf Release fest, oder wählen Sie eine Lösungskonfiguration aus, in der Sie optimierten Code generieren, der für die Freigabe vorgesehen ist. Obwohl Sie PGO theoretisch auf einem Debugbuild ausführen könnten, wäre es ineffektiv, PGO zu verwenden, um einen andernfalls nicht optimierten Build zu optimieren.

App1-Fenster

  1. Überprüfen Sie in den Eigenschaften Ihres Projekts (Eigenschaften>C/C++>Optimierung), dass Sie mit dem /GL-Flag für die Ganzprogramoptimierung kompilieren (dies kann bereits von Ihrer Konfiguration festgelegt sein).

Optimierung des gesamten Programms

  1. Gehen Sie zu Ihren Linkereigenschaften (Eigenschaften>Linker>Optimierung) und setzen Sie die Einstellung für die Codegenerierung zur Linkzeit auf Profilgeführte Optimierung - Instrument (LTCG:PGInstrument).

Link-Zeitcode-Erzeugung

  1. Wählen Sie Build Solutionund dann Deploy Solutionaus.

Screenshot mit der Dropdownliste

Sie können sicherstellen, dass alles ordnungsgemäß funktioniert hat, indem Sie den Build-Ausgabeort überprüfen und feststellen, ob eine .pgd-Datei generiert wurde. In diesem Beispielfall bedeutete dies, dass die folgende Datei zusammen mit der Buildausgabe generiert wurde:

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

Standardmäßig hat die .pgd-Datei denselben Namen wie die ausführbare Datei. Sie können auch den Namen der erzeugten PGD-Datei ändern, indem Sie die Linker-Option Profilgesteuerte Datenbank ändern.

  1. Navigieren Sie zu Ihrem Visual Studio VC-Binärverzeichnis (standardmäßig sieht dies wie folgt C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\binaus). Kopieren Sie pgort140.dllfür x86 ausführbare Dateien ; für x64 ausführbare Dateien, kopieren Sie die x64-Version von amd64\pgort140.dll. Fügen Sie die entsprechende Version von pgort140.dll in 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 eines Datei-Explorer-Fensters mit dem Inhalt des AppX-Ordners.

  1. Führen Sie die App entweder über das Startmenü oder über das Visual Studio Debug Menü mit der Option "Ohne Debuggen starten" aus.

Screenshot der Dropdownliste

  1. Der jetzt ausgeführte Build wird instrumentiert und generiert gerade PGO-Daten. An diesem Punkt sollten Sie die Anwendung über einige der am häufigsten verwendeten Szenarien ausführen, die Sie optimieren möchten. Nachdem das Programm die beabsichtigten Szenarien durchlaufen hat, suchen Sie das pgosweep.exe Tool im selben Ordner, in dem Sie die entsprechende Version gefunden pgort140.dllhaben. Alternativ kann eine Native Tools-Eingabeaufforderung in Visual Studio (x86/x64) bereits die entsprechende Version im Pfad enthalten. Führen Sie zum Sammeln der PGO-Daten den folgenden Befehl aus, während die Anwendung noch ausgeführt wird, um eine .pgc-Datei zu generieren, die die Profilerstellungsdaten enthält.

pgosweep.exe <executable name> <output file>

Sie können sich auch die pgosweep.exe-Hilfe (pgosweep.exe /help) ansehen, um andere optionale Argumente zu erfahren, mit denen die Art und Weise gesteuert werden kann, wie PGO-Daten gesammelt werden.

Es empfiehlt sich, die .pgc-Dateien in den Build-Ordner zu exportieren, wo sich die .pgd-Datei befindet, und die Dateien als <PGDName>!<RunIdentifier>.pgczu benennen. In diesem Beispiel bedeutet dies Folgendes:

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

Weitere Zusammenführungen könnten auch App1!CoreScenario.pgc, App1!UseCase5.pgcusw. sein. Wenn die .pgc-Dateien so benannt sind und sich im Ausgabeverzeichnis des Builds neben den .pgd-Dateien befinden, werden sie beim Linken in Schritt 9 automatisch zusammengeführt.

  1. OPTIONAL: Standardmäßig werden alle .pgc-Dateien, wie in Schritt 7 angegeben benannt und neben der .pgd platziert, beim Verknüpfen zusammengeführt und dabei gleich gewichtet. Sie können jedoch auch mehr Kontrolle darüber haben, wie bestimmte Läufe gewichtet werden. Zu diesem Zweck verwenden Sie das Tool pgomgr.exe, das sich ebenfalls im selben Ordner befindet, in dem Sie zuerst die Kopie von pgort140.dllgefunden haben. Um zum Beispiel den Lauf CoreScenario mit der dreifachen Priorität anderer Ausführungsläufe zusammenzuführen, kann ich den folgenden Befehl verwenden:
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 entweder neben Ihrer .pgd abgelegt oder manuell zusammengeführt haben (Schritt 8), können wir nun den Linker verwenden, um den final optimierten Build zu erstellen. Kehren Sie zu Ihren Linkereigenschaften zurück (Eigenschaften>Linker>Optimierung), und legen Sie Linkzeit-Codegenerierung auf Profilgesteuerte Optimierung - Optimierung (LTCG:PGOptimize) fest, und stellen Sie sicher, dass Profilgesteuerte Datenbank auf die .pgd verweist, die Sie verwenden möchten (wenn Sie dies nicht geändert haben, sollte alles in Ordnung sein).

Screenshot des Dialogfelds „Eigenschaftenseiten der App 1“, das die Konfigurationseigenschaften zeigt, wobei > Linker > Optimierung ausgewählt ist, sowie die Option „Linkzeit-Codegenerierung“ und „profilgesteuerte Optimierung“ – die Optimierungsoptionen L T C G : P G sind hervorgehoben.

  1. Nachdem das Projekt erstellt wurde, ruft der Linker pgomgr.exe auf, um alle <PGDName>!*.pgc Dateien mit der Standardgewichtung 1 zusammenzuführen, und die resultierende Anwendung wird basierend auf den Profilerstellungsdaten optimiert.

Siehe auch