Il concetto di pipeline e` stato introdotto negli anni 70 portando ad una vera e propria rivoluzione dei calcolatori per come erano conosciuti. La pipeline consiste nel prevedere che il processore possa eseguire più istruzioni nello stesso istante purché esse si trovino in strati diversi.
Andare a fondo nel concetto di pipeline può essere complicato. Per semplificare la comprensione pero si puo usare come metafora l’azione del bucato prendendo come riferimento tecnico il processore MIPS: uno dei più semplici mai costruiti. Vediamo come.
Concetto generale
Immaginiamo di dover fare il bucato, questa azione può essere scomposta in 5 fasi: selezione dei vestiti, lavaggio, asciugatura, stiro, riporre i panni nei cassetti opportuni. Quando il processore deve eseguire un’istruzione scompone il processo in 5 fasi: prelievo dell’istruzione, decodifica, esecuzione, lettura/scrittura della memoria, scrittura dei registri di sistema. Tornando al nostro bucato possiamo adottare due approcci operativi: lavare un carico di vestiti alla volta, aspettando che il primo sia completamente riposto nei cassetti prima di lavare il secondo, o lavare il secondo non appena il primo comincia ad asciugarsi. E` ovvio che il secondo approccio e` migliore in termini di tempo: questo non perché` il tempo di lavaggio venga effettivamente accorciato ma piuttosto perché il tempo complessivo che occorre per lavare più di un carico e` minore. Nel processore MIPS abbiamo lo stesso concetto: il processore comincia la fase di prelievo della seconda istruzione quando la prima e` in fase di decodifica ecc.. In tutto possono essere eseguiti cinque istruzioni in stati diversi in contemporanea.
Problemi nel sistema
Il sistema presenta tre tipi di problemi anche detti hazard. Un hazard si crea quando un’istruzione non può essere eseguita perché vincolata al risultato di un’istruzione precedente che pero e` ancora in esecuzione. Esistono tre tipi di hazard:
- hazard strutturali: si verificano quando l’architettura hardware utilizzata non riesce a supportare l’esecuzione di più istruzioni in modo simultaneo. Nell’esempio del bucato ciò si verifica se usiamo la stessa macchina sia per lavare che per asciugare.
- hazard sui dati: questo tipo di problema si verifica quando un’istruzione dipende dal risultato della precedente che però non e` ancora stato prodotto.
- hazard sul controllo: questo problema si verifica quando dobbiamo prendere una decisione su quale istruzione eseguire ma altre sono già state avviate
Soluzioni
Gli hazard strutturali richiedono di riprogettare l’intero calcolatore per essere risolti poiché appunto si tratta di un problema non solo logico ma anche fisico. Per quanto riguarda gli hazard sui dati e` inefficiente affidare ad un compilatore il compito di riordinare le istruzioni perciò si utilizzano in genere due approcci. Il primo e` quello di inserire degli stalli ossia delle istruzioni in cui il processore non fa nulla e aspetta il risultato che serve per proseguire l’esecuzione. Nel caso del bucato significherebbe fare una lavatrice a vuoto. Il secondo e` il metodo della propagazione: un dato appena prodotto viene “inviato” subito all’istruzione che ne ha bisogno senza aspettare di passare per le fasi successive. Nel nostro caso potremmo servirci di un’ipotetico coinquilino o convivente che metta a posto i nostri vestiti mentre noi preleviamo il secondo carico di bucato.