Lernziele
In dieser Aufgabe …
- simulieren die Studierenden praktisch die Auswirkungen von Hazards.
- nutzen die Studierenden ihre Kenntnisse der Pipeline zur Platzierung von NOPs.
Zum Testen Ihrer RISC-V-Umsetzung verwenden Sie folgenden Assemblercode.
addi x11, x12, 5
add x13, x11, x12
addi x14, x11, 15
Beim Ausführen fällt Ihnen allerdings auf, dass Sie zwar Pipelining (mit der bekannten fünfstufigen Pipeline), aber noch keine Hazard-Kontrolle eingebaut haben. Wer für ihr System programmiert, muss sich also selbst darum kümmern, potenzielle Hazards zu vermeiden.
Gehen Sie davon aus, dass das Register x11 mit 11 und das Register x12 mit
22 initialisiert worden ist.
Nutzen Sie QtRVSim als Referenzarchitektur (fünfstufige Pipeline, keine Hazard-Behandlung, kein Cache).
Diese Aufgabe stammt aus Kapitel 4, Aufgaben 4.18 - 4.20 von "Computer Organization and Design. The Hardware/Software Interface. RISC-V Edition" (Patterson & Hennessy, 2018).
Level 3: Anwenden
Welche finalen Werte haben die Register x13 und x14 unter der
Annahme, dass Hazards nicht behandelt werden?
Die erste Instruktion schreibt erst im fünften Taktzyklus (in Stufe WB = Write
Back) das berechnete Ergebnis in das Zielregister x11. Da allerdings die
beiden anderen Instruktionen bereits davor auf x11 zugreifen (in Stufe ID =
Instruction Decode), verwenden diese noch den Initialwert von 11.
Im Ergebnis gilt darum x13 = 33 und x14 = 26.
addi x11, x12, 5
add x13, x11, x12
addi x14, x11, 15| Zyklus/Instruktion | Zeile 1 | Zeile 2 | Zeile 3 |
|---|---|---|---|
| 1 | IF | ||
| 2 | ID (x12, 5) | IF | |
| 3 | EX | ID (x11, x12) | IF |
| 4 | MEM | EX | ID (x11, 15) |
| 5 | WB (x11) | MEM | EX |
| 6 | WB (x13) | MEM | |
| 7 | WB (x14) |
Level 1: Wissen
Sie erweitern ihren Assemblercode um die folgende Zeile:
add x15, x11, x11
Welchen Wert hat x15 nach dem erneuten Ausführen des Programms?
Die erste Instruktion schreibt den Zielwert in das Register x11 (Stufe WB)
im fünften Taktzyklus. Im selben Zyklus liest die vierte Instruktion die Werte
der Input-Register (Stufe ID).
Da im selben Taktzyklus Write Back vor Instruction Decode ausgeführt
wird, kann die Instruktion den beschriebenen Wert sofort wieder auslesen und das
Ergebnis ist korrekt: x15 = 27 + 27 = 54
addi x11, x12, 5
add x13, x11, x12
addi x14, x11, 15
add x15, x11, x11| Zyklus/Instruktion | Zeile 1 | Zeile 2 | Zeile 3 | Zeile 4 |
|---|---|---|---|---|
| 1 | IF | |||
| 2 | ID (x12, 5) | IF | ||
| 3 | EX | ID (x11, x12) | IF | |
| 4 | MEM | EX | ID (x11, 15) | IF |
| 5 | WB (x11) | MEM | EX | ID (x11, x11) |
| 6 | WB (x13) | MEM | EX | |
| 7 | WB (x14) | MEM | ||
| 8 | WB (x15) |
Level 3: Anwenden
Aus der Vorlesung wissen Sie, dass Data Hazards unter anderem vermieden werden
können, wenn die betroffenen Instruktionen durch eine oder mehrere
nop-Instruktionen verzögert werden.
Um ihre RISC-V-Umsetzung ausgiebig zu testen, haben Sie aus dem vorherigen Code
die vierte Instruktion ausgetauscht.
Fügen Sie Ihrem Code (möglichst wenige) nop-Instruktionen hinzu, sodass
alle Werte wie erwartet berechnet werden.
addi x11, x12, 5
add x13, x11, x12
addi x14, x11, 15
sub x15, x13, x12
Wir verzögern die Instruktionen so, dass ein Register frühestens in demselben Taktzyklus ausgelesen werden kann, in dem es durch eine vorherige Instruktion beschrieben wird (siehe Teilaufgabe b).
Effektiv bedeutet das, dass zwischen einer Schreiboperation und einer Leseoperation mindestens zwei Instruktionen liegen müssen.
addi x11, x12, 5
nop
nop
add x13, x11, x12
addi x14, x11, 15
nop
add x15, x13, x12
Level 1: Wissen
Zusatzaufgabe: Bestimmen Sie die im folgenden Assemblercode auftretenden Data Hazards. Geben Sie für jeden Hazard die beteiligten Zeilen und das betroffene Register an.
addi x1, x0, 1
addi x2, x0, 2
add x3, x1, x2
sub x2, x1, x3
Diese Aufgabe war Teil der Klausur im Sommersemester 2024 (Zweittermin).
x1 wird in Zeile 3 gelesen, noch bevor es in Zeile 1 beschrieben wird.x2 wird in Zeile 3 gelesen, noch bevor es in Zeile 2 beschrieben wird.x3 wird in Zeile 4 gelesen, noch bevor es in Zeile 3 beschrieben wird.In dieser Aufgabe …