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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Pipelining (Gast)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
Auch der 6502 macht spekulativen prefetch.

von Gordon Moore (Gast)


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

von Pipelining (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.