Architektur: Pipelining -> Frage

Gast #518044
Lesenswert?

Hi

Ich frage mich grad, wie viel Takte ein Befehl in meinem Controller 
braucht. Meiner hat eine 5 Stage Instruction Pipeline:
IF - ID - EX - MA - WB

und parallel:
WB
MA - WB
EX - MA - WB
ID - EX - MA - WB
IF - ID - EX - MA - WB

D.h. jeder Befehl braucht immer 5 Takte aber: die Befehle unternander 
sind nur 1 Takt auseinander (bei voller Auslastung).

Hab ich das jetzt richtig verstanden??

Dann würde der Befehl
i++
so - wie jeder andere Befehl - 5 Takte beanspruchen. Bei 100MHz also 
50ns ?
Gast #518063
Lesenswert?

@Prof. X

>Ich frage mich grad, wie viel Takte ein Befehl in meinem Controller
>braucht. Meiner hat eine 5 Stage Instruction Pipeline:

Das steht im Datenblatt.

>D.h. jeder Befehl braucht immer 5 Takte aber: die Befehle unternander
>sind nur 1 Takt auseinander (bei voller Auslastung).

>Hab ich das jetzt richtig verstanden??

Nein.

>Dann würde der Befehl
>i++
>so - wie jeder andere Befehl - 5 Takte beanspruchen. Bei 100MHz also
>50ns ?

Nein. Du verwechselst Latenz (Durchlaufzeit des Befehls durch die 
gesamte Verarbeitungskette) mit Durchsatz (Wieviel Befehle werden pro 
Takt beendet). Deine Latenz ist 5 Takte, dein Durchsatz 1 Befehl/Takt. 
Das bezieht sich aber auf Assembler.
Was ein C Compiler an Befehlen braucht, um "i++" in Assembler umzusetzen 
ist verschieden, aber wenn der Compilr was taugt und Optimierungen aktiv 
sind wird meistens ein einziger Assemblerbefehl draus.

MFG
Falk

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