Die Mikroarchitektur ist die konkrete Implementierung eines Instruktionssatzes in Hardware. Während die ISA (Instruction Set Architecture) den Vertrag beschreibt — welche Befehle es gibt und was sie bewirken —, legt die Mikroarchitektur fest, wie der Prozessor diese Befehle realisiert: mit welchen Pipelines, Caches, Vorhersagern und Optimierungen. Dieselbe ISA kann auf völlig unterschiedlichen Mikroarchitekturen laufen.
Gleiche ISA, andere Mikroarchitektur
Das bekannteste Beispiel ist x86-64: Intel Core (Skylake, Alder Lake) und AMD Zen implementieren denselben Befehlssatz, unterscheiden sich aber massiv in Aufbau und Leistung. Auch ARM zeigt es: Cortex-A76 (Performance-Kern) und Cortex-A55 (Effizienz-Kern) sprechen dieselbe ARMv8-ISA, sind aber bewusst unterschiedlich gebaut. Der Compiler sieht in beiden Fällen den gleichen Befehlssatz — die Laufzeit hängt von der Mikroarchitektur ab.
Bausteine einer Mikroarchitektur
- Pipelines: Stufentiefe, Superskalar-Grad und Out-of-Order-Fähigkeit entscheiden über den Durchsatz (siehe Pipelining).
- Register-Banken: Die Zahl der physischen Register und ihre Ports bestimmen, wie viele Operationen gleichzeitig laufen können (siehe Register-Bank).
- Branch Prediction: Sprungvorhersage per History-Tabellen (z.B. TAGE) minimiert Pipeline-Leerlauf bei Verzweigungen.
- Caches und Prefetcher: Hierarchie aus Cache-Speicher-Stufen, Assoziativität und Vorhersage der Speicherzugriffe.
- Decodierer und Mikrooperationen: x86-Befehle werden im Frontend in einfache μops zerlegt und auf einer RISC-artigen Pipeline ausgeführt — die Verbindung von Opcode-Format und Hardware-Schaltung.
Mikrocode und CISC-Erbe
Während RISC-Prozessoren Befehle direkt verdrahten, interpretierten klassische CISC-Designs (z.B. System/360, VAX, frühe x86) ihre Instruktionen über Mikrocode: ein Programm in einer eigenen Mikrosprache, das die Maschinensprache-Befehle abarbeitet. Diese Mikroprogrammierung ist der Ursprung des Begriffs Mikroarchitektur. Heute patchen Intel und AMD ihre Prozessoren nachträglich über Mikrocode-Updates, etwa bei Sicherheitslücken wie Spectre und Meltdown.
Abgrenzung der Ebenen
Die Ebenen lassen sich sauber trennen: Instruktionssatz = was der Prozessor kann (Spezifikation), Mikroarchitektur = wie er es baut (Implementierung), Maschinensprache = die ausführbaren Bytes, Opcode = das Operationsfeld in diesen Bytes. Auch die Codegenerierung im Compiler optimiert zunehmend gegen konkrete Mikroarchitekturen — etwa wenn sie Befehle so anordnet, dass die CPU-Pipeline keine Stalls erleidet.