Out-of-order execution
Out-of-order execution (englisch für etwa Ausführung in anderer Reihenfolge [als im Programmcode]) bezeichnet die Möglichkeit, icht oder nur schwer zur Kompilierzeit voraussagen.
Ein dynamisches Verfahren wie die OOE-Ausführung kann zur Ausführungszeit entsprechend reagieren und so mehr Befehle parallel ausführen und damit die Bearbeitung beschleunigen.
Funktionsprinzip

In früheren Prozessoren wurden die einzelnen Befehle nacheinander abgearbeitet, wobei jeder Befehl nach einer festen Folge aus Teilschritten (in-order execution) ausgeführt wurde, vgl. u. a. Von-Neumann-Zyklus. Diese Teilschritte sind:
- Befehl laden (instruction fetch)
- Wenn die Operanden verfügbar sind (zum Beispiel in Registern), wird der Befehl an die passende Funktionseinheit zur Ausführung übergeben. Wenn ein oder mehr Operanden im aktuellen Befehlszyklus nicht verfügbar sind (meist weil sie noch aus dem Speicher geladen werden müssen), wartet der Prozessor, bis diese geladen sind.
- Der Befehl wird durch die passende Funktionseinheit ausgeführt.
- Die Funktionseinheit schreibt das Ergebnis in ein Register.
Das neue Konzept (out-of-order execution) bearbeitet die Befehle in der folgenden Reihenfolge:
- Befehl laden (instruction fetch).
- Befehl in eine Warteschlange (instruction buffer) eintragen.
- Der Befehl wartet im instruction buffer, bis seine Operanden geladen sind. Danach darf der Befehl die Warteschlange verlassen, oft vor früher eingetragenen, älteren Befehlen.
- Der Befehl wird an die passende Ausführungseinheit übergeben und dort ausgeführt.
- Das Ergebni
Fast alle modernen x86-Prozessoren ab dem Intel Pentium Pro bzw. AMD K5 können Befehle out-of-order ausführen. Bekannte Ausnahmen sind die IDT WinChip und VIA C3/VIA C7 Serien, die von Centaur Technology entwickelt wurden, und die Intel-Atom-Serie bis einschließlich Cedar Trail.
Siehe auch
Literatur
- Oberschelp, Vossen: Rechneraufbau und Rechnerstrukturen. 9. Auflage. Oldenbourg, 2003, ISBN 3-486-27206-3.