Branch Delay Slot
In der Rechnerarchitektur ist eine Branch Delay Instruction ein Maschinenbefehl, der direkt einem bedingten Verzweigungsbefehl folgt. Unabhängig, ob die Verzweigung genommen wurde oder nicht, wird dieser Befehl immer ausgeführt wird. Die Position eines solchen Maschinenbefehls in der Pipeline heißt Branch Delay Slot (Warteplatz).
Motivation
[Bearbeiten | Quelltext bearbeiten]Branch Delay Slots werden verwendet, um die Pipeline besser auszulasten. Bei Prozessoren, die eine Pipeline verwenden, wird die Ausführung eines Befehls in mehrere Stufen aufgeteilt. Dabei werden mehrere Befehle parallel ausgeführt, wobei in jeder Stufe genau ein Befehl bearbeitet wird.
Bei Verzweigungsbefehlen tritt dabei ein sogenannter Hazard auf: wenn der nächste Befehl geladen wird, ist der Verzweigungsbefehl noch nicht fertig ausgeführt; deshalb ist nicht klar, welcher Befehl geladen werden soll. Daher muss nach einem Verzweigungsbefehl gewartet werden.
Um diese Wartezeit überbrücken zu können, wird die Branch Delay Instruction verwendet. Sie wird in jedem Fall ausgeführt, unabhängig vom Resultat des Verzweigungsbefehls.
Code-Beispiel
[Bearbeiten | Quelltext bearbeiten]Im folgenden Assemblercode werden nach jedem Sprungbefehl die nachfolgenden 3 Befehle unabhängig vom Ergebnis des Sprungs immer ausgeführt.
do *r3++ = *r1++ + *r2++; while (--r4);
.repeat dec r4 brz .repeat ld r0,r1+ ; diese drei Befehle add r0,r2+ ; werden immer ausgeführt st r3+,r0 ; unabhängig vom Sprungbefehl
Die Effizienz dieser Optimierungsstrategie hängt davon ab, wie gut es gelingt, Anweisungen zu finden, die unabhängig vom Sprungergebnis sind. Im Extremfall gelingt dies nicht und die Slots müssen durch NOPs aufgefüllt werden.
Nachteilig ist die schlechte Menschenlesbarkeit des Codes: Um das Programm richtig interpretieren zu können, muss ein menschlicher Entwickler wissen, wie viele Branch Delay Instructions (in diesem Beispiel: drei) nach dem Sprungbefehl folgen, was aus dem Code selbst nicht zweifelsfrei hervorgeht. Er benötigt also zwingend die Dokumentation des Befehlssatzes.
Prozessoren mit Branch Delay Slot
[Bearbeiten | Quelltext bearbeiten]Das Branch Delay Slot stellt eine elegante und einfache Alternative zur Sprungvorhersage dar. Zur Sprungvorhersage ist viel Hardware-Aufwand (viele Transistoren) nötig, die wiederum viel Strom verbrauchen.
Daher wird diese Technologie hauptsächlich in energiesparenden oder kostengünstigen Prozessoren (u. a. Mikrocontrollern) eingesetzt, beispielsweise in: