Out-of-Order Execution
Kurz: Ein moderner Prozessor führt Befehle nicht strikt in der Programmreihenfolge aus, sondern zieht Befehle vor, deren Daten schon bereit sind, und ordnet das Ergebnis danach wieder.
Genauer: Muss ein Befehl auf langsame Daten aus dem Speicher warten, würde ein strikter Prozessor stillstehen. Der Out-of-Order-Prozessor erledigt währenddessen unabhängige Befehle und sorgt dafür, dass das sichtbare Ergebnis trotzdem der Programmlogik entspricht.
Im Detail
- Reorder-Buffer: Sammelt die Ergebnisse und schreibt sie in der richtigen Reihenfolge fest („Retirement”).
- Register-Umbenennung: Beseitigt Scheinabhängigkeiten zwischen Befehlen.
- Spekulation: Der Prozessor rät bei Sprüngen den Weg und rechnet voraus. Lag er falsch, wird alles verworfen.
- Sicherheit: Spekulative Ausführung ermöglichte Angriffe wie Spectre und Meltdown über Zeitunterschiede im Cache.
- Folge für Code: Vorhersagbare Sprünge und gut vorhersehbare Speicherzugriffe laufen schneller.
Siehe auch: Speicherhierarchie und Cache-Lines