Ich habe etwas Material über Superscalr und OoO gelesen und ich bin verwirrt.
Ich denke, ihre Architektur Graphen sehen sehr ähnlich aus.Was ist der generelle Unterschied zwischen Superscalar und OoO-Ausführung?
Antwort
Superskalare Mikroprozessoren können zwei oder mehr Anweisungen gleichzeitig ausführen. Z.B. typischerweise haben sie mindestens 2 ALUs (obwohl ein superskalarer Prozessor möglicherweise 1 ALU und eine andere Ausführungseinheit wie eine Schalt- oder Sprungeinheit hat).
(Genauer gesagt, superskalare Prozessoren können mit der Ausführung von zwei oder mehr Anweisungen in derselben beginnen Die Pipelined-Prozessoren können mehr als einen Befehl gleichzeitig ausführen, aber ein nicht-superskalarer Pipeline-Prozessor startet nur einen einzigen Befehl in einem bestimmten Zyklus, Pipelined-Ausführungseinheiten benötigen mehrere Zyklen, um Ende-zu-Ende auszuführen sind in der Regel in der Lage, zwei nicht-pipelinierte Befehle mit einer einzelnen Zykluslatenz pro Zyklus auszuführen, während nicht-superskalare Pipeline-Prozessoren nicht gleichzeitig zwei Einzelzyklusbefehle in den ALUs ausführen können.)
Out-of-order-Prozessoren können Anweisungen aus der ursprünglichen Reihenfolge ausführen. Zum Beispiel in dem folgenden, in der MULTIPLY 5 Zyklen dauert, den Befehl 3 ausführen kann, bevor der Befehl 2 - weil der Befehl 2 wird für den Zyklus 5 Ergebnis der MULTIPLY des Befehls 1 warten:
1: MULTIPLY reg1 := reg2 * reg3
2: ADD reg4 := reg1 + 5
3: ADD reg6 := reg2 + 1
meist Unrund Auftragsprozessoren sind auch superskalar. Sie können sich jedoch vorstellen, einen Out-of-Order-Prozessor zu erstellen, der nicht superskalar ist und nur eine Operation pro Pipelined-ALU pro Zyklus initiieren kann. (I haben vorgeschlagen, solche Operationen, wenn sie von Intel, als Low-Power-Chips. Heck, können Sie Out-of-Order-Prozessoren, die nur zur Hälfte Skalar sind, z. B. dass nur eine 16 Bit breite ALU, 2 zu nehmen Zyklen für eine 32-Bit-Add, usw. Aber das ist Stretching.)
Viele superscalar Prozessoren sind jedoch nicht out-of-order. Im obigen Beispiel würde ein Superskalar in der richtigen Reihenfolge zuerst die Anweisung [1] ausführen. Es würde NICHT starten Anweisung 3, aber würde warten, bis Anweisung 2 starten könnte - zu diesem Zeitpunkt würde es Anweisung 2 und 3 zusammen starten.
Hoffe, das hilft.
Manchmal müssen Sie über unwahrscheinliche Grenzfälle nachdenken, z. B. 1-weite oder halb-breite OOO-Maschinen, um die Konzepte zu verstehen.
Siehe auch: ** [Moderne Mikroprozessoren: Ein 90-Minuten-Guide!] (Http://www.lighterra.com/papers/modernmicrocessors/) **. Dieser Artikel baut von einfachen Pipelining über Tief-Pipeline bis Superscalar auf, mit Diagrammen und Beispielen. Dann geht es weiter zu Befehlslatenzen und -abhängigkeiten, Verzweigungen (und Vorhersage) und Out-of-Order-Ausführung. (Und Prädikation (Datenabhängigkeiten), um Äste zu ersetzen.) Dann einige Diskussionen über "Brainiac vs Speed Dämon (z. B. Pentium 4)" und warum Frequenz/Power-Skalierung tötete P4 und warum wir Multi-Kerne statt immer schneller Einzelkerne haben. Sehr empfehlenswert. –