Hardware Reference
In-Depth Information
6.1
6.1 Statische Vorhersage
Bei den ersten pipeline-basierten Mikroprozessoren war eine Vorzugsrichtung
fur Sprungbefehle fest vorgegeben. Man spricht dann noch nicht von Sprung-
vorhersage, sondern von Prefetching. Zum Beispiel beherrschte bereits der
8086-Prozessor von Intel diese Technik: Die Bus Interface Unit (BIU) konnte
parallel zur Ausfuhrungseinheit arbeiten und die nachsten Instruktions-Bytes
vorausschauend in einen schnellen Zwischenspeicher, die Prefetch Queue ,la-
den. Bei Verzweigungen war diese Arbeit zwar umsonst und die BIU musste
den laufenden Prefetch-Zugriff zunachst beenden, die spekulativ geladenen
Bytes verwerfen und dann erst konnte sie von der neuen Adresse die Instruk-
tionen nachladen. Das dauerte etwas langer als Prefetch-freie Techniken, aber
im Mittel brachte diese Methode doch eine deutliche Leistungssteigerung [37].
Viel Aufwand wurde seither investiert, um Verfahren zu entwickeln, mit denen
sich Sprungziele mit hohen Trefferraten vorhersagen lassen.
Ein Ansatz uberlasst die Vorhersage dem Programmierer bzw. einem Com-
piler, indem bei jeder Verzweigung angegeben werden kann, ob sie wahr-
scheinlich ausgefuhrt oder wahrscheinlich nicht ausgefuhrt werden wird. Man
spricht von statischer Vorhersage . Meist gibt ein Bit im Opcode an, ob die
Verzweigung wahrscheinlich ausgefuhrt werden wird, das so genannte Take/-
don't take Bit (kurz TDTB ) [11] oder auch Static-Prediction Opcode Bit .
Der MMIX verfugt uber diese Moglichkeit der Vorhersage. Jeder Verzweigungs-
befehl existiert in zwei Varianten: Als Probable Branch , der wahrscheinlich
ausgefuhrt werden wird ( PBZ , PBEV etc.) und als gewohnlicher Branch, der
wahrscheinlich nicht ausgefuhrt werden wird ( BZ , BEV etc.). Die Opcodes fur
die beiden Befehle unterscheiden sich jeweils am Bit 4 (Wertigkeit 2 4 ). So ist
beispielsweise der Opcode von BZ ( Branch if Zero“) der Wert #42 und der
Opcode von PBZ ( Probable Branch if Zero“) ist der Wert #52 .
Diese Art der Vorhersage bewahrt sich insbesondere bei so genannten Zahl-
schleifen, also Schleifen, die vor dem Schleifenabbruch ofter hintereinander
durchlaufen werden. Als Beispiel betrachten wir das Sortieren durch Einfugen
(Insertion Sort), das im Anhang A.2 beschrieben ist. Dieses Sortierverfahren
wird oft zum Sortieren kleiner Felder verwendet, z.B. bei Quicksort am Ende
der Rekursion.
Der Befehl in Zeile 32 beendet das Sortierverfahren. Er wird je Unterpro-
grammlauf fur jeden Wert ein Mal ausgefuhrt und resultiert davon genau ein
Mal (zum Schluss) in einem nicht ausgefuhrten Branch. Bei N zu sortierenden
Werten ist die Wahrscheinlichkeit fur Taken also 1
1 /N .
Die Verzweigung in Zeile 23 wird nur dann ausgefuhrt, wenn der Index bis
zum Feldanfang lauft. Nach Knuth [20] Abschnitt 5.2.1 tritt das bei N zu
Search WWH ::




Custom Search