Forum: Mikrocontroller und Digitale Elektronik Ab wann erhielt die x86 Architektur erstmalig Pipelining?


von Pipelining (Gast)


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?

von Chris F. (chfreund) Benutzerseite


Lesenswert?

Der 8086 hatte schon eine prefetch-queue mit der instruction-queue 
gekoppelt. Man kann also sagen, dass die x86 das schon immer hatten.

von Ordner (Gast)


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

von bork (Gast)


Lesenswert?

Auch der 6502 macht spekulativen prefetch.

von Gordon Moore (Gast)


Lesenswert?

Der Intel 8080 hatte keine Pipeline. Intel 8008 und Intel 4004 natürlich 
auch nicht!

von Pipelining (Gast)


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?

von Pipelining (Gast)


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.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

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

von Hp M. (nachtmix)


Lesenswert?

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.

von Pipelining (Gast)


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.

von S. R. (svenska)


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.

von Ordner (Gast)


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/

von Pipelining (Gast)


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.

von Ordner (Gast)


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.

von S. R. (svenska)


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.

: Bearbeitet durch User
von Pipelining (Gast)


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.

von Chris F. (chfreund) Benutzerseite


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

von Pandur S. (jetztnicht)


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.

von S. R. (svenska)


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.

von (prx) A. K. (prx)


Lesenswert?

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
von Pipelining (Gast)


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.

von Clemens L. (c_l)


Lesenswert?

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
von S. R. (svenska)


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

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
Noch kein Account? Hier anmelden.