Hardware Reference
In-Depth Information
Bisher haben wir es vermieden, uber bedingte Sprungbefehle (Verzweigun-
gen) zu sprechen. Da nicht a priori fest steht, ob ein Sprung ausgefuhrt werden
wird oder nicht, arbeiten moderne Prozessoren auch hier spekulativ [32, 35].
Die Programmausfuhrung folgt dabei zunachst einer der beiden moglichen
Verzweigungsrichtungen, selbst wenn der Wert, von dem die Verzweigung
abhangt, noch gar nicht zur Verfugung steht. Der Sprungbefehl wird im Reor-
der Buffer blockiert, bis die Bedingung zuverlassig ausgewertet werden kann,
und weitere Befehle konnen uberholen. Sollte sich dann heraus stellen, dass
die falschen Befehle ausgefuhrt wurden, so sind sie aus dem Reorder Buffer
zu entfernen und die Programmausfuhrung wird in der anderen Richtung der
bedingten Verzweigung fortgefuhrt.
Wir werden in Kapitel 6 Methoden kennen lernen, um die Sprungrichtung
vorherzusagen. Bereits hier ist einzusehen, dass jede falsche Vorhersage den
Programmablauf deutlich behindert, denn die Ausfuhrung ist einschließlich
Instruction Fetch neu aufzusetzen.
Beispiel
Zur Veranschaulichung dieses Sachverhalts ziehen wir wieder einen Ausschnitt
aus
mandelbrot.mms
heran:
43
FADD r,temp1,temp2
44
FCMP test,r,:M
45
BNP test,2F
46
LDA temp1,:Bmp:data
Der
LDA
-Befehl in Zeile 46 wird vom Assembler in einen
SETH
umgesetzt [1].
Zum Zeitpunkt
t
0
sei die Addition fertig, der Vergleich
FCMP
und der Sprung-
befehl werden zugeteilt. Die Ausfuhrung des
FCMP
kann sofort beginnen, aber
der Sprungbefehl in Zeile 45 blockiert, weil er vom Ergebnis des Vergleichs
abhangt:
t
0
Operanden
Befehl
unit
Status
Q
Y
Q
Z
V
Y
V
Z
Ergebnis
—
—
—
FADD r,r,temp1
$6
$10
$6
FCMP test,r,:M
FPU
$6
∗
$254
—
—
$9
(ungultig)
BNP
test,2F
INT1
\\ —
2F
FPU
—
—
—
Im nachsten Takt
t
1
ist der Vergleich fertig, der Sprungbefehl wird ausgefuhrt.
Deshalbwirdder
LDA
-Befehl auf die zweite Ausfuhrungseinheit fur ganzzah-
lige Operationen
INT2
zugeteilt und beginnt sofort mit der Ausfuhrung. Die
Vorhersage des Sprungergebnisses fur den
BNP
habe hier voraus gesagt, dass
der Sprung nicht erfolgt.