Profiling
Objectif : déterminer les parties du code qui consomment le plus de temps CPU → Profiling
Trois étapes pour le «profiling» :
- Instrumentation du programme par le compilateur :
-p, –pg
- Exécution du programme instrumenté fichier de données pour le profiler (
mon.out,gmon.out,…
) - Utilisation du profiler pour l'extraction et la lecture des résultats :
prof, gprof
Compilation :
$ gcc -p programe.c -o programme
Exécution :
$ ./programme
$ ls
$ programme.c programme gmount.out
Lancement de gprof
:
$ gprof ./programme
La commande gprof fournit un compte-rendu de la consommation CPU pour chaque routine du code
% time cumulative seconds self seconds calls self ms/call total ms/call name 36.9 92.23 92.23 87253 1.06 1.06 .saxpy [4] 29.9 167.06 74.83 45751 1.64 1.64 .pmv [5] 22.0 222.15 55.09 61502 0.90 0.90 .prodscal [6] 6.1 237.48 15.33 10000 1.53 3.17 .scdmb [7] 5.1 250.19 12.71 10000 1.27 21.85 .gradconj [3] 0.0 250.22 0.03 .__mcount [8] 0.0 250.25 0.03 .qincrement [9] 0.0 250.27 0.02 1 20.00 20.00 .fctfx [10] 0.0 250.28 0.01 6 1.67 1.67 .nrmerr [1] 0.0 250.28 0.00 20000 0.00 0.00 .fctft [12] 0.0 250.28 0.00 252 0.00 0.00 ._sigsetmask [13] 0.0 250.28 0.00 170 0.00 0.00 thread_mutex_lock [14]
Analyse du résultat
- La colonne
% time
indique le pourcentage du temps cpu total consommé par la routine courante. - La colonne
cumulative seconds
représente la somme partielle des temps cpu du haut de la liste jusqu'à la routine courante - La colonne
self seconds
représente le temps cpu de la routine courante - La colonne
calls
indique le nombre d'appels de la routine courante - La colonne
self ms/call
indique le temps cpu moyen (en milisecondes) consommé par appel à la routine courante, temps exclusif (ne contient pas la consommation des routines qu'elle appelle) uniquement - La colonne
total ms/call
indique le temps total (inclusif + exclusif) consommé par appel à la routine courante