Exemple d’utilisation de l’outil de profilage prof La commande prof de Unix
Profilage avec prof Compte le nombre des appels à chacune des fonctions et mesure le temps passé dans chacune d’elles –Avantages :- Fourni avec Unix (arabica) - Simple d’utilisation –Inconvénients :- Donne seulement les informations sur les fonctions (pas un problèmes si le programme est bien structuré ) - Résultats pas toujours faciles à analyser pour des programmes de grande taille (trop d’informations) Sous Linux, l’outil de profilage s’appelle gprof
Utilisation Compiler le programme avec l’option –p –cc –p nomFichier.c Exécuter le programme normalement –a.out Lire le fichier mon.out avec prof –prof[-options] Attention: –Le fichier mon.out contient seulement les informations sur les fichiers compilés et liés avec l’option –p de cc. Faire attention si on utilise la compilation séparée des fichiers ou un makefile !
Options utiles (Traduction de man.SunOS 5.8Last change: 1 Nov 1999) SYNOPSIS prof [ -ChsVz ] [ -a | c | n | t ] [ -o | x ] [ -g | l] [ -m mdata ] [ prog ] OPTIONS Les options mutuellement exclusives : -a, -c, -n, et -t déterminent le type de tri appliqué à la sortie : -aTri par adresse croissante des fonctions -cTri par nombre décroissant d’appels -nTri par nom de fonction -tTri par pourcentage décroissant du temps tota (option par défaut) -m mdataUtilise le fichier mdata au lieu du fichier mon.out à l’entrée de prof
Exemple On utilise un petit programme de calcul statistique. Le programme calcule la moyenne des valeurs contenues dans un fichier, la valeur de la statistique chi-carré et sa valeur critique. Ensuite, le programme annonce si l'hypothèse nulle a été acceptée ou non. Le fichier de données (Gauss_2-LOG.hit) et le fichier des tables avec des valeurs critiques (tableChiSquare.txt) doivent être dans le même répertoire que le programme exécutable. La valeur de alpha choisie par défaut est 0.05 (pour plus de détails se référer à votre cours de statistiques MAT4680). Attention: Ce programme a été modifié pour le test de la fonction de profilage de Unix. Ce n’est pas un exemple de programmation efficace. Le programme est exécuté (en boucle) le nombre de fois spécifié en entrée par l'utilisateur (dans notre exemple 1, 100, 1000 et fois).
Exemple (2) Utilisation : Compiler : cc -p chiSquarePourProf (crée l’exécutable et le fichier de profil) Exécuter : a.out nbToursDeBoucle (donne des valeurs intéressantes à partir de 1000 appels) Lire le profilage : prof [-options] Liens vers le programme et les fichiers des données: chiSquarePourProf.c Gauss_2-LOG.hit tableChiSquare.txt
Résultats pour une (1) itération (valeur de 1 dans la boucle for principale) % a.out 1 Début main Moyenne Chi Square Valeur critique Accepter H0, pas de différence significative fin main Le programme a utilisé secondes % prof %Time Seconds Cumsecs #Calls msec/call Name libererMemoire accepterHypotheseNulle valeurCritique chiSquare moyenne lecture main
Résultats pour 100 itérations Le programme a utilisé secondes % prof %Time Seconds Cumsecs #Calls msec/call Name valeurCritique libererMemoire accepterHypotheseNulle chiSquare moyenne lecture main
Résultats pour itérations Le programme a utlilisé secondes % prof %Time Seconds Cumsecs #Calls msec/call Name valeurCritique chiSquare lecture libererMemoire accepterHypotheseNulle moyenne main
Résultats pour itérations Le programme a utilisé secondes % prof %Time Seconds Cumsecs #Calls msec/call Name chiSquare valeurCritique moyenne lecture main accepterHypotheseNulle libererMemoire
Conclusions On peut voir que le nombre d’opérations effectuées peut influencer le résultat produit par prof. Le temps cumulé (pour itérations) donné par prof est de 2.05 secondes, comparativement aux secondes données par la fonction clock(). La différence s’explique par le fait que prof mesure le temps réellement utilisé par les fonctions, alors que l’instruction clock() tient compte du temps global, c-à- d., elle mesure aussi le temps utilisé par d’autres programmes (y compris les fonctions système) exécutés en même temps. Les procédures à optimiser seraient donc chiSquare et valeurCritique. La première fait appel à la fonction qui calcule la moyenne et leur temps d’utilisation s’additionnent. La fonction valeurCritique lit un fichier, il est donc « normal » qu’elle soit relativement lente.