Frage:
Bedeutet CPU-Pipelining immer einen Mehrrad-Datenpfad?
Henley
2010-05-04 07:48:45 UTC
view on stackexchange narkive permalink

Ich studiere die MIPS-CPU und habe eine sehr grundlegende Frage zum Datenpfad. Da die MIPS-CPU eine 5-stufige Pipeline verwendet, bedeutet dies, dass die Pipeline einen Mehrrad-Datenpfad verwendet. Richtig? Wenn eine CPU Anweisungen hat, bei denen die Zyklen pro Anweisung größer als 1 sind, verwendet die CPU einen Mehrrad-Datenpfad. Richtig?

Ich denke, ich versuche zu verstehen, ob es jemals einen Fall gibt, in dem Sie eine Pipeline-CPU haben können, die KEINEN Mehrrad-Datenpfad verwendet. In meinen Augen impliziert Pipelining immer einen Datenpfad mit mehreren Rädern. Ist das der Fall? Oder gibt es Ausnahmen?

Ich bin verwirrt: "Im Gegensatz zur Multi-Cycle-CPU erfordert der Pipeline-Datenpfad, dass jeder Befehl alle fünf Ausführungsstufen verwendet." (1) Dies impliziert, dass die Multizyklus- und Pipeline-Datenpfade zwei verschiedene Dinge sind. Wenn also jemand nach meinem anfänglichen Verständnis sagt "Das 5-stufige MIPS-Pipelinesystem verwendet den Mehrzyklus-Datenpfad", wäre die Antwort wahr. Aber basierend auf dem Zitat wäre die Antwort falsch. Kann jemand klarstellen? (1) http://cseweb.ucsd.edu/~j2lau/cs141/week6.html
Ich sehe, was Sie hier lernen wollen, aber dies ist das zweite Mal, dass ich eine Frage sehe, die eindeutig für eine Klasse ist. Ich denke, nur eine Klassenfrage hier zu stellen, bringt eine schnelle Antwort, aber dies ist ein schlechter Dienst für Sie und die Leute, die antworten. Durch das Erforschen einer Frage lernen Sie sehr viel über Geräte und Systeme. Die Leute hier verbringen Zeit damit, Ihre Hausaufgaben zu machen. Sie verkürzen sich der Bildung und den Mitgliedern dieses Forums ihrer Zeit.
Zwei antworten:
#1
+4
JustJeff
2010-05-04 15:38:53 UTC
view on stackexchange narkive permalink

Viele der alten 8-Bit-Mikroprozessoren (beispielsweise vor dem 8086) hatten Anweisungen, deren Ausführung mehr als einen Zyklus dauerte, und keine Pipeline-Fähigkeit. Jeder Befehl würde Abruf-, Dekodierungs-, Ausführungs- und Rückschreibphasen durchlaufen, aber jeder würde vollständig ausgeführt, bevor der nächste beginnen könnte. Ein bisschen wie eine Autobahn von NY nach DC zu haben und jeweils nur ein Auto darauf zu lassen.

Pipelining nutzt die Tatsache aus, dass Sie beispielsweise die Logik zum Abrufen von Anweisungen verwenden könnten, um die zu erhalten next -Anweisung beim Ausführen der aktuellen Anweisung. Dies wird als Parallelität auf Befehlsebene bezeichnet, da mehr als ein Befehl gleichzeitig ausgeführt wird. In der Autobahn-Analogie müssen Sie nicht warten, bis das erste Auto in DC ankommt, bevor Sie ein weiteres in NY anlassen. So etwas begann um die Zeit des 8086/8088. (und es gab zweifellos andere, aber ich biete den 8086 lediglich als Referenzzeitpunkt an.)

Nein, Anweisungen, die mehr als einen Zyklus erfordern, bedeuten kein Pipelining.

Wenn andererseits alle Ihre Anweisungen in einem einzigen Zyklus ausgeführt werden könnten, wäre das Pipelining nicht vorteilhaft, da es effektiv keine Möglichkeit gäbe, verschiedene Stufen verschiedener Anweisungen gleichzeitig auszuführen. Pipelining scheint also zu implizieren, dass Anweisungen in verschiedene Phasen zerlegt werden können, die parallelisiert werden können.

(Es ist tatsächlich schwer vorstellbar, welche Art von Anweisung in einem einzigen Zyklus über einen einfachen NOP hinaus ausgeführt werden kann Register-zu-Register-Übertragungen würden einen Zyklus erfordern, um den Opcode in den Chip zu ziehen, und einen weiteren Zyklus, um den Effekt zu erzielen.)

Die meisten Prozessoren / Controller verfügen heute noch über Anweisungen, die mehr als einen Taktzyklus benötigen, selbst in einer Pipeline.
OK, ich verstehe, dass Multirad kein Pipelining bedeutet, aber bedeutet Pipelining Multirad? Im Allgemeinen werden beim Pipelining mehrere Zyklen verwendet, sodass eine große Ähnlichkeit besteht. Aus dem obigen Link geht jedoch hervor, dass der Pipeline-Datenpfad und der Multizyklus-Datenpfad sehr unterschiedlich sind. Das wollte ich bestätigen.
@Henley: Ich gehe davon aus, dass Pipelining Anweisungen für mehrere Zyklen impliziert. Wie können Sie sonst Pipelines erstellen?
@Kortuk: Ich wollte nicht implizieren, dass moderne CPUs keine Mehrzyklusanweisungen haben. Es war ein voreiliges Stück Schreiben, das ich ein wenig bearbeitet habe. Hoffentlich macht es jetzt mehr Sinn.
Ich hatte das Gefühl, dass du das wusstest, JustJeff, aber andere vielleicht nicht.
Zu Ihrer Information, der 6502 (Mitte der 1970er Jahre) ruft das zweite Byte jedes Befehls ab, während er das erste decodiert (wenn das zweite Byte nicht benötigt wird, wird es verworfen), und überlappt das Zurückschreiben des Registers (falls erforderlich) mit dem Abrufen von das erste Byte der nächsten Anweisung.
@JustJeff - tatsächlich ist es durchaus möglich, eine CPU zu erstellen, in der der Programmzähler bei einer Taktflanke aktualisiert wird. Sein Wert wird zur Adresseingabe in den Programmspeicher, dessen adressierter Inhalt sich über die Befehlsdecodierungslogik ausbreitet, zur Registerdatei oder (Harvard) Datenspeicheradresseneingänge, Register- / Speicheroperanden breiten sich durch die CPU aus, und die Ergebnisse und der nächste PC-Wert können an die nächste Taktflanke zwischengespeichert werden. Eine solche Vorrichtung wäre angesichts der langen Ausbreitungsketten langsam, aber konzeptionell recht einfach.
#2
+4
ajs410
2010-05-05 02:35:16 UTC
view on stackexchange narkive permalink

Eine Pipeline-CPU impliziert einen Datenpfad mit mehreren Zyklen, gerade weil es fünf Taktzyklen dauert, bis ein Befehl von Abrufen zu Zurückschreiben wechselt.

Wo ich verwirrt bin, ist hier "anders" Für die Mehrzyklus-CPU und den Pipeline-Datenpfad muss jeder Befehl alle fünf Ausführungsstufen verwenden. "

Sie sollten den nächsten Absatz, den Sie zitieren, zu Ende lesen. Diese Anforderung soll lediglich verhindern, dass zwei Anweisungen gleichzeitig beendet werden.

Angenommen, wir verwenden die Latenzen unserer Mehrzyklus-CPU und versuchen, eine Ladeanweisung gefolgt von einer Addieranweisung auszuführen . Die Ausführung des Ladebefehls erfordert fünf Zyklen, und der Addierbefehl erfordert vier Zyklen . Wenn wir also mit dem Ausführen des Ladebefehls in Zyklus 1 beginnen, wird die Ausführung in Zyklus 5 beendet. Wir führen Pipelining durch, sodass wir den Add-Befehl in Zyklus 2 ausführen können und er in Zyklus 5 beendet wird. Dies ist ein Problem: Wir haben zwei Anweisungen, die in Zyklus 5 beendet werden. : Beide versuchen, in Zyklus 5 in die Registerdatei zu schreiben. Dies ist ein Problem, da unsere Registerdatei nur einen Schreibport hat.

Ich gab meine beste Antwort, ohne seinen Text zu lesen. Es scheint, mir wurde etwas anderes beigebracht.
Ich denke, Sie haben mehrere Zyklen * Anweisungen * verwechselt mit einem mehrzyklischen * Datenpfad *.
Keine Sorge, ich habe dich positiv bewertet, aber es scheint, als hätte es niemand anderes getan.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 2.0-Lizenz, unter der er vertrieben wird.
Loading...