Information Technology Reference
In-Depth Information
zweigen [97] 1 , wobei alle unbedingten Sprungbefehle zu unveränderbaren nicht
indirekten Adressen berücksichtigt wurden.
Eine weitere Verbesserung des durch statische Sprungvorhersage erzielbaren Effekts
ist dadurch erreichbar, dass man nicht grundsätzlich alle Sprungbefehle sondern nur
die unbedingten sowie die für Schleifen benutzten bedingten Sprungbefehle, als ver-
zweigend vorhergesagt. Hierzu sind bedingte, für Schleifen verwendete Sprungbe-
fehle, von solchen zu unterschieden, die nicht im Zusammenhang mit Schleifen zum
Einsatz kommen, z.B. indem man negative Sprungdistanzen als Indiz für Schleifen-
sprünge interpretiert. - Zu den statischen Sprungvorhersagetechniken zählt auch das
sog. Prepare-to-branch [97, 110], bei dem im Sprungbefehl codiert ist, ob dieser als
verzweigend oder nichtverzweigend vorhergesagt werden soll. Ein optimierender
Übersetzer erkennt bestimmte Hochsprachenkonstrukte und codiert im Programm
eine entsprechende Empfehlung (siehe Beispiel 2.4).
Der Erfolg aller statischen Sprungvorhersagetechniken ist umso größer, je früher ein
Sprungbefehl innerhalb des Fließbands erkannt wird. So sind verzweigende Sprung-
befehle (ohne schaltungstechnischen Mehraufwand) nur dann verzögerungsfrei
bearbeitbar, wenn sie sich bereits beim Einlesen identifizieren lassen (also in der
Fetch-Stufe, siehe Bild 2.24b). Damit der Sprungbefehl hierbei spekulativ als ver-
zweigend ausgeführt werden kann, ist innerhalb der ersten Fließbandstufe eine
zusätzliche Adressberechnung erforderlich, was möglicherweise eine Verlängerung
des kritischen Pfads und damit eine Verringerung der maximalen Taktfrequenz
bewirkt. Indem Sprungbefehle über zwei Fließbandstufen ausgeführt werden, lässt
sich diesem Problem zwar begegnen, dafür ist jedoch wieder ein zusätzlicher Verzö-
gerungstakt bei Verzweigungen in Kauf zu nehmen.
Beispiel 2.4. Prepare-to-branch . Die statische Sprungvorhersage ist neben anderen Verfahren
z.B. im PowerPC realisiert, um die durchschnittliche Ausführungszeit von Sprungbefehlen zu ver-
kürzen - der Prozessor wird in unterschiedlichen Varianten von Motorola (z.B. MPC7400 [126])
oder IBM (z.B. PowerPC 970 [67]) gefertigt. Bild 2.28 stellt zur Verdeutlichung eine Befehlsfolge
dar, mit der sich die Summe der Zahlen von 1 bis 10 berechnen lässt: Nach der Initialisierung des in
einem Spezialregister befindlichen Schleifenzählers ctr und des Summenregisters r1 wird in einer
Schleife jeweils der Inhalt des Schleifenzählers auf die bisher berechnete Summe addiert. Hierbei
muss der Schleifenzähler ctr zuvor jeweils in das Register r31 kopiert werden, da es nicht möglich
ist, mit der Addition den Inhalt eines Spezialregisters direkt zu verknüpfen. In Zeile 6 wird der
Schleifenzähler schließlich dekrementiert und, falls dieser ungleich Null ist, zur Sprungmarke loop
verzweigt.
Die etwas unhandliche Schreibweise des Schleifensprungbefehls bc ist erforderlich, weil es insge-
samt 1024 Befehlsvarianten gibt, die über zwei Parameter unterschieden werden. Die hier angege-
benen Parameter bewirken, dass der Sprungbefehl statisch als verzweigend vorhergesagt wird (jta-
ken), der Sprungbefehl die Bedingungsbits nicht berücksichtigt (nocc) und verzweigt, solange der
Inhalt des Schleifenzählers ctr ungleich Null ist, wobei mit jedem Sprung ctr dekrementiert wird
(ctrnz) 2 . Da die Schleife in Bild 2.28 zehnmal ausgeführt wird, ist die statische Sprungvorhersage
1. Untersucht wurden 26 Traces aus den Gebieten Compiler, Business, Wissenschaft und
Betriebssystemen, die in C, Cobol und Fortran geschrieben waren und auf der IBM/System
370, der PDP11 und der CDC6400 ausgeführt wurden.
2.
Die im Programm verwendeten Symbole jtaken, ctrnz und nocc müssen explizit vom Program-
mierer definiert werden.
Search WWH ::




Custom Search