Passer au contenu principal
Cette rubrique décrit comment utiliser les optimisations guidées par profil (PGO) pour les jeux déployés et exécutés sur un kit de développement XBOX Series X ou XBOX One. PGO est une technologie d’optimisation du compilateur qui utilise des données de profilage, collectées lors de l’exécution de scénarios utilisateur importants ou axés sur les performances, pour générer une version optimisée du titre. Les optimisations guidées par profil présentent des avantages significatifs par rapport aux optimisations statiques traditionnelles, car elles reposent sur la manière dont le titre est susceptible d’être utilisé dans un environnement commercial. PGO privilégie la vitesse pour les chemins de code correspondant aux scénarios utilisateur courants et la taille pour les scénarios peu courants. Il en résulte un code plus rapide pour les scénarios courants et un code plus compact pour les scénarios moins fréquents. Les gains de performances obtenus avec PGO varient selon le titre, mais vous pouvez vous attendre à des gains de 5 à 30 pour cent. Sachez que PGO n’agit pas sur les performances des parties de l’application centrées sur le GPU.

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

  1. Dans l’Explorateur de solutions (Solution Explorer), cliquez avec le bouton droit sur votre projet, puis sélectionnez Properties.
  2. Dans la boîte de dialogue Property Pages, développez les nœuds Configuration Properties et C/C++.
  3. 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. Capture d'écran montrant l'emplacement de la propriété Whole Program Optimization
  4. Développez le nœud Linker.
  5. 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. Capture d'écran montrant l'emplacement de la propriété Link Time Code Generation, définie pour créer une build instrumentée [!NOTE] Les deux propriétés décrites dans cette procédure correspondent au commutateur de compilateur /GL et au commutateur d’éditeur de liens /LTCG:PGInstrument dans MSBuild.
  6. 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. Capture d'écran d'un répertoire en ligne de commande montrant les fichiers PGO déployés

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 des makefiles 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

  1. 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. Capture d'écran montrant comment ajouter un fichier à un projet
  2. 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.
  3. 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.
  4. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur pgort140.dll, puis sélectionnez Properties.
  5. 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.
  6. 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. Capture d'écran montrant comment exclure un fichier PGO des builds
Les fichiers PGO sont maintenant copiés dans votre répertoire Layout et déployés avec votre titre.

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. Capture d'écran montrant l'exécution de pgosweep.exe à l'aide de la commande "xbrun /x/title /O g:\pgosweep.exe Direct3DGame1.exe d:\Direct3DGame1!1.pgc" Dans cet exemple, nous avons créé un fichier .pgc nommé Direct3DGame1!1.pgc. Lors de la création d’un fichier .pgc, nous utilisons généralement la convention titlename!#.pgc, où titlename est le nom du titre en cours d’exécution et # correspond à 1 plus le nombre de fichiers titlename!#.pgc créés précédemment. Chaque exécution de pgosweep.exe crée un fichier .pgc distinct. Idéalement, vous créerez de nombreux fichiers .pgc représentant divers scénarios axés sur les performances. Une fois vos fichiers .pgc créés, vous pouvez les voir dans le répertoire D:\ de votre console (c’est-à-dire SystemScratch), comme dans la figure 7. Figure 7. Fichiers .pgc nommés séquentiellement. Capture d'écran montrant la liste d'un répertoire contenant trois fichiers .pgc nommés séquentiellement Vous devez ensuite fusionner vos fichiers .pgc dans un autre artefact PGO appelé fichier .pgd. Le fichier .pgd est utilisé par le compilateur pendant la dernière phase de PGO, l’optimisation. Avant de démarrer l’optimisation, copiez vos fichiers .pgc de la console vers votre PC à l’aide de xbcp.exe. Les fichiers .pgc doivent être copiés dans le répertoire de sortie de votre build. (Dans la figure 8, le répertoire de sortie de la build est C:\temp\Direct3DGame1\Gaming.Xbox.XboxOne.x64\Release.) Figure 8. Copie des fichiers .pgc dans le répertoire de sortie de la build. Capture d'écran montrant la copie de fichiers .pgc de la console vers un répertoire de sortie de build

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. Capture d'écran montrant l'emplacement de la propriété Link Time Code Generation, définie pour créer une build optimisée
Cette propriété correspond au commutateur d’éditeur de liens /LTCG:PGOptimize dans MSBuild.
Après avoir régénéré votre titre, la sortie de votre build contient des messages liés à PGO, semblables à ceux de la figure 10. Figure 10. Messages liés à PGO dans la sortie de build. Capture d'écran montrant un extrait de sortie de build contenant des messages liés à PGO

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. Capture d'écran montrant l'emplacement de la propriété Link Time Code Generation
Utilisez ensuite l’un des nouveaux commutateurs d’éditeur de liens suivants en l’ajoutant dans la zone Additional Options de la page de propriétés Command Line :
  • /FASTGENPROFILE ou /GENPROFILE pour 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. Capture d'écran montrant le commutateur d'éditeur de liens /FASTGENPROFILE ajouté à la page de propriétés Command Line
  • /USEPROFILE pour 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. Capture d'écran montrant le commutateur d'éditeur de liens /USEPROFILE ajouté à la page de propriétés Command Line

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.

Voir aussi

Optimisation guidée par profil Développement de jeux sur console XBOX (environnement et outils)
Dernière modification le 8 octobre 2026