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 (~ Milliarden Instruktionen 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äßt 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. Man unterscheidet zwischen:
- Betriebsmittelkonflikten, wenn eine Stufe der Pipeline Zugriff auf eine Ressource benötigt, die bereits von einer anderen Stufe belegt ist;
- Datenkonflikten, falls ein Befehl Daten lesen/schreiben will, die zuvor von einem anderen Befehl gelesen/geschrieben werden müssen;
- Kontrollflusskonflikten, 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 Befehlscaches der
CPU, so dass sich hohe
Latenzzeiten ergeben, in denen der Prozessor untätig ist.
Beispiel
In modernen Systemen kommen verschiedene Pipelines zum Einsatz.
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)
Befehlspipeline.PNG
- 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
Rechnerarchitektur
Pipeline (computer) | Segmentación | Pipeline (informatique) | Segmentación | パイプライン処理 | Pipeline