Configurer l'optimisation guidée par le profil dans Visual Studio

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.

Menu des propriétés de l'explorateur de solution Visual Studio pour le projet en cours.

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.

Boîte de dialogue "Project Properties" (Propriétés du projet) avec les propriétés générales affichées et les paramètres PGO en surbrillance

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).

Partie supérieure de la boîte de dialogue "Property Pages" (Pages de propriétés) affichant les menus déroulants "Active Solution Configuration" (Configuration de la solution active) et "Platform" (Plate-forme), ainsi que le bouton "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).

Boîte de dialogue &quot;Configuration Manager&quot; (Gestionnaire de configuration), avec le menu déroulant &quot;Active Solution Configuration&quot; (Configuration de la solution active) ouvert et l&#39;option &quot;New&quot; (Nouveau) mise en surbrillance

Figure 4 : Création d'une configuration de compilation

… et création d'une configuration instrumentée avec PGO

Boîte de dialogue &quot;New Solution Configuration&quot; (Nouvelle configuration de la solution) pour créer une configuration de compilation avec instrumentation PGO basée sur la configuration de compilation existante

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).

Boîte de dialogue &quot;Project Properties&quot; (Propriétés du projet) ouverte sur les paramètres généraux, avec les paramètres PGO affichés et le mode d&#39;optimisation guidée par le profil défini sur Instrumented (Instrumenté)

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.

Boîte de dialogue &quot;New Solution Configuration&quot; (Nouvelle configuration de la solution) pour créer une configuration de compilation basée sur le build, mais en utilisant cette fois &quot;PGO-Optimized&quot; (Optimisée avec PGO) comme nom de la nouvelle configuration de compilation

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é).

Boîte de dialogue &quot;Project Properties&quot; (Propriétés du projet) ouverte sur les paramètres généraux, avec les paramètres PGO affichés et le mode d&#39;optimisation guidée par le profil défini sur &quot;Optimized&quot; (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. La documentation de Clang couvre les modifications 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).