Re: langage C et performances, merci à tous, mais...

Page principale

Répondre à ce message
Auteur: Francois-Xavier 'FiX' KOWALSKI
Date:  
À: Mailing-List GUILDE
Sujet: Re: langage C et performances, merci à tous, mais...
Salut Sylvain,

Letuffe Sylvain <slyserv@???> writes:

> > 2) Si les fonctions qui consomment beaucoup de ressources sont de grande
> > taille alors compile les fichiers qui les contiennent (et uniquement
> > ceux la) avec l'option -pg. Utilise egalement cette option a l'edition
> > de liens. Relance l'executable et utilise alors la commande
> > gprof nom_de_l'executable > listing.detaille
> > La, tu auras en principe une analyse fine au niveau des boucles de ces
> > fonctions. Tout compiler en -pg sur un code important te genererait un
> > trop gros volume d'information avec -pg et serait difficile a exploiter.
>
>
> Mon programme est relativement simple et l'option -pg me va pas trop mal,
> ( a-priori )
> j'ai qu'un seul programme et pas d'autres fichiers à compiler séparément.
> ce que je voudrais profiler, grosso modo, c'est une dizaines de fonctions max.
>
> et avoir une vue un peu hierarchique car la fonction fondamentale que j'appel
> ( bouffant d'ailleurs 60% du temps ) est appelée par plusieurs sous fontions
> et je pédale dans la purée avec gprof... ( en plus d'avoir des annomalies )
> pourrais-t-il y avoir des incompatibilités de l'option -pg ?
> avec gtk peut-etre ?


Pas d'incompatibilite. L'option -pg a la compilation instrumente ton
code pour generer le fichier gmon.out. La meme option au link permet
d'utiliser une version instumentee de la glibc (libc_p). Tout code
non instrumente ne generera pas d' information, c'est tout.

La page de man de gprof (comme toutes les pages de man des outils lies
a GCC, comme Make & autres) est tres succinte (voire parfois
incomplete ou obsolete). Il vaut mieux se referer aux pages "info":

$ info gprof

Ou le browser d'aide de GNOME, dans l;a section "Info Pages":

$ gnome-help-browser &

> extrait :
>    %   cumulative   self              self     total           
>  time   seconds   seconds    calls  ms/call  ms/call  name    
>  65.65      3.02     3.02 28886579     0.00     0.00  calcul_norme_pre
>  13.91      3.66     0.64      621     1.03     4.44  decoup
>  12.83      4.25     0.59      873     0.68     2.28  decrois

>
>   6.74      4.56     0.31    33191     0.01     0.03  algo_btd
> ->  jamais j'appel cette fonction !! elle existe mais je ne l'ai pas
> appelée lors du test


Le fichier gmon.out n'est pas forcement re-initialise lors d'une
execution. Cela permet de faire tourner une suite de test complete &
de consulter le resultat apres (gcov, pour le test de couverture du
code) a egalement cette fonctionnalite.

>   0.43      4.58     0.02    51548     0.00     0.00  permut
>   0.43      4.60     0.02     3389     0.01     0.01  longueur_chemin
>   0.00      4.60     0.00    67973     0.00     0.00  copie
>   0.00      4.60     0.00    51548     0.00     0.00  permutvilles
>   0.00      4.60     0.00    33558     0.00     0.00  aleatoire01
>   0.00      4.60     0.00     3600     0.00     0.00  calcul_norme
>   0.00      4.60     0.00      552     0.00     0.00  aleatoire1n
>   0.00      4.60     0.00       70     0.00     0.01  operation_chemin
>   0.00      4.60     0.00       69     0.00     0.00  pourcent
>   0.00      4.60     0.00       60     0.00     0.00  draw_brush
>   0.00      4.60     0.00       60     0.00     0.00  draw_line
>   0.00      4.60     0.00       60     0.00     0.00  refresh
>   0.00      4.60     0.00        1     0.00  4599.99  algo_fourmis


A+
--
François-Xavier 'FiX' KOWALSKI