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
© Copyright 2024 ExpyDoc