2012-04-09 6 views
10

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?

+0

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. –

Antwort

21

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.