Befehlpipelines im Prozessor?

2 Antworten

Ideale Bedingungen heißt, dass die Pipeline reibungslos arbeiten kann... Es gibt weder Wartezeiten für einen Befehl(z.B. Ladebefehl, wenn Wert nicht im Cache), noch eine Unterbrechung des Pipeline-Prinzips (üblicherweise sorgen bedingte Sprunganweisungen für eine Unterbrechung: Je nach Entscheidungsfall können nicht bereits die nächsten - vorgeladenen - Befehle ausgeführt werden. Die Pipeline muss dann geleert werden).

Im eingeschwungenen Zustand und idealen Fall wird mit jedem Pipeline-Schritt also ein Befehl fertig.


RedDevil1982 
Fragesteller
 13.05.2023, 23:29

"Im eingeschwungenen Zustand und idealen Fall wird mit jedem Pipeline-Schritt also ein Befehl fertig."

Soweit ok.

"Wie groß ist der Speedup der Pipeline im eingeschwungenen Zustand und idealen Bedingungen im Vergleich zu einer Implementierung ohne Pipeline? Hinweis: Die Pipelinestufe mit der längsten „Stage Delay“ bestimmt die Zeit."

=> Die längste Stage Delay ist die der Stufe 3 mit 11 ns.

Ohne Pipeline muss ich alle Stufen mit ihren Zeiten nacheinander durchlaufen. D. h. 5 + 6 + 11 +8 = 30 ns dauert es einen Befehl abzuarbeiten. Die Verzögerung der Interstage-Register spielt hier anscheinend keine Rolle

Jetzt mit Pipeline:

Wie kann die Pipelinstufe mit der längsten "Stage Delay" nun die Zeit bestimmen? Ein Befehl muss doch alle vier Stufen durchlaufen?

0
kmkcl  13.05.2023, 23:38
@RedDevil1982

Die Pipeline hat den Vorteil, dass jede Pipeline-Stufe parallel ausgeführt werden kann. Wenn du nur einen Befehl ausführen möchtest, dauert die Ausführung 4 mal so lange, wie die längste Pipeline-Stufe... Da hast du noch nichts gewonnen. Aber jetzt überlege dir mal, wie viel 4 Befehle brauchen würden: Der erste Befehl ist nach 4 Takten fertig, der zweite Befehl nach Takt 5, der dritte Befehl nach Takt 6, der vierte Befehl nach Takt 7... Im Durchschnitt haben jetzt 4 Befehle 7 Takte benötigt... Wenn die Anzahl der Befehle sehr hoch (gegen unendlich) ist, spielt die Verzögerung des ersten Befehls keine Rolle mehr. Ein "Takt" wäre dann die Verzögerungszeit der längsten Pipeline-Stufe.

Das setzt natürlich - wie gesagt - voraus, dass die Pipeline reibungslos läuft. Gerade Sprungbefehle machen das regelmäßig kaputt. (Da hilft dann nur Branch-Prediction und Speculation, etc...)

0
RedDevil1982 
Fragesteller
 13.05.2023, 23:55
@kmkcl

Jetzt mit Pipeline:

Wie kann die Pipelinstufe mit der längsten "Stage Delay" nun die Zeit bestimmen?

0
kmkcl  14.05.2023, 00:13
@RedDevil1982

Der letzte Kommentar bezieht sich auf Pipeline... Jeder einzelne Befehl muss zwar durch alle Stufen durch, aber während ein Befehl gerade ausgeführt wird (Execution), kann der nächste bereits geladen werden (Fetch), das Ergebnis des vorausgegangenen Befehls wird zu dem Moment beispielsweise gespeichert (Write Back). Es wird also - nach dem Füllen der Pipeline - mit jedem Zeitschritt ein Befehl fertig. In einem Zeitschritt müssen natürlich alle Pipeline-Stufen fertig werden, daher bestimmt die längste Stufe die Zeit.

Stell dir ein Fließband vor, wo an jeder Station ein Arbeitsgriff gemacht wird. Serielle Abarbeitung: Auf dem ganzen Fließband liegt immer nur ein Teil, das von vorne bis hinten durchläuft, dann kommt das nächste. Pipeline: Das Fließband ist gefüllt, mit jedem Schritt purzelt hinten ein Produkt raus. Trotzdem muss jedes Produkt das komplette Band durchlaufen.

0
RedDevil1982 
Fragesteller
 14.05.2023, 08:52
@kmkcl

Für die Taktung ist dies entscheidend, damit immer ein Befehl startet, wenn der andere zuvor abgearbeitet wurde. Deshalb bestimmt die längste Stufe die Zeit in der Pipeline.

0
kmkcl  14.05.2023, 10:38
@RedDevil1982

Diese Formulierung halte ich für etwas ungenau/missverständlich... es geht darum, dass jede Pipelinestufe fertig mit ihrer Aufgabe (Instruction Fetch, Instruction Decode, Execute, Write Back,...) fertig ist, bevor der Befehl (das, was die Pipeline durchläuft) an die nächste Stufe weitergegeben wird.

Das ein Befehl startet, wenn der andere abgearbeitet wurde, könnte auch Ausführung ohne Pipeline-Prinzip bedeuten.

0
ideale Bedingungen: Was das bedeutet ist natürlich nirgendwo angegeben

Wenn ideale Bedingungen vorliegen, ist das Ergebnis optimal - sagt Captain Obvious.


RedDevil1982 
Fragesteller
 13.05.2023, 23:35

Wenn ich keine Pipeline habe, dann spielen die "Verzögerung der Pipeline-Register bzw. „Inter-stage“ Register beträgt 1 ns" sicherlich keine Rolle.

Also braucht ein Befehel 5 + 6 +11 +8 = 30 ns zum Abarbeiten

Mit Pipeline hier unter idealen Bedingungen im eingeschwungenen Zustand:

Wie kann die Pipelinstufe mit der längsten "Stage Delay" nun die Zeit bestimmen? Ein Befehl muss doch alle vier Stufen durchlaufen?

Die Längste StageDelay ist 11ns. Also braucht jetzt ein Befehhl 11 ns?

0
KarlRanseierIII  13.05.2023, 23:57
@RedDevil1982

Okay, ein Befehl kommt vorne in die Pipline rein, durchläuft alle Stages udn kommt am Ende raus, dann wird der nächste reingeschoben usw. - Das wäre ohne Pipelining, die Dauer ist die Summe aller Delays inklusive Interstage. Also 33 ns.

Was passier beim Pipelining, der erste Befehl geht in stage 1, wenn er in Stage 2 kommt, geht der nächste in Stage 1 usw. usf.

Sobald alle Stages belegt sind, ist der eingeschwungene Zustand erreicht. wenn ich nun keinerlei Störungen habe, dann reduziert sich die Befehlsabarbeitung auf die Dauer des langsamsten Stage.

Stell Dir Pipelining wörtlich vor:Fließbandfertigung. Wovon hängt ab wieviele fertige Produkte (hier Befehle) in welcher Zeit hinten vom Band fallen? Davon wie lange der längste Arbeitsschritt dauert.

0