CPU Design: L’unione fa la forza

Da un centinaio d’anni a questa parte, sembra quasi che ci sia una rivoluzione scientifica al giorno. Un po’ per le scoperte in fisica, un po’ per le innovazioni tecnologiche, sembra letteralmente che si siano aperte le porte del Paese dei Balocchi della scienza. C’è però una differenza sostanziale tra i progressi di oggi e quelli, diciamo, di una cinquantina d’anni fa: oggi, i progetti più importanti, di ricerca o di sviluppo che siano, li portano avanti gruppi di persone, non più singoli. Il motivo è sicuramente che fisica e ingegneria sono molto più complicate di cinquant’anni fa, e sono dure da affrontare da soli, ma un po’ dipende anche dal fatto che lavorare in gruppo permette di fare più cose in minor tempo e con minor fatica. Gli ingegneri (che non ci tengono a lavorare più del necessario) l’hanno capito da un pezzo: oggi vi presenteremo una carrellata di tutti i modi curiosi in cui il parallelismo permette ad un processore di fare più cose in minor tempo.

GIU’ PER IL TUBO - REPRISE

Una prima forma di parallelismo ve l’abbiamo già presentata un po’ di tempo fa, e si trattava della pipeline. L’idea lì era di dividere l’esecuzione in stadi indipendenti tra loro, separati da registri in modo tale che l’esecuzione in uno non fosse influenzata da ciò che accadeva in un altro (entro certi limiti). Se ricordate, la pipeline che vi avevamo presentato era quella classica a cinque stadi (Figura 1).

 

Figura 1: Pipeline a cinque stadi.

 

Diciamo “classica” perché si tratta di un tipo di pipeline in giro da un certo tempo, semplice, concettualmente elegante, e tutt’ora utilizzata in molti processori ARM e MIPS. Diciamo “classica” anche perché, per quanto vi possa essere sembrata complicata, c’è ancora molto, molto margine di miglioramento, ed in effetti i processori moderni la complicano in maniera quasi inverosimile nel tentativo di migliorare le prestazioni.

Prima possibilità di miglioramento: perché limitarsi a cinque stadi? In effetti, ci sono casi in cui l’aggiunta di stadi sembra naturale. Ricordate i moltiplicatori? Quella complicatissima (e lentissima) struttura a matrice? Un moltiplicatore senza pipeline è probabilmente uno dei circuiti meno efficienti che si possano immaginare. Anche lo shifter, con la sua struttura a cinque livelli in cascata, si prestava bene alla suddivisione in stadi. Il problema con la pipeline è che non si può andare avanti ad aggiungere stadi in eterno, un po’ perché non tutto può essere diviso in stadi (uno stadio di un moltiplicatore non può essere ulteriormente diviso in stadi), un po’ perché comunque anche l’aggiunta dei registri introduce overhead. Non dimenticate che comunque, affinché un registro funzioni, i dati devono rispettare certe temporizzazioni (devono essere pronti un po’ prima del nuovo fronte di clock e devono restare stabili per un po’ dopo che il fronte di clock è arrivato), altrimenti non verranno memorizzati, e questi sono tempi morti che comunque ci devono stare. Se aggiungete troppi registri, ad un certo punto i tempi morti saranno maggiori dei tempi di elaborazione, e renderanno poco conveniente l’aggiunta di altri stadi. A questi vanno aggiunte le complicazioni per gestire le sicuramente più numerose control e data hazard che si verificherebbero in una pipeline più lunga. Al giorno d’oggi, le pipeline più profonde hanno una quindicina di stadi. [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2978 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

3 Commenti

  1. Avatar photo Giordana Francesca Brescia 5 Marzo 2019
  2. Avatar photo Stefano Lovati 6 Marzo 2019
  3. Avatar photo Giovanni Di Maria 7 Marzo 2019

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend