Information Technology Reference
In-Depth Information
Ein ähnliches Verfahren ist bereits Mitte der 80er Jahre in der Trace 7/300 von Mul-
tiflow realisiert worden. Da man dort die Ausnahmeanforderung nicht in einem
separaten Bit, sondern als reguläres Ergebnis Null im Zielregister protokolliert, ist
eine Ladeoperation, die keine Ausnahmesituation verursacht, mit der jedoch auf den
Wert Null zugegriffen wird, unnötig wiederholt zu bearbeiten. Ein zweiter Nachteil
dieser Implementierungsvariante ist, dass sich das spekulative Ergebnis einer Lade-
operation nicht spekulativ weiterverarbeiten lässt, wie bei der Prozessorarchitektur
IA-64, wobei das NaT-Bit jeweils von den Operanden zum Ergebnis weitergereicht
wird. So kann eine längere Berechnungsfolge spekulativ bearbeitet und mit nur
einer einzigen Check-Operation die Gültigkeit des endgültigen Ergebnisses über-
prüft werden.
Das nicht spekulative Umordnen von Ladeoperationen wird auch durch Speichereo-
perationen begrenzt. Es kann nämlich nicht ausgeschlossen werden, dass sich auf-
einander folgende Schreib- und Lesezugriffe auf den Datenspeicher jeweils auf die-
selbe Speicherzelle beziehen und somit eine echte Datenabhängigkeit besteht, die
für das korrekte Funktionieren eines Programms zu berücksichtigen ist. Bei der sog.
Datenflussspekulation ( data speculation ) wird die Reihenfolge von Speichere- und
Ladeoperation dennoch verändert und, um ein Fehlverhalten zu vermeiden,
anschließend überprüft, ob das Umordnen erlaubt war. Gegebenenfalls muss der
Zugriff wiederholt werden.
Ein ebenfalls dem Handbuch zur Prozessorarchitektur IA-64 entlehntes Beispiel
hierzu ist in Bild 3.20 dargestellt [70]. Teilbild a zeigt eine Operationsfolge ohne die
sog. Datenflussspekulation. Falls in r1 und r4 unterschiedliche Adressen gespeichert
sind, besteht zwischen der Speichereoperation st8 in Zeile 1 und der Ladeoperation
ld8 in Zeile 2 keine Datenabhängigkeit, so dass ein Umordnen erlaubt ist. Falls
jedoch die Inhalte von r1 und r4 übereinstimmen, sind die beiden Operationen von-
einander abhängig und lassen sich daher nicht in ihrer Reihenfolge verändern, ohne
eine Änderung der Wirkungsweise des Programms zu verursachen (der Inhalt von r3
wird in diesem Fall gleich dem von r2 sein).
1:
st8
[r1] = r2
1:
ld8.a
r3 = [r4];;
2:
ld8
r3 = [r4];;
2:
st8
[r1], r2
3:
add
r5 = r3 , r6;;
3:
ld8.c.clr
r3 = [r4];;
4:
add
r5 = r3 , r6;;
a
b
Bild 3.20. Datenflussspekulation beim IA-64. a Ursprüngliches Programm. b Programm nach
Modifikation: Die Ladeoperation wird vor der Speichereoperation ausgeführt und anschließend
überprüft, ob der zuvor geladene Operand dabei überschrieben wurde
Trotz der potentiellen Datenabhängigkeit kann die Ladeoperation spekulativ vor der
Speichereoperation ausgeführt werden. Eine entsprechende, aus Bild 3.20a hergelei-
tete Operationsfolge ist in Bild 3.20b dargestellt. Wegen des der Ladeoperation ld8
in Zeile 1 angehefteten Attributs „.a“ wird zusätzlich zum Lesezugriff auf den
Datenspeicher ein Eintrag in einer als Advanced Load Address Table ( ALAT )
bezeichneten cache-ähnlich organisierten Tabelle reserviert, um darin jeweils zum
Search WWH ::




Custom Search