Unterschied zwischen Superskalar und Multi-Core?

11

Ich kann das nicht verstehen, was ist der Unterschied zwischen Superskalar und einem Multi-Core-Prozessor?

Ich mische sie immer wieder durch, daher wären einige einfache Punkte, was sie tun, großartig.

Mars Rover
quelle
Es verwirrt mich auch ... Laut Wikipedia können superskalare Prozessoren entweder einkernig oder mehrkernig sein. en.wikipedia.org/wiki/Superscalar_processor 2. Phara
Avi Mehenwal

Antworten:

15

Superskalare Prozessoren bedeuten, dass Sie mehrere Anweisungen während eines einzigen Taktzyklus versenden. Der Grund, warum dies von Multi-Core unterschieden wird, ist, dass Sie nur einen Befehlszähler erhalten. Sie verfolgen also mehrere Anweisungen während des Flugs, aber alle Anweisungen stammen aus einem einzigen Programm. Dies ist immer noch nur ein Prozess. Jetzt sagte ich "Sie erhalten einen Befehlszähler", und technisch gesehen ist dies insofern richtig, als es keinen Punkt gibt, an dem Ihr Code eine Ungleichheit aufweist, außer bei Verwendung einiger Verzweigungsvorhersageschemata (spekulative Ausführung: Sie führen beide Zweige gleichzeitig aus und werfen das "Falsche" weg "Ergebnis der Vorhersage).

Wenn Sie in Multi-Core einsteigen, werden mehrere Befehlsströme gleichzeitig ausgeführt. Der wichtige Teil ist, dass jeder Kern (der mit seinem eigenen Befehlszähler ausgeführt wird) auch superskalar sein kann, um jeden einzelnen Prozess schneller auszuführen!

Es ist möglich, Superskalar ohne Pipelining oder Ausführung außerhalb der Reihenfolge zu haben, indem das sogenannte sehr lange Befehlswort oder "VLIW" verwendet wird. Dies wird auch als "statischer" Superskalar bezeichnet (dh im Code selbst). Hier haben Sie im Grunde genug Komponenten, um mehrere Anweisungen gleichzeitig auszuführen, und Sie rufen mehrere Anweisungen gleichzeitig ab und führen sie dann aus. Stellen Sie sich in seiner einfachsten Form vor, Sie hätten gesagt: "Dieser Prozessor ruft immer zwei Befehle gleichzeitig ab und führt sie aus." Solange der Codierer die Arbeit findet, die gleichzeitig im selben Prozess ausgeführt werden kann, würden Sie Ihren Durchsatz verdoppeln! Wenn Sie nicht zwei Anweisungen zum Zusammenstellen finden könnten, würden Sie einfach eine Anweisung und einen NOP koppeln. Diese Idee ist meistens nicht sehr gut, denn wenn Sie eine bessere Version des Prozessors erstellen, die 3, 4 oder mehr Anweisungen gleichzeitig ausführen kann, bricht Ihr alter Code zusammen! Aber sie haben dies auf eine ziemlich geniale Weise gelöst. Wenn Sie mehr wissen möchten, sollten Sie sich explizit paralleles Anweisungs-Computing oder "EPIC" ansehen.

Dynamischer Superskalar mit Pipelining kann sowohl datenunabhängige Befehle als auch Parallelität auf Befehlsebene nutzen, was ihn zu einer so leistungsstarken Kombination macht. Im Wesentlichen können Sie mit genügend Hardware so viele unabhängige Anweisungen wie möglich gleichzeitig ausführen.

Dynamischer Superskalar mit Pipelining und Ausführung außerhalb der Reihenfolge war im Wesentlichen die Grenze der Parallelität auf Befehlsebene: Sie würden versuchen, mehrere Befehle gleichzeitig in derselben Phase auszuführen, um Operationen zu finden, die ohne Datenabhängigkeiten funktionieren. Sie könnten nicht in Ordnung sein, Sie würden nicht in Ordnung sein, es gibt alle möglichen Dinge, die Sie tun müssen, um Ihren Kopf gerade zu halten, während Sie superskalare Dinge tun. Multi-Core sagt: "Hey Programmierer! Gib mir mehrere Probleme, die ich gleichzeitig lösen kann!" und da der Programmierer in der Lage ist, unabhängig lösbare Probleme zu erkennen, die nur wenige Zeilen voneinander entfernt in der kompilierten Baugruppe liegen, kann er diese Lösungen für Multi-Core effizienter programmieren.

Superskalar ist nicht einmal in der Lage, Probleme wie "Wie führe ich diese beiden Programme schneller aus?" Zu lösen. Es konnte nur jedes unabhängige Programm schneller ausführen.

Hoffe das hilft, sorry wenn es ein bisschen unzusammenhängend ist.

--Bearbeiten--

Geändert, um den Punkt von ajs410 zu berücksichtigen, dass ich mehrere Ideen verwirrt hatte.

Kit Scuzz
quelle
Ja, das hat es viel klarer gemacht, danke! Ich denke übrigens, das Wort, nach dem Sie suchen, ist "Spekulative Ausführung". Trotzdem nochmals vielen Dank.
Marsrover
1
Um die Dinge zu klären durch eine @KitScuzz wieder etwas mehr kompliziert, lesen Sie auch HyperThreading
ppeterka
Ich denke, dies verwischt superskalar, außer Betrieb und Pipelining. Insbesondere sagt Superskalar: "Ich habe vier ALUs, sodass ich diese vier Anweisungen zum Hinzufügen (von einem einzelnen Thread!) Abrufen und sie im selben Taktzyklus ausgeben kann." Bei Ausführung außerhalb der Reihenfolge wird der Befehlsstrom um Datenabhängigkeiten herum neu angeordnet, um die Parallelität auf Befehlsebene zu maximieren. Pipelining gibt neue Anweisungen aus, während die alten Anweisungen im Flug sind. Out-of-Order-Ausführung und Pipelining haben eine starke Synergie mit der superskalaren Ausführung, sind jedoch nicht unbedingt erforderlich, um die Definition zu erfüllen.
Ajs410
Fest! Entschuldigung für die Verspätung.
Kit Scuzz
1

Wenn Sie auf frühere Prozessoren wie den 80486 oder Pentium zurückblicken, war eine CPU eine einzige logische Verarbeitungseinheit. Es wird jeweils ein einzelner Befehlsstrom ausgeführt. Eine einzelne CPU war auch ein einzelner Siliziumchip. Wenn Sie mehr Rechenleistung wünschen, können Sie ein teures Server-Motherboard mit Steckplätzen für zwei separate CPUs kaufen. Dann hatten Sie eine Zwei-CPU-Maschine und damit zwei Prozessorkerne.

Irgendwann bedeutete Moores Gesetz, dass wir so viele Transistoren im Silizium hatten, dass Sie alle Schaltkreise für zwei CPUs in nur einem Chip platzieren konnten. Jetzt können Sie Verwirrung stiften. Wenn Sie sagen, Sie haben zwei CPUs, könnte dies bedeuten, dass Sie zwei Siliziumpakete im älteren Stil oder das neuere Einzelsiliziumpaket haben, jedoch mit dem Prozessor-Setup von zwei Prozessoren. Um dies zu beheben, meinen wir nun, dass die CPU ein einzelnes Siliziumpaket ist und ein Kern eine einzelne logische Verarbeitungseinheit darin ist.

Superskalar bezieht sich auf eine Technik, die innerhalb eines Kerns verwendet wird, um die Leistung zu verbessern und es ihm zu ermöglichen, durchschnittlich mehr Anweisungen pro Zyklus zu verarbeiten. Ein Skalarprozessor führt höchstens einen Befehl pro Zyklus aus. Superskalar bedeutet, dass er möglicherweise mehr als einen Befehl pro Zyklus ausführen kann. Wenn der Prozessor beispielsweise eine Funktionseinheit für die Ganzzahlarithmetik und eine andere für Gleitkommawerte hat, können Sie beide gleichzeitig verwenden, um zwei Befehle gleichzeitig auszuführen. Was ist, wenn Sie drei ganzzahlige Einheiten und zwei Gleitkommaeinheiten haben? Jetzt haben Sie ein noch größeres Potenzial für die parallele Ausführung. Sie benötigen jedoch auch mehr Transistoren für die Implementierung und eine weitaus kompliziertere Logik, damit sie zuverlässig funktioniert. In der realen Welt wird Superskalar in Verbindung mit nicht in Ordnung befindlichen Designs verwendet, weil sie sich gegenseitig ergänzen.

Phil Wright
quelle