Sprachen
»de« en 
Benutzerkonto
Benutzername

Passwort


Profiler

Einführung

Programme sind normalerweise in viele einzelne Funktionen aufgeteilt. Manche werden selten, andere sehr häufig aufgerufen. Bei manchen dauert die Ausführung lange, bei anderen nur kurz.

Für den Geschwindigkeitsbewussten Programmmierer ist es interessant herauszufinden, welche Funktionen besonders häufig aufgerufen werden, und in welchen Funktionen am meisten Zeit verloren geht. Daraus kann er schliessen, welche Funktionen er optimieren sollte, oder bei welchen er einen zu häufigen Aufruf vermeiden muss, weil sie zu lange dauert.

Programme, die bei der Erstellung dieser Statistiken helfen werden Profiler genannt. Im Folgenden wird als Beispiel die GNU-Version des Profilers, gprof, an einem kleinen Beispiel beschrieben.

Gprof - Beispiel

Vorbereitungen

Um Programme mit einem Profiler zu untersuchen, müssen diese mit einer speziellen Compileroption übersetzt werden. Bei GNU-Compiler ist dies -pg. Also z.B.:

gcc -pg -o beispiel beispiel.c 

Benutzung von Gprof

Wird ein Programm, das mit der option -pg übersetzt wurde ausgeführt, hinterlässt es im aktuellen Verzeichnis eine Datei namens gmon.out. Wurde zum Beispiel das Programm kcalc mit der Option -pg übersetzt, kann man gmon.out mit folgendem Befehl auswerten lassen:

gprof ./kcalc gmon.out > auswertung.txt

auswertung.txt kann jetzt mit einem normalen Texteditor geöffnet werden und enthält die Statistischen Angaben wie im folgenden Beispiel:

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  us/call  us/call  name    
100.00      0.01     0.01        1 10000.00 10000.00  ConfigureDialog::setupSettingPage(void)
  0.00      0.01     0.00     1233     0.00     0.00  QShared::deref(void)
  0.00      0.01     0.00      959     0.00     0.00  QString::~QString(void)
  0.00      0.01     0.00      807     0.00     0.00  QValueListNode::~QValueListNode(void)
  0.00      0.01     0.00      272     0.00     0.00  QValueList::~QValueList(void)
  0.00      0.01     0.00      272     0.00     0.00  QValueListPrivate::derefAndDelete(void)
  0.00      0.01     0.00      247     0.00     0.00  QtCalculator::staticMetaObject(void)
  0.00      0.01     0.00      220     0.00     0.00  QValueListPrivate::~QValueListPrivate(void)
  0.00      0.01     0.00      100     0.00     0.00  QList::at(unsigned int)
  0.00      0.01     0.00       96     0.00     0.00  QList::next(void)

...

Eine genauere Anleitung zu GNU prof ist zu finden unter:
http://www.gnu.org/manual/gprof-2.9.1/html_mono/gprof.html

Interpretation der Resultate

Gprof zeigt die Funktionsaufrufe sortiert nach der Gesamtzeit, die sie in Anspruch genommen haben. Um ein Programm schneller zu machen, lohnt es sich die zu oberst angezeigten Funktionen nach möglichen Optimierungen zu durchsuchen, oder die Häufigkeit ihres Aufrufs zu verkleinern.

Profiler Links

  • Ein ausführlicheres Beispiel an einem realen Programm (Qt designer)

Diverse Profiling-Tools:

  • gprof
    Der GNU-Profiler
  • FunctionCheck
    Ein anderer gcc-kompatibler Profiler
  • kprof
    Ein KDE-Frontend zu gprof oder FunctionCheck mit grafischer Darstellung der Resultate
  • KCachegrind
    Ein Frontend zu Cachegrind, einem speziellen Profiler der über eine CPU-Emulation funktioniert und somit keine speziellen Compileroptionen benötigt. Selbst shared Libraries und Plugins können profiliert werden.

© 2000 - 2001 by Stefan Heimers
Kürzlich geändert
Dieser Server (de)
2024-05-04 18:16:25
Defragmentieren (de)
2023-12-21 12:43:54
Vorverstärker (de)
2023-12-21 12:43:54
Sunday Webserver (de)
2023-12-21 12:43:54
Linker (de)
2023-12-21 12:43:54
Partitionieren (de)
2023-12-21 12:43:54