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?
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?
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
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 …