4 Stimmen

Zeitstichprobenprobleme mit gprof

Ich versuche, mit gprof ein Profil von C++-Code zu erstellen, der mit g++ und der Option -pg kompiliert wurde. Obwohl das Programm auf meinem Computer 10-15 Minuten läuft (bei maximaler CPU-Auslastung), sind die Spalten % Zeit, kumulative Sekunden und eigene Sekunden der von gprof erstellten Tabelle vollständig 0,00s! Die Spalte "Aufrufe" enthält korrekt aussehende Daten, zum Beispiel über 150.000 Aufrufe einer Basisfunktion. Hier ist ein Beispiel für die gesammelten Daten:

  %   cumulative   self              self     total           

 time   seconds   seconds    calls  Ts/call  Ts/call  name

  0.00      0.00     0.00   156012     0.00     0.00  perm::operator[](int) const

  0.00      0.00     0.00   153476     0.00     0.00  perm::perm(void)

Das Programm verwendet keine Zeichenketten und das einzige #include ist iostream (nur für die Ausgabe der endgültigen Antwort verwendet), so dass es nicht langsam sein kann, weil der String findet und vergleicht oder andere ähnliche langsame externe Funktionen wie in dieser Frage vorgeschlagen: nicht in der Lage, mit gprof - dem gnu-Profiler - Zeit zu sammeln

Das Programm selbst wird problemlos beendet, und ich habe keinen Grund zu der Annahme, dass die Profildaten nicht korrekt geschrieben werden (wie hier vorgeschlagen wurde): gprof meldet keine akkumulierte Zeit )

Da dies alles unter Windows 7 geschieht, ist die Verwendung von Shark oder Valgrind keine Option.

Gibt es einen Grund dafür, dass in jeder Funktion 0,00s ausgegeben werden?

4voto

Mike Dunlavey Punkte 39339

gprof zählt keine blockierte Zeit, wie E/A oder andere Dinge. Außerdem ist die "Eigenzeit" typischerweise in jeder Routine, die ihre gesamte Arbeit in Unterfunktionen erledigt, extrem klein, z. B. wenn Sie hauptsächlich eine Bibliothek in einer DLL verwenden, die gprof nicht sehen kann. Prüfen Sie diese Antwort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X