Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
So wenden Sie PGO auf die DirectX 11-App-Vorlage an:
- 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.
- Ü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).
- 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).
- Wählen Sie Build Solutionund dann Deploy Solutionaus.
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.
- 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\bin
aus). Kopieren Siepgort140.dll
für x86 ausführbare Dateien ; für x64 ausführbare Dateien, kopieren Sie die x64-Version vonamd64\pgort140.dll
. Fügen Sie die entsprechende Version vonpgort140.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.
- Führen Sie die App entweder über das Startmenü oder über das Visual Studio Debug Menü mit der Option "Ohne Debuggen starten" aus.
- 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.dll
haben. 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>.pgc
zu 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.pgc
usw. 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.
- 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.dll
gefunden haben. Um zum Beispiel den LaufCoreScenario
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"
- 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).
- 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.