Meßergebnisse für alle ausgewählten Schleifen einer Routine erhält man
mit
analyze loop [ROUTINE] ,
ohne Routinennamen für alle Routinen. Sie werden in zwei Tabellen
dargestellt. Da der Compiler Schleifen erst ab der Optimierungsstufe -O1
erkennt, machen Schleifenanalysen für niedrigere Optimierung keinen Sinn
und liefern falsche Werte. Als Beispiel sehen wir uns die Ergebnisse für
die Routine ``lubksb'' an:
Loop Performance Analysis |
For lubksb.f:lubksb |
|
Line |
Times |
Iteration Count |
|
Number |
Exec. |
Min |
Max |
Avg |
Total CPU Time |
32 |
101 |
100 |
100 |
100 |
0.049237 |
37 |
5049 |
1 |
99 |
33 |
0.018813 |
45 |
101 |
99 |
99 |
99 |
0.077001 |
48 |
9999 |
1 |
99 |
50 |
0.047125 |
Für jede Schleife, gegeben durch die Nummer der Zeile, in der sie beginnt,
ist dargestellt, wie oft sie aufgerufen wird, wie oft sie mindestens,
höchstens und im Mittel durchlaufen wurde und wieviel CPU-Zeit insgesamt
dabei verbraucht wurde.
Loop Transformation Performance Analysis |
|
For lubksb.f:lubksb |
|
|
|
Line |
Trans |
Times |
Iteration Count |
|
|
Number |
Formation |
Exec. |
Min |
Max |
Avg |
Total CPU Time |
|
32 |
0 |
. | S |
101 |
100 |
100 |
100 |
0.030424 |
37 |
1 |
. | SM |
5049 |
1 |
99 |
33 |
0.018813 |
|
|
|
|
|
|
|
|
45 |
0 |
. | S |
101 |
99 |
99 |
99 |
0.029876 |
48 |
1 |
. | SM |
9999 |
1 |
99 |
50 |
0.047125 |
Die zweite Tabelle zeigt in der zweiten Spalte vor dem Doppelpunkt die
Verschachtelungstiefe einer Schleife an, wobei äußere Schleifen die Tiefe
0 haben. Die folgenden Buchstaben bezeichnen die Umformungen, die der
Vektorisierer an der Schleife vorgenommen hat, z.B. ``S'' für eine skalare
Schleife (d.h. unverändert), ``SM'' für sogenanntes ``strip mining''.
10
Die letzte Spalte enthält im Gegensatz zur vorigen Tabelle die
CPU-Zeiten innerhalb einer Schleife fester Tiefe, d.h. ohne die Zeit, die
in einer vollständig umschloßenen Schleife verbraucht wird. Alle anderen
Einträge sind mit denen der ersten Tabelle identisch.
Peter Junglas 18.10.1993