Exemplarische Vorgehensweise : Verwenden profilgesteuerter Optimierung
Aktualisiert: November 2007
Diese exemplarische Vorgehensweise veranschaulicht, wie die profilgesteuerte Optimierung (PGO) für unterschiedliche Szenarios verwendet wird. Diese reichen von einfachen Implementierungen, die PGO-Buildmenüs in der integrierten Entwicklungsumgebung von Visual Studio (IDE) verwenden, bis hin zu Szenarios, die benutzerdefinierte Konfigurationen erfordern. In dieser exemplarischen Vorgehensweise werden außerdem fortgeschrittene Verfahren erklärt. Hier erfahren Sie, wie Sie mithilfe der PGO-Befehlszeilentools den Prozess der Auflistung und des Zusammenführens von Profilerstellungsdaten anpassen können. Weitere Informationen finden Sie unter Profilgesteuerte Optimierungen (PGO).
Erstellen einer Anwendung mit PGO
Dieses Beispielszenario veranschaulicht, wie eine einfache Anwendung mit PGO erstellt wird.
Erstellen mit PGO in der IDE
Profilgesteuerte Optimierungen (PGO) können auf jedes systemeigene Visual C++-Projekt angewendet werden. Die folgenden Prozeduren veranschaulichen die Verwendung von PGO in einer Win32-Anwendung.
So erstellen Sie ein Win32-Projekt
Wählen Sie im Menü Datei die Option Neu aus, und klicken Sie dann auf Projekt. Das Dialogfeld Neues Projekt wird angezeigt.
Wählen Sie im Bereich Projekttypen den Knoten Visual C++ und anschließend im Bereich Vorlagen die Option Win32-Projekt aus.
Geben Sie im Feld Name den Namen PGODemo ein.
Klicken Sie auf die Schaltfläche OK. Der Win32-Anwendungs-Assistent wird angezeigt.
Behalten Sie alle Standardeinstellungen bei. Klicken Sie auf die Schaltfläche Beenden.
So erstellen Sie das PGODemo-Projekt mit PGO
Klicken Sie in der Standardsymbolleiste auf das Kombinationsfeld Projektmappenkonfiguration, und wählen Sie die Release-Konfiguration aus.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den PGODemo-Projektknoten. Wählen Sie im Kontextmenü des Projekts die Option Profilgesteuerte Optimierung und dann das Menüelement Instrumentieren aus.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den PGODemo-Projektknoten. Wählen Sie im Kontextmenü des Projekts die Option Profilgesteuerte Optimierung und dann die Option Instrumentierte Anwendung ausführen aus, um die Anwendung zu starten.
Hinweis: Sie können auch die instrumentierte Anwendung starten, indem Sie im Menü Debuggen die Option Starten oder Starten ohne Debuggen auswählen.
Wiederholen Sie Schritt 3, um die instrumentierte Anwendung für unterschiedliche Szenarios zu trainieren. Wenn eine instrumentierte Anwendung beendet wird, wird eine PGC-Datei im Ausgabeverzeichnis des Projekts erstellt, die die Profildaten für diese Ausführung enthält.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den PGODemo-Projektknoten. Wählen Sie im Kontextmenü des Projekts die Option Profilgesteuerte Optimierung und dann die Option Optimieren aus.
Erstellen mit PGO in der Befehlszeile
Angenommen, Sie möchten mit PGO-Optimierung aus den Quelldateien S1,..., Sn eine Anwendung myapp.exe erstellen. Der erste Schritt besteht darin sicherzustellen, dass Sie die Quelldateien S1,..., Sn mit der /GL-Compileroption kompilieren.
Sie müssen außerdem die Optimierungsoptionen angeben, die für Ihre Anforderungen erforderlich sind, z. B. die /O2-Option. Bitte beachten Sie, dass beim Erstellen einer Anwendung mit PGO ohne die Angabe einer Optimierungsoption (d. h. mit /Od) eine Warnung ausgelöst wird und der Compiler automatisch auf Erstellen für LTCG umschaltet. In der Befehlszeile wäre der folgende erste Schritt auszuführen:
So kompilieren Sie Quelldateien mit /GL
cl.exe /c /GL /O2 S1.cpp … Sn.cpp
link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe
Bei Schritt 2 wird ein PGO-instrumentiertes Abbild von myapp.exe erstellt und außerdem die Datei myapp.pgd. Diese Datei ist die Profildatenbankdatei, die der Compiler verwendet, um die endgültige optimierte Datei myapp.exe zu erstellen. Der Standardname der PGD-Datei ist der Name der Anwendung, und der Standardpfad ist der Ausgabepfad.
Sie können im vorherigen Schritt die Linkeroption /pgd verwenden, um den für Ihre Anwendung generierten Standardnamen für die PGD-Datei zu ändern. Sie können /pgd folgendermaßen verwenden:
So erstellen Sie ein instrumentiertes Abbild mit /LTCG:PGI und /PGD
- link /ltcg:pgi /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe
Nun können Sie die instrumentierte myapp.exe mit den Profilerstellungsszenarios trainieren. Nach dem Ausführen der Szenarios ist für jede Ausführung eine PGC-Datei vorhanden.
Hinweis: |
---|
Wenn Sie vom selben Pfad mehr als ein Abbild von myapp.exe gleichzeitig ausführen, wird für alle nur eine PGC-Datei erstellt. Diese Datei wird erst dann auf den Datenträger geschrieben, wenn alle Instanzen geschlossen wurden. |
Hinweis: |
---|
Der Standardpfad für die PGC-Dateien ist der Pfad für die ausführbare Datei. Sie können diesen durch Festlegen der Umgebungsvariablen VCPROFILE_PATH ändern, bevor Sie die Profilierungsszenarios ausführen. Bestimmen Sie also VCPROFILE_PATH=<irgendein Pfad>, und führen Sie anschließend das instrumentierte Abbild myapp.exe aus. |
Nun können Sie die die PGO-optimierte myapp.exe erstellen.
So erstellen Sie ein optimiertes Abbild mit /LTCG:PGO und /PGD
- link /ltcg:pgo /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe
Hinweis: |
---|
Bevor Sie beginnen, müssen sich alle PGC-Dateien, die während des Trainingsszenarios erstellt wurden, im selben Ordner befinden wie die Profildatenbankdatei (.PGD). |
Zusammenführen von benutzerdefinierten Profildaten
Angenommen, Sie haben zwei Hauptszenarios für Kunden in Ihrer Anwendung. Das erste Szenario ist viel wichtiger als das zweite, da es von Kunden doppelt so häufig verwendet wird.
In den folgenden Schritten wird veranschaulicht, wie Sie mithilfe der Entwicklungsumgebung von Visual Studio und der Befehlzeilentools einige Profildaten höher gewichten können, wenn Sie Daten in der PGD-Datei zusammenführen.
Zusammenführen von Profildaten in der IDE
So erstellen Sie ein Win32-Projekt
Wählen Sie im Menü Datei die Option Neu aus, und klicken Sie dann auf Projekt. Das Dialogfeld Neues Projekt wird angezeigt.
Wählen Sie im Bereich Projekttypen den Knoten Visual C++ und anschließend im Bereich Vorlagen die Option Win32-Projekt aus.
Geben Sie im Feld Name den Namen PGODemo ein.
Klicken Sie auf die Schaltfläche OK. Der Win32-Anwendungs-Assistent wird angezeigt.
Behalten Sie alle Standardeinstellungen bei. Klicken Sie auf die Schaltfläche Beenden.
So erstellen Sie das PGODemo-Projekt mit zusammengeführten Profildaten in der IDE
Klicken Sie in der Standardsymbolleiste auf das Kombinationsfeld Projektmappenkonfiguration, und wählen Sie die Release-Konfiguration aus.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt. Klicken Sie im Kontextmenü auf Profilgesteuerte Optimierung und dann auf Instrumentieren.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt. Klicken Sie im Kontextmenü auf Profilgesteuerte Optimierung und dann auf Instrumentierte Anwendung ausführen. Dadurch wird die Anwendung gestartet. Sie können die instrumentierte Anwendung auch starten, indem Sie, wie üblich, im Menü Debuggen die Option Starten oder Starten ohne Debuggen auswählen.
Wiederholen Sie Schritt 3 für jedes der beiden Kundenszenarios. Bei diesem Schritt werden zwei PGC-Dateien im Ausgabeverzeichnis erstellt: PGODemo!1.pgc und PGODemo!2.pgc.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt. Klicken Sie auf Eigenschaften. Das Dialogfeld Eigenschaftenseiten von PGODemo wird angezeigt.
Klicken Sie in Konfigurationseigenschaften auf Buildereignisse und dann auf Prälinkereignis. Geben Sie in der Befehlszeile folgenden Befehl ein:
"$(VCInstallDir)bin\pgomgr.exe" -merge:2 $(OutDir)\$(ProjectName)!1.pgc $(OutDir)\$(ProjectName).pgd
Hinweis: In diesem Schritt wird pgomgr.exe verwendet, um PGODemo!1.pgc in einem separaten Schritt zusammenzuführen, bevor der Linker gestartet wird, um die endgültige optimierte Anwendung zu erstellen. Im nächsten Schritt ruft der Linker pgomgr.exe erneut auf, um die Datei PGODemo!2.pgc zusammenzuführen, jedoch mit der Standardgewichtung 1.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt. Klicken Sie im Kontextmenü auf Profilgesteuerte Optimierung und dann auf Optimieren.
Zusammenführen von Profildaten über die Befehlszeile
Sie können die Befehlszeilentools verwenden, um benutzerdefinierte Profildaten zusammenzuführen.
So erstellen Sie zusammengeführte Profildaten über die Befehlszeile
cl.exe /c /GL /O2 S1.cpp … Sn.cpp
link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe
Mit den vorherigen zwei Schritten wird die instrumentierte Datei myapp.exe erstellt.
Durch das Trainieren der instrumentierten Datei myapp.exe mit zwei verschiedenen Szenarios werden zwei unterschiedliche PGC-Dateien erstellt: myapp!1.pgc und myapp!2.pgc.
Um dem ersten Szenario eine höhere Gewichtung zu geben, verwenden Sie pgomgr.exe wie folgt:
Pgomgr –merge:2 myapp!1.pgc myapp.pgd
Führen Sie den Verknüpfungsbefehl folgendermaßen aus, um die endgültige optimierte Anwendung zu erstellen.
link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe
Dadurch wird myapp!2.pgc mit der Standardgewichtung von 1 zusammengeführt.
PGO-Aktualisierung
In den beiden obigen Szenarios wurde die Linkeroption /ltcg:pgo verwendet, um die endgültige optimierte Anwendung zu erstellen, nachdem die instrumentierte Datei erstellt und trainiert worden war. Bei Verwendung der Option /ltcg:pgo führt der Linker einige Tests durch. Dadurch wird sichergestellt, dass die Dateien, aus denen die instrumentierte Anwendung erstellt wurde (Objektdateien, Bibliotheken usw.), nicht geändert wurden. Mit anderen Worten: Für die Option /ltcg:pgo müssen die Quelldateien, die an den Linker übergeben werden, die gleichen sein wie die, die in dem /ltcg:pgi-Schritt übergeben wurden.
Denn versehentliche Änderungen an den Quelldateien nach dem Erstellen der instrumentierten Anwendung und der PGO-Datei können die PGO-Codegenerierung und Optimierungsentscheidungen auf dramatische Weise beeinflussen.
Angenommen, nach dem Erstellen der instrumentierten Anwendung, der Profildaten und der PGO-optimierten Anwendung stellen Sie fest, dass Sie vergessen haben, die Versionsnummer der Anwendung zu aktualisieren. Oder Sie entdecken einen unbedeutenden Fehler, dessen Beseitigung nur eine winzige Korrektur erfordert, die keinen dramatischen Einfluss auf den Anwendungsverlauf hat. Für dieses Szenario gibt es die /ltcg:pgu-Option. Mit dieser Option verzichtet der Linker auf die Prüfungen, die er bei Verwenden der /ltcg:pgo-Option durchführt. Sie können Dateien bearbeiten und neu kompilieren oder sogar zwischen PGI und PGU neue Dateien zu der Anwendung hinzufügen.
In den folgenden Schritten wird erklärt, wie die /ltcg:pgu-Option in der Visual Studio-Entwicklungsumgebung bzw. mit den Befehlzeilentools verwendet wird.
Aktualisieren in der IDE
So erstellen Sie PGODemo mit /LTCG:PGU in der IDE
Klicken Sie in der Standardsymbolleiste auf das Kombinationsfeld Projektmappenkonfiguration, und wählen Sie die Release-Konfiguration aus.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt. Klicken Sie im Kontextmenü auf Profilgesteuerte Optimierung und dann auf Instrumentieren.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt. Klicken Sie im Kontextmenü auf Profilgesteuerte Optimierung und dann auf Instrumentierte Anwendung ausführen. Dadurch wird die Anwendung gestartet. Sie können die instrumentierte Anwendung auch starten, indem Sie, wie üblich, im Menü Debuggen die Option Debuggen starten oder Starten ohne Debuggen auswählen.
An dieser Stelle können Sie beliebige Änderungen an den Quelldateien vornehmen. Wie bereits oben erwähnt, können Änderungen, die das Verhalten der Anwendung dramatisch beeinflussen, zu erheblichem Leistungsabfall führen. Im Allgemeinen nehmen Sie hier nur sehr kleine Änderungen vor, z. B. kleine Fehlerkorrekturen oder Änderungen an Quelldateien.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt. Klicken Sie im Kontextmenü auf Profilgesteuerte Optimierung und dann auf Aktualisieren. Dadurch werden nur die geänderten Dateien neu kompiliert. Anschließend wird der Linker mit der /ltcg:pgu-Option anstelle von /ltcg:pgo gestartet, wodurch das Bearbeiten von Dateien zugelassen wird.
Hinweis: Für jede neue Funktion, die keine Profildaten hat, sowie für jede Funktion, deren im Trainingsschritt gesammelten Profildaten durch die Bearbeitung ungültig geworden sind, wird eine Warnung ausgegeben. Klicken Sie in der Standardsymbolleiste auf das Kombinationsfeld Projektmappenkonfiguration, und wählen Sie die Releasekonfiguration aus.
Hinweis: Wenn Sie in Schritt 5 im Projektmappen-Explorer mit der rechten Maustaste auf die geänderte Quelldatei klicken und dann auf Kompilieren, werden alle PGO-bezogenen Dateien im Ausgabeordner gelöscht, weil das Projektsystem im Falle eines Wechsels von einem PGO-Build zu einem normalen Build einen reinen Build erstellt.
Aktualisieren über die Befehlszeile
Im Folgenden sehen Sie, wie Sie mit den Befehlszeilentools die PGO-Aktualisierung ausführen.
So erstellen Sie mit /LTCG: PGU in der Befehlszeile
cl.exe /c /GL /O2 S1.cpp … Sn.cpp
link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe
Mit den vorherigen zwei Schritten wird die instrumentierte Datei myapp.exe erstellt.
Trainieren der instrumentierten myapp.exe
link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe
In Schritt 4 wird die optimierte myapp.exe erstellt. Angenommen, Sie haben einen kleinen Fehler in Sm.cpp gefunden, dann können Sie diesen korrigieren und nur Sm.cpp folgendermaßen kompilieren:
cl /c /GL /O2 Sm.cpp
Verwenden Sie anschließend /ltcg:pgu, um die optimierte Anwendung mit den alten in Schritt 3 erstellten Profildaten zu erstellen.
link /ltcg:pgu /pgd:myapp.pgd /out:myapp.exe
Benutzerdefinierte PGO-Konfigurationen
In diesem Szenario erfahren Sie, wie benutzerdefinierte PGO-Konfigurationen erstellt werden, um Projektmappen mit mehreren Projekten zu erstellen. In diesem Szenario wird der Projektmappe eine DLL hinzugefügt und mit der PGODemo-Anwendung verknüpft. Es werden zwei Konfigurationen erstellt: PGIRelease und PGORelease. Diese werden zum Erstellen der gesamten Projektmappe verwendet, anstatt mit den PGO-Menüelementen jedes Produkt einzeln zu erstellen.
So erstellen Sie benutzerdefinierte PGO-Konfigurationen
Wählen Sie im Menü Datei die Option Neu aus, und klicken Sie dann auf Projekt. Das Dialogfeld Neues Projekt wird angezeigt.
Wählen Sie im Bereich Projekttypen den Knoten Visual C++ und anschließend im Bereich Vorlagen die Option Win32-Projekt aus.
Geben Sie im Feld Name den Namen PGODemo ein.
Klicken Sie auf die Schaltfläche OK. Der Win32-Anwendungs-Assistent wird angezeigt.
Behalten Sie alle Standardeinstellungen bei. Klicken Sie auf die Schaltfläche Beenden.
Jetzt stehen Ihnen eine Projektmappe und ein Projekt mit der Bezeichnung PGODemo zur Verfügung. Erstellen Sie als Nächstes ein DLL-Projekt.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und wählen Sie Hinzufügen aus. Klicken Sie anschließend auf Neues Projekt. Das Dialogfeld Neues Projekt wird angezeigt.
Wählen Sie im Bereich Projekttypen den Knoten Visual C++ und anschließend im Bereich Vorlagen die Option Win32-Projekt aus.
Geben Sie im Feld Name den Namen PGODemoDLL ein.
Klicken Sie auf die Schaltfläche OK. Der Win32-Anwendungs-Assistent wird angezeigt.
Wählen Sie auf der Seite Anwendungseinstellungen den Typ DLL-Anwendung aus, und klicken Sie auf Fertig stellen.
Sie haben jetzt ein DLL-Projekt mit dem Namen PGODemoDLL.
Doppelklicken Sie im Projektmappen-Explorer auf das PGODemoDLL-Projekt, doppelklicken Sie auf PGODemoDLL.cpp, und fügen Sie den folgenden Code hinzu:
__declspec(dllexport) void HelloMessage(void) { MessageBox(NULL, L"hello", L"PGODemoDLL", MB_OK); }
Doppelklicken Sie im Projektmappen-Explorer auf das PGODemo-Projekt, doppelklicken Sie auf PGODemo.cpp, und fügen Sie vor der Definition der Funktion _tWinMain folgende Deklaration ein:
__declspec(dllimport) void HelloMessage(void);
Fügen Sie in _tWinMain vor der Hauptnachrichtenschleife folgenden Code ein:
HelloMessage();
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die PDODemo-Projektmappe, und klicken Sie auf Projektabhängigkeiten. Das Dialogfeld Projektabhängigkeiten wird angezeigt.
Klicken Sie auf der Seite Abhängigkeiten im Kombinationsfeld Projekte auf PGODemo. Überprüfen Sie die PGODemoDLL in der Liste Abhängigkeiten.
Danach erstellen Sie die PGIRelease-Konfiguration und die PGORelease-Konfiguration.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und klicken Sie dann auf Konfigurations-Manager. Klicken Sie auf das Kombinationsfeld Konfiguration für das PGODemo-Projekt, und klicken Sie dann auf <Neu>. Das Dialogfeld Neue Projektkonfiguration wird angezeigt.
Geben Sie im Eingabefeld Projektkonfigurationsname PGIRelease ein, und wählen Sie im Kombinationsfeld Einstellungen kopieren von die Option Release aus. Stellen Sie sicher, dass das Kontrollkästchen Neue Projektmappenkonfigurationen erstellen aktiviert ist.
Wiederholen Sie den gleichen Schritt für das PGODemoDLL-Projekt, und fügen Sie diesem Projekt die PGIRelease-Konfiguration hinzu. Stellen Sie sicher, dass das Kontrollkästchen Neue Projektmappenkonfigurationen erstellen dieses Mal deaktiviert ist.
Wiederholen Sie Schritt 16 für beide Projekte, um eine PGORelease-Konfiguration zu erstellen. Stellen Sie sicher, dass auch die Einstellungen aus der Release-Konfiguration kopiert werden. Schließen Sie das Dialogfeld Konfigurations-Manager.
Sie haben jetzt zwei Konfigurationen erstellt: PGIRelease und PGORelease.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt, und klicken Sie dann auf Eigenschaften. Wählen Sie im Kombinationsfeld Konfiguration die PGIRelease-Konfiguration aus. Klicken Sie in den Konfigurationseigenschaften auf Allgemein. Klicken Sie auf das Kombinationsfeld Komplette Programmoptimierung, und wählen Sie die Option Profilgesteuerte Optimierung (PGO) – Instrumentieren aus. Klicken Sie auf Übernehmen, um die Änderungen zu speichern.
Wählen Sie im Kombinationsfeld Konfiguration die PGORelease-Konfiguration aus. Klicken Sie in den Konfigurationseigenschaften auf Allgemein. Klicken Sie auf das Kombinationsfeld Komplette Programmoptimierung, und wählen Sie die Option Profilgesteuerte Optimierung (PGO) – Optimieren aus. Klicken Sie auf Übernehmen, um die Änderungen zu speichern.
Wiederholen Sie für das PGODemoDLL-Projekt die Schritte 18 und 19 an der PGIRelease-Konfiguration und der PGORelease-Konfiguration.
Im Folgenden ändern Sie für beide Projekte das Zwischenverzeichnis für die PGORelease-Konfiguration. Dieses Zwischenverzeichnis muss mit dem Ausgabe-Verzeichnis für die PGIRelease-Konfiguration übereinstimmen.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt, und klicken Sie dann auf Eigenschaften. Wählen Sie im Kombinationsfeld Konfiguration die PGORelease-Konfiguration aus. Klicken Sie in den Konfigurationseigenschaften auf Allgemein. Geben Sie als Zwischenverzeichnis $ (SolutionDir) PGIRelease ein. Klicken Sie auf Übernehmen, und schließen Sie das Dialogfeld.
Wiederholen Sie Schritt 21 für das PGODemoDLL-Projekt.
Nun fügen Sie den Pfad von PGODemoDLL.dll der Pfadumgebungsvariablen der PGODemo-Anwendung hinzu.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt, und klicken Sie dann auf Eigenschaften. Wählen Sie im Kombinationsfeld Konfiguration die PGIRelease-Konfiguration aus. Klicken Sie in den Konfigurationseigenschaften auf Debuggen. Geben Sie für Umgebung Folgendes ein, und klicken Sie anschließend auf Übernehmen:
path=%path%;$(SolutionDir)PGODemoDLL\PGIRelease
Wählen Sie im Kombinationsfeld Konfiguration die PGORelease-Konfiguration aus. Klicken Sie in den Konfigurationseigenschaften auf Debuggen. Geben Sie im Feld Umgebung Folgendes ein:
path=%path%;$(SolutionDir)PGODemoDLL\PGORelease
Klicken Sie anschließend auf Übernehmen und dann auf OK, um das Dialogfeld zu schließen.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt, und klicken Sie dann auf Eigenschaften. Wählen Sie im Kombinationsfeld Konfiguration die PGORelease-Konfiguration aus. Klicken Sie in den Konfigurationseigenschaften auf Linker und dann auf Optimierung. Ersetzen Sie im Eingabefeld Profilgesteuerte Datenbank $(TargetDir) durch $(IntDir)\.
Wiederholen Sie diesen Schritt für das PGODemoDLL-Projekt.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemoDLL-Projekt, und klicken Sie dann auf Eigenschaften. Wählen Sie im Kombinationsfeld Konfiguration die PGORelease-Konfiguration aus. Klicken Sie in den Konfigurationseigenschaften auf Linker und dann auf Erweitert. Ersetzen Sie im Eingabefeld Importbibliothek $(TargetDir) durch $(IntDir)\.
Klicken Sie in der Standardsymbolleiste auf das Kombinationsfeld Projektmappenkonfigurationen, und wählen Sie die PGIRelease-Konfiguration aus. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und klicken Sie auf Projektmappe erstellen.
Dadurch werden die instrumentierten Bits für beide Projekte erstellt.
Klicken Sie auf das Menü Debuggen auf Debuggen starten oder Starten ohne Debuggen. Dadurch wird PGODemo gestartet. Nach Beendigung der Anwendung werden zwei PGC-Dateien erstellt, je eine in den zwei Ausgabeordnern PGODemo\PGIRelease und PGODemoDLL\PGIRelease.
Klicken Sie in der Standardsymbolleiste auf das Kombinationsfeld Projektmappenkonfigurationen, und wählen Sie die PGORelease-Konfiguration aus. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und klicken Sie auf Projektmappe erstellen.
Sie haben nun die PGO-optimierten Abbilder in den PGORelease-Konfigurationsordnern für beide Projekte erstellt.
Benutzerdefinierte Profildatenauflistung
Standardmäßig speichert die Profildatenauflistung alle Daten, die das Verhalten der instrumentierten Anwendung von ihrem Start bis zu ihrer Beendigung beschreiben. Zur PGO gehört ein Tool mit dem Namen PGOSWEEP, mit dessen Hilfe Sie die Profildatenauflistung anpassen können. Sie können PGOSWEEP verwenden, um bei der Ausführung des Profilszenarios Profildaten für einen bestimmten Zeitraum zu sammeln.
In den folgenden Schritten wird erklärt, wie die Profildatenauflistung in der Visual Studio-Entwicklungsumgebung bzw. mit den Befehlzeilentools gesteuert wird.
So erstellen Sie ein Win32-Projekt
Wählen Sie im Menü Datei die Option Neu aus, und klicken Sie dann auf Projekt. Das Dialogfeld Neues Projekt wird angezeigt.
Wählen Sie im Bereich Projekttypen den Knoten Visual C++-Projekte und anschließend im Bereich Vorlagen die Option Win32-Projekt aus.
Geben Sie im Feld Name den Namen PGODemo ein.
Klicken Sie auf die Schaltfläche OK. Der Win32-Anwendungs-Assistent wird angezeigt.
Behalten Sie alle Standardeinstellungen bei. Klicken Sie auf die Schaltfläche Beenden.
So erstellen Sie ein instrumentiertes PGODemo-Projekt in der IDE
Klicken Sie in der Standardsymbolleiste auf das Kombinationsfeld Projektmappenkonfiguration, und wählen Sie die Release-Konfiguration aus.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt. Klicken Sie im Kontextmenü auf Profilgesteuerte Optimierung und dann auf Instrumentieren.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das PGODemo-Projekt. Klicken Sie im Kontextmenü auf Profilgesteuerte Optimierung und dann auf Instrumentierte Anwendung ausführen. Dadurch wird die Anwendung gestartet. Sie können die instrumentierte Anwendung auch starten, indem Sie, wie üblich, im Menü Debuggen die Option Debuggen starten oder Starten ohne Debuggen auswählen.
Klicken Sie im Menü Extras auf Externe Tools. Das Dialogfeld Externe Tools wird angezeigt. Klicken Sie auf Hinzufügen. Geben Sie im Eingabefeld Titel Pgosweep ein. Klicken Sie auf die Schaltfläche Durchsuchen neben dem Eingabefeld Befehl, und suchen Sie nach dem Pfad für das Tool PGOSWEEP. PGOSWEEP sollte im Ordner \VC\bin installiert sein, in dem auch Visual Studio installiert ist. Aktivieren Sie das Kontrollkästchen Zur Argumenteingabe auffordern, und klicken Sie dann auf OK, um das Dialogfeld Externe Tools zu schließen.
Klicken Sie im Menü Extras auf Pgosweep. Ein Dialogfeld wird angezeigt. Geben Sie im Eingabefeld Argumente Folgendes ein:
$(TargetPath) $(TargetDir)$(TargetName)_custom!1.pgc
, und klicken Sie auf OK.
Klicken Sie im PGODemo-Hauptfenster auf Datei und dann auf Beenden, um die Profildatenauflistung zu beenden.
In $(OutDir) finden Sie jetzt zwei PGC-Dateien. Die Datei PGODemo_custom!1.pgc wurde von PGOSWEEP erstellt und enthält die Profildaten vom Beginn der Profilausführung bis zum Aufruf von PGOSWEEP. Die zweite Datei heißt standardmäßig PGODemo!1.pgc und enthält die Profildaten ab dem Zeitpunkt nach dem Sweeping bis zum Schließen der instrumentierten Anwendung.
Hierbei ist besonders zu beachten, dass nur PGC-Dateien, deren Name dem Standard $(ProjectName)!n.PGC (wobei n eine Zahl ist) entspricht, beim Erstellen des optimierten Abbildes automatisch zusammengeführt werden. Für das Zusammenführen von PGODemo_custom!1.pgc, die im vorherigen Schritt erstellt wurde, muss ein Zwischenschritt für benutzerdefiniertes Zusammenführen eingefügt werden. (Beachten Sie hierzu das weiter oben beschriebene Szenario unter Benutzerdefinierte Profildatenauflistung.)
Mit diesen Schritten können Sie die Profildatenauflistung steuern und die Anwendung auf Grundlage ihrer wichtigsten Teile zur Laufzeit optimieren.
Auflisten von Profildaten über die Befehlszeile
Sie können die Befehlszeilentools folgendermaßen für benutzerdefinierte Profildatenauflistung verwenden.
So erstellen Sie zusammengeführte Profildaten über die Befehlszeile
Erstellen Sie die instrumentierte ausführbare Datei:
cl.exe /c /GL /O2 S1.cpp Sn.cpp link /ltcg:pgi S1.obj Sn.obj /out:myapp.exe
Führen Sie die instrumentierte Datei myapp.exe aus. Verwenden Sie während der Ausführung an der gewünschten Stelle das PGOSWEEP-Tool zu Auflistung der Profildaten:
Pgosweep myapp.exe mycustomdata.pgc
Hinweis PGC-Dateien, die nicht dem Standardformat entsprechen, müssen mit dem Pgomgr-Tool manuell zusammengeführt werden.
Nach Beendigung von myapp.exe wird eine weitere PGC-Datei (myapp!1.pgc) automatisch erstellt. Löschen Sie diese Datei, oder entfernen Sie sie aus dem Arbeitsverzeichnis des Linkers, bevor dieser gestartet wird, um die optimierte myapp.exe zu erstellen, falls Sie nicht möchten, dass sie als Teil der Profildaten verwendet wird.
Zusammenführen von mycustomdata.pgc mit Pgomgr:
Pgomgr –merge mycustomdata.pgc myapp.pgd
Führen Sie den Verknüpfungsbefehl aus, um die endgültige optimierte Anwendung zu erstellen:
link /ltcg:pgo /pgd:myapp
Benutzerdefinierte Profildatenauflistung mit PgoAutoSweep
Sie können PgoAutoSweep von der Anwendung aus während der Laufzeit jederzeit aufrufen, um die Profildaten zu speichern und zurückzusetzen. Im Beispiel unten wird gezeigt, wie dies funktioniert.
Im Beispiel unten werden zwei PGC-Dateien erstellt. Die erste Datei enthält die Beschreibung des Laufzeitverhaltens bis zu dem Zeitpunkt, wo der Zähler count gleich 3 ist, während die zweite Datei die gesammelten Daten ab diesem Zeitpunkt bis zum Ende der Anwendung enthält.
#include <stdio.h>
#include <windows.h>
#include <pgobootrun.h>
int count = 10;
int g = 0;
void func2(void)
{
printf("hello from func2 %d\n", count);
Sleep(2000);
}
void func1(void)
{
printf("hello from func1 %d\n", count);
Sleep(2000);
}
void main(void)
{
while (count--)
{
if(g)
func2();
else
func1();
if (count == 3)
{
PgoAutoSweep("func1");
g = 1;
}
}
PgoAutoSweep("func2");
}