PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum Pipelining


Senior Sanchez
2007-07-29, 00:59:53
Hoi,

Sanchez is immer noch am lernen für die Rechnersysteme-Klausur und da ist mir beim Thema Pipelining gerade eine Frage gekommen.

Was Pipelining ist, ist mir klar, wie es funktioniert genauso und was es auch für Abhängigkeiten gibt.

Es geht mir jetzt im Speziellen um das Beseitigen von Abhängigkeiten durch NOPs. Wir gehen davon aus, dass es kein Forwarding und keine Branch-Prediction gibt.

Unsere Pipeline besteht ja grob gesagt aus 5 Stufen: Instruction Fetch (IF), Instruction Decode (ID), Execute (EX), Memory Access (MA), Write Back (WB).

Angenommen ich habe ne Addition auf das Register 1. Kurz danach kommt ein Branch-Befehl der auf Register 1 zugreift. Wann darf dieser Branch-Befehl nun beginnen? Darf dessen IF schon während dem WB von der Addition erfolgen oder darf der IF erst nach dem WB erfolgen?

Bei normalen Anweisungen darf soweit ich weiß, es erst NACH dem WB mit dem IF beginnen, aber ich habe mir aufgeschrieben (irgendjemand meinte das mal zu mir), dass es bei Branches schon WÄHREND dem WB mit dem IF losgehen kann.

Was ist nun richtig?

Danke schonmal

Senior Sanchez
2007-07-29, 01:03:56
Ich sehe gerade. IF darf immer gleichzeitig zu WB erfolgen, ID ist das kritische, oder? ID muss immer warten, bis das Ergebnis geschrieben wurde, richtig?

Spasstiger
2007-07-29, 01:27:58
/EDIT: Um nochmal konkret auf deine Frage einzugehen:
Wenn die WB-Stufe z.B. zur fallenden Taktflanke zurückschreibt und die IF-Stufe erst zur nächsten steigenden Taktflanke liest, dann ist quasi ein Zugriff der Stufen auf dasselbe Register im selben Takt möglich.
Und wegen ID: ID decodiert einfach den nächsten bereits geladenen Befehl und holt sich evtl. benötigte Operanden aus den Registern. ID kann auch NOPs einfügen, wenn erforderlich. ID braucht aber nicht die Sprungadresse, die ist nur für IF relevant.

/vor EDIT: Damit der richtige Befehl nach dem Sprung aus dem Speicher in die IF-Stufe geladen werden kann, muss das Ergebniss der vorhergehenden Befehls aus der EX-Stufe bekannt sein.
Also muss der Prozessor warten bis das Ergebniss aus der EX-Stufe von der WB-Stufe in den program counter (PC) bzw. dein Register 1 geschrieben wurde.

Wird der Sprungbefehl dekodiert, dann ist die EX-Stufe schon am Berechnen der Sprungadresse. Danach wandert der ADD-Befehl noch durch die MA-Stufe (mir besser als ME-Stufe bekannt) und schlussendlich in die WB-Stufe. Wenn die WB-Stufe bereits zur früheren Taktflanke zurückschreibt, die anderen Stufen aber erst zur späteren Taktflanke arbeiten, kann man auch direkt in dem Takt die Sprungadresse lesen, während dem der ADD-Befehl noch in der WB-Stufe sitzt.

D.h. zwei Takte, nachdem der Sprungbefehl dekodiert wird und dementsprechend auch NOPs eingefügt werden können, steht die Sprungadresse im günstigsten Fall fest.

Es muss somit auf jeden Fall der nächste Befehl, der bereits in der IF geladen wurde, durch ein NOP ersetzt werden und noch ein weiteres NOP eingefügt werden bis zwei Takte später in der IF-Stufe der richtige Befehl geladen werden kann.

Alle Angaben ohne Gewähr, hab mich schon seit einem halben Jahr nicht mehr mit dem Thema Pipelining auseiandergesetzt.

Falls noch mehr Fragen auftauchen, kann ich auch gerne mal in meinem Skript zur technischen Informatik nachschauen. Wir haben Pipeling auch anhand eines 5-Stufen-RISC mit Load/Store-Architektur kennengelernt.

Senior Sanchez
2007-07-29, 11:42:55
/EDIT: Um nochmal konkret auf deine Frage einzugehen:
Wenn die WB-Stufe z.B. zur fallenden Taktflanke zurückschreibt und die IF-Stufe erst zur nächsten steigenden Taktflanke liest, dann ist quasi ein Zugriff der Stufen auf dasselbe Register im selben Takt möglich.
Und wegen ID: ID decodiert einfach den nächsten bereits geladenen Befehl und holt sich evtl. benötigte Operanden aus den Registern. ID kann auch NOPs einfügen, wenn erforderlich. ID braucht aber nicht die Sprungadresse, die ist nur für IF relevant.

Ich denke IF greift noch gar nicht auf Register zu? Ich denke dieser Zugriff erfolgt erst in ID, oder sehe ich das falsch?

Es ging mir insgesamt auch gar nicht um die Kontrollabhängigkeit (also wohin ich springen muss), sondern lediglich um die Datenabhängigkeit durch die Register. Meinetwegen führt Add halt ne Addition ins Register 1 aus und branch braucht dann dieses Register um einen Ausdruck auszuwerten.

Oder kann man das allgemein so formulieren: Wenn eine Abhängigkeit besteht, darf dann während der WB-Phase des eines Befehls schon ein IF des anderen Befehls stattfinden?

EDIT: Was heißt eigentlich ME? Ich hatte das so auch im Script gefunden, aber da die Phase Memory Access heißt, hielt ich es für einen Schreibfehler und habe deswegen MA geschrieben.

Spasstiger
2007-07-29, 14:43:00
Ich denke IF greift noch gar nicht auf Register zu? Ich denke dieser Zugriff erfolgt erst in ID, oder sehe ich das falsch?
Ich kenne deine Pipeline nicht. Die Register können nur in ID integriert sein, aber auch als externer Registersatz, auf den ID und IF gleichermaßen lesend zugreifen können. Ich sehe auch gerade, dass bei dem bei uns in der Vorlesung behandelten Modellprozessor mit Pipelining der Registersatz in die Decode-Stufe gelegt wurde.
Wie dann in der IF-Stufe die nächste Befehlsadresse aus dem Register gelesen wird, weiß ich grad auch nicht.

IF darf übrigens immer arbeiten, erst Decode (ID) verwirft eventuell fälschlich geladene Befehle.

ME heißt wohl einfach MEmory. In unserem Skript wurde die Abkürzung auch nur kommentarlos eingeführt.

Senior Sanchez
2007-07-29, 14:57:53
Okay, danke, dann weiß ich ja Bescheid :)

Danke

Gast
2007-07-30, 11:48:14
laß mich raten...

http://de.wikipedia.org/wiki/DLX-Pipeline ?

Senior Sanchez
2007-07-30, 18:49:36
Genau die ;)

Heute habe ich aber die Prüfung geschrieben, mal sehen was dabei rauskommt.

Spasstiger
2007-07-30, 19:15:26
Wir haben eigene, vom Institut für die Lehre entwickelte Prozessordesigns behandelt, einen RISC mit 5-Stufen-Pipeline und Load/Store-Architektur und einen CISC.
Wenn ich jetzt aber das DLX- Design sehe, erinnert mich das schon sehr an unsere Pipeline. Einige Bezeichnungen sind etwas anders und der Befehlssatz unterscheidet sich minimal.

Komisch, dass bei uns nie auf die DLX-Pipeline eingegangen wurde.

Senior Sanchez
2007-07-30, 20:00:14
Bei uns wurde das auch nie so genannt, aber ich denke mal, dass das grundsätzliche Material aus "Computer Architecture" von Hennessy und Patterson stammt, denn das wurde uns mehrmals für die Vorlesung empfohlen.

dgl
2007-08-01, 01:49:27
Wie nennt sich Dein Studiengang?

Senior Sanchez
2007-08-01, 02:08:22
Computer Systems in Engineering