La prise en charge de l'optimisation guidée par le profil (PGO, Profile-Guided Optimization) a été introduite dans la version 22.2.71 d'AGDE.
Localiser les paramètres PGO
Ouvrez les paramètres de votre projet à partir de l'explorateur de solutions.
Figure 1 : Fenêtre de l'explorateur de solutions Visual Studio
Assurez-vous que votre plate-forme est définie sur une configuration Android (par exemple, Android-arm64-v8a).
Dans le panneau de gauche, sélectionnez Configuration Properties > General (Propriétés de configuration > Général). Recherchez le groupe de propriétés nommé PGO.
Figure 2 : Boîte de dialogue "Project Properties" (Propriétés du projet)
Activer les builds instrumentés avec PGO dans le projet
Ajoutez une configuration appelée Instrumented (Instrumentée) à votre projet. Celle-ci se base sur la configuration que vous utilisez pour le test, qui devrait être votre build optimisé traditionnel. Vous pouvez toujours activer des fonctionnalités de débogage supplémentaires tant que vous conservez les paramètres d'optimisation du compilateur.
Dans la boîte de dialogue "Property" (Propriété), cliquez sur Configuration Manager (Gestionnaire de configuration).
Figure 3 : Boîte de dialogue "Configuration Manager" (Gestionnaire de configuration)
Dans la boîte de dialogue "Configuration Manager" (Gestionnaire de configuration), sélectionnez la liste déroulante Active solution configuration (Configuration de la solution active), puis sélectionnez <New…> (Nouveau).
Figure 4 : Création d'une configuration de compilation
… et création d'une configuration instrumentée avec PGO
Figure 5 : Boîte de dialogue "New Solution Configuration" (Nouvelle configuration de la solution)
Pour activer la création en mode instrumentation PGO afin de générer un profil pour votre jeu, sélectionnez Instrumented (Instrumentée) dans la liste des options pour le paramètre Profile-Guided Optimization Mode (Mode d'optimisation guidée par le profil).
Figure 6 : Boîte de dialogue "Project Properties" (Propriétés du projet) mettant en évidence les paramètres PGO
Pour le paramètre Profile Guided Optimization Profiles (Profils d'optimisation guidée par le profil), saisissez le chemin d'accès au dossier dans lequel enregistrer le fichier de données de profil de sortie brut sur votre appareil Android.
Cette valeur doit généralement se présenter sous la forme /data/data/<package
name>/cache/
, où <package name>
est le nom complet du package de l'APK (par exemple, com.google.sample.tunnel).
Pour en savoir plus sur son fonctionnement, consultez la documentation Clang.
Écrire des données de profil instrumentées avec PGO sur votre appareil
Les données PGO sont généralement écrites sur l'appareil par le système d'instrumentation PGO lorsqu'un processus se ferme. Sur Android, les applications ne se ferment pas. Elles doivent être arrêtées. Autrement dit, la fonctionnalité par défaut d'écriture sur le disque ne se déclenche jamais, ce qui nécessite que votre application écrive manuellement les données PGO.
Votre application doit appeler explicitement __llvm_profile_write_file
pour écrire les données de profil. Ce symbole n'est disponible que lors de la compilation d'un build instrumenté avec PGO. Pour faciliter cette opération, nous vous recommandons d'utiliser le modèle suivant lorsque vous déclarez __llvm_profile_write_file
.
#ifdef PGO_INSTRUMENT
extern "C" int __llvm_profile_write_file(void);
#else
extern "C" int __llvm_profile_write_file(void) { return 0; }
#endif
L'appel de cette fonction écrit les données de profil dans le dossier que vous avez spécifié précédemment.
Générer le profil
Pour générer le profil, exécutez le fichier APK créé avec l'instrumentation PGO sur l'appareil cible. Une fois que vous aurez expérimenté le code et que vous avez déclenché l'appel de la fonction __llvm_profile_write_file
, votre application écrira les données de profil dans l'espace de stockage.
À ce stade, copiez les profils hors de l'appareil pour que le compilateur puisse les utiliser.
Préparer les données de profil à utiliser par le compilateur
Lorsqu'il est utilisé de manière isolée, l'outil de ligne de commande llvm-profdata
fourni avec Clang/LLVM dans le kit NDK Android permet de préparer les fichiers de données de profil à utiliser par le compilateur lors de l'optimisation d'un build guidée par le profil.
AGDE effectue cette étape automatiquement en fusionnant tous les fichiers de données de profil que vous avez ajoutés à votre projet et en les consommant lorsque le paramètre Profile-Guided Optimization Mode (Mode d'optimisation guidée par le profil) est défini sur Optimized (Optimisé) sur les pages de propriétés du projet.
Compiler un projet lorsque l'optimisation guidée par le profil est activée
Maintenant que vous avez capturé votre profil et que vous l'avez ajouté à votre projet, le compilateur peut utiliser ces données pour affiner l'optimisation de votre build.
Créez une configuration de projet pour votre build optimisé avec PGO afin de n'effectuer la compilation dans ce mode que lorsque cela est nécessaire.
Figure 7 : Création d'une configuration de compilation optimisée avec PGO
Dans les pages de propriétés du projet, définissez le paramètre Profile-Guided Optimization Mode (Mode d'optimisation guidée par le profil) sur Optimized (Optimisé).
Figure 8 : Définition du mode d'optimisation PGO sur "Optimized" (Optimisé)
Copiez les fichiers de l'appareil et ajoutez-les à votre projet dans l'explorateur de solutions. Ces fichiers de données de profil seront récupérés par le compilateur la prochaine fois que vous créerez votre configuration optimisée avec PGO, et seront utilisés pour ajuster la manière dont le compilateur optimise votre code.
Vous pouvez copier les fichiers de données de profil dans votre projet à partir de l'appareil à l'aide d'ADB ou à l'aide de l'explorateur de l'appareil Android.
Utiliser l'optimisation guidée par le profil en dehors d'AGDE
Si vous utilisez un système de compilation non compatible avec AGDE, vous devrez peut-être modifier votre build directement. Clang
documentation
couvre les commutateurs nécessaires (-fprofile-generate
) et
-fprofile-use
Si vous utilisez un moteur de middleware pour votre jeu, consultez la documentation correspondant à ce moteur pour déterminer comment activer la fonctionnalité PGO (si elle est prise en charge).