Information Technology Reference
In-Depth Information
nicht, wie in Bild 2.24b dargestellt, zum Zeitpunkt t 3 annulliert werden, sondern in
gewohnter Weise beendet. Der Sprungbefehl führt eine sog. verzögerte Verzwei-
gung (delayed branch) aus.
Die Anzahl der Fließbandstufen in denen sich die auf einen Sprungbefehl sequenti-
ell folgenden Befehle befinden, bevor die Verzweigung tatsächlich bearbeitet wird,
bezeichnet man als Verzögerungsstufen ( delay slots ), die in den Verzögerungsstufen
befindlichen Befehle als Verzögerungsstufenbefehle (delay slot instructions). Neben
der kürzeren Bearbeitungszeit einer verzögerten Verzweigung ist vor allem die ein-
fache Realisierung ein Vorteil. Der Prozessor muss Kontrollflusskonflikte nicht
erkennen und bereits in das Fließband geladenen Befehle nicht annullieren können.
Nachteilig ist, dass die Codeerzeugung für Prozessoren, die bei einem verzweigen-
den Sprungbefehl verzögert reagieren, komplizierter ist als für solche, die dies nicht
tun, da es aufgrund von Abhängigkeiten nicht immer möglich ist, sinnvolle Befehle
in den Verzögerungsstufen unterzubringen (vor allem, wenn berücksichtigt wird,
dass nach Flynn zwischen zwei Sprungbefehlen im Durchschnitt nur 7,5 Befehle lie-
gen und die Befehlszahl sogar in zwei Dritteln der Fälle sogar kleiner ist [47]). Je
mehr Verzögerungsstufen gefüllt werden müssen, desto aufwendiger ist es, Code für
einen entsprechenden Prozessor zu erzeugen, weshalb eine möglichst geringe
Anzahl von Verzögerungsstufen angestrebt wird.
Der in Bild 2.20 dargestellte Prozessor verzweigt z.B. in der dritten Fließbandstufe
und besitzt daher zwei Verzögerungsstufen. Die Verarbeitung eines verzweigenden
Sprungbefehls entspricht dabei dem, was in Bild 2.24b dargestellt ist, nur dass man
die auf den Sprungbefehl folgende Addition und Subtraktion nicht annulliert, son-
dern regulär beendet. Um nun die Anzahl der Verzögerungsstufen zu vermindern,
muss der Sprungbefehl statt in der Execute-Stufe bereits in der Fetch- oder der
Decode-Stufe ausgeführt werden. Dies ist hier jedoch nicht möglich, weil für den
Operandenvergleich in bedingten Sprungbefehlen (siehe Sprungbefehl in Bild
2.24a) die ALU benötigt wird.
Zwar ist ein Vergleichsnetz (oder eine zweite ALU) in der Decode-Stufe platzierbar,
dadurch würde jedoch aller Voraussicht nach der kritische Pfad verlängert. Um
trotzdem den Sprungbefehl in der Decode-Stufe ausführen zu können und so die
Anzahl der Verzögerungsstufen zu vermindern, muss die Vergleichs- von der Sprun-
goperation getrennt werden. In vielen Prozessoren, wie dem UltraSPARC IIIi von
Sun [173], dem PowerPC 970 von IBM [67] u.a. ist deshalb ein Bedingungsregister
vorgesehen, dass von Vergleichsbefehlen in der Execute-Stufe gesetzt und von
bedingten Sprungbefehlen in der Decode-Stufe ausgewertet wird (die sog. look
ahead resolution [110]).
Ein möglicher Datenflusskonflikt lässt sich dabei mit Hilfe eines einzelnen Bypas-
ses lösen. Da der im Bedingungsregister gespeicherte Bedingungscode technisch
sehr einfach auswertbar ist, wird der kritische Pfad durch die bei Sprungbefehlen
zusätzlichen Aktionen in der Decode-Stufe nicht oder nur unwesentlich verlängert.
Zur Verdeutlichung des Verfahrens ist in Bild 2.26 eine Befehlsfolge (Teilbild a) und
der zeitliche Verlauf (Teilbild b) bei Verarbeitung der Befehlsfolge durch einen Pro-
zessor mit vierstufigem Fließband und Bedingungsregister dargestellt.
Search WWH ::




Custom Search