Unter Superskalarität versteht man die Fähigkeit eines Prozessors, zwei oder mehr skalare Befehle eines Befehlsstroms gleichzeitig mit Hilfe von mehreren parallel arbeitenden Funktionseinheiten auszuführen. Es handelt sich dabei um eine Nebenläufigkeit bei der Ausführung einzelner Maschinenanweisungen. Dazu müssen die parallel abgearbeiten Befehle voneinander unabhängig sein und der Prozessor muss mindestens zwei parallel betreibbare Ausführungseinheiten besitzen. Da (implizite) Superskalartechnik nicht den Befehlssatz der Architektur und nicht die Semantik verändert, wird auch von einer Mikroarchitektur gesprochen.
Im Englischen wird ein superskalarer Prozessor auch als dual-issue processor (2 Ausführungseinheiten) bzw. multiple-issue processor (mehr als 2) bezeichnet. Superskalarität ermöglicht es, mehr als eine Maschinenanweisung pro Takt zu bearbeiten, während Pipelining die maximal mögliche Taktfrequenz erhöht. Im Bereich von Smartphones, Tablets und PCs ist Superskalarität seit vielen Jahren Standard.
Im Bereich der Mikrocontroller ist Superskalarität nicht sehr verbreitet. ARM adressierte diesen Mangel 2014 mit den Cortex M7 Microcontrollern.
Das Grundprinzip des statischen superskalaren Ansatzes ist bereits im Jahr 1964 bei der Firma Control Data Corporation (CDC) aufgekommen, die den ersten Supercomputer (CDC 6600) entwickelte. Die Rechnerarchitektur des CDC 6600 beinhaltete bereits damals mehrere parallel arbeitende Funktionseinheiten für unterschiedliche mathematische Operationen. Dynamisches Scheduling wurde 1967 bei IBM entwickelt und wurde 1968 erstmalig in einer IBM System/360 Model 91 umgesetzt.
Es werden folgende Arten von Superskalarität unterschieden:
- Es wird zur Compile-Zeit festgelegt, welche Befehle parallel ausgeführt werden könnten. Im Befehlsdatenstrom ist explizit kodiert, welche Befehle parallel ausgeführt werden können.
- VLIW-Prozessoren (Very Long Instruction Word): Diese Architekturen benutzen deutlich längere Befehle, in denen die parallel auszuführenden Befehle vorgegeben werden. Bei der IA-64-Architektur wird dies auch EPIC genannt.
- Es wird zur Laufzeit-Zeit festgelegt, welche Befehle parallel ausgeführt werden können. Im Befehlsdatenstrom ist nicht kodiert, welche Befehle parallel ausgeführt werden können, dies muss während der Laufzeit von der CPU analysiert werden.
- Superskalare Prozessoren mit statischem Scheduling: Die Reihenfolge der Befehle ist vom Compiler vorgegeben (In-order execution), die CPU kann entscheiden, wie viele Befehle sie parallel abarbeitet. Der erste Vertreter dieser Art im PC-Bereich war der Intel Pentium (1993), der bis zu zwei Befehle in zwei Ausführungseinheiten (U- und V-Pipeline) abarbeiten konnte.
- Superskalare Prozessoren mit dynamischem Scheduling: Die CPU darf Befehle parallel und in anderer Reihenfolge ausführen, solange sich dadurch das Ergebnis nicht ändert. Dieses Umstellen der Reihenfolge nennt man Out-of-order execution. Der erste Vertreter dieser Art im PC-Bereich war der Intel Pentium Pro (1995).
Mit Hilfe superskalarer Prozessoren kann die Anzahl der pro Takteinheit ausgeführten Befehle (Instructions per Cycle, IPC) erhöht werden. Grund dafür ist, dass das Laden von Befehlen und Operanden üblicherweise deutlich weniger Takteinheiten in Anspruch nimmt als die Ausführung der Befehle. Letzteres hängt zudem von der Art der Befehle (Addition, Multiplikation, Division etc.) ab.
Der Begriff superskalar ist eine Modifikation des Begriffs Skalar. Skalarprozessoren können maximal einen Befehl pro Taktzyklus ausführen. Superskalare Prozessoren dagegen können mehr als einen Befehl pro Taktzyklus ausführen.
Einzelnachweise
- ↑ Cortex-M7 Processor https://developer.arm.com/ip-products/processors/cortex-m/cortex-m7
- ↑ Cortex-M for Beginners - An overview of the Arm Cortex-M processor family and comparison (2017) https://community.arm.com/cfs-file/__key/telligent-evolution-components-attachments/01-2057-00-00-00-01-28-35/Cortex_2D00_M-for-Beginners-_2D00_-2017_5F00_EN_5F00_v2.pdf, 2.5 Instructions support in Cortex-M7
- ↑ John Hennessy, David Patterson: Computer Architecture. A Quantitative Approach. 4th Edition, Morgan Kaufmann Publishers, ISBN 978-0-12-370490-0, S. 114.