Profilage de code sous Windows et Linux

Tous niveaux


précédentsommairesuivant

III. Valgrind et Callgrind

Valgrind est en réalité bien plus qu'un profileur, c'est un émulateur de processeur. Greffée par dessus se trouve une liste d'outils :

  • memcheck, qui vérifie les fuites mémoires, les dépassements,
  • cachegrind, qui mesure des données par rapport au cache,
  • callgrind, qui est le profileur en question.

Valgrind génère un fichier de résultat qui pourra être analysé par KCacheGrind.

Pour ajouter les informations de débuggage avec gcc, il suffit de compiler avec l'option -g.

III-A. Mise en place

Valgrind se lance en ligne de code à l'aide de cette commande :

 
Sélectionnez

valgrind --tool=callgrind --dump-instr=yes --simulate-cache=yes --compute-jumps=yes python exemples/measure_image.py

--dump-instr=yes permet d'enregistrer les instructions exécutées, indispensable pour comparer avec le code source, --simulate-cache=yes ajoute les coûts liés au cache, --compute-jumps=yes ajoute les sauts dans le rapport.

Contrairement au profileur de Visual Studio, à part les instructions et le cache, les autres coûts ne peuvent être mesurés (comme le nombre d'instructions flottantes, vectorielles, ...).

III-B. Analyse

Une fois le profil enregistré (un fichier callgrind.out.n), il reste à l'analyser.

Afin de pouvoir analyser le code source, il est nécessaire de configurer KCacheGrind (menu Options) et d'ajouter les dossiers où se trouvent les fichiers sources.

Image non disponible
Carte et graphe des appels triés par classe

Le rapport peut être classé par classe, par fichier source, ... La différence se situe au niveau des couleurs et au niveau des informations données en parallèle. Dans le cas suivant, le classement par classe ou par fichier source est très semblable (comme il y a un fichier source par classe...).

Image non disponible
Carte et graphe des appels triés par classe
Image non disponible
Carte et graphe des appels triés par fichier source

Une fois une fonction sélectionnée, le code (source et assembleur) peut être affiché.

En mode optimisé, gcc ne fournit pas toutes les informations du code source. Les fonctions ne peuvent pas toutes être analysées (comme dans le débuggeur gdb), même si KCacheGrind affiche le maximum de ce qu'il peut faire. Il s'agit d'un inconvénient majeur, à mon avis, de gcc sur Visual Studio.

Image non disponible
Coûts proposés

Tout comme Visual Studio, il est possible d'afficher les fonctions appelantes et appelées.

Image non disponible
Coûts proposés

Enfin, tous les coûts sont affichables pour une même fonction.

Image non disponible
Coûts proposés

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2008 Matthieu Brucher. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.