In der Wikipedia kann man im Artikel zum Pentium lesen, dass der 486er eine 5 stufige Pipeline hatte und diese für den Pentium übernommen wurde, allerdings steht da nirgends, ob diese Pipeling erst mit dem 486er eingeführt wurde oder diese sogar der 386 oder noch früher schon kannte?
Der 8086 hatte schon eine prefetch-queue mit der instruction-queue gekoppelt. Man kann also sagen, dass die x86 das schon immer hatten.
Pipelining schrieb: > In der Wikipedia kann man im Artikel zum Pentium lesen, dass der 486er > eine 5 stufige Pipeline hatte und diese für den Pentium übernommen > wurde, allerdings steht da nirgends, ob diese Pipeling erst mit dem > 486er eingeführt wurde oder diese sogar der 386 oder noch früher schon > kannte? Bereits im 8086 wird eine Pipeline architectur erkannt, da BIU (BusinterfaceUnit) und EU (ExecutionUnit) parallel arbeiten. http://www.cosc.brocku.ca/~bockusd/3p92/Local_Pages/8086_achitecture.htm
Auch der 6502 macht spekulativen prefetch.
Der Intel 8080 hatte keine Pipeline. Intel 8008 und Intel 4004 natürlich auch nicht!
Chris F. schrieb: > Der 8086 hatte schon eine prefetch-queue mit der instruction-queue > gekoppelt. Man kann also sagen, dass die x86 das schon immer hatten. D.h. ein 8086 verarbeitet in einem einzigen Takt 2 Befehle gleichzeitig? Z.b. mov ax, bx inc ax Während er in einem Takt also in der instruction-queue also mov ax, bx ausrechnet, wertet er inc ax in der prefetch-queue aus? Kann man das so sagen?
Hm, also im verlinkten Artikel steht: "The EU receives program instruction codes and data from the BIU, executes these instructions, and store the results in the general registers. By passing the data back to the BIU, data can also be stored in a memory location or written to an output device. Note that the EU has no connection to the system buses. It receives and outputs all its data thru the BIU. " Wenn er die BIU wieder mit Daten vollstopft, nachdem die EU da was gerechnet hat, dann kann die BIU natürlich nicht für andere Befehle verwendet werden. Damit wäre das keine Pipeline.
Nein, kann man nicht. Pro Takt ein Befehl im Idealfall. WIMRE war das neue beim Pentium das mehrere Befehle pro Takt verarbeitet wurden. Das nennt man dann eine superskalare CPU
Der 80186 hatte jedenfalls schon eine 6-Byte Prefetch Queue, und der 8088 hatte einen 4-Byte Fifo nur für die Opcodes, weil er nur einen 8-Bit breiten Bus besaß und sonst zu sehr gegenüber dem sonst baugleichen 8086 zurückgefallen wäre.
Μαtthias W. schrieb: > Nein, kann man nicht. Pro Takt ein Befehl im Idealfall. WIMRE war > das > neue beim Pentium das mehrere Befehle pro Takt verarbeitet wurden. Das > nennt man dann eine superskalare CPU Superskalarität mit paralellen Pipelines ist etwas völlig anderes als eine Pipeline. Eine Pipeline besagt ja, dass, wenn die Pipeline z.b. 5 Stufen hat, da schon 5 Befehle drin stecken und die durch die jeweiligen Einheiten durchgeschoben werden. Das in jeder Stufe etwas völlig anderes gemacht wird, ist dabei klar. Stufe 1 holt z.b. die Daten. Stufe 2 dekodiert den Befehl. Stufe 3 rechnet den Befehl aus. usw. Ich habe mich oben vielleicht etwas mißverständlich ausgedückt, wenn ich geschrieben habe, dass er 2 Befehle gleichzeitig verarbeitet, dann meine ich nicht, dass er die beiden 2 Befehle schon vollständig abgearbeitet hat, sondern dass er mit 2 Befehlen angefangen hat sie zu verarbeiten, beim ersten Befehl ist er da logischerweise dann eine Stufe weiter als beim zweiten.
Welche Bedingungen müssen für dich erfüllt sein, damit du von einer "Pipeline" sprichst? Der 8086 kann theoretisch gleichzeitig ein Fetch (BIU), ein Execute (EU) und ein Writeback (BIU) ausführen. Aber da es nur eine BIU und nur einen Bus gibt, blockieren sich Fetch und Writeback gegenseitig, und die EU verhungert infolgedessen gelegentlich. Im Prinzip ist das eine 3-stage-pipeline ohne unabhängige Units. Ob du das jetzt als Pipeline ansehen willst, bleibt dir überlassen.
Pipelining schrieb: > Chris F. schrieb: >> Der 8086 hatte schon eine prefetch-queue mit der instruction-queue >> gekoppelt. Man kann also sagen, dass die x86 das schon immer hatten. > > D.h. ein 8086 verarbeitet in einem einzigen Takt 2 Befehle gleichzeitig? Also mein Prof hat pipelining damals so erklärt das ein befehl in mehrere Phasen zerlegt wigt, beispielsweise -Befehl holen -Befehl ausführen die jeweils von dedizierter Hardware ausgeführt werden. Beim 8086 holt die BIU den t+1 Befehl, während die EU noch am Befehl zum Zeitpunkt t knappert. Das hat der Prof dann als strukturelle pipelining bezeichnet. Zu diesen Zeiten war auch nix mit einem Befehl pro takt, da waren mehrere Takte pro Befehl nötig schon wegen Adress/Datenmultiplexing. Und genau genommen gab es nicht nur einen Takt, sondern mehrerer, die ein extra chip erzeugte. http://slideplayer.com/slide/1509111/
Ordner schrieb: > Also mein Prof hat pipelining damals so erklärt das ein befehl in > mehrere Phasen zerlegt wigt, beispielsweise > -Befehl holen > -Befehl ausführen > > die jeweils von dedizierter Hardware ausgeführt werden. Beim 8086 holt > die BIU den t+1 Befehl, während die EU noch am Befehl zum Zeitpunkt t > knappert. Das hat der Prof dann als strukturelle pipelining bezeichnet. Ja, so meine ich das auch. S. R. schrieb: > Welche Bedingungen müssen für dich erfüllt sein, damit du von einer > "Pipeline" sprichst? Für die Eingangsfrage würde ich sagen, wenn die Units/Stufen für sich unabhängig sind. > > Der 8086 kann theoretisch gleichzeitig ein Fetch (BIU), ein Execute (EU) > und ein Writeback (BIU) ausführen. Aber da es nur eine BIU und nur einen > Bus gibt, blockieren sich Fetch und Writeback gegenseitig, und die EU > verhungert infolgedessen gelegentlich. BUI -> EU -> BUI a b a c b a Wenn a, b und c Befehle sind, dann gäbe es im 3. Takt eine Kollission, weil sowohl a als auch c die BUI benötigt. Für mich wäre das kein echtes Pipelining. In dem obigen Fall müsste c also warten, bis a fertig ist, aber dann kommt im nächsten Takt ja noch b in BUI, also muss c auch auf b warten und erst dann darf es in die Pipe reingeschoben werden und einen Takt später mit d d zusammen. Während e dann wieder warten müsste, bis c und d fertig sind.
Pipelining schrieb: >> Der 8086 kann theoretisch gleichzeitig ein Fetch (BIU), ein Execute (EU) >> und ein Writeback (BIU) ausführen. Aber da es nur eine BIU und nur einen >> Bus gibt, blockieren sich Fetch und Writeback gegenseitig, und die EU >> verhungert infolgedessen gelegentlich. > > BUI -> EU -> BUI Das von dem Writeback beim 8086 hör ich zum ersten Mal, bei welchen Befehlen liegt den Source und Destination im Speicher? Obwohl unmöglich ist nix bei CISC.
Pipelining schrieb: > Für die Eingangsfrage würde ich sagen, wenn die Units/Stufen für sich > unabhängig sind. Dann ist ein Prefetch in deinem Sinne kein Pipelining und der 8086 kann demzufolge keines. :-) Ordner schrieb: > Das von dem Writeback beim 8086 hör ich zum ersten Mal, bei welchen > Befehlen liegt den Source und Destination im Speicher? Obwohl unmöglich > ist nix bei CISC. Während ein MOV in den Speicher schreibt, kann die BIU den nächsten Befehl nicht laden, weil der Bus blockiert ist.
:
Bearbeitet durch User
S. R. schrieb: > Pipelining schrieb: >> Für die Eingangsfrage würde ich sagen, wenn die Units/Stufen für sich >> unabhängig sind. > > Dann ist ein Prefetch in deinem Sinne kein Pipelining und der 8086 kann > demzufolge keines. :-) Erläutere. Ein Prefetch ist ja nur eine Stufe in einer Pipeline und in der Regel die erste.
Ordner schrieb: >> Chris F. schrieb: >>> gekoppelt. Man kann also sagen, dass die x86 das schon immer hatten. >> D.h. ein 8086 verarbeitet in einem einzigen Takt 2 Befehle gleichzeitig? > Beim 8086 holt die Bus Interface Unit (BIU) den nächsten Befehl, > während die Ausführungseinheit (EU) den aktuellen ausführt. Genau das ist es. Hier auf der Seite ist auch noch ein Bild dazu. http://scanftree.com/microprocessor/Architechture-Of-8086
Der iAPX86 hatte schon einen Movebefehl, der konnte eine Datenbreite pro Takt memory-memory kopieren und gleichzeitig zaehlen. Takt ist hier Clock/4 Das hiess dann etwa rep movs Dx,Ex und meinte : repeat mov DS:DX nach ES:EX und gleichzeitig wird das CX dekrementiert, bis das CX Null wird. dh man konnte so 64kB mit einem Befehl kopieren.
Pipelining schrieb: > S. R. schrieb: >> Pipelining schrieb: >>> Für die Eingangsfrage würde ich sagen, wenn die Units/Stufen für sich >>> unabhängig sind. >> Dann ist ein Prefetch in deinem Sinne kein Pipelining und der 8086 kann >> demzufolge keines. :-) > Erläutere. Du sagst, es sei Pipelining, wenn die Units für sich unabhängig sind. Beim 8086 hast du aber nur 2 unabhängige Units für die 3 Pipeline-Stufen (Fetch, Execute, Writeback), woraus folgt, dass es kein Pipelining sein kann.
Oh D. schrieb: > Der iAPX86 hatte schon einen Movebefehl, der konnte eine Datenbreite pro > Takt memory-memory kopieren und gleichzeitig zaehlen. Beim 8086 waren es bei REP MOVS 17 Takte pro Iteration.
:
Bearbeitet durch User
S. R. schrieb: > Pipelining schrieb: >> S. R. schrieb: >>> Pipelining schrieb: >>>> Für die Eingangsfrage würde ich sagen, wenn die Units/Stufen für sich >>>> unabhängig sind. >>> Dann ist ein Prefetch in deinem Sinne kein Pipelining und der 8086 kann >>> demzufolge keines. :-) >> Erläutere. > > Du sagst, es sei Pipelining, wenn die Units für sich unabhängig sind. > Beim 8086 hast du aber nur 2 unabhängige Units für die 3 Pipeline-Stufen > (Fetch, Execute, Writeback), woraus folgt, dass es kein Pipelining sein > kann. Es geht um die Pipeline-Stufen, unter denen du ja Units verstehst, Fetch und Writeback sind beim 8086 nicht unabhängig, wenn sie im BIU drinstecken, der für beide Schritte, das fetchen und zurückschreiben verantwortlich ist.
Ordner schrieb: > bei welchen Befehlen liegt den Source und Destination im Speicher? Nicht nur bei Spezialbefehlen wie MOVS; praktisch alle Befehle können Destination im Speicher verwenden, auch wenn es eine Source ist:
1 | INC [SI] |
2 | ADD [BX],AX |
:
Bearbeitet durch User
Pipelining schrieb: >>>> Pipelining schrieb: >>>>> Für die Eingangsfrage würde ich sagen, wenn die Units/Stufen für sich >>>>> unabhängig sind. > Es geht um die Pipeline-Stufen, unter denen du ja Units verstehst, Fetch > und Writeback sind beim 8086 nicht unabhängig, wenn sie im BIU > drinstecken, der für beide Schritte, das fetchen und zurückschreiben > verantwortlich ist. Also, nach deiner Definition, keine Pipeline. :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.