Information Technology Reference
In-Depth Information
zierten Programms erfordert wegen der bestehenden Datenabhängigkeiten natürlich
mehr als einen Taktzyklus Zeit und ist somit aufwendiger und ggf. auch langsamer
als die des in Bild 3.23a dargestellten nicht optimierten Assemblerprogramms.
Nun ist es möglich, ohne Optimierung eine Wirkung entsprechend Bild 3.23b zu
erzielen, wenn man berücksichtigt, dass die Semantik einer Operationsfolge bei Pro-
zessoren mit IA-64-Architektur unabhängig davon ist, ob die einzelnen Operationen
streng sequentiell oder teilweise parallel ausgeführt werden. Da es außerdem erlaubt
ist, in einem Befehl mehrere Sprungoperationen zu codieren, impliziert dies, dass
alle auf eine verzweigende Sprungoperation folgenden, in einem Befehl parallel
codierten Operationen automatisch in ihrer Bearbeitung annulliert werden. Mit
anderen Worten: Das doppelte Semikolon in Zeile 2 des Assemblerprogramms in
Bild 3.23a ist nicht erforderlich. Falls die Sprungoperation in Zeile 2 nicht ver-
zweigt, werden parallel die Operationen des if-Zweigs ausgeführt. Falls die Sprung-
operation verzweigt, werden die Operationen in den Zeilen 3 bis 5 annulliert und in
einem zweiten Takt die Operationen des else-Zweigs bearbeitet.
Das doppelte Semikolon am Ende von Zeile 5 in Bild 3.23a ist selbstverständlich
weiterhin erforderlich, weil die Operationen in den Zeilen 3 und 7 auf dieselben
Register schreibend zugreifen, wie die Operationen in den Zeilen 7 und 8. Wäre dies
jedoch nicht der Fall, ließe sich sogar der else-Zweig parallel zum if-Zweig in einem
Befehl codieren. Dass hierbei die Sprungmarke else innerhalb eines Befehls auftre-
ten würde, ist kein Problem. Die einzige für die Adressen von Sprungmarken gel-
tende Restriktion ist, dass sie an den sog. Bundles , in denen jeweils drei Operationen
codiert sind, ausgerichtet sein müssen (ein Befehl kann mehrere Bundles enthalten).
Die hier beschriebene Definition der Semantik von Sprungoperationen ist ein her-
ausragendes Merkmal von Prozessoren mit IA-64-Architektur, das in anderen nach
dem VLIW-Prinzip arbeitenden Prozessoren nicht vorzufinden ist. Der Trace 7/300
von Multiflow oder der Nemesis X der TU Berlin kann z.B. nur eine Sprungopera-
tion pro Befehl ausführen, was den Vorteil hat, einfach realisierbar zu sein. Der
TMS320C62x von Texas Instruments oder der TriMedia TM-1300 von Philips kön-
nen zwar mehrere Sprungoperationen in einem Befehl gleichzeitig bearbeiten, die
parallel codierten anderen Operationen werden jedoch unabhängig davon, ob ver-
zweigt oder nicht verzweigt wird, in jedem Fall ausgeführt. Dies gilt auch für die
Sprungoperationen selbst, weshalb nur eine von ihnen wirklich verzweigen darf (das
Verhalten der Prozessoren ist nicht definiert, wenn mehrere Sprungoperationen
gleichzeitig verzweigen).
Bemerkung. Die parallele Ausführung von Operationen, die vor und hinter einem nichtverzwei-
genden Sprung codiert sind, erfordert normalerweise die spekulative Vorverlegung der auf den
Sprung folgenden Operationen. Wie beschrieben, ist eine solche Optimierung für Prozessoren mit
IA-64-Architektur unnötig, wenn ein Prozessor mit IA-64-Architektur verwendet wird, da alle Ope-
rationen, die zusammen mit einem Sprung als parallel ausführbar codiert sind, zwar gleichzeitig
gestartet, die auf einen Sprung folgenden Operationen beim Verzweigen jedoch annulliert werden.
Möchte man umgekehrt Operationen parallelisieren, die nicht auf die Sprungoperation, sondern auf
das Sprungziel folgen, ist ein Umordnen von Operationen auch mit einem IA-64-konformen Pro-
zessor nicht vermeidbar. Dabei wird durch Prädikation dafür gesorgt, dass die verschobenen Opera-
tionen tatsächlich nur zur Ausführung kommen, wenn die Sprungbedingung erfüllt ist. In Bild 3.24
Search WWH ::




Custom Search