Profilgestützte Optimierung in Visual Studio konfigurieren

Die Unterstützung der profilbasierten Optimierung wurde in der AGDE-Version 22.2.71 eingeführt.

PGO-Einstellungen finden

Öffnen Sie die Projekteinstellungen im Projektmappen-Explorer.

Das Eigenschaftenmenü des Visual Studio Solution-Explorers für das aktuelle Projekt.

Abbildung 1: Visual Studio-Projektmappen-Explorer

Für Ihre Plattform muss eine Android-Konfiguration festgelegt sein (z. B. Android-arm64-v8a).

Wählen Sie im linken Bereich Konfigurationseigenschaften > Allgemein aus. Suchen Sie nach der Attributgruppe PGO.

Im Dialogfeld „Projekteigenschaften“ sind die allgemeinen Eigenschaften und die PGO-Einstellungen markiert.

Abbildung 2:Dialogfeld „Project Properties“ (Projekteigenschaften).

PGO-instrumentierte Builds im Projekt aktivieren

Fügen Sie Ihrem Projekt eine neue Konfiguration namens Instrumented hinzu. Dies basiert auf der Konfiguration, die Sie während der Testentwicklung verwenden. Dabei sollte es sich um Ihren herkömmlichen optimierten Build handeln. Sie können weiterhin zusätzliche Debugging-Features aktivieren, solange Sie die Einstellungen für die Compiler-Optimierung beibehalten.

Klicken Sie im Dialogfeld „Property-Seite“ auf Konfigurationsmanager....

Oben im Dialogfeld „Property-Seiten“ sind die Drop-down-Menüs „Aktive Lösungskonfiguration“ und „Plattform“ sowie die Schaltfläche „Konfigurationsmanager“ zu sehen.

Abbildung 3:Dialogfeld des Konfigurationsmanagers

Wählen Sie im Dialogfeld „Konfigurationsmanager“ das Drop-down-Menü Aktive Lösungskonfiguration und dann <Neu...> aus.

Das Dialogfeld „Konfigurationsmanager“ mit dem geöffneten Drop-down-Menü „Aktive Lösungskonfiguration“ und die Option „Neu“ ist markiert.

Abbildung 4:Neue Build-Konfiguration erstellen

...und erstellen Sie eine neue PGO-instrumentierte Konfiguration.

Das Dialogfeld „Neue Lösungskonfiguration“ zum Erstellen einer neuen PGO-instrumentierten Build-Konfiguration basierend auf der vorhandenen Release-Build-Konfiguration

Abbildung 5:Dialogfeld „Neue Lösungskonfiguration“

Wenn Sie das Erstellen im PGO-Instrumented-Modus aktivieren möchten, damit Sie ein Profil für Ihr Spiel generieren können, wählen Sie aus der Liste der Optionen für die Einstellung Profilgestützter Optimierungsmodus die Option Instrumentiert aus.

Das Dialogfeld „Project Properties“ (Projekteigenschaften) wurde mit den allgemeinen Einstellungen geöffnet. Es werden die PGO-Einstellungen angezeigt und der Modus „Profile Guided Optimierung“ ist auf „Instrumented“ (Instrumentiert) gesetzt.

Abbildung 6:Dialogfeld "Project Properties" (Projekteigenschaften) mit den PGO-Einstellungen.

Geben Sie für die Einstellung Profil für geführte Optimierungsprofile den Pfad zu dem Ordner ein, in den die Rohdatendatei des Ausgabeprofils auf Ihrem Android-Gerät geschrieben werden soll. In der Regel sollte dieser Wert in etwa so aussehen: /data/data/<package name>/cache/, wobei <package name> der vollständige Paketname Ihres APKs ist, z. B. com.google.sample.tunnel.

Ausführliche Informationen zu dieser Funktionsweise finden Sie in der Clang-Dokumentation.

PGO-Instrumented-Profildaten auf Ihr Gerät schreiben

PGO-Daten werden normalerweise vom PGO-Instrumentierungssystem auf das Gerät geschrieben, wenn ein Prozess beendet wird. Auf Android-Geräten werden Apps nicht beendet, sondern immer beendet. Die Standardfunktion „Auf Laufwerk schreiben“ wird also nie ausgelöst. Daher muss Ihre Anwendung PGO-Daten manuell schreiben.

Ihre Anwendung, die Sie explizit __llvm_profile_write_file aufrufen sollten, um die Profildaten zu schreiben. Dieses Symbol ist nur verfügbar, wenn ein PGO-instrumentierter Build erstellt wird. Zur Vereinfachung empfehlen wir beim Vorwärtsdeklarieren von __llvm_profile_write_file das folgende Muster.

#ifdef PGO_INSTRUMENT
extern "C" int __llvm_profile_write_file(void);
#else
extern "C" int __llvm_profile_write_file(void) { return 0; }
#endif

Durch den Aufruf dieser Funktion werden die Profildaten in den zuvor angegebenen Ordner geschrieben.

Profilausführung durchführen

Um das Profil zu generieren, führen Sie Ihr APK aus, das mit PGO-Instrumentierung auf dem Zielgerät erstellt wurde. Nachdem Sie den Code zu Ihrer Zufriedenheit ausgeführt und den Aufruf der Funktion __llvm_profile_write_file ausgelöst haben, schreibt die Anwendung die Profildaten in den Speicher.

Kopieren Sie die Profile nun vom Gerät zur Verwendung durch den Compiler.

Profildaten für den Compiler vorbereiten

Isoliert wird das Befehlszeilentool llvm-profdata, das als Teil von Clang/LLVM im Android-NDK ausgeliefert wird, verwendet, um Profildatendateien für den Compiler während der profilgestützten Optimierung eines Builds vorzubereiten.

AGDE führt diesen Schritt automatisch für Sie aus, indem alle Profildatendateien, die Sie Ihrem Projekt hinzugefügt haben, zusammengeführt und verwendet werden, wenn die Einstellung Profilgestützter Optimierungsmodus auf den Projekteigenschaftsseiten auf Optimiert gesetzt ist.

Projekt mit aktivierter profilgestützter Optimierung erstellen

Nachdem Sie Ihre Profile erfasst und Ihrem Projekt hinzugefügt haben, kann der Compiler diese Daten zur Optimierung Ihres Builds verwenden.

Erstellen Sie eine neue Projektkonfiguration für Ihren PGO-optimierten Build, damit Sie ihn nur dann in diesem Modus ausführen, wenn er erforderlich ist.

Im Dialogfeld „Neue Lösungskonfiguration“ wird eine Build-Konfiguration basierend auf dem Release-Build erstellt, diesmal aber mit „PGO-Optimized“ als neuer Build-Konfigurationsname.

Abbildung 7:Eine neue PGO-optimierte Build-Konfiguration erstellen.

Setzen Sie die Einstellung Profilgestützter Optimierungsmodus auf den Property-Seiten des Projekts auf Optimiert.

Das Dialogfeld „Projekteigenschaften“ mit den allgemeinen Einstellungen, auf dem die PGO-Einstellungen angezeigt werden und der Modus „Profilgestützte Optimierung“ auf „Optimiert“ gesetzt ist

Abbildung 8:PGO-Optimierungsmodus auf „Optimiert“ festlegen

Kopieren Sie die Dateien vom Gerät und fügen Sie sie Ihrem Projekt im Projektmappen-Explorer hinzu. Diese Profildatendateien werden vom Compiler abgerufen, wenn Sie das nächste Mal Ihre PGO-optimierte Konfiguration erstellen, und zur Optimierung des Codes durch den Compiler verwendet.

Sie können die Profildatendateien mithilfe von ADB oder des Android Geräte-Explorers vom Gerät in Ihr Projekt kopieren.

Verwenden der profilbasierten Optimierung außerhalb von AGDE

Wenn Sie ein Build-System verwenden, das nicht von AGDE unterstützt wird, müssen Sie Ihren Build möglicherweise direkt bearbeiten. In der Dokumentation zu Clang werden die erforderlichen Switches behandelt – -fprofile-generate und -fprofile-use.

Wenn Sie eine Middleware-Engine für Ihr Spiel verwenden, sehen Sie in der Dokumentation Ihrer Engine nach, wie Sie PGO aktivieren können, sofern dies unterstützt wird.