Superskalarität
Ein superskalarer CPU-Entwurf ermöglicht eine Form des parallelen Rechnens, die als Parallelität auf Instruktionsebene innerhalb einer einzigen CPU bezeichnet wird, wodurch bei gleicher Taktrate mehr Arbeit geleistet werden kann. Dies bedeutet, dass die CPU während eines Taktzyklus mehr als einen Befehl ausführt, indem sie mehrere Befehle gleichzeitig ausführt (als Befehls-Dispatching bezeichnet), und zwar auf doppelten Funktionseinheiten. Jede Funktionseinheit ist nur eine Ausführungsressource innerhalb des CPU-Kerns, wie eine arithmetisch-logische Einheit (ALU), eine Gleitkommaeinheit (FPU), ein Bit-Shifter oder ein Multiplikator.
Die meisten superskalaren CPUs sind auch gepipelt, aber es ist möglich, eine nicht-gepipelte superskalare CPU oder eine gepipelte nicht-superskalare CPU zu haben.
Die superskalare Technik wird durch mehrere Merkmale des CPU-Kerns unterstützt:
- Die Anweisungen stammen aus einer geordneten Anweisungsliste.
- CPU-Hardware kann herausfinden, welche Anweisungen welche Datenabhängigkeiten haben.
- Kann mehrere Anweisungen pro Taktzyklus lesen
Jeder Befehl, der von einem Skalarprozessor ausgeführt wird, ändert ein oder zwei Datenelemente auf einmal, aber jeder Befehl, der von einem Vektorprozessor ausgeführt wird, verarbeitet viele Datenelemente auf einmal. Ein superskalarer Prozessor ist eine Mischung aus beidem:
- Jede Anweisung verarbeitet ein Datenelement.
- Innerhalb jedes CPU-Kerns gibt es mehrere doppelte Funktionseinheiten, so dass mehrere Befehle unabhängige Datenelemente gleichzeitig verarbeiten.
In einer superskalaren CPU liest ein Instruktionsdispatcher Instruktionen aus dem Speicher und entscheidet, welche parallel ausgeführt werden können, indem er sie auf die mehreren doppelten Funktionseinheiten verteilt, die innerhalb der CPU verfügbar sind.
Beim superskalaren CPU-Design geht es darum, die Genauigkeit des Instruktionsdispatchers zu verbessern und es ihm zu ermöglichen, die verschiedenen Funktionseinheiten jederzeit zu beschäftigen. Seit 2008 sind alle Allzweck-CPUs superskalar, eine typische superskalare CPU kann bis zu 4 ALUs, 2 FPUs und zwei SIMD-Einheiten enthalten. Wenn der Dispatcher nicht alle Einheiten auslasten kann, ist die Leistung der CPU geringer.
Einfache superskalare Pipeline. Durch Abrufen und Dispatching von zwei Instruktionen auf einmal können maximal zwei Instruktionen pro Zyklus ausgeführt werden.
Prozessorkarte eines Parallelcomputers CRAY T3e mit vier superskalaren Alpha-Prozessoren
Einschränkungen
Die Leistungsverbesserung beim superskalaren CPU-Design ist durch zwei Dinge begrenzt:
- Der Grad der eingebauten Parallelität in der Anweisungsliste
- Die Komplexität und der Zeitaufwand der Dispatcher- und Datenabhängigkeitsprüfung.
Selbst bei einer unendlich schnellen Abhängigkeitsprüfung innerhalb einer normalen superskalaren CPU würde, wenn die Anweisungsliste selbst viele Abhängigkeiten aufweist, dies auch die mögliche Leistungsverbesserung einschränken, so dass der Umfang der eingebauten Parallelität im Code eine weitere Einschränkung darstellt.
Unabhängig von der Geschwindigkeit des Dispatchers gibt es eine praktische Grenze dafür, wie viele Instruktionen gleichzeitig versandt werden können. Während Hardware-Fortschritte mehr Funktionseinheiten (z.B. ALUs) pro CPU-Kern erlauben werden, steigt das Problem der Überprüfung von Befehlsabhängigkeiten so weit an, dass die erreichbare superskalare Dispatching-Grenze etwas klein ist. -- Wahrscheinlich in der Größenordnung von fünf bis sechs gleichzeitig versendeten Befehlen.
Alternativen
- Simultanes Multithreading: oft als SMT abgekürzt, ist eine Technik zur Verbesserung der Gesamtgeschwindigkeit von superskalaren CPUs. SMT ermöglicht mehrere unabhängige Ausführungsthreads, um die in einem modernen superskalaren Prozessor verfügbaren Ressourcen besser zu nutzen.
- Mehrkernprozessoren: Superskalare Prozessoren unterscheiden sich von Mehrkernprozessoren dadurch, dass es sich bei den mehrfach redundanten Funktionseinheiten nicht um ganze Prozessoren handelt. Ein einzelner superskalarer Prozessor besteht aus fortschrittlichen Funktionseinheiten wie der ALU, dem ganzzahligen Multiplikator, dem ganzzahligen Shifter, der Gleitkommaeinheit (FPU) usw. Es kann mehrere Versionen jeder Funktionseinheit geben, um die parallele Ausführung vieler Befehle zu ermöglichen. Dies unterscheidet sich von einem Mehrkernprozessor, der gleichzeitig Anweisungen von mehreren Threads verarbeitet, ein Thread pro Kern.
- Pipeline-Prozessoren: Superskalare Prozessoren unterscheiden sich auch von einer Pipeline-CPU, bei der sich die mehreren Befehle gleichzeitig in verschiedenen Ausführungsphasen befinden können.
Die verschiedenen alternativen Techniken schließen sich nicht gegenseitig aus - sie können (und werden häufig) in einem einzigen Prozessor kombiniert werden, so dass es möglich ist, eine Mehrkern-CPU zu entwerfen, bei der jeder Kern ein unabhängiger Prozessor mit mehreren parallelen superskalaren Pipelines ist. Einige Mehrkernprozessoren verfügen auch über Vektorfähigkeit.
Verwandte Seiten
- Parallele Datenverarbeitung
- Parallelität auf Anweisungsebene
- Simultanes Multithreading (SMT)
- Mehrkernprozessoren
Fragen und Antworten
F: Was ist superskalare Technologie?
A: Die Superskalar-Technologie ist eine Form des grundlegenden parallelen Rechnens, die es ermöglicht, in jedem Taktzyklus mehr als einen Befehl zu verarbeiten, indem mehrere Ausführungseinheiten gleichzeitig verwendet werden.
F: Wie funktioniert die Superskalar-Technologie?
A: Bei der superskalaren Technologie werden die Befehle in der richtigen Reihenfolge in den Prozessor eingegeben, während der Ausführung wird nach Datenabhängigkeiten gesucht, und in jedem Taktzyklus wird mehr als ein Befehl geladen.
F: Was ist der Unterschied zwischen Skalar- und Vektorprozessoren?
A: Bei einem skalaren Prozessor arbeiten die Befehle in der Regel mit einem oder zwei Datenelementen gleichzeitig, während bei einem Vektorprozessor die Befehle in der Regel mit vielen Datenelementen gleichzeitig arbeiten. Ein superskalarer Prozessor ist eine Mischung aus beidem, da jede Anweisung ein Datenelement verarbeitet, aber mehr als eine Anweisung gleichzeitig ausgeführt wird, so dass viele Datenelemente gleichzeitig vom Prozessor verarbeitet werden.
F: Welche Rolle spielt ein präziser Befehlsdispatcher in einem superskalaren Prozessor?
A: Ein präziser Befehlsverteiler ist für einen superskalaren Prozessor sehr wichtig, da er sicherstellt, dass die Ausführungseinheiten immer mit der Arbeit beschäftigt sind, die wahrscheinlich benötigt wird. Wenn der Befehlsverteiler nicht genau ist, muss möglicherweise ein Teil der Arbeit weggeworfen werden, wodurch der Prozessor nicht schneller als ein Skalarprozessor wäre.
F: In welchem Jahr wurden alle normalen CPUs superskalar?
A: Alle normalen CPUs wurden 2008 zu Superscalern.
F: Wie viele ALUs, FPUs und SIMD-Einheiten können in einer normalen CPU vorhanden sein?
A: Auf einer normalen CPU können bis zu 4 ALUs, 2 FPUs und 2 SIMD-Einheiten vorhanden sein.