RISC-Pipelines im Detail

von Christian Siemers, 24.08.2004
PDF PDF | eBook eBook

Verzweigungs-Vorhersage

Die Einführung und Verwendung von Branch-Befehlen mit Delay-Slot stellt im Allgemeinen keine befriedigende Lösung dar, insbesondere im Hinblick auf superskalare Mikroprozessoren. Aus diesem Grund hat man schon frühzeitig eine Verzweigungsvorhersage (Branch Prediction) entwickelt. Deren Ziel ist es, mit hoher (statistischer) Wahrscheinlichkeit den Verlauf des Programms bei einem Sprung vorherzubestimmen.
Die Verzweigungsvorhersage stützt sich entweder auf Annahmen über den Programmverlauf (statische Sprungvorhersage) oder auf Rückschlüsse aus dem bisherigen Verlauf (dynamische Sprungvorhersage).
Über alle Sprung- und Verzweigungsbefehle (auch die unkonditionierten) gemittelt verzweigen etwa zwei Drittel aller Fälle, während ein Drittel den Kontrollfluss nicht ändert. Rückwärtssprünge stammen zudem häufig aus Schleifen (Loop) und verzweigen nahezu immer. Vorwärtssprünge stammen meistens aus bedingten Kontrollstrukturen mit einer Gleichverteilung der Sprungwahrscheinlichkeiten ("Branch taken"/"Branch not taken").
Eine statische Sprungvorhersage (Static Branch Prediction) nimmt daher im einfachsten Fall an, dass sich der Kontrollfluss nicht ändert. Der Prozessor führt die nachfolgenden Befehle aus, speichert die Ergebnisse jedoch erst, wenn sicher ist, dass die Verzweigung nicht eingetreten ist. Im anderen Fall deklariert er alle Operationen nachträglich als "No Operation" und verwirft die Ergebnisse. Dies führt im Fall der vierstufigen Pipeline (MPM3) zu einem Mittel von 1,67 CPI (Clocks per Instruction) oder einem IPC von 0,6 pro Verzweigungsbefehl.
Eine erweiterte statische Sprungvorhersage nimmt für Vorwärtssprünge ein "Branch not taken" (keine Kontrollflussänderung), für Rückwärtssprünge hingegen ein "Branch taken" an. Dies bedeutet jedoch, dass der Prozessor das Sprungziel in einem Branch Target Buffer oder Branch Target Cache speichern muss, da die Look-ahead Resolution einen Takt zur Adressberechnung benötigt. Daher wird die erste Rückwärtsverzweigung meist verzögert ausgeführt und das Sprungziel für weitere Durchläufe gespeichert.
'Server-Newsletter' bestellen!
Inhalt dieses Artikels
Das könnte Sie auch interessieren
Links zum Thema


Ihre Meinung zum Artikel
Benutzername:
Passwort: