2009-08-17 8 views
4

Je cours cygwin sur Windows et utilise la dernière version de gprof pour profiler mon code. Mon problème est que le profil plat montre zéro sec pour chacune des fonctions dans mon code, j'ai même essayé de boucler les fonctions (essayé une boucle pour un million) mais gprof est incapable d'accumuler n'importe quand. S'il vous plaît aider. Voici une de mes fonctions exemple.impossible d'accumuler du temps avec gprof - le profileur gnu

bool is_adjacent(const char* a ,const char* b) 
{ 
    for(long long iter=0;iter<=1000000;iter++){ 
    string line1="qwertyuiop"; 
    string line2="asdfghjkl"; 
    string line3="zxcvbnm"; 
    string line4="1234567890"; 
    int pos=line1.find(*a); 
    if(pos!=string::npos){ 
    if ((line1[pos++]==*b)||((pos!=0)&&(line1[pos--]==*b))) 
     return true; 
    else return false;} 
    pos=line2.find(*a); 
    if(pos!=string::npos){ 
    if ((line2[pos++]==*b)||((pos!=0)&&(line2[pos--]==*b))) 
     return true; 
    else return false;} 
    pos=line3.find(*a); 
    if(pos!=string::npos){ 
    if ((line3[pos++]==*b)||((pos!=0)&&(line3[pos--]==*b))) 
     return true; 
    else return false;} 
    pos=line4.find(*a); 
    if(pos!=string::npos){ 
    if ((line4[pos++]==*b)||((pos!=0)&&(line4[pos--]==*b))) 
     return true; 
    else return false;} 
    } 
} 
+0

Nous avons besoin de plus d'informations pour vous aider. Pouvez-vous nous donner (1) la ligne de commande que vous avez passée pour exécuter 'gprof', et (plus important encore) (2) la ligne de commande que vous avez utilisée pour compiler votre programme? – quark

+0

1.compiling: $ g ++ -pg comp.cpp 2.execution: $/a.exe 3.Gprof gprof $ a.exe –

Répondre

0

Quelle version de gprof utilisez-vous? Certaines anciennes versions ont ce bug exact.

Exécutez gprof --version et dites-nous les résultats.

+1

2.18.50.20080625. –

1

Si votre objectif global est de trouver et de supprimer les problèmes de performance, vous pourriez consider this.

Je soupçonne que cela montrera que l'essentiel 100% du temps CPU est dépensé en trouver et chaîne de comparaison, laissant presque 0% pour votre code. C'est ce qui se passe lorsque seul le compteur du programme est échantillonné.

Si vous échantillonnez la pile d'appels, vous verrez que les lignes de code qui invoquent find et string-compare seront affichées sur la pile avec une fréquence égale au temps dont elles sont responsables. C'est la gloire de gprof.

P.S. Vous pouvez également comprendre cela en déplaçant le code au niveau du démontage.

1

Je rencontre ce problème de temps en temps. Esp. dans le code fortement threaded.

Vous pouvez utiliser valgrind avec l'option --callgrind (outil) qui vous permettra d'avoir au moins une vue plus détaillée du temps nécessaire à chaque appel de fonction. Il y a aussi un outil kde pour visualiser la sortie (et eswp.appelgraph) mieux appelée kcachegrind. Je ne sais pas si vous pouvez l'installer sur Cygwin.

Questions connexes