Ub5-Tomasulo Algorithm with Memory Access (MA)

Annahme

  • Pipeline:

    • Fetch (IF)
    • Decode (ID)
    • Issue + Renaming (IS)
    • Execute oder Memory Access (EX/MA)
    • Write Back (WB)
  • Einheiten:

    • 2 Lade-Speichereinheiten (Load/Store Unit)

    • 1 Integer-Additionseinheit

    • 1 Integer-Multiplikationseinheit

    • 1 FP-Additionseinheit

      EinheitL/SInt-Add/SubInt-MulFP-Add
      Anzahl2111
      Bearbeitungsdauer (in Takten)3132
  • Statische Sprungvorhersage mit fortwährendem Füllen der Pipeline vom Sprungziel; dafür sei ein Sprungzieladresscache vorhanden und die Sprungvorhersage laute auf Taken

  • FP-Register und normale Register können gleichzeitig in der WB-Stufe beschrieben werden

  • Schreiben in Speicher geschehe nicht üßber CDB

  • Volles Bypassing

  • Die Befehlszuordnungs- und Rückordnungsbandbreite betrage 4 Befehle; zwei Befehle werden pro Takt maximal geholt

  • Entsprechend gibt es zwei Dekodiereinheiten, die gleichzeitig arbeiten können

  • Die Auswertung der Sprungzieladresse erfolge in der Stufe Execute der Int-Add-Einheit; das Schreiben des Befehlsza ̈hlers (Instruction Counter, Program Counter) in der WB-Stufe

  • Speicherlesezugriffe erfolgen analog zu normalen Rechenoperationen in der Ausführungsstufe, das Rückschreiben geschieht dabei als separater Schritt (WB)

  • Speicherschreibzugriffe haben eine Ausführungsdauer von 3 Takten

Aufgabe

Folgender Code werde darauf ausgeführt, wobei

  • R0 = 0
  • R1 eine Speicheradresse,
  • R2 = R1 + 24
  • F2 sei beliebig
LOOP: LD.D F0,0(R1)   ; loads Mem[i]
      ADD.D F4,F0,F2  ; adds to Mem[i]
      S.D 0(R1),F4    ; stores into Mem[i]
      ADD R1,R1,#8    ;
      SUB R3,R1,R2    ; R3 = R1-R2
      BLTZ R3,LOOP    ; branch if R1 < R2

Verlauf der Pipeline

Befehl12345678910111213141516171819202122
LD.D F0,0(R1)IFIDISMMMWB
ADD.D F4,F0,F2IFIDISEXEXWB
S.D 0(R1),F4IFIDISMMM
ADD R1,R1,#8IFIDISEXWB
SUB R3,R1,R2IFIDISEXWB
BLTZ R3,LOOPIFIDISEXWB
LD.D F0,0(R1)IFIDISMMMWB
ADD.D F4,F0,F2IFIDISEXEXWB
S.D 0(R1),F4IFIDISMMM
ADD R1,R1,#8IFIDISEXWB
SUB R3,R1,R2IFIDISEXWB
BLTZ R3,LOOPIFIDISEXWB
LD.D F0,0(R1)IFIDISMMMWB
ADD.D F4,F0,F2IFIDEXEXWB
S.D 0(R1),F4IFIDISMMM
ADD R1,R1,#8IFIDISEXWB
SUB R3,R1,R2IFIDISEXWB
BLTZ R3,LOOPIFIDISEXWB

Takt 1

LD.D und ADD.D geholt

Takt 2

  • LD.D und ADD.D dekodiert

  • SD.D und ADD geholt

  • RS noch leer

  • Rückordnungspuffer

    Befehlsnr.ZielQuelle
  • Registerstatustabelle

    FieldR1R2R3F0F2F4
    Value(R1)(R2)(R3)-(F2)(F4)
    RS
  • Befehlsfenster

    NummerBefehlStage
    1LD.D F0,0(R1)ID
    2ADD.D F4,F0,F2ID

Takt 3 & 4

  • SUB und BLTZ geholt (Takt 3), dekodiert (Takt 4)

  • LD.D und ADD.D geholt (Takt 4)

  • Befehlsfenster

    NummerBefehlStage
    1LD.D F0,0(R1)M
    2ADD.D F4,F0,F2IS
    3S.D 0(R1),F4IS
    4ADD R1,R1,#8IS
    5SUB R3,R1,R2ID
    6BLTZ R3,LOOPID
  • Rückordnungspuffer

    Befehlsnr.ZielQuelle
    4R1Int-Add
    3nullany L/S Unit
    2F4FP-Add
    1F0L/S 1
  • Reservation Stations:

    UnitEmptyInFuOpDestSrc1Vld1RS1Src2Vld2RS2
    L/S 101ld.dF0[(R1)]10---
    L/S 200s.d(M)R110-0FP-Add
    Int-A/S00addR1(R1)1081-
    Int-Mul1
    FP-Add00add.dF4-0L/S1(F2)1-

    Im moment gibt es keine Integer Multiplikation Operation. d.h., es gibt keine Eintrag in RS Int-Mul, also die RS Int-Mul is leer (empty). Daher das Empty Feld von RS Int-Mul ist 1.

    Andere RS sind von Operationen belegt. Daher nicht leer $\Rightarrow$ Empty=0

  • Registerstatustabelle

    FieldR1R2R3F0F2F4
    Value-(R2)(R3)-(F2)
    RSInt-A/SL/S 1FP-Add

Der erste Befehl LD.D F0, 0(R1) lädt die Daten der Speicheradresse R1 in Register F0.

In Takt 4 befindet LD.D in M (Memory Access, MA) Stufe.

Daher

  • in RS L/S 1:
    • inFu=1 (da schon in Execution Unit ausgeführt wird)
    • Src1 = [(R1)]
    • Daten im R1 ist gültig $\Rightarrow$ Vld=1
  • in Register F0: RS=L/S 1 (Der Wert für Register F0 wird von RS L/S 1 berechnet/produziert)

Takt 5 & 6

  • ADD wird ausgeführt (Takt 5) und schreibt R1 (Takt 6)

  • Zuordnung von SUB noch im gleichen Takt (Takt 6)

  • Befehlsfenster

    NummerBefehlStage
    1LD.D F0,0(R1)M
    2ADD.D F4,F0,F2IS
    3S.D 0(R1),F4IS
    4ADD R1,R1,#8WB
    5SUB R3,R1,R2IS
    6BLTZ R3,LOOPID
    7LD.D F0,0(R1)ID
    8ADD.D F4,F0,F2ID
    9S.D 0(R1),F4ID
    10ADD R1,R1,#8ID
截屏2020-07-19 22.46.16

Die Ausführung von dem 4. Befehl ADD R1, R1, #8 ist fertig (in Rückordnungspuffer mit green markiert).

Das Ergebnis (R1) + 8 wird im Register R1 geschrieben und das RS Feld von Register R1 wird gelöscht.

Die RS Int-A/S ist wieder frei. Daher wird der 5.Befehl SUB R3,R1,R2 eingetragen.

Takt 7 & 8

  • Erste LD.D beendet, Weiterleitung an FP-ADD (Takt 7)
  • ADD.D Ausführung begonnen (Takt 7), da wir volles Bypassing (Forwarding) haben
  • SUB angestoßen und berechnet (Takt 7)
  • BLTZ zugeteilt (Takt 8)
  • Zweites LD.D beginnt Ausführung (Takt 8)
截屏2020-07-19 22.50.45

Befehl 5 SUB R3,R1,R2 ist fertig. ((in Rückordnungspuffer mit green markiert))

Die vollendeten Add- und Subbefehle können noch nicht zurückgeordnet werden, da die vorherigen Befehle noch nicht alle beendet sind.
截屏2020-07-19 22.52.23
Previous
Next