Créer une build instrumentée
L’entraînement avec PGO repose sur une build de votre titre qui contient l’instrumentation PGO. PGO utilise cette instrumentation pour déterminer les chemins de code exécutés le plus fréquemment. Pour créer une build instrumentée, il vous suffit de définir deux propriétés de build dans Visual Studio.Pour créer une build instrumentée
- Dans l’Explorateur de solutions (Solution Explorer), cliquez avec le bouton droit sur votre projet, puis sélectionnez Properties.
- Dans la boîte de dialogue Property Pages, développez les nœuds Configuration Properties et C/C++.
- Sélectionnez la page de propriétés Optimization, puis définissez Whole Program Optimization sur Yes (figure 1). Figure 1. Définition de la propriété Whole Program Optimization.

- Développez le nœud Linker.
- Sélectionnez la page de propriétés Optimization, puis définissez Link Time Code Generation sur Profile Guided Optimization - Instrument (figure 2). Figure 2. Définition de la propriété Link Time Code Generation pour une build instrumentée.
[!NOTE] Les deux propriétés décrites dans cette procédure correspondent au commutateur de compilateur
/GLet au commutateur d’éditeur de liens/LTCG:PGInstrumentdans MSBuild. - Générez et déployez la build instrumentée sur votre console XBOX One. Lorsque votre titre est en cours d’exécution, vous pouvez constater que les fichiers PGO sont déployés avec votre titre, comme dans la figure 3. Figure 3. Fichiers PGO déployés par une build instrumentée.

Déployer les fichiers requis
Le Microsoft Game Development Kit (GDK) comprend trois fichiers qui doivent être déployés avec votre titre pour utiliser PGO. Un fichier, nommé psapi.dll, est installé dans C:\Program Files (x86)\Microsoft GDK\edition\GXDK\bin. Les deux autres, nommés pgort140.dll et pgosweep.exe, proviennent de votre installation de Visual Studio. Si vous utilisez MSBuild pour générer votre titre, ces fichiers sont automatiquement copiés dans votre répertoire Layout lorsque vous créez une build instrumentée. Si vous utilisez desmakefiles pour générer votre titre, vous devez ajouter manuellement ces trois fichiers à votre répertoire Layout afin qu’ils soient déployés avec votre titre. Dans Visual Studio, ajouter ces fichiers à votre projet en les excluant de la build est un moyen pratique de les faire copier dans votre répertoire Layout et déployer avec le titre.
Pour ajouter les fichiers requis à votre projet Visual Studio
- Dans l’Explorateur de solutions, cliquez avec le bouton droit sur votre projet, sélectionnez Add, puis Existing Item (figure 4). Figure 4. Ajout des fichiers PGO à un projet.

- Accédez à C:\Program Files (x86)\Microsoft GDK\edition\GXDK\bin, sélectionnez le fichier PGO (psapi.dll), puis sélectionnez Add pour ajouter le fichier à votre projet.
- Accédez à C:\Program Files (x86)\Microsoft Visual Studio\2019\edition\VC\Tools\MSVC\version\bin\Hostx64\x64\onecore ou à C:\Program Files\Microsoft Visual Studio\2022\edition\VC\Tools\MSVC\version\bin\Hostx64\x64\onecore pour votre ensemble d’outils, puis sélectionnez les fichiers PGO (pgort140.dll et pgosweep.exe). Sélectionnez ensuite Add pour ajouter les fichiers à votre projet.
- Dans l’Explorateur de solutions, cliquez avec le bouton droit sur pgort140.dll, puis sélectionnez Properties.
- Dans la boîte de dialogue Property Pages, développez le nœud Configuration Properties, puis sélectionnez la page de propriétés General.
- Définissez Excluded From Build sur Yes, puis Item Type sur Does not participate in build (figure 5). Figure 5. Exclusion d’un fichier PGO des builds.

Entraînement avec la build instrumentée
L’entraînement est la phase la plus importante de PGO. Les gains de performances obtenus avec PGO dépendent directement de la qualité de l’entraînement de l’application. Pendant la phase d’entraînement de PGO, exécutez les scénarios courants axés sur les performances pendant que votre titre s’exécute. Après avoir exécuté les scénarios de performances courants, lancez la collecte d’un fichier d’artefact PGO (.pgc), qui capture vos données d’entraînement. Utilisez pgosweep.exe pour générer votre fichier .pgc (figure 6). Figure 6. Exécution de pgosweep.exe.


Créer la build optimisée
Pour créer votre build optimisée, définissez la propriété Link Time Code Generation sur Profile Guided Optimization - Update (figure 9). Figure 9. Définition de la propriété Link Time Code Generation pour une build optimisée.
Cette propriété correspond au commutateur d’éditeur de liens
/LTCG:PGOptimize dans MSBuild.
Recommandations pour PGO sur XBOX
Les instructions précédentes fournissent une vue d’ensemble de l’utilisation de PGO avec le Microsoft Game Development Kit (GDK) sur XBOX à l’aide des propriétés de projet intégrées de Visual Studio. Le compilateur Visual C++ a toutefois déconseillé l’utilisation de PGO via les commutateurs/LTCG:PGInstrument, /LTCG:PGOptimize et /LTCG:PGUpdate, que contrôlent les propriétés de projet de Visual Studio dans Visual Studio 2019 et Visual Studio 2022.
Les remplacements recommandés sont les suivants.
- Pour le compilateur C/C++, utilisez
/GL(propriété Whole Program Optimization définie sur Yes (/GL), comme indiqué précédemment dans la figure 1). - Pour l’éditeur de liens, utilisez
/LTCG(propriété Link Time Code Generation définie sur Use Link Time Code Generation (/LTCG), comme indiqué dans la figure 11). Figure 11. Définition de la propriété Link Time Code Generation.
/FASTGENPROFILEou/GENPROFILEpour générer un profil PGO (figure 12). Pour plus d’informations sur ces commutateurs, consultez /GENPROFILE, /FASTGENPROFILE (Générer une build instrumentée de profilage) sur Microsoft Docs. Figure 12. Définition du commutateur d’éditeur de liens pour générer un profil PGO.
/USEPROFILEpour optimiser à partir d’un ensemble de profils PGO (figure 13). Pour plus d’informations sur ce commutateur, consultez /USEPROFILE (Exécuter PGO en mode thread-safe) sur Microsoft Docs. Figure 13. Définition du commutateur d’éditeur de liens pour optimiser à partir d’un ensemble de profils PGO.
Résolution des problèmes PGO
Performances à l’exécution
Lors du profilage d’une build instrumentée, les outils peuvent entraîner des problèmes de performances, susceptibles de rendre votre titre difficile à contrôler. Le commutateur/FASTGENPROFILE est un bon choix pour accélérer une build instrumentée destinée au profilage de sessions de jeu interactives.
Dépendances
Si vous activez l’instrumentation PGO et constatez ensuite que votre titre ne se charge plus, vérifiez que pgort140.dll et vcruntime140.dll se trouvent dans le même dossier que le fichier .exe de votre titre. Si l’exécution de pgosweep.exe échoue (généralement avec une erreur STATUS_DLL_NOT_FOUND), vérifiez que pgort140.dll, psapi.dll et vcruntime140.dll se trouvent dans le même dossier que le fichier .exe de votre titre. Veillez également à utiliser la version x64 onecore de pgort140.dll et de pgosweep.exe.Utilisation de la mémoire
PGO utilise de la mémoire pour capturer le profil, ce qui peut poser problème pour un titre qui utilise une part importante de la mémoire disponible. Pour réussir l’utilisation de PGO, vous devrez peut-être utiliser le paramètre ExtraTitleMemory de xbconfig.exe, la fonction XMemTransferMemory, ou les deux. L’utilisation de/FASTGENPROFILE plutôt que de /LTCG:PGInstrument ou /GENPROFILE réduit l’empreinte mémoire pour un résultat similaire.
[!NOTE] La version de PGO fournie dans le GDK de juin 2020 (et ses QFE) utilise la mémoire du titre. PGO sera mis à jour pour utiliser correctement la mémoire des outils dans une version ultérieure.
