Folien

Einführung in die Systemprogrammierung
Pipelining mit Daten-Hazards
Prof. Dr. Christoph Reichenbach
Fachbereich 12 / Institut für Informatik
11. Mai 2015
Hazards
[0000] addi $t0, $t0, 1
[0004] add $t1, $t0, $t1
Pipelining nicht möglich: [0004] benötigt $t0 nach [0000]!
I
I
I
I
Hazard: Pipeline-parallele Ausführung durch
Abhängigkeiten blockiert
RAW hazard (read after write):
Lesebefehl muß auf Schreibbefehl warten (s.o.)
WAR hazard (write after read ): Schreibbefehl muß auf
Lesebefehl warten
(Nur bei Systemen mit Schreibkomponente vor
Lesekomponente)
WAW hazard (write after write): Schreibbefehl muß auf
Schreibbefehl warten
(Nur bei Systemen mit mehreren Schreibe-Komponenten)
Pipeline-Blasen
[0000]
[0004]
[0008]
[000C]
[0010]
addi
add
lw
lw
j
$t0,
$t1,
$t2,
$t3,
loop
$t0, 1
$t0, $t1
0($s0)
4($s0)
IL
ID
AUS
t=0 [0000]
t=1 [0004] [0000]
t=2 [0008] [0004] [0000]
t=3 [0008] [0004]
t=4 [0008] [0004]
DS
RS
Änderung an $t0 wird in 0004
gelesen: Müssen warten!
[0000]
[0000] RS schreibt in 1. Hälfte des Zyklus, ID liest in 2. Hälfte
t=5 [000C] [0008] [0004]
t=6 [0010] [000C] [0008] [0004]
t=7
[0010] [000C] [0008] [0004]
Durchreichen von Registern
[0000] addi $t0, $t0, 1
[0004] add $t1, $t0, $t1
[0008] lw $t2, 0($s0)
[000C] lw $t3, 4($s0)
[0010] j loop
Zwischenregister: Können Zwischenergebnisse durchreichen
Durchreichen
PSp
Reg
IL
ID
ALU
$t0
AUS
DSp
Reg
DS
RS
Keine Pipeline-Blase in diesem Beispiel!
Durchreichen von Registern: Grenzen
I
Auch mit Durchreichen Verzögerungen möglich
Beispiel: ALU hängt von Speicher ab
[0000]
[0004]
lw $t0, 0($s0)
add $t1, $t0, $t1
Durchreichen
PSp
Reg
IL
ID
ALU
I
AUS
DSp
Reg
DS
RS
Zusammenfassung
I
I
Daten-Abhängigkeiten zwischen Befehlen können zu
Blasen in der Pipeline führen
Teilweise Lösung durch:
I
I
I
Arten von Daten-Hazards:
I
I
Zwischenregister
Durchreichen von Daten
RAW, WAR, WAW
Reihenfolge von Instruktionen hat oft Einfluß auf
Performanz