Lernziele
In dieser Aufgabe …
- wiederholen die Studierenden das Konzept der Pipeline-Stufen.
- berechnen die Studierenden einfache Ausführungszeiten.
- betrachten die Studierenden Hazards und ihre mögliche Auflösung.
Folgende Instruktionen sollen auf einem RISC-V-Rechner mit fünfstufiger Pipeline ausgeführt werden.
addi a0, zero, 2
addi a1, a0, 1
sw a1, 0(a5)
addi a1, zero, 42Level 1: Wissen
Nennen und erläutern Sie kurz die fünf aus der Vorlesung bekannten Pipeline-Stufen in der Reihenfolge, in der die Instruktionen durch die Pipeline wandern.

Level 1: Wissen
Wie lange dauert die Ausführung der gegebenen Instruktionen bei sequenzieller Bearbeitung? Welche Zeitersparnis ergibt die fünfstufige Pipeline ohne Hazardbehandlung?

Level 3: Anwenden
Untersuchen Sie den gegebenen Code auf mögliche Hazards. Geben Sie jeweils die betroffenen Zeilen und Register an.
Es treten zwei Hazards auf:
| Zeilen | Register | Typ |
|---|---|---|
| 1–2 | a0 | Read after write |
| 2–3 | a1 | Read after write |
Level 3: Anwenden
Mit wie vielen NOP-Instruktionen könnte ein Compiler die Hazards der vorherigen Aufgabe auflösen? Wie wirkt sich dies auf die Ausführungszeit des Codes aus?
Je zwei NOP-Instruktionen genügen, um die Hazards aufzulösen. Die Ausführungszeit beträgt damit 12 Taktzyklen.
Level 3: Anwenden
Kennen Sie eine passende Alternative zur Behandlung dieser Hazards mittels NOP-Instruktionen? Wie könnte dies in diesem Beispiel umgesetzt werden?
Sogenanntes Forwarding kann Ergebnisse einer vorherigen Instruktion der nächsten zur Verfügung stellen. Wenn wie in diesem Beispiel das Ergebnis nach der Pipeline-Stufe Execute der nächsten Instruktion zur Verfügung stünde, könnte diese es schon in der eigenen Execute-Phase verwenden. Idealerweise könnte die Laufzeit des Beispielprogramms so auf 8 Taktzyklen reduziert werden.
In dieser Aufgabe …