Hardware Reference
In-Depth Information
4.3
4.3 Konflikte durch Datenabhangigkeiten
In diesem Abschnitt untersuchen wir die Auswirkungen der impliziten Paral-
lelisierung der Ausfuhrung von Programmen durch einen superskalaren Pro-
zessor. Wir wollen zunachst an ein paar Beispielen uberlegen, welche Bedeu-
tung die Reihenfolge hat, in der die Instruktionen im Programm stehen.
Lesen Sie die folgenden Programmfragmente aus mandelbrot.mms und uber-
legen Sie - bevor Sie die Erklarung dazu lesen - ob die Reihenfolge der In-
struktionen wichtig ist, d.h. ob die Instruktionen vertauscht werden konnten.
Programmfragment 1
30 FMUL temp1,xk,xk x k
31 FMUL temp2,yk,yk y k
In diesem Fall sprechen keine Grunde gegen das Vertauschen der beiden Zei-
len.
Programmfragment 2
50 ADD temp2,temp2,bildx
51 STBU k,temp1,temp2
Hier darf die Reihenfolge nicht vertauscht werden, da sonst der Wert k in
Zeile 51 an die falsche Adresse gespeichert wurde. Diese Art von Abhangigkeit
haben wir bereits als Read-After-Write-Abhangigkeit kennen gelernt.
Programmfragment 3
35 FMUL yk,xk,yk
36 SETH xk,#4000 2 , 0 (Gleitkommawert!)
37 FMUL yk,yk,xk 2 × y k
Die Befehle in Zeilen 35 und 37 sind hier gleich und durfen naturlich gegen-
einander getauscht werden. Ansonsten darf auch hier die Reihenfolge nicht
vertauscht werden, aber aus einem anderen Grund als eben: xk wurde sonst
uberschrieben, bevor der alte Wert fur die Berechnung in Zeile 35 verwen-
det worden ware. In Zeile 36 wird xk mit einem konstanten Wert fur weitere
Berechnungen uberschrieben.
Die Abhangigkeit der beiden Zeilen ist in diesem Fall aber nicht so extrem
wie eben. Denn es gabe eine programmiertechnische Alternative, nach deren
Anwendung sich die beiden Zeilen 35 und 36 theoretisch vertauschen lie-
ßen: Zur Aufnahme des konstanten Gleitkommawerts 2,0 konnte ein anderes
Register verwendet werden, namlich sinnvollerweise eines der vorgesehenen
temporaren Register, temp2 :
Search WWH ::




Custom Search