« »

Fünfstufige Pipelines

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, 42

a)

Level 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.

Lösung

Die fünf Pipeline-Stufen in Abkürzung: IF, ID, EX, MEM, WB

  1. Instruction Fetch (IF): Aus dem Instruction Memory wird anhand des Program Counters die nächste Instruktion geladen.
  2. Instruction Decode (ID): Die Bestandteile der Instruktion (Opcodes, beteiligte Register und Konstanten) werden ausgelesen.
  3. Execute (EX): In der Arithmetic Logic Unit (und ggf. weiteren Bauteilen) werden die angeforderten Berechnungen vorgenommen.
  4. Memory (MEM): Ergebnisse des vorherigen Schrittes können genutzt werden, um auf den Arbeitsspeicher lesend oder schreibend zuzugreifen.
  5. Write Back (WB): Zuletzt können Rechenergebnisse oder geladene Daten in ein Register zurückgeschrieben werden.

b)

Level 1: Wissen

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

Lösung

Vier Instruktionen in je fünf Pipelinestufen. Jede Instruktion beginnt einen Taktzyklus später als die vorherige.

  • Sequentiell: 4 Instruktionen × 5 Taktzyklen je Instruktion = 20 Taktzyklen
  • Pipeline ohne Hazardbehandlung: 8 Taktzyklen → Zeitersparnis von 12 Taktzyklen

c)

Level 3: Anwenden

Untersuchen Sie den gegebenen Code auf mögliche Hazards. Geben Sie jeweils die betroffenen Zeilen und Register an.

Lösung

Es treten zwei Hazards auf:

ZeilenRegisterTyp
1–2a0Read after write
2–3a1Read after write

Vereinfachte Pipeline-Darstellung mit simplen Schaltungs-Bausteinen. Betroffene Schreib- und Lesezugriffe auf das Register File sind markiert.

d)

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?

Lösung

Je zwei NOP-Instruktionen genügen, um die Hazards aufzulösen. Die Ausführungszeit beträgt damit 12 Taktzyklen.

Pipeline mit NOP-Operationen, um den Hazards vorzubeugen.

e)

Level 3: Anwenden

Kennen Sie eine passende Alternative zur Behandlung dieser Hazards mittels NOP-Instruktionen? Wie könnte dies in diesem Beispiel umgesetzt werden?

Lösung

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.

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.