Hardware Reference
In-Depth Information
weil mehrere Speicheradressen auf denselben Eintrag im Puffer verweisen.
Bei 2 i Eintragen wird ja die Speicheradresse modulo 2 i verwendet, um die
Zieladresse auszulesen. Diese Mehrdeutigkeiten mussen in Kauf genommen
werden.
Eine weitere Alternative bilden die Branch-Target-Caches , die in der Decode-
Phase zum Tragen kommen [24, 34]. Dort findet man zu Adressen von Sprung-
befehlen direkt nachfolgende Befehle. Es kann also im nachsten Takt aus die-
sem Cache sofort der Folgebefehl an die Decode-Stufe geleitet werden. Bei
dieser Losung wird auf den Puffer nur dann zugegriffen, wenn fest steht,
dass es sich beim aktuellen Befehl um einen Sprungbefehl handelt. Dies hat
den Vorteil, dass sich die Mehrdeutigkeiten durch die Adressierung nicht so
gravierend auswirken.
In beiden Fallen mussen in dem Puffer die Daten entsprechend der Sprung-
vorhersage abgelegt werden. Beide Losungen helfen, um auch die Zieladressen
von unbedingten Sprungen (Jumps) sowie von indirekten Sprungen (Unter-
programmaufrufe) moglichst fruhzeitig zu bestimmen. Branch-Target-Caches
finden sich etwa beim AMD K6-III und bei der Alpha-Prozessor 21264.
Moderne Prozessoren integrieren die Sprungvorhersage in die Fetch-Phase
(siehe [17]). Sie sind in der Lage, Instruktionen, die sich noch im Fetch Buffer
befinden, zu untersuchen und Vorhersagen zu treffen, wenn dort Sprungbe-
fehle gefunden werden.
6.6
6.6 Sprungvermeidung
Wir haben gesehen, dass die Sprungvorhersage nie alle Verzweigungen ex-
akt vorhersagen kann. Es empfiehlt sich daher, bedingte Verzweigungen zu
vermeiden, wann immer das moglich ist. Dazu bieten die meisten modernen
Prozessoren gewisse Moglichkeiten.
Bedingte Befehle
Damit konnen große Verzweigungskaskaden ohne Sprungbefehle ausprogram-
miert werden (siehe Abschnitt 1.3.7). Es laufen allerdings stets alle Befehle
durch die Pipeline, auch wenn sie teilweise nichts bewirken. Hier muss der
richtige Punkt gefunden werden, ab wann eine Verzweigung lohnender ist,
auch wenn sie falsch vorhergesagt wird. Die Sprungvermeidung durch be-
dingte Befehle wird dann zu einer Optimierungstechnik, die man am besten
den Compilern beibringt.
Search WWH ::




Custom Search