Profiling

Objectif : déterminer les parties du code qui consomment le plus de temps CPU → Profiling

Trois étapes pour le «profiling» :

  1. Instrumentation du programme par le compilateur : -p, –pg
  2. Exécution du programme instrumenté fichier de données pour le profiler (mon.out,gmon.out,…)
  3. 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