Personal computer/Linguaggio Macchina/DLX/DLX pipeline: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Pizeta (discussione | contributi)
→‎DLX in Pipeline: nuova categoria
Pizeta (discussione | contributi)
Riga 194:
=== Prestazioni del DLX in pipeline ===
 
Consideriamo un semplice programma, che scritto in un linguaggio ad alto livello è
Z = A + B - C
con A,B,C e Z delle variabili in memoria, il programma tradotto in linguaggio macchina DLX risulta
 
LW R1, A(R0)
LW R2, B(R0)
LW R3, C(R0)
ADD R1, R2, R1
SUB R1, R1, R3
SW Z(R0), R1
Ipotizzando che ogni accesso in memoria sia completato in un ciclo di clock l'esecuzione di questo programma non i pipeline richiede 34 clock (4 operazioni di caricamento ognuna da 6 clock e due operazioni ALU da 5 clock) per un
''CPI medio non in pipeline'' '''5,67'''
 
Considerando la più semplice pipeline, '''senza''' ''forwarding unit'' l'esecuzione del programma è
clk 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
LW A IF ID EX MEM WB
LW B IF ID EX MEM WB
LW C IF ID EX MEM WB
ADD IF '''S''' '''S''' ID EX MEM WB
SUB IF '''S''' '''S''' '''S''' ID EX MEM WB
SW Z IF '''S''' '''S''' '''S''' ID EX MEM WB
La prima istruzione di ''ADD'' ha bisogno, nella fase di decodifica, del valore di R2 che, in assenza di ''forwarding unit'' è disponibile soltanto alla fine dello stadio di WB della seconda istruzione (clock 5). L'istruzione di ''SUB'' richiede poi il valore calcolato nella precedente istruzione che sarà disponibile a partire da clock 11. La penultima istruzione terminerà il calcolo ''A + B - C'' nel clock 14 e quindi l'istruzione di ''SW'' può effettuare la decodifica soltanto nel clock 15.
L'intero programma richiede 18 cicli di clock per un
''CPI medio senza forwarding unit'' '''3'''
 
Sempre in assenza di forwarding unit e ipotizzando che il Register File ritorni immediatamente il proprio contenuto in caso di lettura/scrittura dallo stesso registro, ovvero che il valore di un registro sia disponibile direttamente nella fase ''MEM'' (quando ormai tale valore necessita soltanto di essere scritto in ''WB''), è possibile eliminare tre stalli
clk 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
LW A IF ID EX MEM WB
LW B IF ID EX MEM WB
LW C IF ID EX MEM WB
ADD IF '''S''' ID EX MEM WB
SUB IF '''S''' '''S''' ID EX MEM WB
SW Z IF '''S''' '''S''' ID EX MEM WB
Riducendo a 15 il numero di clock necessari per eseguire il programma si ottiene
''CPI medio senza FU con ritorno immediato di RF'' '''2,5'''
 
Aggiungendo anche un ''forwarding unit'' sullo stato ''EX'' che permette quindi la propagazione all'indiatro su ''EX'' del risultato di una ''MEM'' od una ''EX'' precedente, si ottiene
clk 1 2 3 4 5 6 7 8 9 10
LW A IF ID EX MEM WB
LW B IF ID EX <font color=red>MEM</font> WB
LW C IF ID EX <font color=blue>MEM</font> WB
ADD IF ID '''<font color=red>EX</font>''' MEM WB
SUB IF ID '''<font color=blue>EX</font>''' MEM WB
SW Z IF ID '''EX''' MEM WB
In rosso il forwarding di R2 da ''MEM'' all' ''EX'' dell'operazione ''ADD''.
In blu il forwarding di R3 da ''MEM'' all' ''EX'' dell'operazione ''SUB''.
In grassetto il forwarding di R1 tra gli stati di ''EX'' delle istruzioni ''ADD'', ''SUB'' e ''SW''.
 
Il programma con forwardin unit viene eseguito in 10 clock senza stalli
''CPI medio con forwarding unit'' '''1,67'''
[[Categoria:Informatica]][[Categoria:Personal Computer]]