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 mal ausgeführt.
Peter Junglas 18.10.1993