Analysieren von Blöcken

Die Daten eines Laufs mit Messungen auf Block-Ebene bekommt man mit
     analyze block [ROUTINE] ,
wieder für eine bestimmte Routine oder für alle. Für die Routine ``testmt'' erhält man beispielweise:
Basic Block Performance Analysis  
(sorted by line number)  
For testmt.f:testmt  
   
Pc Value Block Line # Times Executed  
0x80002888 24 2 0 .0%
0x800028f0 28 200 0 .2%
0x800028aa 28 2 0 .0%
0x8000293c 29 20000 16 .6%
0x80002908 29 200 0 .2%
0x80002972 31 20000 16 .6%
0x80002958 31 20000 16 .6%
0x800029a0 34 20000 16 .6%
0x800029ba 35 200 0 .2%
0x800029da 37 19800 16 .4%
0x800029f0 39 20000 16 .6%
0x80002a1e 41 200 0 .2%
0x80002a50 46 2 0 .0%
0x80002ad4 50 2 0 .0%


Blocks Not Executed
For testmt.f:testmt
 
Pc Value Block Line #
0x80002a6a 47


Für jeden Block wird seine Adresse und Zeilennummer angegeben, wie oft er durchlaufen und wieviel CPU-Zeit dabei verbraucht wurde. Ausserdem folgt eine Liste aller Blöcke, die gar nicht ausgeführt wurden, wie hier z.B. die Ausgabe im Fehlerfall in den Zeilen 47 und 48. Die Aufschlüsselung ist sehr fein, man kann sie fast als Histogramm neben das Listing legen. Einige Zeilen enthalten sogar mehr als einen Block, etwa Zeile 28: Die Initialisierung des Schleifenzählers bildet einen Block, der nur zweimal durchlaufen wird. (``testmt'' wird zweimal aufgerufen.) Das Inkrementieren und die Prüfung, ob der Endwert erreicht wird, bilden den zweiten Block; er wird $2*\mbox{N}$ mal ausgeführt.

previous    contents     next

Peter Junglas 18.10.1993