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ébogage 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 :
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.
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…).
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ébogueur 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.
Tout comme Visual Studio, il est possible d'afficher les fonctions appelantes et appelées.
Enfin, tous les coûts sont affichables pour une même fonction.