CPU-Grundlagen: VLIW-Architekturen & Intels Itanium

Allgemeines zu VLIW-Architekturen

Die Kontrollflussstrategie entspricht ebenfalls der der RISC-Prozessoren: Änderungen des sequenziellen Programmflusses erfolgen durch Sprünge, Verzweigungen und Unterprogrammaufrufe. Hierdurch entsteht die gleiche Systematik wie bei superskalaren Prozessoren: Flags (1-Bit-Register) beeinflussen die Programmflusskontrolle in ihrer expliziten Ausführung. Diese Flags erhalten erst zur Laufzeit des Programms ihren Wahrheitswert durch Vergleichs- und eventuell andere Operationen.

Im Unterschied zu superskalaren Prozessoren erfolgt aber die Steuerung des (sequenziellen) Programmflusses, also das Instruction Scheduling, im Wesentlichen schon zur Compile-Zeit. In jedem (Lang-)Befehl sind die Operationen kodiert, die der Prozessor dann in einem Taktzyklus auf den voneinander unabhängigen Funktionseinheiten ausführt.

Der Compiler für die VLIW-Architektur hat also die Aufgabe, aus einem zunächst sequenziellen Strom von Operationen mit Hilfe einer Analyse des Steuer- und des Datenflusses die voneinander unabhängigen Operationen herauszufinden. Die als gleichzeitig innerhalb eines Takts ausführbaren Einzelbefehle packt er anschließend in die breiten Befehlswörter.

Zusätzlich zur Kenntnis der Abhängigkeiten ist es hierfür auch erforderlich, dass der Compiler die Ausführungszeit eines jeden Befehls exakt kennt. Dass das Instruction Scheduling nicht schon komplett zur Compile-Zeit erfolgt, sondern zu einem geringeren Anteil auch noch zur Laufzeit möglich ist, bedeutet keine wirkliche Einschränkung.

Die Steuerung zur Laufzeit nimmt unter Umständen zusätzliche Optimierungen vor. So stehen ihr Informationen zur Verfügung, die der Compiler noch nicht haben kann, wie beispielsweise spekulative Schlussfolgerungen aus dem bisherigen Programmverlauf.

Eine Erhöhung der Instruktionsparallelität erreicht man durch die bedingte Ausführung von Instruktionen: Der Compiler stattet wie im Fall der superskalaren CPU möglichst viele Befehle mit einem zuordnungsfähigen Bedingungs-Flag aus. Nur bei Erfüllung der Bedingung liefert diese Instruktion dann ein Ergebnis.

Eine Operation, die bedingt kodiert ist und deren Bedingung nicht zutrifft, verhält sich wie ein NOP-Befehl (No Operation). Die Zeit zur Auswertung des Flags trägt zur Gesamtausführungszeit des Befehls bei. Allerdings streben die Entwickler einer CPU an, auch bedingte Befehle innerhalb eines Takts ablaufen zu lassen.

Die Herkunft der Bedingungs-Flags kann dem normalen CPU-Modell entsprechen (also Zero, Carry und so weiter), oder der Prozessor stellt dafür neue, zusätzliche Flags zur Verfügung.