Pipeline (Prozessor)
Die Pipeline-Architektur (oft auch kurz Pipelining genannt) beschreibt die Fähigkeit von Mikroprozessoren, die Abarbeitung von Maschinenbefehlen so zu parallelisieren, dass möglichst alle Funktionselemente des Mikroprozessors voll ausgelastet werden. Der Zweck jedes Pipelinings ist es, komplexe Befehle in einfachere Einzelaktionen zu zerlegen, die dann parallelisiert werden können. Die Teiloperationen werden taktsynchron von hintereinander geschalteten Verarbeitungseinheiten bearbeitet.
Die einzelnen Einheiten einer Pipeline nennt man Pipeline-Stufen, Pipeline-Stages oder auch Pipeline-Segmente. Diese Stufen werden durch getaktete Pipeline-Register (auf Englisch latches) getrennt.
Taktung
Je einfacher eine einzelne Stufe aufgebaut ist, desto höher ist die Frequenz mit der sie betrieben werden kann. In einer modernen CPU mit einem Kerntakt im Gigahertz Bereich (1GHz ~ 1 Milliarde Takte pro Sekunde) kann die Befehlspipeline über 20 Stufen lang sein. Der Kerntakt ist die Zeit, die ein Befehl braucht, um eine Stufe der Pipeline durchzuwandern. In einer k-stufigen Pipeline wird ein Befehl also in k Takten von k Stufen bearbeitet. Da in jedem Takt ein neuer Befehl geladen wird, verlässt im Idealfall auch ein Befehl pro Takt die Pipeline.
Konflikte
Ist es für die Bearbeitung eines Befehls in einer Stufe der Pipeline notwendig, dass ein Befehl, der sich weiter vorne in der Pipeline befindet, zuerst abgearbeitet wird, so spricht man von Abhängigkeiten. Diese können zu Konflikten (engl. Hazards) führen. Es können drei Konfliktarten auftreten:
- Resourcen-Konflikte, wenn eine Stufe der Pipeline Zugriff auf eine Ressource benötigt, die bereits von einer anderen Stufe belegt ist
- Daten-Konflikte,
- auf Befehlsebene: Daten, die in einem Befehl benutzt werden, stehen nicht zur Verfügung
- auf Transferebene: Registerinhalte, die in einem Schritt benutzt werden, stehen nicht zur Verfügung
- Kontrollfluss-Konflikte, wenn die Pipeline abwarten muss, ob ein bedingter Sprung ausgeführt wird oder nicht.
Pipelining und Sprungvorhersagen
Architekturen mit besonders langer Pipeline, wie etwa der Intel Pentium 4 oder der IBM Power5, besitzen deshalb sehr ausgeklügelte Techniken zur Sprungvorhersage (engl. Branch-Prediction), so dass die CPU nur in weniger als einem Prozent der stattfindenden Sprünge den Inhalt der Befehlspipeline verwerfen muss.
Vorteile und Nachteile
Der Vorteil langer Pipelines besteht in der starken Steigerung der Verarbeitungsgeschwindigkeit. Der Nachteil besteht gerade darin, dass sich sehr viele Befehle gleichzeitig in Bearbeitung befinden. Im Falle eines Pipeline-Flushs müssen alle Befehle in der Pipeline verworfen werden und die Pipeline anschließend neu gefüllt werden. Dies bedarf des Nachladens von Befehlen aus dem Arbeitsspeicher oder dem Befehlscache der CPU, so dass sich hohe Latenzzeiten ergeben, in denen der Prozessor untätig ist. Anders formuliert ist der Gewinn durch Pipelining umso größer, je höher die Anzahl der Befehle zwischen Kontrollflußänderungen ist, da die Pipeline dann erst nach längerer Benutzung unter Vollast wieder geflusht werden muss.
Beispiel
In modernen Systemen kommen verschiedene Pipelines zum Einsatz.
- Die Befehlspipeline im Steuerwerk der CPU
- Die Arithmetikpipeline in der Fließkommaeinheit
Beispiel einer 4-Stufige Befehlspipeline: (A) Befehlscode laden (IF - instruction Fetch) (B) Instruktion dekodieren und Laden der Daten (ID - Instruction Decoding) (C) Befehl ausführen (EX - Execution) (D) Ergebnisse zurückgeben (WB - Write Back)
- In der Befehlbereitsstellungsphase (Instruction Fetch) wird der Befehl, der durch den Befehlszähler adressiert ist, aus dem Arbeitsspeicher geladen. Der Befehlszähler wird anschließend hochgezählt.
- In der Dekodier- und Ladephase (ID - Instruction Decoding und OF - Operand Fetch) wird der geladene Befehl dekodiert (1. Takthälfte) und die notwendigen Daten aus dem Arbeitsspeicher und dem Registersatz geladen (2. Takthälfte).
- In der Ausführungsphase (EX - Execution) wird der dekodierte Befehl ausgeführt. Das Ergebnis wird durch den Pipeline-latch gepuffert.
- In der Resultatspeicherphase (WB - Write Back) wird das Ergebnis in den Arbeitsspeicher oder in den Registersatz zurückgeschrieben.
Siehe auch
Weblinks
- Artikel über Pipelining bei arstechnica.com (englisch) (teil 1) (teil 2)
- Ausarbeitung zu den grundlegendsten Themen der Rechnerarchitektur (Überblick) (Kapitel 6 - Pipelining)