Out-of-Order-Befehlsausführung: Wird die Festschreibungsreihenfolge beibehalten?

uf der einen Seite schreibt Wikipedia über die Schritte der Out-of-Order-Ausführun

Instruction Fetch.Befehlsversand an eine Befehlswarteschlange (auch Befehlspuffer oder Reservierungsstationen genannt). Der Befehl wartet in der Warteschlange, bis seine Eingabeoperanden verfügbar sind. Die Anweisung darf dann die Warteschlange vor früheren, älteren Anweisungen verlassen.Die Anweisung wird an die entsprechende Funktionseinheit ausgegeben und von dieser ausgeführt. Die Ergebnisse werden in die Warteschlange gestellt.Nur nach allen älterenei @ -Anweisungen werden die Ergebnisse in die Registerdatei zurückgeschrieben, und dieses Ergebnis wird in die Registerdatei zurückgeschrieben. Dies wird als Abschluss- oder Ruhestandsphase bezeichnet.

Die ähnlichen Informationen finden Sie im Buch "Computer Organization and Design":

Damit sich Programme so verhalten, als würden sie in einer einfachen Pipeline in der angegebenen Reihenfolge ausgeführt, muss die Einheit zum Abrufen und Dekodieren von Befehlen Befehle in der angegebenen Reihenfolge ausgeben, sodass Abhängigkeiten nachverfolgt werden können, und die Festschreibungseinheit muss Ergebnisse in Register schreiben und Speicher in Programmabrufreihenfolge. Dieser konservative Modus heißt In-Order-Commit ... Heute,alle dynamisch geplanten Pipelines In-Order-Commit verwenden.

So werden, soweit ich weiß, die Ergebnisse ihrer Ausführung im Neuordnungspuffer gespeichert und anschließend in deterministischer Reihenfolge in die Speicher / Register geschrieben, auch wenn die Befehlsausführung nicht in der richtigen Reihenfolge erfolgt.

Andererseits ist bekannt, dass moderne CPUs Speicheroperationen für Leistungsbeschleunigungszwecke neu anordnen können (z. B. können zwei benachbarte unabhängige Ladebefehle neu angeordnet werden). Wikipedia schreibt darüberHie.

Könnten Sie bitte etwas Licht in diese Diskrepanz bringen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage