Esercizio 8ritardo del sommatore e prestazioni di una pipeline (temi d'esame 2004, novembre 2020 e febbraio 2023)
In questa pagina 7
Testo (prove del 28 giugno e 13 luglio 2004; esercizi del 27 novembre 2020; febbraio 2023 problema P3).
(i) Un sommatore a 8 bit è realizzato con propagazione del riporto (ripple carry). Sapendo che il ritardo elementare di una porta è 1 ns, determinare il ritardo complessivo della somma e il ritardo se il sommatore è realizzato con carry look-ahead (CLA) a blocchi di quattro bit.
(ii) Un processore con pipeline a 3 livelli (fetch, decode, execute) ha il periodo di clock di 50 ns e nessuna istruzione impegna uno stadio più di un ciclo. Determinare: il tempo di completamento di una istruzione senza conflitti; il numero di istruzioni completate in un secondo; il ritardo causato da un salto incondizionato gestito con stalli.
(iii) Un processore ha unità con tempi F 5 ns, D 3 ns, R 5 ns, E 2 ns, W 5 ns. Confrontare le realizzazioni a ciclo singolo, multiciclo e a pipeline per 100 istruzioni, e calcolare l'accelerazione.
(iv) Pipeline a 5 livelli con bypass tra esecuzione e lettura: per il codice ADD r1,r2,r3; ADD r3,r2,r3; ADD r1,r1,r1; ADD r3,r2,r3; ADD r1,r2,r1 (dove ogni istruzione somma il secondo e il terzo registro nel primo) stabilire se i conflitti sono risolvibili con il bypass, il valore finale di con , , , e il numero di cicli.
(v) Vero/falso sulle pipeline (febbraio 2023): a. rispetto a un'organizzazione multiciclo con la stessa struttura, la pipeline aumenta il numero di istruzioni completate nell'unità di tempo; b. riduce il tempo di completamento di ciascuna istruzione; c. l'accelerazione cresce linearmente con il numero di stadi; d. la probabilità di conflitti sui dati aumenta con il numero di stadi; e. la risoluzione dei conflitti sui dati richiede necessariamente stalli; f. tutti i processori ARM usano una pipeline a 5 stadi.
Teoria usata: ALU - sommatore, overflow, carry look-ahead e shiftL'ALU è un insieme di celle a 1 bit (full adder + selettori) collegate in parallelo: somma, sottrae ($A-B=A+\overline B+1$: si inverte $B$ e si porta il riporto iniziale a 1), fa AND/OR. Il ritardo è dominato dal riporto: nel ripple-carry cresce linearmente con i bit; col carry look-aheadtecnica che calcola in anticipo i riporti da generazione e propagazione, riducendo il ritardo i riporti si calcolano da generazione $g_i=A_iB_i$ e propagazione $p_i=A_i+B_i$ in pochi livelli di logica. L'overflow è $V=C_{in,n-1}\oplus C_{out,n-1}$. Gli shift logici inseriscono 0, gli aritmetici estendono il segno; il barrel shiftercircuito che sposta una parola di un numero qualsiasi di posizioni in un solo ciclo sposta di $m$ posti in un ciclo.ALU - sommatore, overflow, carry look-ahead e shift →, Pipeline - accelerazione e conflittiLa pipeline divide l'esecuzione in $n$ stadi (fetch, decodifica, lettura, esecuzione, scrittura) che lavorano contemporaneamente su istruzioni diverse. Il clock è dettato dallo stadio più lento; a regime si completa un'istruzione per ciclo. Per $N$ istruzioni servono $(n+N-1),T_{clk}$: l'accelerazione rispetto al multiciclo tende a $n$ ma è sempre minore (riempimento, conflitti). I conflitti sono strutturali (stessa risorsa), sui dati (RAW...) e di controllo (salti): si risolvono con stalli (interlocking), bypass, sovrapposizione, riordino, salti ritardati. La latenza di una singola istruzione non diminuisce.Pipeline - accelerazione e conflitti →, Unità di controllo - cablata, microprogrammata, singolo ciclo e multicicloL'unità di controllo preleva (fetch), decodifica ed esegue le istruzioni generando i segnali che attivano registri, ALU e memoria. Può essere cablata (logica dedicata, veloce, poco flessibile, oggi la norma) o microprogrammata (una piccola CPU con ROM di microcodice: flessibile ma lenta e grande). Con un solo bus le operazioni vanno distribuite su più segmenti di clock (multiciclo: il clock è dettato dall'unità più lenta); con memorie e ALU separate si può fare singolo ciclo (il clock è dettato dall'istruzione più lenta). Il tempo medio per istruzione dipende dal mix di istruzioni: $NC=\sum f_i,NC_i$.Unità di controllo - cablata, microprogrammata, singolo ciclo e multiciclo →.
(i) Ripple carry e CLA
Nel ripple carry ogni cella introduce sul riporto (due livelli di logica: un AND e un OR): per celle , più per formare l'ultimo bit di somma: 17 ns. Nel CLA a blocchi da 4: la generazione dei riporti dentro un blocco richiede 3 livelli di logica, tra i due blocchi altri 2: per i riporti, più per l'ultima somma: 6 ns. Il CLA è circa 3 volte più veloce già a 8 bit (e 5-6 volte a 16 bit: contro ).
(ii) Pipeline a 3 stadi
- Tempo di completamento di una istruzione (latenza): .
- A regime una istruzione per ciclo: istruzioni al secondo.
- Un salto incondizionato gestito con stalli (interlocking) svuota la pipeline: le istruzioni già caricate sono scartate e il regime si ripristina dopo il tempo di riempimento: 150 ns (3 cicli) di ritardo tra il completamento dell'istruzione corrente e quello della successiva.
(iii) Ciclo singolo, multiciclo, pipeline
- Ciclo singolo: clock = somma di tutte le fasi ns; 100 istruzioni: ns.
- Multiciclo: clock = fase più lenta = 5 ns; 5 cicli per istruzione = 25 ns; 100 istruzioni: ns.
- Pipeline a stadi, clock 5 ns: ns.
- Accelerazione: rispetto al multiciclo (limite 5 per ; per sarebbe ); rispetto al ciclo singolo . La latenza di una istruzione nella pipeline resta ns (uguale al multiciclo): migliora solo la frequenza di completamento.
(iv) Conflitti con bypass
Le istruzioni: (1) ; (2) ; (3) ; (4) ; (5) . I conflitti sui dati (lettura di un registro non ancora aggiornato) sono: (3) legge scritto da (1), distanza 2 istruzioni; (4) legge scritto da (2), distanza 2; (5) legge scritto da (3), distanza 2. Con il bypass tra il modulo di esecuzione e quello di lettura il dato è inoltrato in tempo: risolvibili senza stalli. Valore finale (). Numero di cicli supponendo la pipeline già a regime: 5 (una istruzione per ciclo, nessuno stallo).
(v) Vero o falso
- a. Vero: la pipeline, a parità di clock e stadi, completa più istruzioni per unità di tempo.
- b. Falso: la latenza di una istruzione non diminuisce (anzi, con le registrazioni intermedie può crescere).
- c. Falso: l'accelerazione ideale è al massimo pari al numero di stadi () ma non cresce linearmente, per via di riempimento e conflitti.
- d. Vero: più stadi, più istruzioni in volo contemporaneamente, quindi più probabili i conflitti sui dati e più costosi gli stalli.
- e. Falso: esistono il bypass (internal forwarding), la sovrapposizione e il riordino del codice.
- f. Falso: gli ARM7 hanno 3 stadi, altre famiglie più stadi.
Confronto con il mix di istruzioni
Per il mix 24% load, 12% store, 44% ALU, 20% salti (Pipeline - accelerazione e conflittiLa pipeline divide l'esecuzione in $n$ stadi (fetch, decodifica, lettura, esecuzione, scrittura) che lavorano contemporaneamente su istruzioni diverse. Il clock è dettato dallo stadio più lento; a regime si completa un'istruzione per ciclo. Per $N$ istruzioni servono $(n+N-1),T_{clk}$: l'accelerazione rispetto al multiciclo tende a $n$ ma è sempre minore (riempimento, conflitti). I conflitti sono strutturali (stessa risorsa), sui dati (RAW...) e di controllo (salti): si risolvono con stalli (interlocking), bypass, sovrapposizione, riordino, salti ritardati. La latenza di una singola istruzione non diminuisce.Pipeline - accelerazione e conflitti →) il numero medio di cicli per istruzione è 3,16 nel multiciclo e 1,32 nella pipeline a 4 stadi con le penalità indicate: accelerazione .
Errori comuni
- Dire che la pipeline riduce il tempo di una singola istruzione.
- Sommare i tempi di tutte le unità per il clock della pipeline: il clock è dato dallo stadio più lento.
- Dimenticare il tempo di riempimento: istruzioni richiedono cicli, non .
- Considerare conflitto il caso in cui il bypass risolve il problema.
Versione ripasso
Testo. Ripple carry e CLA a 8 bit, pipeline a 3 stadi (50 ns), confronto 20/25/520 ns su 100 istruzioni, codice con bypass, vero/falso (2004, novembre 2020, febbraio 2023).
- Sommatore: ripple ns; CLA ns (ALU - sommatore, overflow, carry look-ahead e shiftL'ALU è un insieme di celle a 1 bit (full adder + selettori) collegate in parallelo: somma, sottrae ($A-B=A+\overline B+1$: si inverte $B$ e si porta il riporto iniziale a 1), fa AND/OR. Il ritardo è dominato dal riporto: nel ripple-carry cresce linearmente con i bit; col carry look-aheadtecnica che calcola in anticipo i riporti da generazione e propagazione, riducendo il ritardo i riporti si calcolano da generazione $g_i=A_iB_i$ e propagazione $p_i=A_i+B_i$ in pochi livelli di logica. L'overflow è $V=C_{in,n-1}\oplus C_{out,n-1}$. Gli shift logici inseriscono 0, gli aritmetici estendono il segno; il barrel shiftercircuito che sposta una parola di un numero qualsiasi di posizioni in un solo ciclo sposta di $m$ posti in un ciclo.ALU - sommatore, overflow, carry look-ahead e shift →).
- 3 stadi, 50 ns: latenza 150 ns; istr/s; salto con stalli 150 ns.
- 5 stadi: ciclo singolo 2000 ns, multiciclo 2500 ns, pipeline 520 ns per ; (limite 5) (Pipeline - accelerazione e conflittiLa pipeline divide l'esecuzione in $n$ stadi (fetch, decodifica, lettura, esecuzione, scrittura) che lavorano contemporaneamente su istruzioni diverse. Il clock è dettato dallo stadio più lento; a regime si completa un'istruzione per ciclo. Per $N$ istruzioni servono $(n+N-1),T_{clk}$: l'accelerazione rispetto al multiciclo tende a $n$ ma è sempre minore (riempimento, conflitti). I conflitti sono strutturali (stessa risorsa), sui dati (RAW...) e di controllo (salti): si risolvono con stalli (interlocking), bypass, sovrapposizione, riordino, salti ritardati. La latenza di una singola istruzione non diminuisce.Pipeline - accelerazione e conflitti →).
- Codice: conflitti risolti dal bypass; ; 5 cicli.
- V/F: a V; b F; c F; d V; e F; f F.
- Errori: latenza ridotta; clock = somma; riempimento dimenticato; bypass ignorato (Unità di controllo - cablata, microprogrammata, singolo ciclo e multicicloL'unità di controllo preleva (fetch), decodifica ed esegue le istruzioni generando i segnali che attivano registri, ALU e memoria. Può essere cablata (logica dedicata, veloce, poco flessibile, oggi la norma) o microprogrammata (una piccola CPU con ROM di microcodice: flessibile ma lenta e grande). Con un solo bus le operazioni vanno distribuite su più segmenti di clock (multiciclo: il clock è dettato dall'unità più lenta); con memorie e ALU separate si può fare singolo ciclo (il clock è dettato dall'istruzione più lenta). Il tempo medio per istruzione dipende dal mix di istruzioni: $NC=\sum f_i,NC_i$.Unità di controllo - cablata, microprogrammata, singolo ciclo e multiciclo →).