Information Technology Reference
In-Depth Information
durchlauf, weshalb die Register r4 4 und r4 2 verwendet werden. Sie sind bei einer
Codierung durch reale Register zu ersetzen.
Weil der Kern normalerweise als Schleife programmiert ist, muss nach einem über-
lappenden Schleifendurchlauf selbstverständlich dafür gesorgt werden, dass die
Quelloperanden in den jeweils verwendeten Registern verfügbar sind. Hierzu kön-
nen entweder die Register umkopiert (z.B. bekommt r7 2 den Inhalt von r7 1 zugewie-
sen, so dass mit dem nächsten Schleifendurchlauf das Ergebnis der aktuellen Addi-
tion in den Speicher geschrieben wird) oder die verwendeten Indizes verändert wer-
den. Letzteres erfordert, dass der Prozessor die Modifikation von Registeradressen
in Hardware unterstützt, was leicht durch Registerverwaltungseinheiten, ähnlich
denen, die in Abschnitt 2.1.5 beschrieben sind, erreichbar ist.
Das Prinzip der sog. Registerrotation veranschaulicht Bild 3.28a. Mit Ausführung
der Pseudooperation rotate_reg werden die Indizes aller beteiligen Register um Eins
dekrementiert. Der unmittelbar zuvor in das Register r4 4 geladene Operand befindet
sich nach der Registerrotation dementsprechend in r4 3 , der in einem vorangehenden
Schleifendurchlauf geladene Operand r4 3 in r4 2 usw. Das Verfahren ist z.B. in Pro-
zessoren mit IA-64-Architektur realisiert, wobei sich eine Registerrotation als optio-
naler Seiteneffekt einer Sprungoperation ausführen lässt. Neben einem in Grenzen
frei programmierbaren Bereich des Integerregisterspeichers sind die Prädikatsregis-
ter p16 bis p63 und die Gleitkommaregister f32 bis f127 rotierbar. Dabei werden die
Registeradressen jeweils inkrementiert bzw. bei einem Überlauf auf das erste rotier-
bare Register zurückgesetzt. Der Inhalt des Gleitkommaregisters f32 ist daher nach
einer Registerrotation über f33 und der von f127 über f32 zugreifbar. Wie sich das in
Bild 3.28a dargestellte Programm für einen Prozessor mit IA-64-Architektur umset-
zen lässt, zeigt Bild 3.28b.
1: PROLOG
2: loop: ld4
1:
mov
lc = 199
2:
mov
ec = 4
r4 4 = [r5], 4
3:
mov
pr.rot = 1 << 16 ;;
3:
add
r7 2 = r4 2 , r9
4: loop: (p16) ld4
r32 = [r5], 4
4:
st4
[r6] = r7 1 , 4
5:
(p17)
5:
(rotate_reg)
6:
(p18) add
r35 = r34, r9
6:
br.cloop
loop
;;
7:
(p19) st4
[r6] = r36, 4
8:
br.ctop
loop
;;
7:
EPILOG
a
b
Bild 3.28. Registerrotation. a Prinzipielle Verwendung für Software-Fließbänder. b Programm für
die Prozessorarchitektur IA-64
Der Kern der Operationsfolge zwischen den Zeilen 4 und 8 ist direkt von dem in
Bild 3.28a skizierten Programm ableitbar, indem die mit Indizes versehenen Regis-
ternamen ersetzt werden und statt der beiden Operationen rotate_reg und br.cloop
die spezialisierte Sprungoperation br.ctop verwendet wird. Die zusätzlich in den
Zeilen 4 bis 7 angegebenen Prädikatsregister sind für den Prolog und den Epilog
erforderlich. Durch die Initialisierung der Prädikatsregister in Zeile 3, bei der p16
gleich Eins und p17 bis p63 gleich Null gesetzt werden, wird nämlich dafür gesorgt,
dass mit dem ersten Schleifendurchlauf zunächst nur die Lade- und Sprungopera-
tion, nicht jedoch die Addition und Speichereoperation ausgeführt werden. Dies ent-
Search WWH ::




Custom Search