La commande prof

La commande prof affiche un profil d'utilisation de l'unité centrale pour chaque symbole externe, ou routine, d'un programme spécifié.

En détail, il affiche les éléments suivants:

  • Pourcentage de temps d'exécution passé entre l'adresse de ce symbole et l'adresse de la prochaine
  • Nombre de fois où cette fonction a été appelée
  • Nombre moyen de millisecondes par appel

La commande prof interprète les données de profil collectées par la sous-routine monitor () pour le fichier objet (a.out par défaut), lit la table des symboles dans le fichier objet et la met en corrélation avec le fichier de profil (mon.out par défaut) généré par la sous-routine monitor () . Un rapport d'utilisation est envoyé au terminal ou peut être redirigé vers un fichier.

Pour utiliser la commande prof, utilisez l'option -p pour compiler un programme source en C, FORTRAN ou COBOL. Une fonction de démarrage de profilage spéciale est insérée dans le fichier objet qui appelle la sous-routine monitor () pour suivre les appels de fonction. Lorsque le programme est exécuté, le sous-programme monitor() crée un fichier mon.out pour suivre le temps d'exécution. Par conséquent, seuls les programmes qui quittent ou reviennent explicitement du programme principal entraînent la production du fichier mon.out est produit. De plus, l'indicateur -p permet au compilateur d'insérer un appel à la sous-routine mcount () dans le code objet généré pour chaque fonction recompilée de votre programme. Lors de l'exécution du programme, chaque fois qu'un parent appelle une fonction enfant, l'enfant appelle la sous-routine mcount () pour incrémenter un compteur distinct pour cette paire parent-enfant. Compte le nombre d'appels à une fonction.
Remarque: Vous ne pouvez pas utiliser la commande prof pour le profilage du code optimisé.

Par défaut, le rapport affiché est trié par pourcentage décroissant de temps UC. Il s'agit de la même chose que lors de la spécification de l'option -t .

L'option -c trie par nombre décroissant d'appels et l'option -n trie par ordre alphabétique par nom de symbole.

Si l'option -s est utilisée, un fichier récapitulatif mon.sum est généré. Cela est utile lorsque plusieurs fichiers de profil sont spécifiés avec l'option -m (l'option -m indique les fichiers contenant les données du moniteur).

L'option -z inclut tous les symboles, même si aucun appel et aucune heure ne sont associés.

D'autres options sont disponibles et expliquées dans la commande prof dans le document Files Reference.

L'exemple suivant montre la première partie de la sortie de la commande prof pour une version modifiée du programme de test de performances Whetstone (double précision).
# cc -o cwhet -p -lm cwhet.c
# cwhet > cwhet.out
# prof
Name                 %Time     Seconds     Cumsecs  #Calls   msec/call
.main                 32.6       17.63       17.63       1  17630.
.__mcount             28.2       15.25       32.88
.mod8                 16.3        8.82       41.70 8990000      0.0010
.mod9                  9.9        5.38       47.08 6160000      0.0009
.cos                   2.9        1.57       48.65 1920000      0.0008
.exp                   2.4        1.32       49.97  930000      0.0014
.log                   2.4        1.31       51.28  930000      0.0014
.mod3                  1.9        1.01       52.29  140000      0.0072
.sin                   1.2        0.63       52.92  640000      0.0010
.sqrt                  1.1        0.59       53.51
.atan                  1.1        0.57       54.08  640000      0.0009
.pout                  0.0        0.00       54.08      10      0.0
.exit                  0.0        0.00       54.08       1      0.
.free                  0.0        0.00       54.08       2      0.
.free_y                0.0        0.00       54.08       2      0.
Dans cet exemple, de nombreux appels sont émis vers les routines mod8() et mod9() . Comme point de départ, examinez le code source pour voir pourquoi ils sont si utilisés. Un autre point de départ pourrait être d'examiner pourquoi une routine demande tant de temps.
Remarque: Si le programme que vous souhaitez surveiller utilise un appel système fork () , sachez que le parent et l'enfant créent le même fichier (mon.out). Pour éviter ce problème, modifiez le répertoire en cours du processus enfant.