Instruction Pipelining ist eine Technik, die bei der Entwicklung moderner Mikroprozessoren, Mikrocontroller und CPUs eingesetzt wird, um deren Instruktionsdurchsatz (die Anzahl der Instruktionen, die in einer Zeiteinheit ausgeführt werden können) zu erhöhen.
Die Hauptidee besteht darin, die Verarbeitung eines CPU-Befehls, wie er durch den Befehlsmikrocode definiert ist, in eine Reihe unabhängiger Schritte von Mikrooperationen (auch "Mikrobefehle", "micro-op" oder "µop" genannt) zu unterteilen (als "Split" bezeichnet), mit Speicherung am Ende jedes Schritts. Dadurch kann die Steuerlogik der CPUs die Befehle mit der Verarbeitungsrate des langsamsten Schritts verarbeiten, was viel schneller ist als die Zeit, die für die Verarbeitung des Befehls als Einzelschritt benötigt wird.
Der Begriff Pipeline bezieht sich auf die Tatsache, dass jeder Schritt einen einzelnen Mikrobefehl trägt (wie ein Wassertropfen) und jeder Schritt mit einem anderen Schritt verbunden ist (Analogie; ähnlich wie Wasserrohre).
Die meisten modernen CPUs werden von einer Uhr angetrieben. Die CPU besteht intern aus Logik und Speicher (Flip-Flops). Wenn das Taktsignal eintrifft, speichern die Flip-Flops ihren neuen Wert, dann benötigt die Logik eine gewisse Zeit, um die neuen Werte der Flip-Flops zu dekodieren. Dann trifft der nächste Taktimpuls ein, und die Flip-Flops speichern weitere Werte, und so weiter. Durch Aufteilen der Logik in kleinere Teile und Einfügen von Flip-Flops zwischen die Logikteile wird die von der Logik benötigte Zeit (zum Dekodieren von Werten bis zur Erzeugung gültiger Ausgaben in Abhängigkeit von diesen Werten) verringert. Auf diese Weise kann die Taktperiode reduziert werden. Beispielsweise wird
die RISC-Pipeline in fünf Stufen mit einer Reihe von Flip-Flops zwischen jeder Stufe wie folgt unterteilt:
- Anweisung abrufen
- Befehlsdekodierung und Registerabruf
- Ausführen
- Speicherzugriff
- Register zurückschreiben
Prozessoren mit Pipelining bestehen intern aus Stufen (Modulen), die semi-unabhängig an separaten Mikroinstruktionen arbeiten können. Jede Stufe ist durch Flip-Flops mit der nächsten Stufe verbunden (wie eine "Kette"), so dass der Output der Stufe ein Input für eine andere Stufe ist, bis die Aufgabe der Verarbeitung von Anweisungen erledigt ist. Eine solche Organisation von prozessorinternen Modulen reduziert die Gesamtverarbeitungszeit der Anweisung.
Eine Nicht-Pipeline-Architektur ist nicht so effizient, da einige CPU-Module im Leerlauf sind, während ein anderes Modul während des Befehlszyklus aktiv ist. Pipelining beseitigt die Leerlaufzeit in einer Pipeline-CPU nicht vollständig, aber wenn CPU-Module parallel arbeiten, erhöht sich der Befehlsdurchsatz.
Eine Instruktionspipeline gilt als vollständig pipelinisiert, wenn sie in jedem Taktzyklus eine neue Instruktion aufnehmen kann. Eine Pipeline, die nicht vollständig in die Pipeline eingebunden ist, hat Wartezyklen, die den Fortschritt der Pipeline verzögern.



