Zum Inhalt springen

Pipeline (Prozessor)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 26. Juli 2006 um 16:36 Uhr durch Seakayone (Diskussion | Beiträge) (Konflikte). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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.

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)
4-Stufiges Pipelining
  • 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