Procédure pas à pas : utilisation d'optimisations guidées par profil

Cette procédure pas à pas montre comment utiliser l'optimisation guidée par profil (PGO, Profile Guided Optimization) pour divers scénarios, allant des implémentations simples à l'aide des menus de génération PGO dans l'IDE de Visual Studio à des scénarios plus complexes qui requièrent des configurations personnalisées. Cette procédure pas à pas traite également des techniques avancées qui vous permettent d'utiliser des outils de la ligne de commande PGO pour personnaliser le processus de collecte et de fusion des données de profilage. Pour obtenir des informations d'ordre général, consultez Optimisations guidées par profil.

Génération d'une application à l'aide de la PGO

Cet exemple de scénario illustre comment générer une application simple à l'aide de la PGO.

Génération à l'aide de la PGO dans l'environnement IDE

Les PGO peuvent s'appliquer à tout projet Visual C++ natif. Les procédures ci-dessous illustrent l'utilisation de la PGO avec une application Win32.

Pour créer un projet Win32

  1. Dans le menu Fichier, sélectionnez Nouveau, puis Projet. La boîte de dialogue Nouveau projet s'affiche.

  2. Sélectionnez le nœud Visual C++ dans le volet Types de projets, puis sélectionnez Projet Win32 dans le volet Modèles.

  3. Dans la zone Nom, entrez PGODemo.

  4. Cliquez sur le bouton OK. L'Assistant Application Win32 s'affiche.

  5. Conservez tous les paramètres par défaut. Cliquez sur le bouton Terminer.

Pour générer le projet PGODemo à l'aide de la PGO

  1. Dans la barre d'outils Standard, cliquez sur la zone de liste déroulante Configurations de solutions et sélectionnez la configuration Release.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud de projet PGODemo. Dans le menu contextuel du projet, sélectionnez Optimisation guidée par profil, puis sélectionnez l'élément de menu Instrument.

  3. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud de projet PGODemo. Dans le menu contextuel du projet, sélectionnez Optimisation guidée par profil, puis sélectionnez Exécuter l'application instrumentée/optimisée pour lancer votre application.

    Notes

    Vous pouvez également lancer l'application instrumentée en sélectionnant Démarrer ou Exécuter sans débogage dans le menu Déboguer.

  4. Répétez l'étape 3 pour tester l'application instrumentée en utilisant différents scénarios. Lorsqu'une application instrumentée est arrêtée, un fichier .PGC est créé dans le répertoire de sortie du projet, qui contient les données de profil correspondant à cette exécution.

  5. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud de projet PGODemo. Dans le menu contextuel du projet, sélectionnez Optimisation guidée par profil, puis sélectionnez Optimiser.

Génération à l'aide de la PGO au niveau de la ligne de commande

Supposons que vous souhaitiez générer une application myapp.exe à partir des fichiers sources S1,…,Sn, en utilisant l'optimisation guidée par profil. La première étape consiste à vous assurer que vous compilez les sources S1,…,Sn à l'aide de l'option du compilateur /GL.

Vous devez également spécifier les options d'optimisation qui répondent à vos besoins ; vous choisissez par exemple dans ce cadre l'option /O2. Il faut indiquer que générer votre application avec l'optimisation PGO mais sans option d'optimisation, c.-à-d. à l'aide de /Od, déclenchera un avertissement et le compilateur basculera automatiquement pour générer LTCG. À partir de la ligne de commande, votre première étape serait la suivante :

Pour compiler des fichiers sources avec l'option /GL

  1. cl.exe /c /GL /O2 S1.cpp … Sn.cpp

  2. link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe

L'étape 2 crée une image instrumentée PGO myapp.exe et crée également myapp.pgd qui est le fichier de base de données de profil qui sera utilisé par le compilateur pour générer le fichier myapp.exe optimisé final. Le nom par défaut du fichier.pdg est le nom de l'application et le chemin d'accès par défaut est le fichier source.

Vous pouvez utiliser l'option de l'éditeur de liens /pgd de l'étape précédente pour modifier le nom par défaut du fichier .pgd généré pour votre application. Vous pouvez utiliser /pgd comme suit :

Pour créer une image instrumentée avec /LTCG:PGI et /PGD

  • link /ltcg:pgi /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe

Vous pouvez maintenant tester l'application instrumentée myapp.exe en utilisant vos scénarios de profilage. Une fois l'exécution des scénarios terminée, vous constaterez qu'un fichier .pgc est créé par exécution.

Notes

Si vous exécutez simultanément plusieurs images de myapp.exe à partir du même chemin d'accès, un seul fichier .pgc sera créé pour toutes ces images et ce fichier sera écrit sur le disque seulement après que toutes les instances auront été arrêtées.

Notes

Le chemin d'accès par défaut des fichiers .pgc est le chemin de l'exécutable.Vous pouvez modifier ceci en définissant la variable d'environnement VCPROFILE_PATH avant d'exécuter vos scénarios de profilage.par exempledéfinissez VCPROFILE_PATH = <chemin d'accès> puis exécutez votre image instrumentée myapp.exe

Vous êtes maintenant prêt à générer l'application myapp.exe optimisée PGO.

Pour créer une image optimisée avec /LTCG:PGO et /PGD

  • link /ltcg:pgo /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe

Notes

Avant l'étape 1, vous devez avoir tous les fichiers .PGC créés pendant le scénario d'essai dans le même dossier que le fichier de base de données de profil (.PGD).

Fusion des données de profil personnalisée

Supposons que vous ayez deux scénarios clients principaux pour votre application. Le premier scénario est deux fois plus important (ou fréquemment exécuté par les clients) que le second.

Dans les étapes suivantes, vous apprendrez comment utiliser l'environnement de développement Visual Studio et les outils de la ligne de commande pour donner plus de poids à certaines données de profil lors de leur fusion dans le fichier .PGD.

Fusion des données de profil dans l'environnement IDE

Pour créer un projet Win32

  1. Dans le menu Fichier, sélectionnez Nouveau, puis Projet. La boîte de dialogue Nouveau projet s'affiche.

  2. Sélectionnez le nœud Visual C++ dans le volet Types de projets, puis sélectionnez Projet Win32 dans le volet Modèles.

  3. Dans la zone Nom, entrez PGODemo.

  4. Cliquez sur le bouton OK. L'Assistant Application Win32 s'affiche.

  5. Conservez tous les paramètres par défaut. Cliquez sur le bouton Terminer.

Pour générer le projet PGODemo avec des données de profil fusionnées dans l'environnement IDE

  1. Dans la barre d'outils Standard, cliquez sur la zone de liste déroulante Configurations de solutions et sélectionnez la configuration Release.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo. Cliquez sur Optimisation guidée par profil dans le menu contextuel, puis cliquez sur Instrument.

  3. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo. Cliquez sur Optimisation guidée par profil dans le menu contextuel, puis cliquez sur Exécuter l'application instrumentée. Cette opération permet de lancer votre application. Notez que vous pouvez également lancer l'application instrumentée en utilisant Démarrer ou Exécuter sans débogage dans le menu Déboguer.

  4. Répétez l'étape 3, une fois pour chacun de vos scénarios de client. Cette étape crée deux fichiers .PGC dans le répertoire de sortie : PGODemo!1.pgc et PGODemo!2.pgc.

  5. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo. Cliquez sur Propriétés ; la boîte de dialogue des pages de propriétés de PGODemo s'affiche.

  6. Dans Propriétés de configuration, cliquez sur Événements de build, puis sur Événement avant l'édition des liens. Dans Ligne de commande, tapez la commande suivante :

    "$(VCInstallDir)bin\pgomgr.exe" -merge:2 $(OutDir)\$(ProjectName)!1.pgc $(OutDir)\$(ProjectName).pgd

    Notes

    Cette étape utilise pgomgr.exe pour fusionner PGODemo!1.pgc au cours d'une étape distincte, avant de lancer l'éditeur de liens pour générer l'application optimisée finale.L'éditeur de liens appellera à nouveau pgomgr.exe pendant l'étape suivante pour fusionner le fichier PGODemo!2.pgc, mais avec le poids par défaut 1.

  7. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo. Cliquez sur Optimisation guidée par profil dans le menu contextuel, puis cliquez sur Optimiser.

Fusion des données de profil à partir de la ligne de commande

Vous pouvez utiliser les outils de la ligne de commande pour exécuter une fusion des données de profil personnalisée comme suit.

Pour générer des données de profil fusionnées à partir de la ligne de commande

  1. cl.exe /c /GL /O2 S1.cpp … Sn.cpp

  2. link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe

    Les deux étapes précédentes créent l'application myapp.exe instrumentée.

  3. Le test de l'application myapp.exe instrumentée à l'aide de deux scénarios différents permet de créer deux fichiers .PGC différents : myapp!1.pgc et myapp!2.pgc.

    Pour donner plus de poids au premier scénario, utilisez pgomgr.exe de la façon suivante :

    Pgomgr –merge:2 myapp!1.pgc myapp.pgd

  4. Exécutez la commande de l'édition de liens pour créer l'application optimisée finale, comme suit

    link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe

    Cette opération permet de fusionner myapp!2.pgc avec le poids par défaut 1.

Mise à jour de la PGO

Dans les deux scénarios précédents, nous avons utilisé l'option de l'éditeur de liens /ltcg:pgo pour générer l'application optimisée finale après avoir généré et testé la version instrumentée. Lors de l'utilisation de l'option /ltcg:pgo, l'éditeur de liens effectuera certaines vérifications afin de s'assurer qu'aucune modification n'a été apportée aux fichiers d'entrée (fichiers objets, bibliothèques, etc.) utilisés pour générer l'application instrumentée. En d'autres termes, pour utiliser /ltcg:pgo, tous les fichiers d'entrée passés à l'éditeur de liens doivent être identiques aux fichiers passés lors de l'étape /ltcg:pgi.

Ceci s'explique par le fait que des modifications accidentelles apportées aux sources, après avoir généré l'application instrumentée et le fichier .PGD, peuvent affecter de façon importante la génération du code PGO et les décisions d'optimisation.

Supposons qu'après avoir généré l'application instrumentée, puis créé les données de profil et généré l'application optimisée PGO, vous ayez découvert que vous avez oublié de mettre à jour le numéro de version de votre application ou que vous ayez découvert un bogue simple qui a besoin d'un correctif minime qui n'affecte pas de manière dramatique le flux dans l'application. L'option /ltcg:pgu est prévue pour ce scénario. Grâce à cette option, l'éditeur de liens n'effectuera pas les vérifications qu'il fait lors de l'utilisation de l'option /ltcg:pgo. Vous pouvez modifier et recompiler des fichiers ou même ajouter de nouveaux fichiers à l'application entre les générations PGI et PGU.

Dans les étapes suivantes, vous apprendrez comment utiliser l'environnement de développement Visual Studio et les outils de la ligne de commande pour utiliser l'option /ltcg:pgu.

Mise à jour dans l'environnement IDE

Pour générer PGODemo avec /LTCG:PGU dans l'environnement IDE

  1. Dans la barre d'outils Standard, cliquez sur la zone de liste déroulante Configurations de solutions et sélectionnez la configuration Release.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo. Cliquez sur Optimisation guidée par profil dans le menu contextuel, puis cliquez sur Instrument.

  3. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo. Cliquez sur Optimisation guidée par profil dans le menu contextuel, puis sur Exécuter l'application instrumentée/optimisée. Cette opération permet de lancer votre application. Notez que vous pouvez également lancer l'application instrumentée en utilisant Démarrer le débogage ou Exécuter sans débogage dans le menu Déboguer.

  4. Au cours de cette étape, vous pouvez appliquer des modifications à tout fichier source. Comme indiqué plus haut, les modifications qui affectent de façon importante le comportement de votre application peuvent provoquer des baisses de performances significatives. En général, vous apportez des modifications minimes, comme de petits correctifs de bogue ou de petites modifications dans les fichiers de ressources.

  5. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo. Cliquez sur Optimisation guidée par profil dans le menu contextuel, puis cliquez sur Mettre à jour. Cette opération permet de recompiler les fichiers modifiés uniquement, puis de lancer l'éditeur de liens avec l'option /ltcg:pgu à la place de /ltcg:pgo, autorisant des fichiers modifiés.

    Notes

    Vous obtiendrez des avertissements pour chaque nouvelle fonction qui n'a pas de données de profil et chaque fonction modifiée d'une façon qui invalide les données de profil collectées pendant l'étape de test.Dans la barre d'outils Standard, cliquez sur la zone de liste déroulante Configurations de solutions et choisissez la configuration Release.

    Notes

    Dans l'étape 5, si vous cliquez avec le bouton droit sur le fichier source des modifications dans l'Explorateur de solutions, puis cliquez sur Compiler, vous supprimerez tous les fichiers connexes PGO dans le dossier de sortie, car le système du projet exécute une nouvelle génération lorsque vous passez d'une génération PGO à une génération normale.

Mise à jour au niveau de la ligne de commande

Vous pouvez utiliser les outils de la ligne de commande pour effectuer la mise à jour PGO, comme suit.

Pour générer avec /LTCG:PGU au niveau de la ligne de commande

  1. cl.exe /c /GL /O2 S1.cpp … Sn.cpp

  2. link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe

    Les deux étapes précédentes créent l'application myapp.exe instrumentée.

  3. Tester l'application myapp.exe instrumentée

  4. link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe

    L'étape 4 créera le myapp.exe optimisé. Supposez que vous recherchez un petit bogue dans Sm.cpp, vous pouvez appliquer les correctifs et compiler Sm.cpp uniquement comme suit

  5. cl /c /GL /O2 Sm.cpp

    Utilisez ensuite /ltcg:pgu pour générer l'application optimisée à l'aide des anciennes données de profil créées à l'étape 3.

  6. link /ltcg:pgu /pgd:myapp.pgd /out:myapp.exe

Configurations personnalisées de l'optimisation guidée par profil

Dans ce scénario, vous apprendrez comment créer des configurations personnalisées de l'optimisation guidée par profil pour générer des solutions avec plusieurs projets. Dans ce scénario, nous ajouterons une DLL à la solution avant de la lier à l'application PGODemo. Nous créerons deux configurations, PGIRelease et PGORelease, et les utiliserons pour générer la solution entière au lieu d'utiliser les éléments du menu Optimisation guidée par profil pour générer chaque produit.

Pour créer des configurations PGO personnalisées

  1. Dans le menu Fichier, sélectionnez Nouveau, puis Projet. La boîte de dialogue Nouveau projet s'affiche.

  2. Sélectionnez le nœud Visual C++ dans le volet Types de projets, puis sélectionnez Projet Win32 dans le volet Modèles.

  3. Dans la zone Nom, entrez PGODemo.

  4. Cliquez sur le bouton OK. L'Assistant Application Win32 s'affiche.

  5. Conservez tous les paramètres par défaut. Cliquez sur le bouton Terminer.

    Vous disposez maintenant d'une solution et d'un projet nommés PGODemo. Créez ensuite un projet DLL.

  6. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la solution et sélectionnez Ajouter. Cliquez ensuite sur Nouveau projet. La boîte de dialogue Nouveau projet s'affiche.

  7. Sélectionnez le nœud Visual C++ dans le volet Types de projets, puis sélectionnez Projet Win32 dans le volet Modèles.

  8. Dans la zone Nom, entrez PGODemoDLL.

  9. Cliquez sur le bouton OK. L'Assistant Application Win32 s'affiche.

  10. Dans la page Paramètres de l'application, choisissez le type d'application DLL et cliquez sur Terminer.

    Vous avez maintenant un projet DLL nommé PGODemoDLL.

  11. Dans l'Explorateur de solutions, double-cliquez sur le projet PGODemoDLL, double-cliquez sur PGODemoDLL.cpp et ajoutez le code suivant :

    __declspec(dllexport) void HelloMessage(void)
    {
       MessageBox(NULL, L"hello", L"PGODemoDLL", MB_OK);
    }
    
  12. Dans l'Explorateur de solutions, double-cliquez sur le projet PGODemo, double-cliquez sur PGODemo.cpp et ajoutez la déclaration suivante avant la définition de la fonction _tWinMain :

    __declspec(dllimport) void HelloMessage(void);
    
  13. Dans _tWinMain, avant la boucle de message principale, ajoutez le code suivant :

    HelloMessage();
    
  14. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la solution PDODemo et cliquez sur Dépendances du projet. La boîte de dialogue Dépendances du projet s'affiche.

  15. Dans la page des dépendances, choisissez PGODemo dans la zone de liste déroulante Projets. Cochez PGODemoDLL dans la liste Dépend de.

    Vous créez ensuite les configurations PGIRelease et PGORelease.

  16. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la solution, puis cliquez sur Gestionnaire de configurations. Cliquez sur la zone de liste déroulante Configuration pour le projet PGODemo et cliquez sur <Nouveau...>. La boîte de dialogue Nouvelle configuration de projet s'affiche.

    Dans la zone d'édition Nom de la configuration de projet, tapez PGIRelease et choisissez Release dans la zone de liste déroulante Copier les paramètres à partir de. Assurez-vous que la case à cocher Créer des configurations de solution est activée.

    Répétez la même étape sur le projet PGODemoDLL pour ajouter la configuration PGIRelease à ce projet. Assurez-vous que la case à cocher Créer des configurations de solution n'est pas activée cette fois-ci.

  17. Répétez l'étape 16 pour les deux projets afin de créer la configuration PGORelease. Assurez-vous qu'elle copie également les paramètres de la configuration Release. Fermez la boîte de dialogue Gestionnaire de configurations.

    Nous avons maintenant créé deux configurations : PGIRelease et PGORelease.

  18. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo, puis cliquez sur Propriétés. Dans la zone de liste déroulante Configuration, choisissez la configuration PGIRelease. Dans Propriétés de configuration, cliquez sur Général. Cliquez sur la zone de liste déroulante Optimisation de l'ensemble du programme et choisissez l'option Optimisation guidée par profil - Instrument. Cliquez sur Appliquer pour enregistrer vos modifications.

  19. Dans la zone de liste déroulante Configuration, choisissez la configuration PGORelease. Dans Propriétés de configuration, cliquez sur Général. Cliquez sur la zone de liste déroulante Optimisation de l'ensemble du programme et choisissez l'option Optimisation guidée par profil - Optimiser. Cliquez sur Appliquer pour enregistrer vos modifications.

  20. Répétez les étapes 18 et 19 sur les configurations PGIRelease et PGORelease pour le projet PGODemoDLL.

    Nous allons maintenant modifier le Répertoire intermédiaire pour la configuration PGORelease afin qu'il soit identique au répertoire Sortie pour la configuration PGIRelease des deux projets.

  21. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo, puis cliquez sur Propriétés. Dans la zone de liste déroulante Configuration, choisissez la configuration PGORelease. Dans les propriétés Configuration, cliquez sur Général. Dans Répertoire intermédiaire, tapez $(SolutionDir)PGIRelease. Cliquez sur Appliquer et fermez la boîte de dialogue.

  22. Répétez l'étape 21 pour le projet PGODemoDLL.

    Nous allons ensuite ajouter le chemin d'accès de PGODemoDLL.dll à la variable d'environnement de chemin d'accès de l'application PGODemo.

  23. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo, puis cliquez sur Propriétés. Dans la zone de liste déroulante Configuration, choisissez la configuration PGIRelease. Dans Propriétés de configuration, cliquez sur Débogage. Dans Environnement, tapez le texte suivant, puis cliquez sur Appliquer :

    path=%path%;$(SolutionDir)PGODemoDLL\PGIRelease

    Dans la zone de liste déroulante Configuration, choisissez la configuration PGORelease. Dans les propriétés Configuration, cliquez sur Débogage. Dans Environnement, tapez le texte suivant :

    path=%path%;$(SolutionDir)PGODemoDLL\PGORelease

    Cliquez ensuite sur Appliquer, puis sur OK pour fermer la boîte de dialogue.

  24. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo, puis cliquez sur Propriétés. Dans la zone de liste déroulante Configuration, choisissez la configuration PGORelease. Dans Propriétés de configuration, cliquez sur Éditeur de liens, puis cliquez sur Optimisation. Dans la zone d'édition Base de données guidée par profil, remplacez $(TargetDir) par $(IntDir)\.

    Répétez cette étape pour le projet PGODemoDLL.

  25. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemoDLL, puis cliquez sur Propriétés. Dans la zone de liste déroulante Configuration, choisissez la configuration PGORelease. Dans Propriétés de configuration, cliquez sur Éditeur de liens, puis cliquez sur Avancé. Dans la zone d'édition Bibliothèque d'importation, remplacez $(TargetDir) par $(IntDir)\.

  26. Dans la barre d'outils Standard, cliquez sur la zone de liste déroulante Configurations de solutions et choisissez la configuration PGIRelease. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la solution, puis cliquez sur Générer la solution.

    Cette opération permet de générer les bits instrumentés pour les deux projets.

  27. Cliquez sur le menu Déboguer, puis cliquez sur Démarrer le débogage ou Exécuter sans débogage. Cette opération permet de démarrer PGODemo. Après l'arrêt de l'application, deux fichiers .PGC sont créés, un dans chacun des deux dossiers de sortie PGODemo\PGIRelease et PGODemoDLL\PGIRelease.

  28. Dans la barre d'outils Standard, cliquez sur la zone de liste déroulante Configurations de solutions et choisissez la configuration PGORelease. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la solution, puis cliquez sur Générer la solution.

    Maintenant, vous avez les images optimisées PGO dans les dossiers de configuration PGORelease pour les deux projets.

Collecte de données de profil personnalisées

Le comportement par défaut de la collecte de données de profil est d'enregistrer toutes les données qui décrivent le comportement de l'application instrumentée depuis le démarrage jusqu'à l'arrêt. La PGO est fournie avec un outil appelé PGOSWEEP qui vous permet de personnaliser la collecte de données de profil. Vous pouvez utiliser PGOSWEEP pour collecter des données de profil correspondant à un intervalle de temps spécifique pendant l'exécution du scénario du profil.

Dans les étapes suivantes, vous apprendrez comment utiliser l'environnement de développement Visual Studio et les outils de la ligne de commande pour gérer la collecte de données de profil.

Pour créer un projet Win32

  1. Dans le menu Fichier, sélectionnez Nouveau, puis Projet. La boîte de dialogue Nouveau projet s'affiche.

  2. Sélectionnez le nœud Projets Visual C++ dans le volet Types de projets, puis sélectionnez Projet Win32 dans le volet Modèles.

  3. Dans la zone Nom, entrez PGODemo.

  4. Cliquez sur le bouton OK. L'Assistant Application Win32 s'affiche.

  5. Conservez tous les paramètres par défaut. Cliquez sur le bouton Terminer.

Pour générer le projet PGODemo instrumenté dans l'environnement IDE

  1. Dans la barre d'outils Standard, cliquez sur la zone de liste déroulante Configurations de solutions et sélectionnez la configuration Release.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo. Cliquez sur Optimisation guidée par profil dans le menu contextuel, puis cliquez sur Instrument.

  3. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet PGODemo. Cliquez sur Optimisation guidée par profil dans le menu contextuel, puis sur Exécuter l'application instrumentée/optimisée. Cette opération permet de lancer votre application. Notez que vous pouvez également lancer l'application instrumentée en utilisant Démarrer le débogage ou Exécuter sans débogage dans le menu Déboguer.

  4. Dans le menu Outils, cliquez sur Outils externes. La boîte de dialogue Outils externes s'affiche. Cliquez sur Ajouter. Dans la zone d'édition Titre, tapez Pgosweep. Cliquez sur le bouton Parcourir situé en regard de la zone d'édition Commande et localisez le chemin d'accès de l'outil PGOSWEEP. PGOSWEEP doit être installé dans le dossier …\VC\bin où Visual Studio est installé. Activez la case à cocher Demander les arguments, puis cliquez sur OK pour fermer la boîte de dialogue Outils externes.

  5. Dans le menu Outils, cliquez sur Pgosweep. Une boîte de dialogue s'affiche. Dans la zone d'édition Arguments, tapez :

    $(TargetPath) $(TargetDir)$(TargetName)_custom!1.pgc
    

    et cliquez sur OK.

  6. Dans la fenêtre principale PGODemo, cliquez sur Fichier, puis sur Quitter pour terminer l'exécution de la collecte de données de profil.

  7. Maintenant, si vous examinez $(OutDir), vous trouverez deux fichiers .PGC. PGODemo_custom!1.pgc est le fichier qui a été créé par PGOSWEEP et qui contient les données de profil du début de l'exécution du profil jusqu'au moment où PGOSWEEP a été appelé. Le deuxième fichier a le schéma d'affectation de noms par défaut PGODemo!1.pgc et contient les données de profil du point après le balayage jusqu'à l'arrêt de l'application instrumentée.

  8. Il est très important de noter que seuls les fichiers .PGC qui obéissent à la désignation standard $(ProjectName)! n.PGC où n est un nombre, sera fusionné automatiquement lorsque vous générez l'image optimisée. Pour fusionner PGODemo_custom!1.pgc, que nous avons créé à l'étape précédente, vous devrez ajouter une étape de fusion personnalisée (consultez le scénario Fusion des données de profil personnalisée décrit plus haut dans cette procédure pas à pas).

Grâce à ces étapes, vous pouvez contrôler la collecte des données de profil et, ensuite, optimiser votre application en fonction des parties les plus importantes de l'application au moment de l'exécution.

Collecte de données de profil à partir de la ligne de commande

Vous pouvez utiliser les outils de la ligne de commande pour exécuter une collecte de données de profil personnalisée comme suit.

Pour générer des données de profil fusionnées à partir de la ligne de commande

  1. Créez l'exécutable instrumenté :

    cl.exe /c /GL /O2 S1.cpp Sn.cpp 
    link /ltcg:pgi S1.obj Sn.obj /out:myapp.exe 
    
  2. Exécutez l'application myapp.exe instrumentée et, au point voulu pendant son exécution, utilisez l'outil pgosweep pour collecter les données de profil :

    Pgosweep myapp.exe mycustomdata.pgc
    

Remarque Les fichiers PGC qui ne se conforment pas au format standard doivent être fusionnés manuellement à l'aide de l'outil Pgomgr.

  1. Après l'arrêt de myapp.exe, un autre fichier .PGC (myapp!1.pgc) est créé automatiquement. Assurez-vous de le supprimer ou de le déplacer en dehors du répertoire de travail de l'éditeur de liens avant d'exécuter l'éditeur de liens pour générer l'application myapp.exe optimisée, si vous ne souhaitez pas qu'il soit utilisé dans le cadre des données de profil.

  2. Fusionnez mycustomdata.pgc à l'aide de Pgomgr :

    Pgomgr –merge mycustomdata.pgc myapp.pgd
    
  3. Exécutez la commande de l'édition de liens pour créer l'application optimisée finale :

    link /ltcg:pgo /pgd:myapp
    

Collecte de données de profil personnalisée avec PgoAutoSweep

Vous pouvez appeler PgoAutoSweep à partir de votre application pour enregistrer et réinitialiser les données de profil à tout moment pendant l'exécution. L'exemple suivant montre comment cela fonctionne.

L'exemple ci-dessous crée deux fichiers .PGC. Le premier contient des données qui décrivent le comportement au moment de l'exécution jusqu'à ce que le compte soit égal à 3, et le second contient les données collectées après ce point jusqu'à l'arrêt de l'application.

#include <stdio.h>
#include <windows.h>
#include <pgobootrun.h>

int count = 10;
int g = 0;

void func2(void)
{
    printf("hello from func2 %d\n", count);
    Sleep(2000);
}

void func1(void)
{
    printf("hello from func1 %d\n", count);
    Sleep(2000);
}
void main(void) 
{
    while (count--)
    {
        if(g)
            func2();
        else
            func1();
        if (count == 3) 
        {
            PgoAutoSweep("func1");
            g = 1;
        }
    }
    PgoAutoSweep("func2");
}

Voir aussi

Autres ressources

Procédures pas à pas de Visual C++ 2010