‹ Informatik

Pipelining

Pipelining verständlich erklärt: Aufbau, Funktion und typische Beispiele aus Prozessoren, Speicher und Computerarchitektur.

Wenn du mehrere Arbeitsblätter bearbeitest, kannst du schon das nächste bereitlegen, während du das erste noch abheftest. So stehen nicht alle Schritte still. Genau dieses Prinzip nutzt auch ein Prozessor, damit er viele Befehle zügig bearbeiten kann.

Was Pipelining bedeutet

Ein Prozessor erledigt sehr viele kleine Arbeitsaufträge. Ein solcher Arbeitsauftrag heißt Maschinenbefehl. Er kann zum Beispiel zwei Zahlen addieren oder einen Wert aus dem Speicher holen.

Pipelining bedeutet: Die Bearbeitung eines Maschinenbefehls wird in mehrere feste Schritte aufgeteilt. Mehrere Befehle können gleichzeitig unterwegs sein, aber jeweils in unterschiedlichen Schritten. Diese Verarbeitungskette heißt Pipeline.

Deine Lernziele
  • Du erklärst Pipelining mit einem Alltagsvergleich.
  • Du beschreibst typische Schritte einer Prozessorpipeline.
  • Du erkennst, warum mehrere Befehle gleichzeitig bearbeitet werden können.
  • Du erklärst Datenkonflikte und Sprungkonflikte.
Beispiel

Stell dir eine Mensa vor. An Station eins wird das Essen ausgewählt. An Station zwei wird es ausgegeben. An Station drei wird bezahlt.

Während Lea bezahlt, bekommt Amir sein Essen und Nika wählt schon aus. Alle drei nutzen verschiedene Stationen. Dadurch können viele Personen schneller durch die Mensa kommen.

Merke

Eine Pipeline macht nicht unbedingt den einzelnen Befehl sofort fertig. Sie sorgt vor allem dafür, dass nach dem Anlaufen regelmäßig Ergebnisse fertig werden.

Interaktive Quizfrage wird geladen ...

Die Stationen im Prozessor

Eine Pipeline-Stufe ist ein einzelner Schritt innerhalb einer Pipeline. In jeder Stufe wird nur eine bestimmte Aufgabe erledigt.

Ein Takt ist ein regelmäßiger Arbeitsschritt des Prozessors. Bei jedem Takt kann ein Befehl von einer Pipeline-Stufe zur nächsten weitergehen. Häufig teilen Prozessoren die Arbeit in fünf Stufen ein: Befehl holen, Befehl verstehen, rechnen oder eine Adresse bestimmen, Daten aus dem Speicher holen und Ergebnis ablegen.

Beispiel

Ein Additionsbefehl soll zwei Werte zusammenrechnen.

  1. Befehl holen
  2. Befehl verstehen
  3. Zahlen addieren
  4. Falls nötig auf Speicher zugreifen
  5. Ergebnis ablegen

Im ersten Takt wird der Befehl geholt. Im nächsten Takt wird er verstanden, während schon der folgende Befehl geholt wird.

Interaktive Lernkarten wird geladen ...

Interaktiver Lückentext wird geladen ...

So füllt sich die Pipeline

Am Anfang ist die Pipeline leer. Deshalb dauert es einige Takte, bis der erste Befehl fertig ist. Danach kann im Idealfall bei jedem Takt ein Ergebnis herauskommen.

Der Durchsatz beschreibt, wie viele Befehle in einer bestimmten Zeit fertig werden. Die Bearbeitungszeit ist die Zeit, die ein einzelner Befehl von seinem Start bis zu seinem Ergebnis braucht. Pipelining verbessert vor allem den Durchsatz. Die Bearbeitungszeit eines einzelnen Befehls wird dadurch nicht automatisch kürzer.

Beispiel

Eine Pipeline hat drei Stufen: holen, bearbeiten, speichern.

Im ersten Takt wird Befehl A geholt.
Im zweiten Takt wird A bearbeitet und Befehl B geholt.
Im dritten Takt wird A gespeichert, B bearbeitet und C geholt.

Ab jetzt kann pro Takt ein Befehl fertig werden, solange alle Stufen ohne Wartezeit arbeiten.

Merke

Erst füllen, dann fließen: Bei einer gut ausgelasteten Pipeline wird im Idealfall pro Takt ein Befehl fertig.

Interaktive Quizfrage wird geladen ...

Wenn die Pipeline warten muss

In echten Programmen passt nicht immer alles reibungslos zusammen. Ein Konflikt ist eine Situation, in der eine Pipeline-Stufe nicht einfach weitermachen kann. Dann muss ein Befehl warten.

Ein wichtiger Fall ist der Datenkonflikt. Er entsteht, wenn ein Befehl ein Ergebnis braucht, das ein vorheriger Befehl noch nicht bereitgestellt hat. Ein Register ist ein besonders kleiner und schneller Speicherplatz im Prozessor.

Beispiel

Befehl A lädt eine Zahl aus dem Speicher in ein Register. Direkt danach soll Befehl B mit genau dieser Zahl rechnen.

Wenn die Zahl noch unterwegs ist, darf Befehl B nicht mit einem alten Wert rechnen. Die Pipeline hält Befehl B deshalb kurz an.

Forwarding bedeutet, dass ein schon berechnetes Ergebnis direkt an die nächste benötigte Stufe weitergegeben wird. Es muss dann nicht erst den ganzen Weg bis zum Register zurücklegen.

Beispiel

Befehl A berechnet das Ergebnis 12. Befehl B braucht dieses Ergebnis sofort für die nächste Rechnung.

Mit Forwarding erhält Befehl B die 12 direkt aus der Rechenstufe. Ohne Forwarding müsste er länger warten, bis die 12 gespeichert wurde.

Merke

Ein Datenkonflikt wird nicht dadurch gelöst, dass der Prozessor rät. Er muss warten oder das richtige Ergebnis rechtzeitig weitergeben.

Interaktive Quizfrage wird geladen ...

Sprünge und falsche Vermutungen

Programme enthalten Bedingungen wie: „Wenn die Zahl größer als null ist, gehe zu einer anderen Stelle.“ Ein solcher Wechsel im Programmablauf heißt Sprung.

Bei einem Sprung weiß der Prozessor zunächst vielleicht nicht, welcher Befehl als Nächstes wirklich gebraucht wird. Ein Sprungkonflikt entsteht, wenn die Pipeline bereits Befehle vom möglicherweise falschen Weg bearbeitet.

Beispiel

Ein Programm prüft, ob eine Punktzahl bestanden ist.

Ist sie groß genug, soll ein Glückwunsch ausgegeben werden. Andernfalls folgt ein Hinweis zum Üben. Während die Prüfung noch läuft, kann der Prozessor schon einen Weg vermuten und passende Befehle vorbereiten.

Sprungvorhersage bedeutet, dass der Prozessor den wahrscheinlichen weiteren Programmweg abschätzt. Liegt er richtig, spart das Zeit. Liegt er falsch, verwirft er die vorbereiteten Befehle und beginnt am richtigen Weg neu.

Gut zu wissen

Das Verwerfen falscher vorbereiteter Befehle nennt man auch Leeren der Pipeline. Danach muss sie sich wieder füllen. Häufige falsche Vorhersagen bremsen den Prozessor.

Interaktive Quizfrage wird geladen ...

Warum mehr Stufen nicht immer besser sind

Kürzere Arbeitsschritte können einen schnelleren Takt ermöglichen. Deshalb teilen Prozessoren Aufgaben oft weiter auf. Doch jede zusätzliche Stufe braucht Übergaben und verursacht Aufwand.

Außerdem bleiben Konflikte bei einer langen Pipeline stärker bemerkbar. Wenn ein Sprung falsch vorhergesagt wird, können mehr vorbereitete Befehle betroffen sein. Gute Prozessoren suchen deshalb einen sinnvollen Ausgleich zwischen vielen schnellen Stufen und möglichst wenigen Wartezeiten.

Beispiel

Zwei Pipelines bearbeiten dieselbe Aufgabe. Die erste hat vier Stufen, die zweite zehn.

Die zweite kann kleinere Einzelschritte haben. Bei einem falschen Sprung muss sie aber möglicherweise mehr bereits begonnene Schritte verwerfen. Mehr Stufen bedeuten also nicht automatisch mehr Geschwindigkeit.

Merke

Pipelining erhöht die Leistung nur dann gut, wenn die Stufen ausgelastet sind und selten auf Daten oder Sprünge warten müssen.

Zusammenfassung

Pipelining teilt Maschinenbefehle in Pipeline-Stufen auf. Dadurch können mehrere Befehle gleichzeitig bearbeitet werden, ähnlich wie an verschiedenen Stationen eines Fließbands.

Nach der Anlaufphase kann im Idealfall pro Takt ein Befehl fertig werden. Das verbessert den Durchsatz. Datenkonflikte und Sprungkonflikte können die Pipeline aber bremsen. Forwarding und Sprungvorhersage helfen, solche Wartezeiten zu verringern.