Hardware Reference
In-Depth Information
ditionsbefehl (dritter Eintrag) wurde spekulativ ausgefuhrt. Sollte sich her-
ausstellen, dass er nicht hatte ausgefuhrt werden durfen, so darf unter keinen
Umstanden der von ihm berechnete Wert im Register $2 stehen. Es muss
dafur Sorge getragen werden, dass der alte Wert von $2 erhalten bleibt.
Angenommen, es sei SUB $2,$2,1 der nachste zur Ausfuhrung kommende
Befehl. Dieser Befehl kann sofort ausgefuhrt werden, muss aber unbedingt
auf den spekulativen Wert zuruckgreifen, den sein Vorganger berechnet hat
(Read-After-Write-Abhangigkeit). Auch hier gilt, dass der berechnete Wert
spater nur dann als Inhalt von $2 ubernommen werden darf, wenn sich der
Sprungbefehl als richtig vorhergesagt herausstellt.
Wir nehmen nun an, dass der nachste zur Ausfuhrung kommende Befehl
ADD $1,$4,1 sei. Alle Operanden sind sofort verfugbar, aber das Ergebnis
darf nicht den Wert von $1 uberschreiben, den der vorangehende BP -Befehl
benotigt (Write-After-Read-Abhangigkeit). Wir haben gesehen, dass fur das
Zwischenspeichern solcher spekulativen Werte zusatzliche Register verwendet
werden, um die Befehlsausfuhrung weiter zu erhalten. Sie ermoglichen spe-
kulative Befehlsausfuhrung, also das Uberholen von noch nicht ausgefuhrten
Befehlen, wenn einzelne Befehle sehr lang brauchen.
Wir mussen also zwei Arten von Registern unterscheiden: Die Register, die
den Zustand des Prozessors nach dem letzten bestatigten Befehl beschrei-
ben. Dieser Zustand dient als Ausgangspunkt, wenn ein Interrupt die Un-
terbrechung des laufenden Programms erfordert oder wenn sich ein Sprung
als falsch vorhergesagt entpuppt. Das sind die im Befehlssatz beschriebenen
Register, wir sprechen von Befehlssatzregistern oder Zustandsregistern .Man
nennt diese Register im Englischen Architectural Registers . Demgegenuber
heißen die Register zum Zwischenspeichern von Operanden und spekulativen
Ergebnissen Umbenennungsregister ( Rename Register )oder Schattenregister .
Wir haben bisher die Schattenregister als Teil der Eintrage des Reorder Buf-
fer betrachtet. Das Vorhalten der dafur notwendigen Register erfordert einen
großen Aufwand. Erschwerend kommt hinzu, dass einige Befehle mehr als
ein Ergebnis produzieren konnen, was wir bislang ganz außer Acht gelas-
sen haben: Bei MMIX liefert die Division DIV den ganzzahligen Quotienten
sowie den Divisionsrest in zwei unterschiedlichen Registern. Einige Befehle
benotigen ferner noch einen dritten Operanden. Bei MMIX kann z.B. fur die
Division DIV ein 128-Bit-langer Dividend angegeben werden, durch Eintrag
der fuhrenden 64 Bit im Spezialregister rD [1]. Es bedeutet einen zu großen
Aufwand, bei jedem Eintrag im Reorder Buffer fur alle vorkommenden Falle
Schattenregister vorzuhalten. Daher werden haufig eigene Register fur sol-
che Zwischenergebnisse an einer zentralen Stelle zusammengefasst (Register
Pool). Die Eintrage im Reorder Buffer enthalten dann nur noch Zeiger auf
die zugeordneten Register des Pools, d.h. sie speichern deren Nummern. Es
Search WWH ::




Custom Search