Ab wann erhielt die x86 Architektur erstmalig Pipelining?

Gast #4795015
Lesenswert?

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?
Gast #4795025
Lesenswert?

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
Gast #4795042
Lesenswert?

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?
Gast #4795045
Lesenswert?

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.
Gast #4795056
Lesenswert?

Μα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.
#4795070
Lesenswert?

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.
Gast #4795073
Lesenswert?

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/
Gast #4795083
Lesenswert?

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.
Gast #4795105
Lesenswert?

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.
#4795116
Lesenswert?

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.
Gast #4795121
Lesenswert?

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.
Persönliche Seite #4795129
Lesenswert?

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
#4795210
Lesenswert?

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.
#4795251
Lesenswert?

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.
Gast #4795263
Lesenswert?

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.
#4795341
Lesenswert?

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. :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren