Existe-t-il un profileur pour C (gcc) permettant de profiler les lignes de code séparément?

Je viens d’un milieu Matlab et je suis donc habitué à un profileur qui profile chaque ligne et pas seulement toutes les fonctions comme gprof ou callgrind . Existe-t-il un profileur pour C avec une fonctionnalité similaire?

Merci!

capture d'écran matlab profiler

Shark, l’un des outils de profilage de Mac OS X, peut le faire (ou même profiler par instructions). Je me rends compte que votre capture d’écran est sur Windows, ce qui n’est peut-être pas utile, mais vous pouvez peut-être exécuter votre code sur un Mac. Vous pourriez essayer Very Sleepy , mais je ne l’ai jamais utilisé, donc je ne sais pas à quel point c’est bon.

Vous pouvez utiliser l’utilitaire GNU GCOV pour effectuer un profilage ligne par ligne. Exemple exécuté à partir de la documentation GCC .

 $ gcc -fprofile-arcs -ftest-coverage tmp.c $ a.out $ gcov tmp.c 90.00% of 10 source lines executed in file tmp.c Creating tmp.c.gcov 

Le fichier tmp.c.gcov contient une sortie comme:

  -: 0:Source:tmp.c -: 0:Graph:tmp.gcno -: 0:Data:tmp.gcda -: 0:Runs:1 -: 0:Programs:1 -: 1:#include  -: 2: -: 3:int main (void) 1: 4:{ 1: 5: int i, total; -: 6: 1: 7: total = 0; -: 8: 11: 9: for (i = 0; i < 10; i++) 10: 10: total += i; -: 11: 1: 12: if (total != 45) #####: 13: printf ("Failure\n"); -: 14: else 1: 15: printf ("Success\n"); 1: 16: return 0; -: 17:} 

Je crois que callgrind fait ça. Je sais que le nombre de cycles par ligne est compté, mais je ne suis pas sûr du «temps».

Vérifiez ce lien et essayez cette méthode .

Le problème avec un exemple comme Mandelbrot est que ce n’est pas un très gros programme. Dans les logiciels du monde réel, l’arbre des appels devient beaucoup plus profond et beaucoup plus touffu. Vous devez donc connaître, par ligne ou par instruction, le pourcentage de temps dont il est responsable. emstackr. Vous avez donc besoin de quelque chose qui échantillonne la stack d’appels et vous indique, pour chaque ligne ou instruction qui y figure, le pourcentage d’échantillons sur lequel elle se trouve. Vous n’avez pas besoin d’une haute précision de mesure – c’est l’un des mythes.

Il existe des outils qui font cela, l’un est RotateRight / Zoom , et un autre est LTProf . Personnellement, je ne jure que par la méthode totalement manuelle.

Au cours des derniers jours, nous avons eu un problème de performance dans certains codes ici. Par la méthode manuelle, j’ai trouvé un moyen d’économiser 40%. Ensuite, j’ai trouvé un moyen d’économiser 40% de plus, pour une économie totale de 64%. Ce n’est qu’un exemple. Voici un exemple d’économie de plus de 97%.

Ajouté: Cela a des implications sociales qui peuvent limiter l’accélération potentielle. Supposons qu’il y a trois problèmes. Le problème A (dans votre code) prend la moitié du temps. Le problème B (dans le code de Jerry) prend 1/4 du temps et le problème C (dans votre code), 1/8 du temps. Lorsque vous échantillonnez, le problème A vous saute aux yeux et, comme il s’agit de votre code, vous le corrigez et le programme prend maintenant la moitié du temps initial. Ensuite, vous échantillonnez à nouveau et le problème B (qui est maintenant 1/2) vous saute aux yeux. Vous voyez que c’est dans le code de Jerry, vous devez donc l’expliquer à Jerry, en essayant de ne pas l’embarrasser, et lui demander s’il peut le réparer. S’il ne le fait pas pour quelque raison que ce soit (comme si c’était l’un de ses codes préférés), alors même si vous corrigez le problème C, le temps ne pourrait être réduit qu’à 3/8 du temps initial. S’il le résout, vous pouvez corriger C et descendre à 1/8 du temps initial. Ensuite, il pourrait y avoir un autre problème D (le vôtre) qui, si vous le résolvez, peut réduire le temps à 1/16 du temps initial, mais si Jerry ne résout pas le problème B, vous ne pouvez pas faire mieux que 5/16. C’est ainsi que l’interaction sociale peut être absolument essentielle dans le réglage des performances.

La seule technique qui fonctionne (car elle a été utilisée sur moi) consiste à présenter les informations d’un ton désolé et désolé, comme s’il s’agissait de votre problème, et à persister dans la présentation des informations. Le ton excusé désamorce l’embarras et sa persistance le fait réfléchir.

Notre outil SD C Profiler fonctionne avec le code source GCC. Il fournit un profilage de blocs de base plutôt que de lignes; Cela donne les mêmes informations avec des frais généraux considérablement réduits.