Hardware Reference
In-Depth Information
Loop Unrolling
Eine weitere Moglichkeit, Sprunge zu vermeiden, bietet das Ausrollen von
Schleifen, so genanntes Loop Unrolling . Diese Technik funktioniert nur bei
einer bekannten und festen Anzahl an Durchlaufen durch eine Schleife. Wir
betrachten als Beipiel die Multiplikation zweier Drei-Mal-Drei Matrizen. Der
besseren Ubersichtlichkeit halber geben wir ein Hochsprachenprogramm an
und keine Assembler-Befehle:
for ( int i=0; i < 3 ; i ++)
for ( int j=0; j < 3 ; j ++)
for ( int k= 0; k < 3 ; k++)
m3 [ i ] [ j ] += m1 [ i ] [ k ]
m2 [ k ] [ j ] ;
Die innere Schleife uber k wird dabei 27 Mal durchlaufen. Bei der Umsetzung
in Assemblercode wird am Ende dieser Schleife ein Vergleich von k mit dem
Wert 3 stehen und anschließend eine bedingte Verzweigung.
Ein Ausrollen der Schleife bedeutet, dass der Verzweigungsbefehl wegfallt
und stattdessen die Befehle der Schleife drei Mal ausprogrammiert werden,
wie in folgendem Codefragment zu sehen:
for ( int i=0; i < 3 ; i ++)
for ( int j=0; j < 3 ;
j ++)
m3 [ i ] [ j ] =
m1 [ i ] [ 0 ]
m2[0][ j]
+ m1[i ][1]
m2[1][ j]
+ m1[i ][2]
m2[2][ j ];
Dies vermeidet in dem Beispiel ein Drittel aller bedingten Verzweigungen.
Andererseits wird dadurch die Große des Codes aufgeblaht und der Befehls-
cache starker belastet. Es ist im Einzelfall zu entscheiden, welche Variante
schneller lauft. Diese Technik kann e zient nur von gut optimierenden Com-
pilern genutzt werden.
6.7
6.7 Sprungvorhersage bei MMIX
Die Trefferquote von statischen Vorhersagen lasst sich fur MMIX leicht er-
mitteln. Der Simulator mmix fuhrt Buch uber die Anzahl der guten bzw.
schlechten Vorhersagen, die durch Verwendung der Statistikausgabe (Option
-s ) angezeigt werden kann. Dies lasst aber nur Aussagen uber das Verhal-
ten aller ausgefuhrten Verzweigungen zu. Will man das Verhalten einzel-
ner Sprunge beobachten, so verwendet man am besten den interaktiven Mo-
dus, lasst den entsprechenden Befehl verfolgen (Trace) mittels t < adresse >
Search WWH ::




Custom Search