www.wikidata.de-de.nina.az
Out of order execution englisch fur etwa Ausfuhrung in anderer Reihenfolge als im Programmcode bezeichnet die Moglichkeit Maschinenbefehle in den Ausfuhrungseinheiten eines meist superskalaren Prozessors in einer anderen Reihenfolge auszufuhren als sie im Programmcode stehen ohne allerdings das Ergebnis zu verandern Dadurch konnen mehr Befehle parallel ausgefuhrt werden da die Recheneinheiten des Prozessors besser ausgelastet werden Das Gegenteil von out of order execution ist in order execution bei der die Befehle strikt nach Programmreihenfolge abgearbeitet werden wie etwa beim Von Neumann Zyklus Weil das Ergebnis der Out of Order Ausfuhrung das gleiche sein muss wie bei Ausfuhrung in Programmreihenfolge erhoht Out of Order Execution die Geschwindigkeit nur bei Befehlsfolgen bei denen ein nachfolgender Befehl nicht vom Ergebnis des vorherigen Befehls abhangt sondern nur von Befehlen die weit genug entfernt zuvor ausgefuhrt wurden Inhaltsverzeichnis 1 Motivation 2 Funktionsprinzip 3 Implementierung 4 Siehe auch 5 LiteraturMotivation BearbeitenEin Prozessor hat mehrere Funktionseinheiten Anmerkung In der x86 Welt erstmals seit dem Intel Pentium P54 u a arithmetisch logische Einheit ALU Gleitkommaeinheit FPU Lade und Speicher Einheit und spezielle Gleitkomma Vektoreinheiten Bei superskalaren Prozessoren ermoglichen sie Befehlsparallelitat auszunutzen und damit die Ausfuhrungsgeschwindigkeit zu erhohen Wahrend ein vorhergehender Befehl eine Funktionseinheit noch belegt stehen die freien Funktionseinheiten bereits dem nachfolgenden Befehl zur Verfugung Wegen Datenabhangigkeiten zwischen den Befehlen oder wenn sie dieselbe Funktionseinheit benotigen ist die parallele Ausfuhrung aber nicht immer moglich Oft konnten Befehle zwar parallel ausgefuhrt werden stehen aber nicht direkt hintereinander im Programmcode ein Prozessor ohne Out of Order Execution halt sich streng an die Ausfuhrungsreihenfolge die im Programm vorgegeben ist und kann sie dann nicht parallel ausfuhren Eine Umordnung der Befehle im Programm per Hand oder durch den Compiler kann auf einem In Order Prozessor zwar zu besseren Ergebnissen fuhren ist aber im Allgemeinen nicht optimal weil Einflusse wahrend der Laufzeit nicht oder kaum berucksichtigt werden konnen Insbesondere ist die Ausfuhrungszeit von Speicherzugriffen nicht vorhersagbar Diese hangt davon ab ob der Cache die geforderten Daten oder der Ubersetzungspuffer TLB die geforderte Seitenubersetzung liefern kann Das kann man meist nicht oder nur schwer zur Kompilierzeit voraussagen Ein dynamisches Verfahren zum Umordnen der Befehle wie die Out of Order Execution Ausfuhrung kann zur Ausfuhrungszeit entsprechend reagieren und so mehr Befehle parallel ausfuhren und damit die Bearbeitung beschleunigen Funktionsprinzip Bearbeiten nbsp Grundprinzip der ungeordneten BefehlsausfuhrungIn fruheren Prozessoren wurden die einzelnen Befehle nacheinander abgearbeitet wobei jeder Befehl nach einer festen Folge aus Teilschritten in order execution ausgefuhrt wurde vgl u a Von Neumann Zyklus Diese Teilschritte sind Befehl laden instruction fetch Wenn die Operanden verfugbar sind zum Beispiel in Registern wird der Befehl an die passende Funktionseinheit zur Ausfuhrung ubergeben Wenn ein oder mehr Operanden im aktuellen Befehlszyklus nicht verfugbar sind meist weil sie noch aus dem Speicher geladen werden mussen wartet der Prozessor bis diese geladen sind Der Befehl wird durch die passende Funktionseinheit ausgefuhrt 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 fruher eingetragenen alteren Befehlen Der Befehl wird an die passende Ausfuhrungseinheit ubergeben und dort ausgefuhrt Das Ergebnis wird in eine Warteschlange der Ergebnisse eingetragen register retirement file buffer Erst nachdem die Ergebnisse aller fruheren alteren Befehle in die Register geschrieben wurden wird das Ergebnis des aktuellen Befehls ebenfalls in die Register geschrieben Implementierung BearbeitenImplementiert wird meist Scoreboarding oder der Tomasulo Algorithmus Beim Scoreboarding werden belegte Ressourcen auf einem zentralen Scoreboard markiert und nach ihrer Verwendung wieder freigegeben Der Tomasulo Algorithmus implementiert dynamisches Scheduling So werden mehrere Befehle gleichzeitig ausgefuhrt solange die Operanden unabhangig sind Verhindert werden Read After Write Hazards indem der Befehl verzogert wird und Write After Read Hazards indem ein neuer Wert zwischengespeichert wird Zur Reduzierung der Datenabhangigkeiten wird zusatzlich Registerumbenennung verwendet Der erste x86 Prozessor mit Out of order execution war der NexGen s Nx686 Fast alle modernen x86 Prozessoren ab dem Intel Pentium Pro bzw AMD K5 konnen Befehle out of order ausfuhren Bekannte Ausnahmen sind die IDT WinChip VIA C3 und C7 Serien die von Centaur Technology entwickelt wurden und die Intel Atom Serie bis einschliesslich Cedar Trail Siehe auch BearbeitenHardwareseitiges Multithreading Spectre Sicherheitslucke Meltdown Sicherheitslucke Literatur BearbeitenOberschelp Vossen Rechneraufbau und Rechnerstrukturen 9 Auflage Oldenbourg 2003 ISBN 3 486 27206 3 Abgerufen von https de wikipedia org w index php title Out of order execution amp oldid 235940389