Information Technology Reference
In-Depth Information
Instruments [185] und im Itanium 2 von Intel [70, 75, 78]. Als Nebeneffekt lässt
sich dabei vorteilhaft nutzen, dass durch das Entfernen der Sprungoperationen Kon-
trollflussspekulationen unnötig werden und somit die Prädikation auch eine Technik
ist, um das Maß an durchschnittlicher Operationsparallelität in den Befehlen zu
erhöhen.
Bild 3.21a bis c zeigt hierzu ein Beispiel für die im Itanium 2 realisierte Prozes-
sorarchitektur IA-64 1 . Ohne bedingte Operationsausführung lässt sich das C-Pro-
gramm links zu dem in Bild 3.21b dargestellten Assemblerprogramm übersetzen.
Mit r1 gleich Null wird durch die Vergleichsoperation cmp.eq das Prädikatsbit p1
gelöscht und die im then-Zweig stehenden Operationen in den Zeilen 3 und 4 ausge-
führt. Mit r1 ungleich Null wird zur Sprungmarke else verzweigt und die Operatio-
nen in den Zeilen 7 und 8 bearbeitet. Die Sprungmarke end kennzeichnet das Ende
des gesamten if-then-else-Konstrukts.
Eine durch Anwendung der bedingten Operationsausführung optimierte Variante
des Programms ist in Bild 3.21c aufgelistet. Durch die Vergleichsoperation in Zeile
1 werden zunächst die Prädikatsbits p1 und p2 entsprechend der zu prüfenden
Bedingung bzw. komplementär dazu gesetzt. Die Operationen des then- und des
else-Zweigs lassen sich anschließend parallel bedingt bearbeiten. Mit r1 ungleich
Null wird z.B. p1 gesetzt und p2 gelöscht, so dass die Operationen des else-Zweigs
in den Zeilen 4 und 5, nicht jedoch die des then-Zweigs in den Zeilen 2 und 3 ausge-
führt werden. Mit r1 gleich Null kehrt sich die Situation ins Gegenteil.
1: if (r1 != 0) {
2:
1:
cmp.eq
p1, p0 = r1, 0
1:
cmp.ne
p1, p2 = r1, 0;;
r2 = r3 + r4;
2: (p1)
br.cond
else;;
2: (p1)
add
r2 = r3, r4
3:
r5 = r5 - 1;
3:
add
r2 = r3, r4
3: (p1)
sub
r5 = r5, 1
4: }
5: else {
6:
4:
sub
r5 = r5, 1
4: (p2)
sub
r2 = r3, r4
5:
br
end;;
5: (p2)
add
r5 = r5, 1;;
r2 = r3 - r4;
6: else:
7:
7:
r5 = r5 + 1;
sub
r2 = r3, r4
8: }
8:
add
r5 = r5, 1;;
9: end:
a
b
c
Bild 3.21. Bedingte Ausführung von Operationen beim IA-64. a Ursprüngliches C-Programm. b
Assemblerprogramm ohne bedingte Operationsausführung. c Assemblerprogramm mit bedingter
Operationsausführung
Die fünf Operationen sind hierbei in zwei sequentiell zu bearbeitenden Befehlen
codiert. Dies ist deshalb erforderlich, weil die Bedingungsergebnisse in p1 und p2
zuerst erzeugt werden müssen, bevor sie sich durch die im zweiten Befehl parallel
codierten Operationen auswerten lassen. Es gibt jedoch einen Sonderfall, der es
ermöglicht, Operationen trotz Datenabhängigkeit als parallel ausführbar zu codie-
1. Der Itanium 2 wird hier deshalb verwendet, weil dasselbe Beispiel für den TriMedia TM-1300
bzw. den TMS320C62x wegen der großen Anzahl von zu berücksichtigenden Verzögerungsstu-
fen (Delayslots) von Sprungoperationen sehr unübersichtlich wäre. Der TriMedia TM-1300
führt nach einer Sprungoperation die drei, der TMS320C62 sogar die fünf unmittelbar folgen-
den Befehle unbedingt aus.
Search WWH ::




Custom Search