Information Technology Reference
In-Depth Information
hersage erforderliche Verzögerung von zum Ladebefehl datenabhängigen Befehlen
teilweise oder vollständig vermeidbar.
Vorhersage des Ergebnisses. Im einfachsten Fall wird der zu ladende Wert frühzei-
tig vorhergesagt, so dass alle auf den Ladebefehl folgenden abhängigen Befehle den
entsprechenden Wert verzögerungsfrei als Operand verarbeiten können. Sobald der
Zugriff des Ladebefehls abgeschlossen ist, muss der vorhergesagte Wert mit dem
gelesenen Datum verglichen werden. Bei Gleichheit lässt sich die Verarbeitung aller
nachfolgenden Befehle verzögerungsfrei fortsetzt. Bei Ungleichheit müssen jedoch
alle im Fließband auf den ersten abhängigen Befehl folgenden Befehle in den
Zustand zurückversetzt werden, der bestanden hat, bevor der vorhergesagte Wert
das erste Mal verwendet wurde. Bei einer korrekten Wertvorhersage wird der Lade-
befehl somit schneller, bei einer Fehlvorhersage genauso schnell ausgeführt wie
ohne eine Wertvorhersage. Im Durchschnitt ergibt sich somit ein Gewinn für die
Geschwindigkeit, mit der die Befehle bearbeitet werden. Allerdings werden die zur
spekulativen Ausführung der abhängigen Befehle benötigten Funktionseinheiten
eine Zeit lang überflüssigerweise blockiert.
Die von einem Ladebefehl generierten Ergebnisse hängen davon ab, auf welche
Adressen zugegriffen wird. Paarweise betrachtet sind sie konstant, wenn skalare
Variablen, und veränderlich, wenn Einträge zusammengesetzter Datenstrukturen,
wie Felder oder verkettete Listen, gelesen werden. Für die gesamte Laufzeit eines
Programms sind vor allem Ladebefehle, die innerhalb von Schleifen häufig ausge-
führt werden, von Bedeutung. Meist wird mit ihnen auf zusammengesetzte Daten-
strukturen, wie z.B. Felder, zugegriffen, da es durch Codeoptimierung möglich ist,
den Zugriff auf skalare Variablen aus den Schleifen herauszuziehen (z.B. indem die
entsprechende Variable vor dem ersten Schleifendurchlauf in ein Register kopiert
und der Registerinhalt nach Schleifenbearbeitung wieder in die Variable zurückko-
piert wird). Die Daten, die von einem Ladebefehl, dessen Adresse bei jedem Zugriff
modifiziert wird, gelesen werden, weisen als Folge betrachtet i.Allg. keine kon-
stante Schrittweite auf und lassen sich demzufolge nur schlecht durch eine konstante
oder differentielle Wertvorhersage im Voraus bestimmen. Die hier besser geeignete
kontextbasierte Wertvorhersage ist jedoch sehr aufwendig zu realisieren.
Vorhersage der Zugriffsadresse. Wesentlich einfacher als die Vorhersage der
durch Ladebefehle gelesenen Werte ist die Vorhersage der beim Zugriff jeweils
benutzten Adressen. Zum Beispiel wird sich die effektive Adresse eines Ladebe-
fehls bei Zugriffen auf skalare Variablen gar nicht und bei Zugriffen auf Feldele-
mente oft mit konstanter Schrittweite ändern, so dass in vielen Fällen eine einfache
differentielle Wertvorhersage ausreicht, um korrekte Ergebnisse zu erzielen.
Die bei Datenabhängigkeiten zwischen Ladebefehlen und nachfolgenden Befehlen
erforderliche Verzögerung lässt sich vermeiden, indem das jeweils benötigte Datum
anhand der vorhergesagten Adresse im Vorgriff geladen wird und somit rechtzeitig
zur Verfügung steht, um nachfolgende Befehle verzögerungsfrei bearbeiten zu kön-
nen. Voraussetzung ist natürlich, dass die vorhergesagte und die tatsächliche
Adresse übereinstimmen und dass in der Zeitspanne zwischen Vorhersage und Vor-
liegen der tatsächlichen Adresse kein Schreibzugriff auf die jeweilige Speicherzelle
Search WWH ::




Custom Search