begin process at 2008 08 21 05:25:29
1 229 221 membres
52 nouveaux aujourd'hui
14 260 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Automatisation de l'utilisation de l'optimisation par Profile de Visual studio 2005/2008


Information sur le tutorial

Catégorie :Tutoriaux Date de création : 29/12/2007 15:00:36 Vu : 2 895 fois

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

Ce tutorial présente brievement l'optimisation par Profile introduite dans le compilateur C++ de Visual Studio 2005 et propose une méthode pour automatiser son utilisation

Tutorial

Automatisation de l'utilisation de l'optimisation par Profile de Visual studio 2005

Par Gilles Vollant (MVP Visual C++)
info@winimage.com

Après avoir introduit l'option « Whole Program Optimisation » dans Visual studio 2002, Microsoft à introduit une nouvelle optimisation encore plus efficace dans Visual Studio 2005, l'optimisation guidée par profil. Il existe déjà une très bonne description technique de cette option (en français, et en version originale anglaise), qu'il est conseillé de lire avant le présent article.

Cette optimisation présente néanmoins un inconvénient: la difficulté de l'automatiser, ce qui peut obliger à un travail manuel répétitif à chaque fois que l'on souhaite régénérer une version optimisée de son application. L'objet de cet article est de donner quelques conseils et outils pour automatiser ce travail.

Tout d'abord, il faut adapter l'application afin de pouvoir effectuer automatiquement un scénario représentatif utilisant les parties du code couteuse en calcul. Si l'application est une application graphique, il peut être nécessaire d'ajouter une option non publique en ligne de commande afin d'effectuer un travail représentatif du cœur du moteur de calcul de l'application sans intervention utilisateur.

Pour cela nous allons construire un batch utilisant les options permettant de pilote une compilation en ligne de commande, et un petit utilitaire, PgoAdapt, modifiant automatiquement le projet (fichier .vcproj) pour sélectionner la phase de création d'application PGO. Ce batch sera à exécuter dans le contexte de variable du Visual studio 2005 (Menu Démarrer -> Tous les programmes -> Microsoft Visual studio 2005 -> Visual studio tools -> Visual Studio 2005 Command Prompt).

Etudions le batch pas à pas. Le batch compile une version avec l'optimisation PGO et une autre sans, à la fois en 64 bits et en 32 bits. Si vous n'avez pas installé le compilateur 64 ou si vous utilisez une version 32 bits de Windows, il faudra juste supprimer les lignes qui concernent spécifiquement la version 64 bits. Afin de ne pas alourdir la lecture, cet article ne reproduit que les lignes correspondantes à la compilation 32 bits.

Dans cet exemple, nous allons réaliser une compilation avec et sans PGO du compresseur AloneLZMA du LZMA SDK 4.43 (le moteur de compression utilisé par 7-zip). Les fichiers supplémentaires sont téléchargeable et à décompresser dans le même répertoire que le SDK LZma, le batch étant à exécuter dans le répertoire lzma443\C\7zip\Compress\LZMA_Alone.

Dans la première partie, nous supprimons les traces des compilations précédentes, et nous effectuons la compilation sans optimisation Pgo, et nous renommons le répertoire x86 en x86NoPgo, afin de conserver ces compilations à part.

@echo off
set file_test_cpr=zlib-1.2.3.tar
rd /S/Q x64
rd /S/Q Win32
rd /S/Q x64Pgo
rd /S/Q Win32Pgo
rd /S/Q x64NoPgo
rd /S/Q Win32NoPgo
@time /t
@echo Build >> build_perf.txt
@time /t >> build_perf.txt

"%VS80COMNTOOLS%\..\..\Common7\IDE\devenv.exe" AloneLZMA.sln /rebuild "Release|x64" /project AloneLZMA /out build_x64nopgo.txt
"%VS80COMNTOOLS%\..\..\Common7\IDE\devenv.exe" AloneLZMA.sln /rebuild "Release|Win32" /project AloneLZMA /out build_x86nopgo.txt
ren x64 x64NoPgo
ren Win32 Win32NoPgo

Ensuite, nous effectuons la première phase de la compilation avec optimisation PGO, c'est à dire Compilation en code instrumenté. L'utilitaire PgoAdapt modifie le projet .vcproj afin de compiler une application instrumentée, avant de lancer cette compilation :

PgoAdapt AloneLZMA.vcproj * 2

"%VS80COMNTOOLS%\..\..\Common7\IDE\devenv.exe" AloneLZMA.sln /rebuild "Release|Win32" /project AloneLZMA /out build_x86pgo.txt

La phase suivante est la formation du code instrumenté : l'application est appelée pour exécuter les scénarios. Il est évidemment possible de lancer plusieurs fois l'application avec des paramètres différents, si cela permet d'exécuter plusieurs scénarios complémentaire. (On aura alors un fichier .PGC différents par scénario différents).

REM : for access to PGO DLL
CALL "%VS80COMNTOOLS%\..\..\VC\vcvarsall.bat" x86
start /wait Win32\AloneLZMA\release\lzma e %file_test_cpr% to_be_deleted
del to_be_deleted

La dernière phase, la recompilation en code optimisé, est appelée lorsque toutes les instrumentations ont été effectuée. De nouveau, PgoAdapt modifie le projet, avant d'appeler Visual studio. Notons que l'option /build et non /rebuild est utilisée, car il est évidement indispensable de garder le résultat des étapes précédentes. Le fichier exécutable instrumenté est auparavant renommé, affin que ce /build provoque la recréation d'un exécutable.

PgoAdapt AloneLZMA.vcproj * 3
ren Win32\AloneLZMA\release\lzma.exe *.exePgo
"%VS80COMNTOOLS%\..\..\Common7\IDE\devenv.exe" AloneLZMA.sln /build "Release|Win32" /project AloneLZMA /out build_x86pgo.txt

PgoAdapt est appelé une dernière fois, afin de remettre le projet dans le mode de compilation normale, et nous renommons le répertoire x86 en x86Pgo.

PgoAdapt AloneLZMA.vcproj * 1
ren x64 x64Pgo
ren Win32 Win32Pgo

L'exécution d'une compression d'un fichier de 260 Mo, nettement plus gros que le fichier utiliser pour le profil nous permet de mesurer les gains

version WPO

version PGO

Gain

Processeur Intel Core 2 Duo - 32 bits

144 sec

131 sec

9 %

Processeur Intel Core 2 Duo - 64bits

125 sec

119 sec

5 %

Processeur Amd Athlon 64 - 32 bits

257 sec

239 sec

7 %

Processeur Amd Athlon 64 - 64 bits

211 sec

202 sec

4 %

Le gain n'est pas négligeable. Evidemment, il est étroitement dépendant du type de code, et du choix adapté du jeux de fichier de traitement à faire exécuter, comme cela est décrit dans les articles concernant l'optimisation PGO cités plus haut.

Un outils pour l'automatisation : PgoAdapt

PgoAdapt, utilisé dans le batch décrit plus haut, permet d'effectuer automatiquement la modification du projet qui correspond au changement de mode "Profile Guided optimisation" dans l'interface graphique de Visual Studio 2005. C'est un utilitaire très simple qui se contente de modifier la valeur de la variable WholeProgramOptimization="#" dans le fichier .vcproj.

Il est évidemment fortement conseillé de sauvegarder le fichier .vcproj avant de le faire modifier par PgoAdapt. Il est indispensable que le projet soit déjà basculé en mode « Whole Program Optimisation », sinon PgoAdapt n'aura aucun effet.

PgoAdapt 1.00 - Gilles Vollant 2007 - http://www.winimage.com/misc/PgoAdapt

Usage:
PgoAdapt [project.vcproj] #
Where [project.vcproj] is filename of a Visual Studio 2005 project
# = 1 : for standard LTCG (without Profile-Guided Optimization)
# = 2 : for instrument PGO project
# = 3 : for optimize PGO project
# = 4 : for update PGO project

    Aucun commentaire pour le moment.

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
extraction dinformatio...
Budget : 300€
campagne Adwords
Budget : 5 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS