Information Technology Reference
In-Depth Information
Software-Fließband ist schließlich gefüllt, wenn mit dem nächsten Takt die letzte
Operation des ersten Schleifendurchlaufs ausgeführt wird, wobei parallel dazu die
Addition des zweiten und die Ladeoperation eines dritten Schleifendurchlaufs bear-
beitet werden. Mit jedem zusätzlichen Takt wird ein Schleifendurchlauf beendet und
ein weiterer begonnen. Die maximal erreichbare Operationsparallelität ist somit
gleich der Anzahl der im Schleifenrumpf codierten Operationen, was einem Durch-
satz von einem Schleifendurchgang pro Takt entspricht.
ld4
r4 4 = [r5], 4
1: loop: ld4
r4 = [r5], 4
;;
t -2
ld4
add
r7 2 = r4 2 , r9
2:
add
r7 = r4, r9
;;
t -1
ld4
st4
[r6] = r7 1 , 4;;
3:
st4
[r6] = r7, 4
t 0
add
ld4
4:
br.cloop
loop
;;
t 1
st4
add
ld4
t 2
t 3
t 4
t 5
t 6
st4
add
ld4
st4
add
ld4
st4
add
st4
add
st4
a
b
Bild 3.27. Optimierung einer Schleife durch Software-Fließbandverarbeitung. a Die zu optimie-
rende Schleife. b Zeitliche Abfolge der einzelnen Operationen. Zu jedem Zeitpunkt werden parallel
Operationen aus unterschiedlichen Iterationsschritten der Schleife ausgeführt
Der zeitliche Verlauf bei Verarbeitung der in Bild 3.27a dargestellten Schleife ist für
sechs Wiederholungen in Bild 3.27b angedeutet, wobei vorausgesetzt wird, dass
zwei gleichzeitige Zugriffe auf den Datenspeicher bzw. -cache möglich sind und die
Ladeoperation eine Latenzzeit von zwei Takten aufweist. Der erste Schleifendurch-
lauf wird zwischen t -2 und t 1 , alle weitere Schleifendurchläufe werden jeweils um
einen Takt zeitversetzt, ausgeführt. Die Bearbeitung der gesamten Schleife lässt sich
in drei grundsätzliche Phasen unterteilen:
In der ersten, als Prolog bezeichneten Phase wird das Software-Fließband mit
Operationen gefüllt. Sie endet, sobald die Ausführung der letzten Operation des
ersten Schleifendurchlaufs beginnt (in Bild 3.27b zum Zeitpunkt t 1 ).
In der sich anschließenden zweiten Phase, dem Kern ( kernel ), erreicht man die
maximale Operationsparallelität, wobei in jedem Takt ein Schleifendurchlauf
beendet und ein neuer begonnen wird.
In der letzten Phase, dem Epilog , werden schließlich die gestarteten Schleifen-
durchläufe abgeschlossen, jedoch keine weiteren gestartet. Die in den Befehlen
codierbare Operationsparallelität nimmt in dieser Phase wieder ab, bis schließ-
lich die letzte Operation des letzten Schleifendurchlaufs ausgeführt worden ist.
Da die parallel codierten Operationen unterschiedlichen Schleifendurchläufen zuzu-
ordnen sind, müssen überall dort, wo im ursprünglichen Programm Datenabhängig-
keiten bestehen, unterschiedliche Register benutzt werden. In Bild 3.27b ist dies für
den vierten Schleifendurchlauf in dem Kasten oben rechts angedeutet. So bezieht
sich die Ladeoperation auf den vierten und die Addition auf den zweiten Schleifen-
Search WWH ::




Custom Search