Information Technology Reference
In-Depth Information
berücksichtigen, dass der Ladebefehl vor Betreten des modifizierten Schleifenrumpfs einmal ausge-
führt werden muss (im Bild durch einen dünnen Pfeil angedeutet).
Ein letzter semantischer Unterschied zwischen den Befehlsfolgen in Bild 2.27a und b ist mit Hilfe
einer Besonderheit des UltraSPARC lösbar. Durch das dem Sprungbefehl in Bild 2.27b angeheftete
„,a“ (bne,a - branch not equal, annul ) lässt sich nämlich erreichen, dass der in der Verzögerungs-
stufe ausgeführte Ladebefehl annulliert wird, falls der Sprungbefehl nicht verzweigt. Als Resultat
der Optimierung müssen nach der Transformation pro Schleifendurchlauf nur noch vier statt fünf
Befehle ausgeführt werden.
strlen:
mov
0, %l1
strlen:
mov
0, %l1
loop:
ldub
[%l0, %l1], %l2
ldub
[%l0, %l1], %l2
add
%l1, 1, %l1
loop:
add
%l1, 1, %l1
cmp
%l2, 0
cmp
%l2, 0
bne
loop
bne ,a
loop
nop
:
ldub
[%l0, %l1], %l2
:
a
b
Bild 2.27. Programm zur Ermittlung der Länge einer nullterminierten Zeichenkette für den UltraS-
PARC III. Die Adresse der Zeichenkette muss in %l0 übergeben werden. Die Anzahl der Zeichen
einschließlich des Terminationszeichens Null wird in %l1 gezählt. a Programm vor einer Optimie-
rung. b Programm nach einer Optimierung
Statische Sprungvorhersage
Das Zeitverhalten bedingter und nicht verzögert ausgeführter Sprungbefehle ist in
Fließbandprozessoren „asymmetrisch“ und davon abhängig, ob zum Sprungziel ver-
zweigt oder nicht verzweigt wird. Eine verzögerte Befehlsverarbeitung tritt norma-
lerweise nur dann auf, wenn der Sprungbefehl verzweigt und einen Kontrollfluss-
konflikt verursacht. Umgekehrt wird ein Sprungbefehl jedoch verzögerungsfrei aus-
geführt, wenn er nicht verzweigt, da in diesem Fall die im Fließband auf den
Sprungbefehl folgenden Befehle nicht verworfen werden müssen. Dies lässt sich für
eine einfache Form der sog. statischen Sprungvorhersage nutzen, bei der Sprungbe-
fehle jeweils als nichtverzweigend angenommen werden und ein Programm so
umstrukturiert wird, dass die darin codierten Sprungbefehle zumeist nicht verzwei-
gen [161]. Das Verfahren ist jedoch wenig leistungsfähig, da einige verzweigende
Sprungbefehle, wie z.B. Schleifensprünge, Unterprogrammaufrufe, unbedingte
Sprünge usw. nicht vermeidbar sind.
Eine Verbesserung der Effizienz ist möglich, wenn bei Auftreten eines Sprungbe-
fehls nicht die jeweils unmittelbar folgenden, sondern die auf das Sprungziel folgen-
den Befehle in das Fließband geladen werden, und zwar solange, bis der Sprungbe-
fehl die Fließbandstufe erreicht, in der der Sprung definitiv ausgeführt wird. Ver-
zweigt der Sprungbefehl, befinden sich die zu bearbeitenden Befehle bereits im
Fließband und müssen lediglich beendet werden, was ohne Verzögerung möglich
ist. Natürlich hat dies zur Folge, dass statt der verzweigenden, nun die nichtverzwei-
genden Sprungbefehle einen Kontrollflusskonflikt verursachen. Dies ist jedoch
günstiger, da, wie von Lee und Smith 1984 gezeigt wurde, Sprungbefehle in etwa
zwei Drittel aller Fälle verzweigen und nur in einem Drittel aller Fälle nicht ver-
 
Search WWH ::




Custom Search