Esercizio Pipeline MIPS

Soluzione es. a)

 


Considerando la pipeline MIPS vista a lezione, si consideri il seguente frammento di codice:
 

loop:

LW

$1, 0($2)

 R1← mem[0+[R2]]

ADDI

$1,$1, 1

 R1← [R1] + 1

SW

$1, 0($2)

 mem[0+[R2]] ← [R1]

ADDI

$2, $2,  4

 R2← [R2] + 4

SUB

$4, $3, $2

 R4← [R3] - [R2]

BENZ

$4, loop

 if([R4] != 0) PC ← indirizzo(loop)

assumendo che il valore iniziale di R3 sia R2+396.

a) si individuino e discutano le dipendenze dovute ai dati

Soluzione:

DIPENDENZE  

[dipendenza dati (senza considerare limiti architettura MIPS)]

[dipendenza dati considerando i limiti della architettura MIPS]

R1 in ADDI  $1,$1, 1 

dipende da

LW $1, 0($2)

[input EXEADDI ha bisogno di output da MEMLW]

[IDADDI deve legge R1 aggiornato da WBLW (stesso ciclo clock)]

R1 in SW  $1,0($2) 

dipende da

LW $1, 0($2)

 [input MEMSW ha bisogno di output da MEMLW]

[IDSW deve legge R1 aggiornato da WBLW (stesso ciclo clock)]

R1 in SW  $1,0($2) 

dipende da

ADDI  $1,$1, 1

 [input MEMSW ha bisogno di output da EXEADDI]

[IDSW deve legge R1 aggiornato da WBADDI (stesso ciclo clock)]

R2 in SUB $4, $3, $2

dipende da

ADDI  $2,$2, 4 

[input EXESUB  ha bisogno di output da EXEADDI]

[IDSUB deve legge R2 aggiornato da WBADDI (stesso ciclo clock)]

R4 in BENZ $4, loop

dipende da

SUB $4, $3, $2 

[input EXEBENZ ha bisogno di output da EXESUB]

[IDBENZ deve legge R4 aggiornato da WBSUB (stesso ciclo clock)]

b) mostrare come evolve la pipeline durante l'esecuzione del codice per le prime 6 istruzioni eseguite, assumendo:

Si calcoli inoltre il numero totale di cicli di clock necessari per portare a termine l'esecuzione completa del codice.