19.02.2014 Aufrufe

5. Teil MIPS - Ra.informatik.tu-darmstadt.de - Technische Universität ...

5. Teil MIPS - Ra.informatik.tu-darmstadt.de - Technische Universität ...

5. Teil MIPS - Ra.informatik.tu-darmstadt.de - Technische Universität ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Kapitel 10 (<strong>5.</strong> <strong>Teil</strong> <strong>MIPS</strong>):<br />

Pipeline-Implementierung<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2<br />

SS 2009<br />

R. Hoffmann<br />

FG Rechnerarchitek<strong>tu</strong>r<br />

<strong>Technische</strong> Universität Darmstadt<br />

In Anlehnung an das Patterson/Hennessy: Computer Organization & Design, 2 nd Edition, Chapter 6<br />

Es sind auch die Folien von Dr. M. G. Wahl (Univ. Siegen, Inst. Mikrosystemtechnik) und ähnliche<br />

aus <strong>de</strong>n Grundzügen <strong>de</strong>r Informatik II, SS03, von Prof. Dr. Oskar von Stryk verwen<strong>de</strong>t wor<strong>de</strong>n.


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Inhalt, Thema: Pipelining<br />

10–2<br />

<strong>Teil</strong> 1<br />

<strong>Teil</strong> 2<br />

• Prinzip<br />

• Bearbei<strong>tu</strong>ngszeit<br />

• Anwendungen<br />

• Arithmetisches Pipelining<br />

• Prozessor-Pipelining<br />

• Befehlspipelining<br />

• Befehlspipelining bei <strong>MIPS</strong><br />

• Pipeline-Entwurf<br />

• vom Eintakt-Rechenwerk zum<br />

Pipelining<br />

• Einfügen von Pipeline-<br />

Registern<br />

• Pipeline-Steuerung<br />

• Pipeline-Probleme<br />

• Allgemein<br />

• <strong>MIPS</strong><br />

1. Ressourcen-Konflikt<br />

2. Datenkonflikt<br />

3. Steuerflusskonflikt<br />

• Datenabhängigkeit<br />

• Datenhür<strong>de</strong><br />

• Software-Lösung<br />

• Forwarding<br />

• Stall<br />

• Steuerflusskonflikt<br />

• Weitere Leis<strong>tu</strong>ngssteigerung


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Grundlegen<strong>de</strong> Überlegungen<br />

10–3<br />

Bisher erreicht:<br />

• Mehrtakt-Implementierung<br />

für eine <strong>Teil</strong>menge <strong>de</strong>r <strong>MIPS</strong>-<br />

Befehle,<br />

• dadurch zwar mehrere<br />

Taktzyklen zur Abarbei<strong>tu</strong>ng eines<br />

Befehls, aber insgesamt<br />

schneller als bei Eintakt-<br />

Implementierung.<br />

• Auslas<strong>tu</strong>ng <strong>de</strong>r Hardware:<br />

Mehrtakt-Implementierung<br />

benutzt die Hardware-<br />

Einheiten (Ressourcen) nur<br />

in bestimmten<br />

Steuerzustän<strong>de</strong>n.<br />

Ziel:<br />

• Effizienzsteigerung durch<br />

Nutzung möglichst vieler<br />

Ressourcen zu je<strong>de</strong>m Zeitpunkt<br />

• Lösungsansatz: Parallele<br />

Bearbei<strong>tu</strong>ng mehrerer Befehle in<br />

Form einer<br />

Fließbandverarbei<strong>tu</strong>ng<br />

(Pipelining)


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipelining Prinzip (1)<br />

10–4<br />

• Ziel<br />

• Es ist eine Menge von<br />

ähnlichen<br />

Objekten/Ergebnissen in<br />

möglichst kurzer Zeit zu<br />

produzieren. (Maximierung<br />

<strong>de</strong>s Durchsatzes)<br />

• Voraussetzungen<br />

• Die Produktion kann in<br />

aufeinan<strong>de</strong>rfolgen<strong>de</strong>n<br />

<strong>Teil</strong>schritten erfolgen, die in<br />

etwa gleich lange dauern.<br />

• Es gibt ausreichend viele<br />

Ressourcen.<br />

Frauen am Fließband<br />

in <strong>de</strong>r<br />

Anzugschnei<strong>de</strong>rei <strong>de</strong>r<br />

Firma Bierbaum und<br />

Proenen in Köln<br />

Bierbaum und Proenen<br />

Köln, 1950-1960<br />

Photographie<br />

Bun<strong>de</strong>sbildstelle, Bonn<br />

• Lösung<br />

• Für je<strong>de</strong>n Bearbei<strong>tu</strong>ngsschritt<br />

wird eine Pipelines<strong>tu</strong>fe<br />

vorgesehen.<br />

• Alle Pipelines<strong>tu</strong>fen arbeiten<br />

parallel und liefern ihre<br />

<strong>Teil</strong>ergebnisse synchronisiert<br />

durch einen Takt an die<br />

nächste S<strong>tu</strong>fe weiter.


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipelining Prinzip (2)<br />

10–5<br />

Eingabeobjekte (Daten, Befehle, ...), Input-Stream: D1 .. Dm<br />

Darstellung: Füllung <strong>de</strong>r S<strong>tu</strong>fen über <strong>de</strong>r Zeit<br />

Takt: 1 2 3 4 5 6 7 8<br />

S<strong>tu</strong>fe1: D1 D2 D3 D4 D5<br />

S<strong>tu</strong>fe2: D1 D2 D3 D4 D5<br />

S<strong>tu</strong>fe3: D1 D2 D3 D4 D5<br />

S<strong>tu</strong>fe4: D1 D2 D3 D4 D5<br />

Füllen<br />

Ausgabeobjekte (Daten, Befehle, ...),<br />

Output-Stream<br />

Pipeline-<br />

Modus<br />

(Betriebsphase)<br />

Leeren


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipelining Prinzip (3)<br />

"multiple-clock-cycle pipeline diagram"<br />

Mehrzyklen-Pipelinediagramm<br />

10–6<br />

Aus dieser Darstellung kann man gut erkennen, zu welchem Zeitpunkt ein Da<strong>tu</strong>m<br />

welche S<strong>tu</strong>fe benutzt.<br />

Diese Darstellung eignet sich auch gut zur Ermittlung <strong>de</strong>r Datenabhängigkeiten<br />

zwischen <strong>de</strong>n Daten=Befehlen, s. z.B. 10-45<br />

Takt 1. 2. 3. 4. <strong>5.</strong> 6. 7. 8.<br />

Da<strong>tu</strong>m1 S<strong>tu</strong>fe1 S<strong>tu</strong>fe2 S<strong>tu</strong>fe3 S<strong>tu</strong>fe4<br />

Da<strong>tu</strong>m2 S<strong>tu</strong>fe1 S<strong>tu</strong>fe2 S<strong>tu</strong>fe3 S<strong>tu</strong>fe4<br />

Da<strong>tu</strong>m3 S<strong>tu</strong>fe1 S<strong>tu</strong>fe2 S<strong>tu</strong>fe3 S<strong>tu</strong>fe4<br />

Da<strong>tu</strong>m4 S<strong>tu</strong>fe1 S<strong>tu</strong>fe2 S<strong>tu</strong>fe3 S<strong>tu</strong>fe4<br />

Da<strong>tu</strong>m5 S<strong>tu</strong>fe1 S<strong>tu</strong>fe2 S<strong>tu</strong>fe3 S<strong>tu</strong>fe4<br />

Füllen<br />

Pipeline-<br />

Modus<br />

(Betriebsphase)<br />

Leeren<br />

Je<strong>de</strong>s Da<strong>tu</strong>m durchläuft sequentiell die n S<strong>tu</strong>fen.<br />

In <strong>de</strong>r Betriebsphase bearbeiten n S<strong>tu</strong>fen parallel n Daten.


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Bearbei<strong>tu</strong>ngszeit (1): ohne Pipelining<br />

10–7<br />

n=4<br />

m=5<br />

m<br />

n<br />

n = Anzahl <strong>de</strong>r S<strong>tu</strong>fen<br />

m = Anzahl <strong>de</strong>r zu bearbeiten<strong>de</strong>n Objekte<br />

T one = Gesamtbearbei<strong>tu</strong>ngszeit in einem Schritt<br />

Fall ohne Pipelining (n=1)<br />

• für m=1 Objekt: t ges (m=1,n=1) = T one<br />

Beispiel: n=1, m=1: T one =7<br />

n=1, m=10: T one = 70


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Bearbei<strong>tu</strong>ngszeit (2): nur ein Objekt<br />

10–8<br />

Fall mit n Pipelines<strong>tu</strong>fen (n>1)<br />

t1 t2 t3 t4<br />

• nur m=1 Objekt wird bearbeitet, die Verweildauer (Durchlaufzeit)<br />

beträgt dann<br />

• bei asynchroner Weitergabe: t ges (1,n) = Summe(t i ) = T asyn<br />

1<br />

• bei synchroner Weitergabe: t ges (1,n) = n t max = T syn<br />

mit t max = max (t i ) = Taktzeit<br />

1 wie bei einem mehrs<strong>tu</strong>figen<br />

Schaltnetz<br />

Beispiel: n=4, m=1, t1=1, t2=2, t3=1, t4=3<br />

T asyn = 1+2+1+3=7<br />

T syn = n t max = 4 * 3 = 12


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Bearbei<strong>tu</strong>ngszeit (3): m Objekte<br />

10–9<br />

Fall mit n Pipelines<strong>tu</strong>fen (n>1)<br />

• m Objekte wer<strong>de</strong>n bearbeitet, bei synchroner Weitergabe<br />

t ges (m,n) = n t max + (m-1) t max<br />

(für das erste Ergebnis, Latenzzeit) + (für die weiteren Ergebnisse)<br />

= (n-1) t max + m t max<br />

(Füllen Start-Up) + (für m Ergebnisse)<br />

t1 t2 t3 t4<br />

t ges (m,n) = T syn + (m-1) T syn /n<br />

Beispiel: n=4, m=10, t1=1, t2=2, t3=1, t4=3<br />

T syn = n * t max = 4 * 3 = 12<br />

t ges (10, 4) = 12 + (9) * 12/4 = 39 < 70 !!<br />

Vergleich: ohne Pipeline: mT one = 10*7=70


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Formel (Wdh.)<br />

10–10<br />

t ges (m,n) = T syn + (m-1) T syn /n = (n-1)*T syn /n + m*T syn /n<br />

• t ges Zeit zur Bearbei<strong>tu</strong>ng von m Objekten<br />

• n Anzahl <strong>de</strong>r S<strong>tu</strong>fen<br />

• m Anzahl <strong>de</strong>r Objekte<br />

• T syn Verweildauer, Durchlaufzeit<br />

• t max =T syn /n Taktzeit<br />

• (n-1)*T syn /n Start-Up-Time, Zeit um die Pipeline zu<br />

füllen<br />

• (n)*T syn /n Latenzzeit, Zeit bis zum ersten Ergebnis


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Speed-Up<br />

10–11<br />

• Speed-Up Z = Beschleunigungsfaktor =<br />

= Zeit bei sequentieller Verarbei<strong>tu</strong>ng<br />

Zeit bei Pipeline-Verarbei<strong>tu</strong>ng<br />

• für sehr große m: Start-Up-Time ist<br />

vernachlässigbar<br />

• t ges m t max , d. h. pro Takt ein neues Ergebnis<br />

• Z mT asyn / (mT syn /n) = n T asyn /T syn<br />

kleiner als 1 !<br />

Merke: Der Speed-Up zur Bearbei<strong>tu</strong>ng eines langen<br />

Datenstroms ist kleiner als n (Anzahl <strong>de</strong>r S<strong>tu</strong>fen).


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipelining: Eigenschaften<br />

10–12<br />

• Die Durchlaufzeit für eine<br />

einzelne Aufgabe ist beim<br />

Pipelining höher im Vergleich zur<br />

asynchronen Verarbei<strong>tu</strong>ng ohne<br />

Pipelining.<br />

• Die Pipelinegeschwindigkeit wird<br />

durch die langsamste S<strong>tu</strong>fe<br />

bestimmt.<br />

• Durchsatz/<br />

Übertragungsrate:<br />

• Anzahl <strong>de</strong>r übertragbaren<br />

Bytes/s, meist in MB/s<br />

• o<strong>de</strong>r auch Mbps (Megabit/s)<br />

bei serieller Übertragung<br />

• Beispiel: Warmwasserlei<strong>tu</strong>ng ....<br />

• Durchsatz steigt mit <strong>de</strong>r Anzahl<br />

n <strong>de</strong>r Pipelines<strong>tu</strong>fen, wenn<br />

• die Pipeline immer weiter in<br />

etwa gleich lange S<strong>tu</strong>fen geteilt<br />

wer<strong>de</strong>n kann.<br />

• die Zeit zum Zwischenspeichern<br />

<strong>de</strong>r <strong>Teil</strong>ergebnisse<br />

"vernachlässigt" wer<strong>de</strong>n kann<br />

(Pufferregister verursachen<br />

Zeitverzögerung).<br />

• Durchsatz wird reduziert durch<br />

• Registerübernahmezeiten<br />

• ungleiche Länge <strong>de</strong>r S<strong>tu</strong>fen<br />

• Zeit zum Füllen (am Anfang)<br />

und Leeren <strong>de</strong>r Pipeline (am<br />

En<strong>de</strong>)<br />

• Even<strong>tu</strong>elle Abhängigkeiten<br />

zwischen <strong>de</strong>n S<strong>tu</strong>fen


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Verschie<strong>de</strong>ne Anwendungen <strong>de</strong>s Pipelining<br />

10–13<br />

• Allgemein: Bearbei<strong>tu</strong>ng von<br />

Datenströmen<br />

• z.B. digitale<br />

Signalverabei<strong>tu</strong>ng, Vi<strong>de</strong>ound<br />

Audiostreams<br />

• Bearbei<strong>tu</strong>ng von Vektoren<br />

(in Vektorrechnern)<br />

• Arithmetisches Pipelining:<br />

Arithmetische Operationen<br />

wer<strong>de</strong>n in <strong>Teil</strong>schritten<br />

ausgeführt (z. B.<br />

Gleitkommaoperationen)<br />

• Prozessor-Pipelining: in<br />

je<strong>de</strong>r Bearbei<strong>tu</strong>ngss<strong>tu</strong>fe<br />

sitzt ein Prozessor.<br />

• Befehlspipelining, im<br />

folgen<strong>de</strong>n beim <strong>MIPS</strong><br />

• Befehl holen, <strong>de</strong>codieren und<br />

ausführen wird ständig<br />

wie<strong>de</strong>rholt


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Befehlspipelining bei <strong>MIPS</strong><br />

10–14<br />

• Die Ausführung eines<br />

komplexen Programms<br />

be<strong>de</strong>utet in <strong>de</strong>r Regel das<br />

Ausführen von Milliar<strong>de</strong>n<br />

von Mikrooperationen.<br />

Durchsatzmaximierung ist<br />

eines <strong>de</strong>r wesentlichen<br />

Entwurfsprobleme.<br />

• Was erleichtert die<br />

Implementierung (z. B. beim<br />

<strong>MIPS</strong>)?<br />

• Alle Befehle sollten in etwa<br />

gleich lang sein.<br />

• Registernummern sollten in<br />

allen Befehle an <strong>de</strong>rselben<br />

Stelle platziert sein.<br />

• Speicherzugriffe sollten nur in<br />

La<strong>de</strong>- und Speicherbefehlen<br />

vorkommen.<br />

• Je Befehl wird höchstens ein<br />

Rechenergebnis erzeugt, das in<br />

ein Register geschrieben wird.


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Befehlspipelining<br />

10–15<br />

• die auszuführen<strong>de</strong>n Schritte bei RISC-Befehlen,<br />

beispielhaft<br />

• Register-Register-Befehl<br />

IF Holen<br />

ID Decodieren, Register-Lesen<br />

EX ALU-Operation<br />

WB Register-Schreiben.<br />

• Load-Befehl<br />

IF Holen<br />

ID Decodieren, Register-Lesen<br />

EX Adresse berechnen<br />

MEM aus <strong>de</strong>m Cache o<strong>de</strong>r Hauptspeicher lesen<br />

WB Register-Schreiben.<br />

• Sprungbefehl<br />

IF Holen<br />

ID Decodieren, (Register-Lesen)<br />

EX Sprungadresse berechnen<br />

Befehlszähler neu setzen und schon vorverarbeitete Nachfolge-<br />

Befehle been<strong>de</strong>n o<strong>de</strong>r ihre Wirkung verhin<strong>de</strong>rn.


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

<strong>MIPS</strong>-Befehlszyklen am Beispiel lw<br />

10–16<br />

Zyklus 1<br />

Zyklus 2 Zyklus 3 Zyklus 4 Zyklus 5<br />

IF ID EX MEM WB<br />

IF: Fetch Befehl aus <strong>de</strong>m Programmspeicher<br />

ID: Decodiere Befehl und Read Register<br />

EX: (Ececute) Berechne die effektive Speicheradresse<br />

MEM: Read Daten aus <strong>de</strong>m Datenspeicher<br />

WB: Write Back die Daten ins Zielregister<br />

Die Überlegungen in Kapitel 5 sind auf die acht <strong>MIPS</strong>-Befehle lw, sw, add,<br />

sub, and, or, slt, beq beschränkt, die jeweils in maximal 5 Taktzyklen<br />

ausgeführt wer<strong>de</strong>n. Die übrigen <strong>MIPS</strong>-Befehle wer<strong>de</strong>n hier nicht untersucht.


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Erhöhung <strong>de</strong>s Befehlsdurchsatzes<br />

10–17<br />

Program<br />

execution<br />

or<strong>de</strong>r<br />

Time<br />

(in instructions)<br />

lw $1, 100($0)<br />

Eintakt-<strong>MIPS</strong>-Rechenwerk<br />

Instruction<br />

fetch<br />

2 4 6 8 10 12 14 16 18<br />

Reg<br />

ALU<br />

Data<br />

access<br />

Reg<br />

lw $2, 200($0)<br />

8 ns<br />

Instruction<br />

fetch<br />

Reg<br />

ALU<br />

Data<br />

access<br />

Reg<br />

lw $3, 300($0)<br />

Program<br />

execution<br />

Time<br />

or<strong>de</strong>r<br />

(in instructions)<br />

lw $1, 100($0)<br />

lw $2, 200($0)<br />

Instruction<br />

fetch<br />

2 ns<br />

Instruction<br />

fetch<br />

8 ns<br />

T asyn<br />

...<br />

8 ns<br />

T syn<br />

mit Pipelining<br />

2 4 6 8 10 12 14<br />

Data<br />

Beschleunigungsfaktor<br />

im Beispiel:<br />

Reg ALU<br />

Reg<br />

access<br />

Instruction<br />

Data<br />

Z 5 * 8/10 = 4<br />

Reg ALU<br />

Reg<br />

fetch<br />

access<br />

siehe Folie 10-11:<br />

lw $3, 300($0)<br />

2 ns<br />

Instruction<br />

fetch<br />

Reg<br />

ALU<br />

Data<br />

access<br />

Reg<br />

Z n T asyn /T syn<br />

2 ns 2 ns 2 ns 2 ns 2 ns


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipeline-Entwurf<br />

10–18<br />

• Vorgehen allgemein<br />

• Erst wird angenommen, dass je<strong>de</strong>r Befehl ein eigenes<br />

spezielles Operationswerk zur Verfügung hätte.<br />

Je<strong>de</strong>s Operationswerk besteht aus einer Folge von<br />

Operationen.<br />

• Dann wird die zeitliche Abarbei<strong>tu</strong>ng aller einzelnen<br />

Operationswerke in Zusammenhang gesetzt und daraus<br />

durch Überlagerung ein gemeinsames Operationswerk<br />

entworfen.<br />

• Vorgehen hier<br />

• Ausgangspunkt: Eintakt-Implementierung<br />

• Einfügen von Pipelineregistern.


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Eintakt-Implementierung (Wdh.)<br />

10–19<br />

M ux<br />

0<br />

4<br />

Add<br />

Instruction [31 26]<br />

Control<br />

RegDst<br />

Branch<br />

MemRead<br />

MemtoReg<br />

ALUOp<br />

MemWrite<br />

ALUSrc<br />

RegWrite<br />

Shift<br />

left 2<br />

Add<br />

ALU<br />

result<br />

1<br />

PCSrc<br />

PC<br />

Read<br />

address<br />

Instruction<br />

memory<br />

Instruction<br />

[31– 0]<br />

Instruction [25 21]<br />

Instruction [20 16]<br />

Instruction [15 11]<br />

Instruction [15 0]<br />

0<br />

M ux<br />

1<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data 1<br />

register 2<br />

Registers Read<br />

Write<br />

data 2<br />

register<br />

Write<br />

data<br />

16 32<br />

Sign<br />

extend<br />

0<br />

M<br />

ux<br />

1<br />

ALU<br />

control<br />

Zero<br />

ALU ALU<br />

result<br />

Address<br />

Write<br />

data<br />

Data<br />

memory<br />

Read<br />

data<br />

M ux<br />

1<br />

0<br />

Instruction [5 0]


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Eintakt-Befehlsteilschritte<br />

10–20<br />

IF: Instructionfetch<br />

M ux<br />

0<br />

ID: Instruction<strong>de</strong>co<strong>de</strong>/<br />

register fileread<br />

EX: Execute/<br />

address calculation<br />

MEM: Memory access<br />

WB: Writeback<br />

1<br />

PC<br />

clk<br />

4<br />

Address<br />

Add<br />

Instruction<br />

memory<br />

Instruction<br />

Instruction<br />

Memory IM<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data1<br />

register 2<br />

Registers Read<br />

data2<br />

Write<br />

register<br />

Write<br />

data<br />

clk<br />

16<br />

Sign<br />

extend<br />

32<br />

Shift<br />

left 2<br />

0<br />

M ux<br />

1<br />

Add Add result<br />

ALU Zero<br />

ALU<br />

result<br />

Data<br />

Memory DM<br />

Address<br />

Data<br />

memory<br />

Write<br />

data<br />

Read<br />

data<br />

M ux<br />

1<br />

0<br />

clk<br />

• Je<strong>de</strong>r Schritt bei Ausführung eines <strong>MIPS</strong>-Befehls wird von links nach<br />

rechts fortgeführt.<br />

• Zwei Ausnahmen: WB-Schritt und Wahl <strong>de</strong>s nächsten PC


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

vom Eintakt-Rechenwerk zum Pipelining<br />

10–21<br />

Program<br />

execution<br />

or<strong>de</strong>r<br />

(in instructions)<br />

Time (in clock cycles)<br />

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7<br />

lw $1, 100($0) IM Reg ALU DM Reg<br />

lw $2, 200($0)<br />

IM Reg ALU DM Reg<br />

lw $3, 300($0)<br />

IM Reg ALU DM Reg<br />

Register lesen (in <strong>de</strong>r 2. Hälfte <strong>de</strong>s Taktzyklus)<br />

Register schreiben (in <strong>de</strong>r 1. Hälfte <strong>de</strong>s Taktzyklus)<br />

• Befehlsspeicher IM wird nur in jeweils einer <strong>de</strong>r 5 S<strong>tu</strong>fen eines Befehls<br />

verwen<strong>de</strong>t, d. h. kann während <strong>de</strong>r übrigen 4 S<strong>tu</strong>fen von an<strong>de</strong>ren<br />

Befehlen verwen<strong>de</strong>t wer<strong>de</strong>n.<br />

• Um <strong>de</strong>n Datenwert eines einzelnen Befehls für die übrigen 4 S<strong>tu</strong>fen zu<br />

erhalten, muss <strong>de</strong>r aus <strong>de</strong>m IM gelesen Wert in einem Register<br />

zwischengespeichert wer<strong>de</strong>n. Pipeline-Register zwischen S<strong>tu</strong>fen.


Instruction<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Einfügen von Pipeline-Registern<br />

M<br />

ux<br />

0<br />

4 Pipeline-Register<br />

puffern die noch benötigten Informationen und <strong>Teil</strong>ergebnisse<br />

10–22<br />

1<br />

IF/ID (64 Bit) ID/EX (128 Bit) EX/MEM (97 Bit) MEM/WB (64 Bit)<br />

Add<br />

PC<br />

posedge<br />

clk<br />

4<br />

Address<br />

Instruction<br />

memory<br />

write on<br />

negedge<br />

clk<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data 1<br />

register 2<br />

Registers Read<br />

data 2<br />

Write<br />

register<br />

Write<br />

data<br />

16<br />

Sign<br />

extend<br />

32<br />

Shift<br />

left 2<br />

0<br />

M<br />

ux<br />

1<br />

Add<br />

result<br />

Add<br />

Zero<br />

ALU ALU<br />

result<br />

Write<br />

data<br />

posedge<br />

clk<br />

Address<br />

Data<br />

memory<br />

Read<br />

data<br />

M<br />

ux<br />

1<br />

0<br />

IF/ID: 64 Bit (32-Bit<br />

für Befehlswort und<br />

32-Bit für erhöhte PC-<br />

Adresse)<br />

Modifiziertes Operationswerk: Nummer <strong>de</strong>s Write-Registers und zu<br />

schreiben<strong>de</strong>r Datenwert kommen aus Pipeline-Register MEM/WB.


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Darstellung <strong>de</strong>r Aktivitäten<br />

• Darstellung <strong>de</strong>r benutzten physikalischen Ressourcen<br />

Program<br />

execution<br />

or<strong>de</strong>r<br />

(in instructions)<br />

lw $10, 20($1)<br />

Time (in clock cycles)<br />

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6<br />

IM Reg ALU DM Reg<br />

10–23<br />

sub $11, $2, $3<br />

not<br />

used<br />

IM Reg ALU DM Reg<br />

Program<br />

execution<br />

or<strong>de</strong>r<br />

(in instructions)<br />

lw $10, $20($1)<br />

sub $11, $2, $3<br />

Time ( in clock cycles)<br />

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6<br />

Instruction<br />

fetch<br />

In dieser Darstellung (multiple-clock-cycle pipeline<br />

diagram) ist <strong>de</strong>r ak<strong>tu</strong>ellste Befehlsschritt rechts unten.<br />

• konventionelle Darstellung mit Namen <strong>de</strong>r einzelnen Schritte:<br />

Instruction<br />

<strong>de</strong>co<strong>de</strong><br />

Instruction<br />

fetch<br />

Execution<br />

Instruction<br />

<strong>de</strong>co<strong>de</strong><br />

Data<br />

access<br />

Execution<br />

Write back<br />

Data<br />

access<br />

Write back


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Betrieb <strong>de</strong>r Pipeline<br />

10–24<br />

• Optimale Nutzung, wenn 5 Befehle gleichzeitig aktiv<br />

in <strong>de</strong>n 5 S<strong>tu</strong>fen<br />

• Anfangsphase: Füllen <strong>de</strong>r Pipeline<br />

• Betriebsphase: Gleichzeitige Bearbei<strong>tu</strong>ng in <strong>de</strong>r<br />

Pipeline (eingeschwungene Pipeline)<br />

• Endphase: Leeren <strong>de</strong>r Pipeline<br />

• Beispiel:<br />

• lw<br />

• sub


Instruction<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Beispiel zur Pipeline (1): lw; sub<br />

10–25<br />

lw$10, 20($1)<br />

Instruction fetch<br />

M<br />

ux<br />

0<br />

In dieser Darstellung (single-cycle pipeline diagram)<br />

ist <strong>de</strong>r ak<strong>tu</strong>ellste Befehlsschritt links.<br />

1<br />

IF/ID ID/EX<br />

EX/MEM MEM/WB<br />

Add<br />

4<br />

Shift<br />

left 2<br />

Add<br />

result<br />

Add<br />

PC<br />

Address<br />

Instruction<br />

memory<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data 1<br />

register 2<br />

Registers Read<br />

data 2<br />

Write<br />

register<br />

Write<br />

data<br />

16<br />

Sign<br />

extend<br />

32<br />

0<br />

M<br />

ux<br />

1<br />

Zero<br />

ALU ALU<br />

result<br />

Address<br />

Write<br />

data<br />

Data<br />

memory<br />

Read<br />

data<br />

M<br />

ux<br />

1<br />

0<br />

clock Clock 11


Instruction<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Beispiel zur Pipeline (2)<br />

10–26<br />

sub $11, $2, $3<br />

Instruction fetch<br />

lw$10, 20($1)<br />

Instruction <strong>de</strong>co<strong>de</strong><br />

M<br />

ux<br />

0<br />

1<br />

IF/ID ID/EX<br />

EX/MEM MEM/WB<br />

Add<br />

4<br />

Shift<br />

left 2<br />

Add<br />

result<br />

Add<br />

PC<br />

Address<br />

Instruction<br />

memory<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data 1<br />

register 2<br />

Registers Read<br />

data 2<br />

Write<br />

register<br />

Write<br />

data<br />

16<br />

Sign<br />

extend<br />

32<br />

0<br />

M<br />

ux<br />

1<br />

Zero<br />

ALU ALU<br />

result<br />

Address<br />

Write<br />

data<br />

Data<br />

memory<br />

Read<br />

data<br />

M<br />

ux<br />

1<br />

0<br />

clock Clock 22


Instruction<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Beispiel zur Pipeline (3)<br />

10–27<br />

sub $11, $2, $3<br />

Instruction <strong>de</strong>co<strong>de</strong><br />

lw$10, 20($1)<br />

Execution<br />

M<br />

ux<br />

0<br />

1<br />

IF/ID ID/EX<br />

EX/MEM MEM/WB<br />

Add<br />

4<br />

Shift<br />

left 2<br />

Add<br />

result<br />

Add<br />

PC<br />

Address<br />

Instruction<br />

memory<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data1<br />

register 2<br />

Registers Read<br />

data2<br />

Write<br />

register<br />

Write<br />

data<br />

16<br />

Sign<br />

extend<br />

32<br />

0<br />

M<br />

ux<br />

1<br />

Zero<br />

ALU ALU<br />

result<br />

Address<br />

Write<br />

data<br />

Data<br />

memory<br />

Read<br />

data<br />

M<br />

ux<br />

1<br />

0<br />

Clock 3<br />

clock 3


Instruction<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Beispiel zur Pipeline (4)<br />

10–28<br />

M<br />

ux<br />

0<br />

1<br />

sub $11, $2, $3<br />

Execution<br />

lw$10, 20($1)<br />

Memory<br />

IF/ID ID/EX<br />

EX/MEM MEM/WB<br />

Add<br />

4<br />

Shift<br />

left 2<br />

Add<br />

result<br />

Add<br />

PC<br />

Address<br />

Instruction<br />

memory<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data1<br />

register 2<br />

Registers Read<br />

data2<br />

Write<br />

register<br />

Write<br />

data<br />

16<br />

Sign<br />

extend<br />

32<br />

0<br />

M<br />

ux<br />

1<br />

Zero<br />

ALU ALU<br />

result<br />

Address<br />

Write<br />

data<br />

Data<br />

memory<br />

Read<br />

data<br />

M<br />

ux<br />

1<br />

0<br />

clock Clock 4


Instruction<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Beispiel zur Pipeline (5)<br />

10–29<br />

M ux<br />

0<br />

1<br />

sub$11, $2, $3<br />

Memory<br />

lw$10, 20($1)<br />

Write back<br />

IF/ID<br />

ID/EX<br />

EX/MEM<br />

MEM/WB<br />

Add<br />

4<br />

Shift<br />

left 2<br />

Add<br />

result<br />

Add<br />

PC<br />

Address<br />

Instruction<br />

memory<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data1<br />

register 2<br />

Registers Read<br />

data2<br />

Write<br />

register<br />

Write<br />

data<br />

16<br />

Sign<br />

extend<br />

32<br />

0<br />

M ux<br />

1<br />

Zero<br />

ALU ALU<br />

result<br />

Address<br />

Write<br />

data<br />

Data<br />

memory<br />

Read<br />

data<br />

M<br />

ux<br />

1<br />

0<br />

clock Clock 55


Instruction<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Beispiel zur Pipeline (6)<br />

10–30<br />

M<br />

ux<br />

0<br />

1<br />

sub $11, $2, $3<br />

Write back<br />

IF/ID<br />

ID/EX<br />

EX/MEM<br />

MEM/WB<br />

Add<br />

4<br />

Shift<br />

left 2<br />

Add<br />

result<br />

Add<br />

PC<br />

Address<br />

Instruction<br />

memory<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data1<br />

register 2<br />

Registers Read<br />

data2<br />

Write<br />

register<br />

Write<br />

data<br />

16<br />

Sign<br />

extend<br />

32<br />

0<br />

M<br />

ux<br />

1<br />

Zero<br />

ALU ALU<br />

result<br />

Address<br />

Write<br />

data<br />

Data<br />

memory<br />

Read<br />

data<br />

M<br />

ux<br />

1<br />

0<br />

clock Clock 66


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Entwicklung <strong>de</strong>r Pipeline-Steuerung<br />

10–31<br />

• Verfahren<br />

• Nicht nur <strong>de</strong>r Datenpfad <strong>de</strong>r Eintakt-Impl. wird in<br />

Pipelines<strong>tu</strong>fen zerlegt,<br />

• auch <strong>de</strong>r Kontrollpfad


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Eintakt-Implementierung + Pipelineregister<br />

10–32<br />

auch die Steuersignale müssen "gepipet" wer<strong>de</strong>n<br />

M ux<br />

0<br />

4<br />

Add<br />

Instruction [31 26]<br />

Control<br />

RegDst<br />

Branch<br />

MemRead<br />

MemtoReg<br />

ALUOp<br />

MemWrite<br />

ALUSrc<br />

RegWrite<br />

Shift<br />

left 2<br />

Add<br />

ALU<br />

result<br />

1<br />

PCSrc<br />

PC<br />

Read<br />

address<br />

Instruction<br />

memory<br />

Instruction<br />

[31– 0]<br />

Instruction [25 21]<br />

Instruction [20 16]<br />

Instruction [15 11]<br />

Instruction [15 0]<br />

0<br />

M ux<br />

1<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data 1<br />

register 2<br />

Registers Read<br />

Write<br />

data 2<br />

register<br />

Write<br />

data<br />

16 32<br />

Sign<br />

extend<br />

0<br />

M<br />

ux<br />

1<br />

ALU<br />

control<br />

Zero<br />

ALU ALU<br />

result<br />

Address<br />

Write<br />

data<br />

Data<br />

memory<br />

Read<br />

data<br />

M ux<br />

1<br />

0<br />

Instruction [5 0]


Instruction<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipeline-Steuersignale<br />

10–33<br />

PCSrc<br />

0<br />

IF/ID ID/EX EX/MEM MEM/WB<br />

4<br />

RegWrite<br />

Shift<br />

left 2<br />

Add<br />

Add<br />

result<br />

Branch<br />

PC<br />

Address<br />

Instruction<br />

memory<br />

M<br />

ux<br />

0<br />

1<br />

Add<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data 1<br />

register 2<br />

Registers Read<br />

Write data 2<br />

register<br />

Write<br />

data<br />

Instruction<br />

[15–0] 16 32<br />

Sign<br />

extend<br />

ALUSrc<br />

0<br />

M<br />

ux<br />

1<br />

6<br />

ALU<br />

control<br />

Zero<br />

ALU ALU<br />

result<br />

Address<br />

Write<br />

data<br />

MemWrite<br />

Data<br />

memory<br />

MemRead<br />

Read<br />

data<br />

MemtoReg<br />

1<br />

M<br />

ux<br />

0<br />

Instruction<br />

[20–16]<br />

Instruction<br />

[15–11]<br />

M<br />

ux<br />

1<br />

ALUOp<br />

RegDst


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipeline-Steuerung<br />

10–34<br />

• Gleiche Be<strong>de</strong>u<strong>tu</strong>ng <strong>de</strong>r Steuersignale wie beim<br />

Eintakt-Rechenwerk<br />

• Gruppierung <strong>de</strong>r Steuersignale nach <strong>de</strong>n 5 S<strong>tu</strong>fen.<br />

Was muss auf welcher S<strong>tu</strong>fe gesteuert wer<strong>de</strong>n?<br />

• IF:<br />

• ID:<br />

• EX:<br />

• MEM:<br />

• WB:<br />

Befehl la<strong>de</strong>n und PC erhöhen<br />

Decodiere Befehl / La<strong>de</strong> Register<br />

Ausführung<br />

Speicher read/write<br />

Zurückschreiben von Daten ins Zielregister<br />

• Durchreichen <strong>de</strong>r Steuersignale bzw. <strong>de</strong>s<br />

Opco<strong>de</strong>s


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipeline-Steuerung<br />

• Gruppierung <strong>de</strong>r Steuersignale nach <strong>de</strong>n letzten 3 Pipelines<strong>tu</strong>fen:<br />

• Durchreichen von Steuersignalen über erweiterte Pipeline-Register wie die Daten:<br />

Execution/Address Calculation<br />

stage control lines<br />

Memory access stage<br />

control lines<br />

Write-back<br />

stage control<br />

lines<br />

Instruction<br />

Reg<br />

Dst<br />

ALU<br />

Op1<br />

ALU<br />

Op0<br />

ALU<br />

Src Branch<br />

Mem<br />

Read<br />

Mem<br />

Write<br />

Reg<br />

write<br />

Mem to<br />

Reg<br />

R-format 1 1 0 0 0 0 0 1 0<br />

lw 0 0 0 1 0 1 0 1 1<br />

sw X 0 0 1 0 0 1 0 X<br />

beq X 0 1 0 1 0 0 0 X<br />

10–35<br />

EX M WB<br />

WB<br />

Instruction<br />

Control<br />

M<br />

WB<br />

EX<br />

M<br />

WB<br />

IF/ID ID/EX EX/MEM MEM/WB


RegWrite<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipeline mit Steuerwerk<br />

• Steuersignale für die<br />

letzten 3 Pipelines<strong>tu</strong>fen<br />

wer<strong>de</strong>n in ID-S<strong>tu</strong>fe erzeugt<br />

und dann durchgereicht.<br />

10–36<br />

PCSrc<br />

M ux<br />

0<br />

1<br />

Control<br />

ID/EX<br />

WB<br />

M<br />

EX/MEM<br />

WB<br />

MEM/WB<br />

IF/ID<br />

EX<br />

M<br />

WB<br />

Add<br />

PC<br />

4<br />

Address<br />

Instruction<br />

memory<br />

Ausführliche Beispiele<br />

für Pipelineabarbei<strong>tu</strong>ng<br />

samt<br />

Steuersignalen bei<br />

Patterson/Hennessy<br />

in Chapter 6.3, 6.4.<br />

Instruction<br />

Read<br />

register 1<br />

Read<br />

Read<br />

data 1<br />

register 2<br />

Registers Read<br />

Write data 2<br />

register<br />

Write<br />

data<br />

Instruction<br />

[15–0]<br />

Instruction<br />

[20–16]<br />

Instruction<br />

[15–11]<br />

16 32<br />

Sign<br />

extend<br />

Shift<br />

left 2<br />

M ux<br />

0<br />

0<br />

M ux<br />

1<br />

6<br />

1<br />

RegDst<br />

Add result<br />

Add<br />

ALU<br />

control<br />

ALUSrc<br />

Zero<br />

ALU ALU<br />

result<br />

ALUOp<br />

Branch<br />

Write<br />

data<br />

MemWrite<br />

Address<br />

Data<br />

memory<br />

Read<br />

data<br />

MemRead<br />

MemtoReg<br />

M<br />

ux<br />

1<br />

0


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Zusammenfassung <strong>Teil</strong> 1<br />

10–37<br />

• Pipeline-Prinzip<br />

• Höherer Durchsatz bei<br />

Datenströmen<br />

• aber: Latenzzeit<br />

• Grenzen:<br />

Registerübernahmezeiten,<br />

ungleiche Sufenlängen<br />

• Anwendungen<br />

• Datenströme<br />

• Arithmetisches Pipelining<br />

• Prozessor-Pipelining<br />

• Befehlspipelining<br />

• Befehlspipelining bei <strong>MIPS</strong><br />

• IF: Instruction Fetch<br />

• ID: Instruction Deco<strong>de</strong> (auch<br />

Register lesen)<br />

• EX:<br />

• Execute<br />

• Speicheradressberechnung<br />

• NextPC-Berechnung<br />

• MEM: Speicher<br />

lesen/schreiben<br />

• WB: Register schreiben<br />

• Pipeline-Steuerung<br />

• Durchreichen <strong>de</strong>s Opco<strong>de</strong>s<br />

und von bereits <strong>de</strong>codierten<br />

Steuersignalen


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

<strong>Teil</strong> 2<br />

10–38<br />

• Pipeline-Probleme<br />

• Allgemein<br />

1. Ressourcen-Konflikt<br />

2. Datenkonflikt<br />

3. Steuerflusskonflikt<br />

• <strong>MIPS</strong><br />

• Datenabhängigkeit<br />

• Datenhür<strong>de</strong><br />

• Software-Lösung<br />

• Forwarding<br />

• Stall<br />

• Steuerflusskonflikt<br />

• Weitere Leis<strong>tu</strong>ngssteigerung


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Pipeline-Probleme (1)<br />

10–39<br />

• In <strong>de</strong>r Pipeline befin<strong>de</strong>n<br />

sich immer bis zu n Befehle<br />

gleichzeitig in Bearbei<strong>tu</strong>ng.<br />

• Die Befehle konkurrieren<br />

um die Ressourcen<br />

• Zwischen <strong>de</strong>n Befehlen gibt<br />

es unterschiedliche<br />

Abhängigkeiten, die bei<br />

<strong>de</strong>r Pipelineverarbei<strong>tu</strong>ng zu<br />

Si<strong>tu</strong>ationen (Hazards,<br />

Hemmnisse, Hür<strong>de</strong>n,<br />

Konflikte) führen, die in <strong>de</strong>r<br />

Hardware o<strong>de</strong>r Software<br />

speziell behan<strong>de</strong>lt wer<strong>de</strong>n<br />

müssen.<br />

• Unterschiedliche<br />

Komplexität <strong>de</strong>r Befehle<br />

erschwert <strong>de</strong>n Pipeline-<br />

Entwurf<br />

• Anzahl <strong>de</strong>r nacheinan<strong>de</strong>r<br />

auszuführen<strong>de</strong>n<br />

Mikrooperationen ist nicht<br />

konstant (variiert je nach<br />

Befehl und kann von Daten<br />

in <strong>de</strong>r Ausführung abhängig<br />

sein)


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Probleme (2)<br />

10–40<br />

• Die Befehlspipelines<strong>tu</strong>fen können nicht immer<br />

genutzt wer<strong>de</strong>n, wegen <strong>de</strong>r möglichen Konflikte<br />

1. Ressourcen-Konflikt (Struk<strong>tu</strong>rkonflikt, struc<strong>tu</strong>ral<br />

Hazard) <br />

2. Datenkonflikt (Data Hazard, Datenhür<strong>de</strong>) <br />

3. Steuerflusskonflikt (Control Hazard,<br />

Sprungabhängigkeit, Procedural Depen<strong>de</strong>ncy)


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

1. Ressourcen-Konflikt<br />

10–41<br />

• entsteht durch die<br />

begrenzten Ressourcen<br />

• Die Anzahl, Art und<br />

Reihenfolge <strong>de</strong>r Zugriffe<br />

auf die Hardware-Einheiten<br />

(wie Speicher, Register,<br />

ALUs, Adressrechenwerk,<br />

MMU, Cache) variiert je<br />

nach Befehl.<br />

• Bei <strong>de</strong>r parallelen<br />

Ausführung in <strong>de</strong>r Pipeline<br />

kommt es zu<br />

Zugriffskonflikten, wenn<br />

nicht genügend viele<br />

Hardware-<br />

Ausführungseinheiten bzw.<br />

Zugriffsmöglichkeiten zur<br />

Verfügung stehen.<br />

• Auflösung: Wartezyklen<br />

(Bubbles)


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

2. Datenhür<strong>de</strong>, Datenkonflikt<br />

10–42<br />

• entsteht durch<br />

Datenabhängigkeiten<br />

• (echte Datenabhängigkeit)<br />

Der Befehl i+k, k>1 benötigt das<br />

Ergebnis <strong>de</strong>s Befehls i, <strong>de</strong>r sich<br />

noch in <strong>de</strong>r Berechnung befin<strong>de</strong>t<br />

(true data <strong>de</strong>pen<strong>de</strong>ncy)<br />

• Auflösung: Wartezyklen,<br />

Forwarding<br />

• (falsche Datenabhängigkeit,<br />

name <strong>de</strong>pen<strong>de</strong>ncy)<br />

• entsteht nur durch Umordnung<br />

<strong>de</strong>r Ausführungsreihenfolge<br />

(out-of-or<strong>de</strong>r execution) bei<br />

mo<strong>de</strong>rnen Prozessoren, dabei<br />

können sich Befehle überholen.<br />

Ist bei <strong>de</strong>m <strong>MIPS</strong> nicht<br />

möglich. Die Konflikte sind<br />

• Zielregisterkonflikt (zwei<br />

Befehle wollen gleichzeitig in ein<br />

Zielregister schreiben)<br />

• Gegenabhängigkeit (ein<br />

überholen<strong>de</strong>r Befehl will schon<br />

ein Da<strong>tu</strong>m än<strong>de</strong>rn, dass noch<br />

zur Berechnung benötigt wird)<br />

• Auflösung: Benutzung von<br />

ver<strong>de</strong>ckten Renaming-<br />

Registern


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

3. Steuerflusskonflikt<br />

• entsteht durch eine verzögerte<br />

Ausführung <strong>de</strong>s Sprungs<br />

• weil das Sprungziel erst noch<br />

berechnet wer<strong>de</strong>n muss (z. B.<br />

relativer Sprung, Branch).<br />

• weil auf die Berechnung <strong>de</strong>r<br />

Sprungbedingung noch gewartet<br />

wer<strong>de</strong>n muss.<br />

• Die Entscheidung zu Auswahl<br />

<strong>de</strong>s nächsten Befehls<br />

wird meist getroffen, bevor das<br />

Sprungziel feststeht, um<br />

Wartezyklen zu vermei<strong>de</strong>n. Es ist<br />

<strong>de</strong>shalb nicht sicher, dass <strong>de</strong>r in die<br />

Pipeline gefütterte Befehl wirklich<br />

als nächster ausgeführt wer<strong>de</strong>n<br />

sollte.<br />

• Auflösung<br />

10–43<br />

• Die Befehle, die hinter <strong>de</strong>m<br />

Sprung stehen (Delayed-<br />

Slot-Befehle) wer<strong>de</strong>n schon<br />

in die Pipeline geholt<br />

• entwe<strong>de</strong>r wer<strong>de</strong>n sie bis<br />

zum En<strong>de</strong> ausgeführt<br />

• o<strong>de</strong>r sie wer<strong>de</strong>n annulliert<br />

(Wirkung: Warten)<br />

• Es wer<strong>de</strong>n die Befehle in die<br />

Pipeline geholt, die entwe<strong>de</strong>r<br />

hinter <strong>de</strong>m Sprung stehen<br />

o<strong>de</strong>r am Sprungziel. Auf<br />

Grund <strong>de</strong>r Vergangenheit<br />

wird <strong>de</strong>r wahrscheinlichere<br />

Weg eingeschlagen<br />

(spekulative Ausführung).


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

<strong>MIPS</strong>: Datenabhängigkeit<br />

10–44<br />

• Beispiel:<br />

sub $2, $1, $3 // 10 -20<br />

and $12, $2, $5 //soll <strong>de</strong>n neuen Wert benutzen<br />

or $13, $6, $2<br />

add $14, $2, $2<br />

sw $15, 100($2)<br />

• sub berechnet $2, wird in <strong>de</strong>n Folgebefehlen<br />

verwen<strong>de</strong>t (gelesen).


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Datenabhängigkeit<br />

Time (in clock cycles)<br />

Value of CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9<br />

register $2: 10 10 10 10 10/– 20 – 20 – 20 – 20 – 20<br />

Program<br />

execution<br />

or<strong>de</strong>r<br />

(in instructions)<br />

sub $2, $1, $3<br />

IM<br />

Reg<br />

DM<br />

1.Phase: Write<br />

2.Phase: Read<br />

Reg<br />

10–45<br />

and $12, $2, $5<br />

or $13, $6, $2<br />

IM<br />

inkorrekte<br />

Werte von<br />

$2<br />

Reg<br />

DM Reg<br />

IM Reg DM Reg<br />

add $14, $2, $2<br />

sw $15, 100($2)<br />

korrekte Werte<br />

von $2<br />

IM Reg<br />

DM Reg<br />

IM Reg<br />

DM Reg<br />

• Abhängige Schritte sind durch Pfeile gekennzeichnet.<br />

• Der korrekte Wert von $2 liegt erst nach <strong>de</strong>r 1. Phase (Register<br />

Schreiben) von Zyklus 5 vor.<br />

• Abhängigkeiten, die in <strong>de</strong>r Zeit „rückwärts“ zeigen, sind Datenhür<strong>de</strong>n<br />

(data hazards).


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Datenhür<strong>de</strong>: Software-Lösung<br />

10–46<br />

• Compiler löst bei <strong>de</strong>r Übersetzung in die Maschinensprache<br />

(Assemblersprache) solche Hür<strong>de</strong>n auf.<br />

• z. B. durch Einfügen zweier unabhängiger Operationen:<br />

sub $2, $1, $3<br />

nop<br />

nop<br />

and $12, $2, $5<br />

or $13, $6, $2<br />

add $14, $2, $2<br />

sw $15, 100($2)<br />

• nop (no operation) modifiziert we<strong>de</strong>r Daten noch schreibt<br />

es ein Ergebnis.<br />

• Problem: Bremst das Ganze beträchtlich!<br />

(Und tritt zu häufig auf.)<br />

• Besser: Hardware-Lösung Forwarding


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Datenhür<strong>de</strong>: Vorreichen (Forwarding)<br />

Time (in clock cycles)<br />

CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9<br />

Value of register $2 : 10 10 10 10 10/– 20 – 20 – 20 – 20 – 20<br />

Value of EX/MEM : X X X – 20 X X X X X<br />

Value of MEM/WB : X X X X – 20 X X X X<br />

10–47<br />

Program<br />

execution or<strong>de</strong>r<br />

(in instructions)<br />

sub $2, $1, $3<br />

and $12, $2, $5<br />

IM<br />

Reg<br />

IM<br />

Reg<br />

A<br />

EX/MEM<br />

DM<br />

B<br />

MEM/WB<br />

Reg<br />

DM<br />

Reg<br />

vorher ohne Forwarding<br />

mit Forwarding<br />

or $13, $6, $2<br />

add $14, $2, $2<br />

IM Reg DM Reg<br />

C<br />

IM Reg<br />

DM Reg<br />

sw $15, 100($2)<br />

IM Reg<br />

DM Reg<br />

• Direkte Verwendung bereits verfügbarer Zwischenergebnissen von<br />

Pipeline-Registern ohne die Speicherung im Registersatz abzuwarten.<br />

• Vorreichen zur ALU (von EX/MEM bzw. MEM/WB) A, B<br />

• Vorreichen durch Registersatz: Schreiben/Lesen auf gleichem Register im<br />

gleichen Zyklus (z. B. Zyklus 5 im Bild, 1. Phase: Schreiben, 2. Phase: Lesen) C


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Hardware-Erweiterung fürs Vorreichen<br />

ID/EX<br />

EX/MEM<br />

MEM/WB<br />

Load<br />

10–48<br />

Registers<br />

ALU<br />

Data<br />

memory<br />

M ux<br />

ohne Vorreichen<br />

Folgebefehl benutzt<br />

sofort Ergebnis<br />

ID/EX<br />

mit Vorreichen<br />

EX/MEM<br />

MEM/WB<br />

M ux<br />

Registers<br />

ForwardA<br />

ALU<br />

M ux<br />

Data<br />

memory<br />

M ux<br />

Rs<br />

Rt<br />

Rt<br />

Rd<br />

ForwardB<br />

M ux<br />

Forwarding<br />

unit<br />

EX/MEM.RegisterRd<br />

MEM/WB.RegisterRd


Instruction<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Hardware-Erweiterung fürs Vorreichen<br />

10–49<br />

zusätzliche / erweiterte Multiplexer<br />

ID/EX<br />

WB<br />

EX/MEM<br />

Control<br />

M<br />

WB<br />

MEM/WB<br />

IF/ID<br />

EX<br />

M<br />

WB<br />

M<br />

ux<br />

PC<br />

Instruction<br />

memory<br />

Registers<br />

ALU<br />

Data<br />

memory<br />

M<br />

ux<br />

M<br />

ux<br />

IF/ID.RegisterRs<br />

Rs<br />

IF/ID.RegisterRt<br />

Rt<br />

IF/ID.RegisterRt<br />

IF/ID.RegisterRd<br />

Rt<br />

Rd<br />

M<br />

ux<br />

EX/MEM.RegisterRd<br />

Forwarding<br />

unit<br />

MEM/WB.RegisterRd


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Nicht immer kann man vorreichen<br />

Time (in clock cycles)<br />

Program CC 1 CC 2 CC 3 CC 4 CC 5 CC 6<br />

execution<br />

or<strong>de</strong>r<br />

(in instructions)<br />

lw $2, 20($1) IM Reg<br />

DM Reg<br />

10–50<br />

CC 7 CC 8 CC 9<br />

and $4, $2, $5<br />

IM<br />

Reg<br />

DM<br />

Reg<br />

or $8, $2, $6<br />

IM Reg DM Reg<br />

add $9, $4, $2<br />

IM Reg<br />

DM Reg<br />

slt $1, $6, $7<br />

IM Reg<br />

DM Reg<br />

• lw kann immer noch eine Datenhür<strong>de</strong> verursachen.<br />

• Beispiel: Nachfolgen<strong>de</strong>r Befehl versucht, das Register zu lesen, <strong>de</strong>ssen<br />

Wert gera<strong>de</strong> aus <strong>de</strong>m Speicher gela<strong>de</strong>n wird. Das Lesen muss<br />

abgewartet wer<strong>de</strong>n (1 Takt Verzögerung).


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

lw$2, 20($1)<br />

Lösung: Anhalten (Stall)<br />

Program Time(inclock cycles)<br />

execution<br />

or<strong>de</strong>r<br />

(ininstructions)<br />

CC1 CC2 CC3 CC4 CC5 CC6<br />

IM<br />

Reg<br />

DM<br />

Reg<br />

10–51<br />

CC7 CC8 CC9 CC10<br />

and$4, $2, $5<br />

IM<br />

Reg<br />

Reg<br />

DM<br />

Reg<br />

or $8, $2, $6<br />

add$9, $4, $2<br />

IM<br />

IM Reg DM Reg<br />

bubble<br />

IM Reg<br />

DM Reg<br />

slt $1, $6, $7<br />

IM Reg<br />

DM Reg<br />

• Anhalten (stall) <strong>de</strong>r Pipeline durch Belassen <strong>de</strong>s Befehls im gleichen Abschnitt,<br />

d. h. Einfügen eines nop Steuerbefehls ab <strong>de</strong>m EX-Abschnitt (EX, WB, MEM-<br />

Steuersignale auf 0).<br />

• Verhin<strong>de</strong>rn, dass PC fortgeschrieben und das ID-Register geän<strong>de</strong>rt wird.


Instruction<br />

IF/IDWrite<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Anhalten <strong>de</strong>r Pipeline<br />

10–52<br />

• Es wird eine Hazard Detection Unit benötigt, um <strong>de</strong>n Folgebefehl rechtzeitig<br />

„aufzuhalten“. Sie erkennt die Befehlsfolge (lw $2.. , and .. $2 ..)<br />

1 Takt warten<br />

and<br />

Hazard<br />

<strong>de</strong>tection<br />

unit<br />

lw<br />

ID/EX.MemRead<br />

ID/EX<br />

WB<br />

EX/MEM<br />

IF/ID<br />

Control<br />

0<br />

M<br />

ux<br />

M<br />

EX<br />

WB<br />

M<br />

MEM/WB<br />

WB<br />

PCWrite<br />

M<br />

ux<br />

PC<br />

Instruction<br />

memory<br />

Registers<br />

ALU<br />

Data<br />

memory<br />

M<br />

ux<br />

M<br />

ux<br />

M<br />

ux<br />

IF/ID.RegisterRs<br />

IF/ID.RegisterRt<br />

IF/ID.RegisterRt<br />

IF/ID.RegisterRd<br />

Rt<br />

Rd<br />

EX/MEM.RegisterRd<br />

ID/EX.RegisterRt<br />

$2<br />

Rs<br />

Rt<br />

Forwarding<br />

unit<br />

MEM/WB.RegisterRd


Instruction<br />

MemWrite<br />

<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

<strong>MIPS</strong>: Steuerflusskonflikt<br />

10–53<br />

PCSrc<br />

Sprungziel<br />

M ux<br />

0<br />

1<br />

2. S<strong>tu</strong>fe<br />

Control<br />

ID/EX<br />

WB<br />

M<br />

EX/MEM<br />

WB<br />

4. S<strong>tu</strong>fe<br />

MEM/WB<br />

IF/ID<br />

EX<br />

M<br />

WB<br />

4<br />

Add<br />

Problem: Sprungziel ist erst in <strong>de</strong>r 4.<br />

Read<br />

S<strong>tu</strong>fe bekannt. PC Address 3 Delayed-Slot-Befehle<br />

register1 Read<br />

Read data1<br />

Instruction<br />

register2<br />

befin<strong>de</strong>n sich schon<br />

memory<br />

in <strong>de</strong>r Pipeline. Registers<br />

Write<br />

Read<br />

register<br />

data2<br />

Write<br />

data<br />

• 1. Lösung:<br />

• Anhalten (stall) bis Sprungziel ermittelt,<br />

Instruction<br />

[15–0] 16 32<br />

Sign<br />

extend<br />

Instruction<br />

• Annahme: kein Sprung (Branch [20–16] not<br />

• 2. Lösung:<br />

taken), Folgebefehle (Delayed-<br />

Instruction<br />

[15–11]<br />

Slot-Befehle) starten<br />

• Falls nachträglich<br />

Sprungbedingung=true erkannt<br />

wird: DS-Befehle ignorieren<br />

RegWrite<br />

Add result<br />

Add<br />

Shift<br />

left 2<br />

• 3. Lösung:<br />

ALUSrc<br />

M ux<br />

0<br />

0<br />

M ux<br />

1<br />

6<br />

1<br />

RegDst<br />

ALUOp<br />

Branch<br />

• Dynamische Zero Sprungvorhersage<br />

ALU ALU<br />

anhand result <strong>de</strong>r Vergangenheit<br />

• 4. Lösung:<br />

Address<br />

Data<br />

memory<br />

Write<br />

data<br />

Read<br />

data<br />

• Sprungzielberechnung von 4.<br />

ALU<br />

control<br />

MemRead<br />

S<strong>tu</strong>fe auf 2. S<strong>tu</strong>fe vorziehen<br />

MemtoReg<br />

M ux<br />

1<br />

0


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Steuerflusskonflikt bei bedingter Verzweigung (1)<br />

10–54<br />

Program<br />

execution<br />

or<strong>de</strong>r<br />

(in instructions)<br />

Time (in clock cycles)<br />

CC 1<br />

CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9<br />

40 beq $1, $3, 7<br />

IM<br />

Reg<br />

DM<br />

Reg<br />

44 and $12, $2, $5<br />

+1<br />

IM<br />

Reg<br />

DM<br />

Reg<br />

48 or $13, $6, $2<br />

+1<br />

IM<br />

Reg<br />

DM<br />

Reg<br />

52 add $14, $2, $2<br />

Delayed-Slot-<br />

Befehle<br />

+1<br />

IM<br />

Reg<br />

DM<br />

Reg<br />

72 lw $4, 50($7)<br />

Sprungziel erst<br />

nach 3 Takten bekannt<br />

+1<br />

?<br />

IM<br />

Reg<br />

DM<br />

Reg<br />

• Problem: 3 Delayed-Slot-Befehle befin<strong>de</strong>n sich schon in <strong>de</strong>r Pipeline.<br />

• 1. Lösung: Anhalten (Beispiel: 3 Anhalte-(stall)-Zyklen) bis Sprungziel ermittelt,<br />

um die Ausführung <strong>de</strong>r Delayed-Slot-Befehle zu verhin<strong>de</strong>rn!


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Steuerflusskonflikt bei bedingter Verzweigung (2)<br />

10–55<br />

not<br />

taken<br />

40 beq $1, $3, 7<br />

44 and $12, $2, $5<br />

48 or $13, $6, $2<br />

52 add $14, $2, $2<br />

72 lw $4, 50($7)<br />

taken<br />

Delayed-Slot-<br />

Befehle<br />

• 2. Lösung:<br />

Annahme kein Sprung (Branch not<br />

taken), Folgebefehle (Delayed-Slot-<br />

Befehle) starten;<br />

bei nachträglicher Erkennung eines<br />

Sprunges (taken) <br />

• (a) DS-Befehle regulär been<strong>de</strong>n. Die<br />

Delayed-Slot-Befehle wer<strong>de</strong>n immer<br />

ausgeführt und können ggf. eine<br />

sinnvolle Berechnung (unabh. vom<br />

Sprung durchführen). Auffüllung mit<br />

nops, falls keine sinnvollen Aktionen<br />

möglich.<br />

• o<strong>de</strong>r (b) <strong>de</strong>r alte Zustand vor <strong>de</strong>m<br />

Sprung wird restauriert. Wirkung <strong>de</strong>r DS-<br />

Befehle rückgängig machen.


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Steuerflusskonflikt bei bedingter Verzweigung (3)<br />

10–56<br />

40 beq $1, $3, 7<br />

Vorhersage<br />

44 and $12, $2, $5<br />

48 or $13, $6, $2<br />

52 add $14, $2, $2<br />

Delayed-Slot-<br />

Befehle<br />

• 3. Lösung: Der dynamischen<br />

Programmablaufs wird verfolgt und die<br />

Sprünge in <strong>de</strong>r Vergangenheit wer<strong>de</strong>n<br />

aufgezeichnet. Aus dieser Information wird<br />

eine Sprungvorhersage getroffen. Dadurch<br />

wird mit hoher Wahrscheinlichkeit <strong>de</strong>r<br />

richtige Weg eingeschlagen.<br />

72 lw $4, 50($7)


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Steuerung mit Verkürzung <strong>de</strong>r Verzweigung<br />

10–57<br />

• 4. Lösung: Sprungzielberechnung von 4. S<strong>tu</strong>fe auf 2. S<strong>tu</strong>fe vorziehen und<br />

Hardware zum Löschen (flush) <strong>de</strong>s bereits geholten Befehls (steht vor <strong>de</strong>m IF/ID-<br />

Register) durch Überschreiben mit NOPs.<br />

IF.Flush<br />

Unbedingtem Sprung:<br />

Sprungziel bekannt<br />

1 nop bubble<br />

IF/ID<br />

Hazard<br />

<strong>de</strong>tection<br />

unit<br />

Control<br />

Sprungbedingung wird schon in <strong>de</strong>r<br />

Decodierphase ausgewertet<br />

(Vergleicher)<br />

1 nop bubble<br />

0<br />

Bedingter Sprung<br />

ID/EX<br />

WB<br />

M ux M<br />

EX<br />

Bedingter Sprung<br />

Vorgänger-Befehl än<strong>de</strong>rt einen<br />

Vergleichsoperan<strong>de</strong>n,auf <strong>de</strong>n gewartet<br />

wer<strong>de</strong>n muss.<br />

2 nop bubbles<br />

EX/MEM<br />

WB<br />

M<br />

MEM/WB<br />

WB<br />

4<br />

M ux<br />

PC<br />

Instruction<br />

memory<br />

M ux<br />

=<br />

Shift<br />

left 2<br />

Registers<br />

ALU<br />

Data<br />

memory<br />

M ux<br />

M ux<br />

M ux<br />

Sign<br />

extend<br />

NOP<br />

Forwarding<br />

unit


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Weitere Leis<strong>tu</strong>ngssteigerung (1)<br />

• Compiler: Vermei<strong>de</strong>n <strong>de</strong>s Anhaltens <strong>de</strong>r Pipeline von Compilerseite durch<br />

Umordnung von Befehlen (Lösung 2 a)<br />

• Superpipelining: Längere Fließbän<strong>de</strong>r mit 8 und mehr S<strong>tu</strong>fen<br />

• Superskalare Prozessoren:<br />

• In je<strong>de</strong>m Taktzyklus Start mehrerer Befehle gleichzeitig (z. B. 2 bis 8).<br />

• Voraussetzung: Zusätzliche Hardware-Einheiten notwendig zur Vermeidung<br />

von Ressourcenkonflikten. Z. B. Start zweier ALU-Operationen erfor<strong>de</strong>rt zwei<br />

ALUs.<br />

• z. B. superskalare Version von <strong>MIPS</strong><br />

• Gleichzeitig eine ALU- o<strong>de</strong>r Verzweigung sowie eine La<strong>de</strong>- o<strong>de</strong>r<br />

Speicheroperation aktivierbar.<br />

• In einem 64 Bit Befehlsregister können zwei aufeinan<strong>de</strong>r folgen<strong>de</strong> Befehle<br />

gepuffert und dann parallel <strong>de</strong>codiert wer<strong>de</strong>n.<br />

10–58


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Weitere Leis<strong>tu</strong>ngssteigerung (2)<br />

10–59<br />

Dynamisches Pipelining (dynamic pipeline scheduling):<br />

• Hardware zum Aufspüren und Abarbeiten unabhängiger Befehle<br />

• in-or<strong>de</strong>r issue: Befehle wer<strong>de</strong>n in Programmordnung aktiviert<br />

• out-of-or<strong>de</strong>r execution: Ausführung in unabhängigen funktionalen Einheiten<br />

mit Befehlspuffern (reservation stations) und Ergebnispuffern<br />

• in-or<strong>de</strong>r commit: fertig bearbeitete Befehle wer<strong>de</strong>n wie<strong>de</strong>r in die<br />

Programmreihenfolge gebracht (Schreiben in die Architek<strong>tu</strong>r-Register o<strong>de</strong>r<br />

Speicher).<br />

Instruction fetch<br />

and <strong>de</strong>co<strong>de</strong> unit<br />

In-or<strong>de</strong>r issue<br />

Reservation<br />

station<br />

Reservation<br />

station<br />

…<br />

Reservation<br />

station<br />

Reservation<br />

station<br />

Functional<br />

units<br />

Integer<br />

Integer<br />

…<br />

Floating<br />

point<br />

Load/<br />

Store<br />

Out-of-or<strong>de</strong>r execute<br />

Commit<br />

unit<br />

In-or<strong>de</strong>r commit


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Aus <strong>de</strong>r Technik<br />

10–60<br />

• Alle mo<strong>de</strong>rnen Prozessoren sind äußerst komplex.<br />

• Compaq/DEC Alpha 21264:<br />

• 9-s<strong>tu</strong>fige Pipeline, 6 Befehle gleichzeitig<br />

• Intel/HP Itanium:<br />

• bis zu 6 IA-64-Befehle gleichzeitig<br />

• DEC Alpha 21164, PowerPC G3, <strong>MIPS</strong> R12000, UltraSparc-<br />

II, HP PA-8500:<br />

• bis zu 4 Befehle pro Takt<br />

• PowerPC, Pentium:<br />

• Sprungvorhersage-Tabelle<br />

• Trace-Cache: Befehlsgruppen wer<strong>de</strong>n dynamisch in Mikrobefehle<br />

zur Laufzeit übersetzt. Bei erneuter Ausführung wer<strong>de</strong>n die<br />

Mikrobefehle benutzt.<br />

• Ak<strong>tu</strong>elle Prozessortechnik siehe Kap. 12, Multicores,<br />

Manycores


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Zusammenfassung <strong>Teil</strong> 2<br />

10–61<br />

• Konflikte<br />

• Ressourcen-Konflikt Bubbles<br />

• Datenkonflikte Bubbles, Forwarding<br />

• Steuerflusskonflikt<br />

• Abwarten bis Sprungbedingung und Sprungziel berechnet<br />

• Delayed-Slot-Befehle befin<strong>de</strong>n sich in <strong>de</strong>r Pipeline<br />

• Auflösung <br />

• Software NOPs<br />

• Stall (Bubbles)<br />

• Forwarding<br />

• Sprungvorhersage


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

Ergänzung: lw add mit Datenabhängigkeit<br />

10–62 2<br />

lw


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

10–63 3<br />

lw<br />

Reg<br />

read<br />

and


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

10–64 4<br />

lw<br />

Reg<br />

read<br />

ALU<br />

and<br />

Reg<br />

read<br />

Hazard<br />

Detect


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

10–65 5<br />

lw<br />

Reg<br />

read<br />

ALU<br />

M<br />

read<br />

and<br />

Reg<br />

read<br />

Reg<br />

read<br />

bubble<br />

Hazard<br />

Detect


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

10–66 6<br />

lw<br />

Reg<br />

read<br />

ALU<br />

M<br />

read<br />

Reg<br />

write<br />

and<br />

Reg<br />

read<br />

Reg<br />

read<br />

ALU<br />

Hazard<br />

Detect


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

10–67 7<br />

lw<br />

Reg<br />

read<br />

ALU<br />

M<br />

read<br />

Reg<br />

write<br />

and<br />

Reg<br />

read<br />

Reg<br />

read<br />

ALU<br />

Hazard<br />

Detect


<strong>Technische</strong> Grundlagen <strong>de</strong>r Informatik 2, SS 09, R. Hoffmann, TUD<br />

10–68 8<br />

lw<br />

Reg<br />

read<br />

ALU<br />

M<br />

read<br />

Reg<br />

write<br />

and<br />

Reg<br />

read<br />

Reg<br />

read<br />

ALU<br />

Reg<br />

write<br />

Hazard<br />

Detect

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!