Information Technology Reference
In-Depth Information
des Befehlsflusses bewirkt werden soll. So ist z.B. die Erzeugung von Ergebnissen
oder die Veränderung von Registerinhalten zu vermeiden, wenn nicht sichergestellt
ist, dass der ergebniserzeugende Befehl wirklich ausgeführt wird, wie z.B. in Situa-
tionen, in denen aufgrund von Abhängigkeiten die Bearbeitung eines bedingten
Sprungbefehls hinter die Bearbeitung des auf den Sprungbefehl regulär folgenden
Befehls verzögert wird. Es ist zwar prinzipiell möglich, Sprungbefehle in-der-Reihe
auszuführen und auf diese Weise dafür zu sorgen, dass nachfolgende Befehle nicht
vor dem Sprungbefehl beendet werden können. Allerdings ist das folgende im
Zusammenhang mit Befehlsflussänderungen stehende Problem so nicht lösbar.
Angenommen, die Befehlsfolge in Bild 3.36 wird von einem Prozessor bearbeitet,
der aufgrund seiner superskalaren Arbeitsweise bisher nur die nicht kursiv darge-
stellten Befehle beenden konnte, und angenommen, es kommt genau zu diesem
Zeitpunkt zu einer Ausnahme, weil mit dem Befehl in Zeile 4 versucht wurde, eine
Division durch Null auszuführen, dann müssten nach der Ausnahmebehandlung die
Befehle in den Zeilen 3, 6 und ggf. 4 erneut gestartet werden, nicht jedoch der
Befehl in Zeile 5, der bereits vor Auftreten der Ausnahmeanforderung bearbeitet
wurde. Das Problem tritt übrigens nur bei synchronen, also durch Befehle ausge-
löste Ausnahmeanforderungen auf 1 , und zwar deshalb, weil die beteiligten Befehle
unter Umständen voneinander abhängig sind. So werden die Befehle in den Zeilen 3
und 6 hier deshalb verzögert bearbeitet, weil sie von der Division in Zeile 4 abhän-
gig sind (wie durch die Pfeile im Bild angedeutet).
1:
add
r1, r2, r3
2:
sub
r2, r9, 1
3:
mul
r3, r2, r2
angenommener
Ressourcenkonflikt
RAW-Abhängigkeit
4:
div
r4, r5, r6
5:
add
r5, r5, 1
6:
and
r6, r4, r8
Bild 3.36. Bearbeitung einer synchronen Ausnahmeanforderung in einem superskalaren Prozessor
In superskalare Prozessoren werden die im Zusammenhang mit Befehlsflussände-
rungen stehenden Unzulänglichkeiten normalerweise gelöst, indem die Befehle in
genau der Reihenfolge beendet werden, in der sie im Programm codiert sind. Die
Befehle in den Zeilen 1, 2 und 5 lassen sich zwar gleichzeitig ausführen, zunächst
werden jedoch nur die Ergebnisse der Befehle aus den Zeilen 1 und 2 in den Regis-
terspeicher geschrieben. Das Ergebnis der Addition in Zeile 5 wird zwischengespei-
chert, bis die Multiplikation und Division in den Zeilen 3 und 4 beendet wurden.
Ebenso werden synchrone Ausnahmeanforderungen erst dann bearbeitet, wenn alle
Befehle ausgeführt sind, die regulär vor dem die Ausnahmeanforderung stellenden
Befehl stehen. Kommt es also mit der Division in Zeile 4 zu einer Ausnahmeanfor-
derung, so würden alle Befehle bis zur Zeile 3 beendet, der gestartete Befehl in Zeile
6 würde abgebrochen und das bereits berechnete Ergebnis der Addition in Zeile 5
verworfen. - Zur Wiederherstellung der ursprünglichen Befehlsreihenfolge gibt es
die zwei im Folgenden beschriebenen verbreiteten Techniken.
1. Bei asynchronen Ausnahmeanforderungen, also Interrupts, können alle decodierten Befehle
vollständig beendet werden, bevor die zugehörige Service-Routine aufgerufen wird.
 
Search WWH ::




Custom Search