# Mikroarchitektur

Der Begriff Mikroarchitektur (auch µarch) bezeichnet die Implementierung eines Befehlssatzes innerhalb eines Rechners. Hierzu zählt man:
* die Rechnerstruktur, also den Aufbau eines Rechners aus Funktionseinheiten (z. B. die ALU, Register) und deren Verbindungstruktur (z. B. durch Busse),
* sowie die Rechnerorganisation, d. h. die Organisation des Zusammenwirkens der Funktionseinheiten, so dass Arbeitsabläufe entstehen, welche Befehle ausführen.
Die Mikroarchitektur bezieht sich nicht auf die konkrete physikalische und fertigungstechnische Realisierung einer CPU. Die Mikroarchitektur ist ein Teilgebiet der Rechnerarchitektur und somit auch der technischen Informatik.

## Rechnerstruktur

Die Rechnerstruktur beinhaltet alle Funktionseinheiten und deren Verbindungsstruktur. Ein Beispiel für eine einfache Rechnerstruktur stellen die Komponenten des Von-Neumann-Rechners dar.

## Rechnerorganisation

Die Rechnerorganisation ist die Organisation des Zusammenwirkens aller Funktionseinheiten, so dass Arbeitsabläufe entstehen, welche die Befehle des Befehlssatzes ausführen. Die Rechnerorganisation wird durch das Leitwerk realisiert. Wesentliche Funktionseinheiten des Leitwerks sind dabei:
* Das Befehlszähler-Register, es enthält die (Arbeits-)Speicheradresse des aktuell ausgeführten Befehls
* Der Befehlsdecoder:
** Bei RISC-Architekturen besteht dieser aus Schaltnetzen.
** Bei CISC-Architekturen werden die Befehle vom Befehlsdecoder in einen oder mehrere Mikrobefehle (oder auch Mikrooperationen, µops) übersetzt. Diese Mikrobefehle werden in der Warteschlangeneinheit gespeichert. Die Warteschlangeneinheit beinhaltet einen L0-Cache (die Warteschlange) und das Mikroprogrammsteuerwerk. Die Mikrobefehle des Mikrocodes sind RISC ähnlich.
* RISC-Architekturen verwenden eine Operationensteuerung, welche aus endlichen Automaten besteht. CISC-Architekturen verwenden ein Mikroprogrammsteuerwerk, welches auch aus endlichen Automaten besteht. Aufgabe beider Einheiten ist es Befehle (Befehle des Befehlssatzes bei RISC, Mikrobefehle aus der Warteschlangeneinheit bei CISC) in Steuersignale für die Funktionseinheiten zu überführen. Hier wird auch, falls vorhanden, das dynamische Scheduling der Befehle realisiert.

## Entwurf einer Mikroarchitektur

Zum Entwurf einer Mikroarchitektur ist es nützlich eine Hardwarebeschreibungssprache zu verwenden.

## Leistungsmerkmale von Mikroarchitekturen

Bei der Optimierung auf verschiedene Leistungsziele müssen die auszuführenden Programme, der Befehlssatz, die Mikroarchitektur, die Fertigung und deren Zusammenspiel berücksichtigt werden. Trotz dieses Themenkomplexes gibt es Leistungseigenschaften, die alleine von der Mikroarchitektur abhängen. Beispiele sind:

### Skalarität

Sie legt fest, wie viele Befehle des Befehlssatzes ein Prozessorkern maximal pro Taktzyklus abarbeiten kann. Man unterscheidet:
* nicht skalare Prozessoren, die kein Pipelining benutzen. Diese Rechner arbeiten in jedem Fall weniger als einen Maschinenbefehl pro Taktzyklus ab.
* skalare Prozessoren, die Pipelining benutzen. Diese Rechner arbeiten im Optimalfall genau einen Befehl pro Taktzyklus ab.
* superskalare Prozessoren, die weiterentwickeltes Pipelining benutzen. Sie arbeiten im Optimalfall mehr als einen Befehl pro Taktzyklus ab. Die Prozessoren aller modernen Desktoprechner (2018) sind superskalar.

### Cache

Zur Beschleunigung der Ausführung von Maschinenbefehlen werden ein oder mehrere Caches genutzt. Caches sind notwendig, um die mittlerweile 2 Größenordnungen an Geschwindigkeitsunterschied zwischen Prozessorkernen (0,2–0,8 ns/Takt) und Hauptspeicher (45–70 ns) abfangen zu können und um mehrere Kerne innerhalb einer CPU zu ermöglichen. Mittlerweile sind mindestens 2 Cache-Level (ARM) üblich, bei Intel/AMD sind 3 Cache-Level üblich. Zur Wahrung der Konsistenz der Caches bei Mehrkernprozessoren werden zusätzlich Cache-Kohärenz-Protokolle verwendet.

### Parallelisierung

Es werden Mehrkernrechner, Mehrprozessorsysteme und Parallelrechner zur gleichzeitigen Abarbeitung mehrerer sequentieller Programme genutzt. Auch unterstützen moderne Rechner paralleles Rechnen auf einem Kern durch Erweiterungen in der Befehlssatzarchitektur, wie Multi Media Extension. Es gibt jedoch Grenzen, wie weit eine Anwendung parallelisiert werden kann (siehe Amdahlsches Gesetz, Gustafsons Gesetz).