Wikipedia · einfach zusammengefasst · Stand
Superskalarität
Superskalarität ermöglicht es, mehr als eine Maschinenanweisung pro Takt zu bearbeiten, während Pipelining die maximal mögliche Taktfrequenz erhöht.
Inhalt4 Abschnitte
Grundidee und Bedeutung
Superskalarität ist die Fähigkeit eines Prozessors, zwei oder mehr skalare Befehle aus einem Befehlsstrom gleichzeitig auszuführen. Dafür besitzt der Prozessor mehrere parallel arbeitende Funktionseinheiten, also Einheiten für bestimmte Rechen- oder Verarbeitungsaufgaben. Parallel ausgeführte Befehle müssen voneinander unabhängig sein.
Dadurch kann ein Prozessor mehr als eine Maschinenanweisung pro Takt bearbeiten. Die Zahl der pro Takteinheit ausgeführten Befehle heißt Instructions per Cycle (IPC). Superskalarität erhöht diese Zahl, während Pipelining vor allem die maximal mögliche Taktfrequenz erhöht.
Die Technik verändert weder den Befehlssatz einer Architektur noch die Bedeutung ihrer Befehle. Sie gehört daher zur Mikroarchitektur, also zur inneren Umsetzung eines Prozessors. In Smartphones, Tablets und PCs ist sie seit vielen Jahren Standard; bei Mikrocontrollern ist sie weniger verbreitet. ARM griff dies 2014 mit den Cortex-M7-Mikrocontrollern auf.
Ausführung und Voraussetzungen
Ein superskalarer Prozessor braucht mindestens zwei parallel nutzbare Ausführungseinheiten. Er muss außerdem erkennen oder vorgegeben bekommen, welche Befehle gleichzeitig bearbeitet werden dürfen.
Die Ausführung eines Befehls kann unterschiedlich lange dauern: Das Laden von Befehlen und Operanden benötigt üblicherweise deutlich weniger Takteinheiten als die eigentliche Ausführung. Auch die Befehlsart ist wichtig, etwa Addition, Multiplikation oder Division. Mehrere Funktionseinheiten helfen, solche Arbeitsphasen gleichzeitig zu nutzen.
Skalarprozessoren können maximal einen Befehl pro Taktzyklus ausführen. Superskalare Prozessoren können dagegen mehr als einen Befehl pro Taktzyklus ausführen. Im Englischen heißt ein Prozessor mit zwei Ausführungseinheiten auch dual-issue processor, mit mehr als zwei Einheiten multiple-issue processor.
Arten der Superskalarität
Bei einem Ansatz wird bereits zur Compile-Zeit, also beim Übersetzen eines Programms durch den Compiler, festgelegt, welche Befehle parallel ausführbar sind. Diese Information ist im Befehlsdatenstrom ausdrücklich kodiert. VLIW-Prozessoren (Very Long Instruction Word) verwenden dafür deutlich längere Befehle, in denen die parallel auszuführenden Befehle vorgegeben sind. Bei der IA-64-Architektur wird dies EPIC genannt.
Beim anderen Ansatz wird erst zur Laufzeit entschieden, welche Befehle parallel ausgeführt werden können. Im Befehlsdatenstrom steht dann nicht, welche Befehle parallel sind; die CPU muss dies analysieren.
Superskalare Prozessoren mit statischem Scheduling führen Befehle in der vom Compiler vorgegebenen Reihenfolge aus (In-order execution). Die CPU kann jedoch entscheiden, wie viele Befehle sie parallel abarbeitet. Ein Beispiel ist der Intel Pentium von 1993: Er konnte bis zu zwei Befehle in zwei Ausführungseinheiten, der U- und der V-Pipeline, abarbeiten.
Bei dynamischem Scheduling darf die CPU Befehle parallel und in einer anderen Reihenfolge ausführen, sofern das Ergebnis unverändert bleibt. Dieses Umordnen heißt Out-of-order execution. Im PC-Bereich war der Intel Pentium Pro von 1995 ein erster Vertreter dieser Art.
Historische Einordnung
Das Grundprinzip des statischen superskalaren Ansatzes entstand 1964 bei der Control Data Corporation (CDC). Der Supercomputer CDC 6600 besaß mehrere parallel arbeitende Funktionseinheiten für unterschiedliche mathematische Operationen.
Dynamisches Scheduling wurde 1967 bei IBM entwickelt und 1968 erstmals in einer IBM System/360 Model 91 umgesetzt.