Analysieren von Schleifen

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.

previous    contents     next

Peter Junglas 18.10.1993