Kompilieren Sie einfach mit -pgflag (ich denke (bin mir aber nicht sicher), ob Sie Optimierungen deaktivieren müssen.) Und analysieren Sie mit gprof die Datei gmon.out, die Ihre ausführbare Datei dann erstellt.
Das Profilieren von nicht optimiertem Code ist ein bisschen sinnlos, nicht wahr? In ähnlicher Weise führt Sie der mit -pg stark modifizierte Profiling-Code häufig dazu, die falschen Stellen zu optimieren.
dachte, Valgrind war mehr für die Überprüfung von Speicherlecks. Ich versuche zu sehen, welche Funktionen aufgerufen werden usw.
Shergill
14
Verwenden Sie das Suite-Tool "callgrind"
dfa
2
Valgrind ist einfach ein Framework zum Erstellen dynamischer Tools. Obwohl es zum Synonym für Memcheck geworden ist, ein Tool, das auf Valgrind basiert. Callgrind ist ein ziemlich guter Profiler.
Ich habe den Zoom von RotateRight ( http://www.rotateright.com ) verwendet. Es hat eine Butterfly-Ansicht der Funktionen und Sie können auf jede Funktion doppelklicken, um in den Quell- oder ASM-Code einzutauchen. Erstellen Sie mit Debugging-Informationen (-g), um Ihre Quelle anzuzeigen. Sie sollten jedoch weiterhin optimierten Code erstellen und profilieren .
Habe gerade dieses Programm ausprobiert, es ist wirklich sehr schön! Derzeit mein Lieblingsprofiler unter Linux; Es ist jedoch erwähnenswert, dass Code erstellt werden muss, -fno-omit-frame-pointerum ein effektives Profil zu erstellen.
Nik Reiman
1
Der Link scheint tot zu sein. Weiß jemand, wo (oder ob) es woanders zu finden ist?
Simon F
12
Ich bin ein Fan von Oprofile . Es beinhaltet die Installation eines Kernelmoduls und hat eine gewisse Lernkurve, ist aber ziemlich leistungsfähig und funktioniert sehr gut für optimierte Programme / Programme ohne Debugging von Symbolen.
Vtune ist ein weiterer sehr leistungsfähiger Profiler von Intel. Ich glaube, die Linux-Version ist kostenlos für nichtkommerzielle Software.
Es gibt auch die von dfa vorgeschlagene Valgrind-Tool- Suite. Callgrind ist wahrscheinlich das, woran Sie am meisten interessiert sind. Cachegrind (dessen Feature-Set eine Teilmenge von Callgrind ist) und Massif sind ebenfalls interessant, aber ich habe keine Erfahrung mit letzterem.
+1 für oprofile, das ist kein "einfaches Werkzeug"
dfa
1
Haha, wahr. Ich sollte das wahrscheinlich nicht so einfach machen :) Es ist sicherlich nicht so einfach wie "Programm darunter ausführen" wie die Tools Vtune und Valgrind, aber ich glaube, Sie gewöhnen sich ziemlich schnell daran.
Falaina
oprofile sieht interessant aus - unterstützt es x86_64?
LiraNuna
VTune ist leider für keine Zwecke kostenlos.
Rustyx
5
Werfen Sie einen Blick auf KCacheGrind , die ein grafisches Frontend ist valgrind und macht es wirklich einfach , es zu benutzen.
Schauen Sie sich Sysprof an . Ihre Distribution hat es höchstwahrscheinlich bereits verfügbar.
Beachten Sie, dass alle genannten Profiler am besten funktionieren, wenn Ihre Anwendung mit Frame-Zeigern kompiliert wird. Das heißt, Sie sollten -fno-omit-frame-pointer in der gcc-Befehlszeile verwenden.
Antworten:
Verwenden Sie gprof.
Kompilieren Sie einfach mit
-pg
flag (ich denke (bin mir aber nicht sicher), ob Sie Optimierungen deaktivieren müssen.) Und analysieren Sie mit gprof die Datei gmon.out, die Ihre ausführbare Datei dann erstellt.z.B:
Gleiches gilt für g ++ und cpp.
quelle
valgrind ist ein bekannter Linux-Profiler
quelle
Ich habe den Zoom von RotateRight ( http://www.rotateright.com ) verwendet. Es hat eine Butterfly-Ansicht der Funktionen und Sie können auf jede Funktion doppelklicken, um in den Quell- oder ASM-Code einzutauchen. Erstellen Sie mit Debugging-Informationen (-g), um Ihre Quelle anzuzeigen. Sie sollten jedoch weiterhin optimierten Code erstellen und profilieren .
quelle
-fno-omit-frame-pointer
um ein effektives Profil zu erstellen.Ich bin ein Fan von Oprofile . Es beinhaltet die Installation eines Kernelmoduls und hat eine gewisse Lernkurve, ist aber ziemlich leistungsfähig und funktioniert sehr gut für optimierte Programme / Programme ohne Debugging von Symbolen.
Vtune ist ein weiterer sehr leistungsfähiger Profiler von Intel. Ich glaube, die Linux-Version ist kostenlos für nichtkommerzielle Software.
Es gibt auch die von dfa vorgeschlagene Valgrind-Tool- Suite. Callgrind ist wahrscheinlich das, woran Sie am meisten interessiert sind. Cachegrind (dessen Feature-Set eine Teilmenge von Callgrind ist) und Massif sind ebenfalls interessant, aber ich habe keine Erfahrung mit letzterem.
quelle
Werfen Sie einen Blick auf KCacheGrind , die ein grafisches Frontend ist valgrind und macht es wirklich einfach , es zu benutzen.
quelle
Google hat auch einen netten Profiler als Teil der Google-Perftools - die in Debian / Ubuntu und möglicherweise anderen Distributionen enthalten sind.
quelle
gprof ist das Standard-Gnu-Tool für die Profilerstellung.
quelle
Schauen Sie sich Sysprof an . Ihre Distribution hat es höchstwahrscheinlich bereits verfügbar.
Beachten Sie, dass alle genannten Profiler am besten funktionieren, wenn Ihre Anwendung mit Frame-Zeigern kompiliert wird. Das heißt, Sie sollten -fno-omit-frame-pointer in der gcc-Befehlszeile verwenden.
quelle
Das benutze ich.
quelle