Zum Inhalt springen

Explicitly Parallel Instruction Computing

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 19. September 2004 um 21:16 Uhr durch 82.119.10.20 (Diskussion). Sie kann sich erheblich von der aktuellen Version unterscheiden.
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

EPIC bezeichnet eine Eigenschaft einer Instruction Set Architecture (ISA) einer Familie von Mikroprozessoren. EPIC ist eine Erfindung von Intel und ein zentrales Merkmal der IA-64 Architektur. Mit Hilfe des EPIC werden die Parallelisierungen eines Instruktionsstromes explizit vorgenommen. Die ISA hat also Eigenschaften, die die explizite Parallelisierung unterstützen, während eine herkömmliche ISA von einer sequentiellen Abarbeitung der Befehle ausgeht. Ein Programm, das in einer nicht-EPIC Maschinensprache vorliegt, kann auch parallelisiert werden, aber es ist bei der Ausführung eine komplexe Logik notwendig um parallel ausführbare Instruktionen zu identifizieren, da das Befehlsformat keine Aussagen über parallelisierbare Instruktionen macht (implizite Parallelisierung).

Beim EPIC wird dem Prozessor bei der Programmierung signalisiert, welche Instruktionen parallel ausführbar sind. Solche parallelisierbaren Instruktionen werden in Gruppen ("instruction group"s) zusammengefaßt. Die Instruktionen einer Gruppe können dann prinzipiell in beliebiger Reihenfolge und mit beliebigem Parallelitätsgrad ausgeführt werden. Um die Abhängigen Instruktionen voneinander zu trennen, müssen "stop"s in den Befehlstrom eingebaut werden. Stops markieren das Ende einer instruction group und den Beginn einer neuen. Die eigentlich explizite Parallelisierungsinformation sind die stops, denn durch sie werden parallelisirbare Instruktionen identifiziert ohne daß eine Analyse hätte erfolgen müssen.

Das Optimierungsziel eines gegebenen EPIC-Programmes ist, die Anzahl der nötigen instruction groups zu minimieren, also die durchschnittliche Anzahl der Instruktionen pro instruction group zu erhöhen.

Dabei gibt es Ausnahmen, zum Beispiel müssen Exceptions, die durch eine frühe Instruktion einer Gruppe ausgelöst werden immer so ausgeführt werden, als ob die späteren Instruktionen einer Gruppe gar nicht ausgeführt worden sind. Beliebige Instruktionen können aber spekulativ bereits ausgeführt worden sein, deren Ergebnis wird beim Auftauchen einer Exception einer früheren Instruktion verworfen. Der Prozessor muß also den Anschein erwecken, dass die Instruktionen einer Gruppe in Reihenfolge ausgeführt wurden.

Durch das EPIC spart man Resourcen, die bei nicht-EPIC Prozessoren dazu verwendet werden müssen, die Instruktionen während der Ausführung auf die parallel arbeitenden Einheiten des Prozessors aufzuteilen. Diese Einsparungen sind die Motivation für die Erfindung von EPIC. Es können dadurch die Kosten des Chips gesenkt werden und die Leistungsaufnahme wird verringert. Die Berechnungen, die zur Parallelisierung des Befehlsstromes notwendig sind werden bei EPIC einmal beim Kompilieren vorgenommen, bei nicht-EPIC Prozessoren jedesmal bei der Ausführung des Codes (und mithilfe einer recht großen Anzahl von Logikgattern).

Moderne Compiler nehmen auch für nicht-EPIC ISAs Optimierungen des Befehlsstromes vor (verschieben z.B. unabhängige Instruktionen innerhalb des Stromes), um den Prozessor bei der Parallelisierung zu unterstützen. Bei EPIC ISAs ist diese Unterstützung des Prozessors zwingend, daß heißt man kann sehr leicht einen Abhängigkeitsfehler erzeugen, selbst wenn die Instruktionen in der richtigen sequentiellen Reihenfolge stehen.

EPIC ist mit VLIW verwandt, denn VLIW dient auch dem Gruppieren von Instruktionen. Dabei muß beachtet werden, daß die VLIW-Gruppierung in Bundles und die EPIC-Gruppierung in instruction groups bei der IA-64 voneinander unabhängig sind, daß heißt zu einer instruction group gehören eine beliebige Anzahl von Bundles und ein stop kann auch zwischen Instruktionen eines einzelnen Bundles eingebracht werden.

ISAs, die EPIC als Architekturmerkmal haben sind relativ schwer in Assembler zu programmieren, und Compiler sind ein beträchtliches Maß komplexer, weil die Parallelisierung nun nicht mehr von der Implementierung der ISA, also dem Prozessor, selbst geleistet wird, sondern explizit erfolgen muß. So gibt es Sachverhalte bei der EPIC-Programmierung, die sich mit nicht-EPIC-Maschinensprache gar nicht ausdrücken lassen, weil dort das Modell eine strikt sequentielle Ausführung ist.

Da die Berechnungen, die für die Parallelisierung notwendig sind, unabhängig von der Ausführung erfolgen, kann mehr Rechenzeit auf eben diese Aufgabe verwendet werden.