In-Order- vs. Out-of-Order-Ausführung: die Unterschiede

Eine In-Order-CPU gibt Befehle in Programmreihenfolge aus und führt sie so aus. Wartet ein vorheriger Befehl etwa wegen eines Cache-Fehlzugriffs, stehen auch die nachfolgenden still. Eine Out-of-Order-CPU prüft die Abhängigkeiten, führt bereite Befehle vorgezogen aus und schreibt die Ergebnisse im Reorder-Buffer (ROB) in Programmreihenfolge fest. Da während der Wartezeit andere Befehle vorankommen, steigt die IPC; dafür werden Registerumbenennung und Auswahlschaltungen für Befehle benötigt, was Schaltungsaufwand und Leistungsaufnahme erhöht.

MerkmalIn-Order-AusführungOut-of-Order-Ausführung
Reihenfolge von Ausgabe und AusführungProgrammreihenfolgeBereite Befehle werden in geänderter Reihenfolge ausgeführt
Festschreiben der Ergebnisse (Retire)ProgrammreihenfolgeIm Reorder-Buffer (ROB) in Programmreihenfolge
Wenn ein vorheriger Befehl wartetAuch die nachfolgenden Befehle stehen still (Stall)Unabhängige nachfolgende Befehle werden vorgezogen
Behandlung von DatenhazardsForwarding und Stalls. Die Befehlsanordnung bleibt dem Compiler überlassenZusätzlich zum Forwarding plant die Hardware die Befehle dynamisch
Scheinabhängigkeiten (WAR, WAW)Da die Reihenfolge eingehalten wird, meist unproblematischWerden durch Registerumbenennung mit Neuzuweisung physischer Register beseitigt
Wesentliche ZusatzschaltungenWenige. Einfache PipelineUmbenennungstabelle, physische Register, Issue-Queue, ROB, Load/Store-Queue
Auswirkung von Cache-FehlzugriffenGroß. Bei jedem Fehlzugriff stockt die Pipeline leichtInnerhalb eines Fensters von einigen hundert Befehlen laufen andere Befehle weiter und verbergen einen Teil der Wartezeit
IPCEher niedrig. Bei gleicher Ausgabebreite niedriger als Out-of-OrderHoch. In Kombination mit großer Ausgabebreite deutlich über 1
Schaltungsaufwand und LeistungGering. Leistung pro Fläche bzw. pro Watt lässt sich leicht steigernGroß. Auswahlschaltungen und ROB erhöhen Fläche und Leistungsaufnahme
EinsatzMikrocontroller, kleine Embedded-Kerne, ein Teil der auf Energiesparen ausgelegten Kerne, Rechenkerne von GPUsHochleistungskerne in PCs, Servern und Smartphones

Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.

Wann welche Variante?

In-Order-Ausführung
Wenn Fläche und Leistungsaufnahme klein bleiben sollen oder die Ausführungszeit gut vorhersagbar sein soll. Eingesetzt in Mikrocontrollern, Embedded-Kernen und Designs mit vielen kleinen Kernen.
Out-of-Order-Ausführung
Wenn ein einzelner Thread so schnell wie möglich laufen soll. Eingesetzt in Hochleistungskernen von PCs, Servern und Smartphones.
Kombination
Es gibt Chips, die Out-of-Order-Hochleistungskerne mit Energiesparkernen kombinieren, die In-Order arbeiten oder eine verkleinerte Out-of-Order-Logik haben. Schwere Aufgaben gehen an die Hochleistungskerne, leichte an die Energiesparkerne, um Leistung und Energiebedarf in Einklang zu bringen.

Häufige Fragen

Kann Out-of-Order-Ausführung das Ergebnis eines Programms verändern?

Innerhalb eines Threads nicht. Auch bei geänderter Ausführungsreihenfolge werden echte Datenabhängigkeiten (RAW) eingehalten, und die Ergebnisse werden im Reorder-Buffer in Programmreihenfolge festgeschrieben. Bei falsch vorhergesagten Sprüngen oder Ausnahmen werden die Ergebnisse aller späteren Befehle verworfen und der korrekte Zustand wiederhergestellt, sodass es von außen so aussieht, als liefe das Programm in seiner Reihenfolge ab.

Kann auch eine In-Order-CPU mehrere Befehle pro Zyklus ausführen?

Ja. Es gibt In-Order-Superskalarprozessoren, die unter Wahrung der Reihenfolge benachbarte unabhängige Befehle gleichzeitig ausgeben. Steht jedoch ein vorheriger Befehl still, können auch die folgenden nicht weiter, daher steigt die IPC nicht so stark wie bei Out-of-Order.

Was leisten Registerumbenennung und ROB jeweils?

Die Registerumbenennung beseitigt durch Neuzuweisung physischer Register Scheinabhängigkeiten (WAR und WAW), die durch die Wiederverwendung desselben Registernamens entstehen, und erhöht so die Zahl parallel ausführbarer Befehle. Der ROB hält die Ergebnisse der umgeordnet ausgeführten Befehle, schreibt sie in Programmreihenfolge fest und ermöglicht so präzise Ausnahmen.

Wie lässt sich die Leistung einer In-Order-CPU steigern?

Der Compiler ordnet die Befehle geschickt an, etwa indem er Befehle, die ein Load-Ergebnis verwenden, weiter vom Load entfernt platziert, sodass möglichst wenige Wartezeiten entstehen. Neben Forwarding zur Verringerung von Stalls helfen auch eine Datenanordnung, die Cache-Fehlzugriffe reduziert, sowie Prefetching.

Verständnis prüfen

Welches Verfahren prüft Befehlsabhängigkeiten und führt ausführbare Befehle in einer von der Programmreihenfolge abweichenden Reihenfolge aus, um die Leistung zu erhöhen?

  1. AIn-Order-Ausführung
  2. BOut-of-Order-Ausführung
  3. CSingle-Cycle-Ausführung
Antwort und Erläuterung anzeigen

Antwort: B. Out-of-Order-Ausführung

Bei der Out-of-Order-Ausführung werden Befehle, die auf das Ergebnis eines vorherigen Befehls oder auf Daten aus dem Speicher warten, zurückgestellt und bereite nachfolgende Befehle vorgezogen. Ein großer Vorteil ist, dass während der Wartezeit bei Cache-Fehlzugriffen andere Arbeit voranschreiten kann. Erforderlich sind Schaltungen zum Suchen ausführbarer Befehle in einem Fenster von mehreren hundert Befehlen, Registerumbenennung und ein Reorder-Buffer, der Ergebnisse in Programmreihenfolge festschreibt; Schaltungsaufwand und Leistungsaufnahme steigen entsprechend.

Welcher Mechanismus legt bei einer Out-of-Order-CPU die Ergebnisse umgeordnet ausgeführter Befehle in der ursprünglichen Programmreihenfolge fest (Retire)?

  1. AReorder-Buffer
  2. BSnoop-Filter
  3. CTLB
Antwort und Erläuterung anzeigen

Antwort: A. Reorder-Buffer

Der Reorder-Buffer hält die Ergebnisse umgeordnet ausgeführter Befehle vorübergehend und schreibt sie in Programmreihenfolge fest (Retire); in aktuellen Hochleistungskernen fasst er mehrere hundert Befehle. Bei Sprungfehlvorhersagen oder Ausnahmen können die Ergebnisse nachfolgender Befehle verworfen und der korrekte Zustand wiederhergestellt werden, sodass von außen der Eindruck einer programmgemäßen Ausführung entsteht (präzise Ausnahmen).

Was ist der Hauptzweck der Registerumbenennung (Register Renaming) in Out-of-Order-CPUs?

  1. ADie Zahl der Register zu verringern und die Schaltung zu verkleinern
  2. BPhysische Register neu zuzuweisen, ohne die vom Programm verwendeten Registernamen zu ändern, und so scheinbare Abhängigkeiten (WAR und WAW) zu beseitigen
  3. CRegisterwerte zu verschlüsseln
Antwort und Erläuterung anzeigen

Antwort: B. Physische Register neu zuzuweisen, ohne die vom Programm verwendeten Registernamen zu ändern, und so scheinbare Abhängigkeiten (WAR und WAW) zu beseitigen

Da die Zahl der Register im Befehlssatz mit 16 bis 32 begrenzt ist, werden dieselben Registernamen mehrfach verwendet, und es entstehen Abhängigkeiten, die mit dem tatsächlichen Datenfluss nichts zu tun haben (Gegenabhängigkeit WAR, Ausgabeabhängigkeit WAW). Bei der Registerumbenennung werden mehrere hundert physische Register dynamisch zugewiesen und bei jedem Schreiben ein neues physisches Register verwendet; dadurch entfallen diese Abhängigkeiten, und mehr Befehle können parallel ausgeführt werden. Echte Abhängigkeiten (RAW) lassen sich nicht beseitigen.

  1. Wie heißt das Prozessorverfahren, bei dem in einem Taktzyklus mehrere Befehle gleichzeitig ausgegeben und ausgeführt werden?
  2. Welches Verfahren gibt in der Pipeline, wenn ein Befehl das Ergebnis des vorherigen sofort verwendet (Datenhazard), das Rechenergebnis direkt an den nächsten Befehl weiter, ohne auf das Schreiben ins Register zu warten?
  3. Welche Kenngröße gibt die Anzahl der pro Takt ausführbaren Befehle an?

Übungsfragen zu CPU und Architektur

Wichtige Begriffe erklärt

Out-of-Order-Ausführung
Verfahren, das Befehlsabhängigkeiten prüft und ausführbare Befehle in anderer als der Programmreihenfolge ausführt, um die Leistung zu steigern. Die Ergebnisse werden über den Reorder-Buffer in der ursprünglichen Reihenfolge festgeschrieben.
Superskalar
Prozessorarchitektur, die pro Taktzyklus mehrere Befehle gleichzeitig ausgibt und ausführt. Mehrere Rechenwerke arbeiten parallel an voneinander unabhängigen Befehlen.
IPC
Abkürzung für Instructions Per Cycle: Anzahl der Befehle, die pro Takt ausgeführt werden können. Maß für die Entwurfseffizienz einer CPU; die Leistung ergibt sich näherungsweise aus IPC mal Taktfrequenz. Der Kehrwert ist CPI.
Pipeline-Verarbeitung
Verfahren, bei dem die Befehlsverarbeitung in Stufen wie Holen, Dekodieren und Ausführen unterteilt wird und mehrere Befehle zeitlich versetzt gleichzeitig bearbeitet werden.
Sprungvorhersage (Branch Prediction)
Technik, die das Ergebnis einer bedingten Verzweigung vor der Ausführung vorhersagt, damit nachfolgende Befehle ohne Anhalten der Pipeline verarbeitet werden. Bei Fehlvorhersage wird neu gestartet.

Verwandte Vergleiche