Befehlsebene-Parallelität
Befehlsebene-Parallelität (Instruction-Level Parallelism, ILP) ist das Potenzial zur gleichzeitigen Ausführung mehrerer Befehle aus einem einzelnen Programm, das von Superskalar- und VLIW-Prozessoren genutzt wird, die mehrere Befehle pro Zyklus ausgeben und abschließen.
Definition
Befehlsebene-Parallelität ist der Grad, in dem die Befehle eines einzelnen Programms parallel ausgeführt werden können; Prozessoren nutzen dies, indem sie mehr als einen Befehl pro Taktzyklus ausgeben, ausführen und abschließen, vorbehaltlich Daten- und Steuerungsabhängigkeiten.
Scope
Dieses Thema behandelt die Parallelität, die innerhalb eines Befehlsstroms verfügbar ist, und wie Hardware und Compiler diese extrahieren: superskalare Ausgabe mehrerer Befehle pro Zyklus, Very Long Instruction Word (VLIW)-Designs, Abhängigkeitsanalyse, Registerumbenennung und Spekulation. Es behandelt auch die Grenzen der verfügbaren ILP. Ausgenommen sind Thread- und Datenebene-Parallelität über Kerne und Lanes hinweg (parallele und Multicore-Architektur) und die grundlegende Single-Issue-Pipeline (Pipelining und Hazards).
Core questions
- Wie viel Parallelität ist in den Befehlen eines typischen Programms inhärent verfügbar?
- Wie entscheiden superskalare Prozessoren, welche Befehle zusammen ausgegeben werden können?
- Wie verlagern VLIW-Designs die Last der Parallelitätssuche auf den Compiler?
- Welche Abhängigkeiten und Hazards begrenzen, wie viel ILP realisiert werden kann?
Key concepts
- superskalare Ausgabe
- Very Long Instruction Word (VLIW)
- Daten- und Namensabhängigkeiten
- Registerumbenennung
- mehrere Funktionseinheiten
- Spekulation
- ILP-Grenzen
- Befehle pro Zyklus (IPC)
Key theories
- Dynamische Befehlsplanung
- Hardware kann ILP zur Laufzeit entdecken und nutzen, indem sie Abhängigkeiten verfolgt und bereite Befehle auf mehrere Funktionseinheiten plant; Tomasulos Algorithmus, mit Reservationsstationen und Registerumbenennung, ist der kanonische Mechanismus, der eine Out-of-Order-, parallele Ausgabe ermöglicht.
Mechanisms
Superskalar-Prozessoren holen mehrere Befehle pro Zyklus ab und dekodieren sie, prüfen ihre Abhängigkeiten, benennen Register um, um falsche Abhängigkeiten zu beseitigen, und geben unabhängige Befehle an mehrere Funktionseinheiten aus. VLIW-Designs verlassen sich stattdessen auf den Compiler, um unabhängige Operationen zu breiten Befehlswörtern zu bündeln. Echte Datenabhängigkeiten und der Kontrollfluss setzen eine Obergrenze für die realisierbare Parallelität, die durch Spekulation und größere Befehlsfenster erweitert werden soll.
Clinical relevance
ILP-Techniken trieben jahrzehntelang das Wachstum der Single-Thread-Leistung voran und bleiben für Hochleistungs-CPU-Kerne zentral. Ihre abnehmenden Erträge – da die verfügbare Parallelität und Komplexitätsgrenzen erreicht wurden – waren ein Hauptgrund, warum die Industrie für weitere Skalierung auf Multicore und explizite Parallelität umstieg.
History
Mehrere Funktionseinheiten und dynamische Planung erschienen in den 1960er Jahren im CDC 6600 und IBM System/360 Model 91. Superskalare Designs wurden in den 1990er Jahren zum Mainstream, und VLIW-Architekturen wie Intels Itanium verfolgten compilergesteuerte Parallelität. Studien zu den Grenzen der ILP in den frühen 1990er Jahren verdeutlichten, warum Parallelität innerhalb eines einzelnen Threads begrenzt ist.
Debates
- Hardware-gesteuerte versus Compiler-gesteuerte ILP
- Superskalar-Out-of-Order-Hardware findet Parallelität dynamisch auf Kosten von Komplexität und Leistung, während VLIW sich auf den Compiler verlässt, um Parallelität statisch zu planen; die Erfahrung zeigte, dass dynamische Ansätze über Workloads hinweg robuster sind, während statische Ansätze für vorhersagbare, stromsparende Designs attraktiv bleiben.
Key figures
- Robert Tomasulo
- Yale Patt
- John L. Hennessy
- Joseph A. Fisher
- James E. Smith
Related topics
Seminal works
- hennessy2019
- tomasulo1967
Frequently asked questions
- Was ist der Unterschied zwischen Superskalar und VLIW?
- Beide führen mehrere Operationen pro Zyklus aus. Ein superskalarer Prozessor entscheidet in der Hardware zur Laufzeit, welche Befehle zusammen ausgegeben werden können; ein VLIW-Prozessor verlässt sich auf den Compiler, um unabhängige Operationen im Voraus zu breiten Befehlen zu gruppieren, was die Hardware vereinfacht, aber mehr vom Compiler verlangt.
- Warum gibt es eine Grenze für die Befehlsebene-Parallelität?
- Echte Programme haben echte Datenabhängigkeiten und häufige Verzweigungen, die einschränken, wie viele Befehle parallel ausgeführt werden können. Jenseits eines bestimmten Fensters sättigt die erreichbare Parallelität, sodass das Extrahieren von mehr ILP abnehmende Erträge im Verhältnis zur zusätzlichen Hardwarekomplexität und Leistung liefert.