Pipeline
In questa pagina 5
In questa pagina 3
L'idea
Una pipeline non rende più veloce la singola istruzione: aumenta il numero di istruzioni completate per unità di tempo (throughput). Come in una catena di montaggio, il lavoro è diviso in fasi e ogni stadio lavora contemporaneamente su un'istruzione diversa.
Confronto con la replicazione: esecutori completi in parallelo producono un lavoro ogni ma ognuno ha bisogno di tutti gli strumenti; nella catena di montaggio ogni esecutore è specializzato in una fase e gli strumenti non vanno replicati.
Pipeline a 5 stadi (stile MIPS)
| Stadio | Cosa fa |
|---|---|
| IF (instruction fetch) | preleva l'istruzione all'indirizzo PC; PC ← PC + 4 |
| ID (instruction decode) | decodifica, legge i registri, genera i segnali di controllo, rileva le dipendenze |
| EX (execute) | ALU: operazione, oppure calcolo dell'indirizzo per load/store e salti |
| MEM | accesso alla memoria dati (solo load e store) |
| WB (write back) | scrive il risultato nel banco dei registri |
Diagramma (ogni riga un'istruzione, ogni colonna un ciclo):
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
|---|---|---|---|---|---|---|---|
| I1 | IF | ID | EX | MEM | WB | ||
| I2 | IF | ID | EX | MEM | WB | ||
| I3 | IF | ID | EX | MEM | WB |
Controllo utile negli esercizi: in una colonna non può comparire due volte lo stesso stadio.
Registri di pipeline (IF/ID, ID/EX, EX/MEM, MEM/WB) tra uno stadio e il successivo conservano l'istruzione, i dati e i segnali di controllo che servono agli stadi successivi.
Conflitto sul banco dei registri: WB di un'istruzione e ID di un'altra lo usano nello stesso ciclo. Si risolve scrivendo nella prima metà del ciclo e leggendo nella seconda. Il conflitto sulla memoria tra IF e MEM si risolve con cache separate per istruzioni e dati (vedi Memoria cacheBlocchi, linee ed etichette; scomposizione dell'indirizzo; associazione diretta, completamente associativa e associativa a insiemi con calcolo dei campi; politiche di rimpiazzo (LRU, FIFO, casuale); politiche di scrittura (write-through, write-back con bit sporco, write-allocate); dimensione del blocco; cache multilivello e separate; come ridurre i miss; quesiti sui campi dell'indirizzo.Memoria cache →).
Prestazioni
Tempo di ciclo: lo stadio più lento più il ritardo dei registri di pipeline :
Tempo per eseguire istruzioni con stadi, senza stalli: la prima istruzione esce dopo cicli, poi ne esce una per ciclo:
Esempio: 9 istruzioni, 6 stadi → cicli invece di .
Speedup rispetto all'esecuzione senza pipeline (che richiede per istruzione):
Con e : .
Esempio con stadi sbilanciati: stadi da 200, 100, 200, 200, 100 ps, ps → ps. Senza pipeline un'istruzione dura ps; a regime la pipeline ne completa una ogni 220 ps: speedup , non 5. Lo stadio più lento detta il passo.
Limiti
- Stadi sbilanciati: il clock si adegua al più lento.
- Overhead dei registri di pipeline: con stadi troppo corti diventa una parte rilevante di .
- Hazard: dipendenze tra istruzioni vicine che costringono a fermare la pipeline (dati, controllo, risorse).
Più stadi (pipeline profonde, oltre 15–20) permettono clock più alti ma rendono più costosi gli stalli, soprattutto dopo un salto sbagliato (vedi Branch predictionTecniche per gli hazard sul controllo: stallo, flussi multipli, prelievo anticipato del bersaglio, loop buffer, salto ritardato; predizione statica e dinamica con bit di storia, predittore a 1 e a 2 bit con esempio su un ciclo, tabella dei bersagli (BTB); costo di una predizione errata.Branch prediction →).
Errori tipici
- Calcolare il tempo di istruzioni come dimenticando il riempimento iniziale ( cicli).
- Pensare che la latenza della singola istruzione diminuisca: aumenta leggermente (per e per lo sbilanciamento).
Versione ripasso
Non accelera la singola istruzione: aumenta il throughput. Ogni stadio lavora su un'istruzione diversa; gli strumenti non vanno replicati.
5 stadi (stile MIPS)
IF (preleva, PC PC + 4); ID (decodifica, legge i registri, rileva dipendenze); EX (ALU, indirizzi di load/store e salti); MEM (memoria dati); WB (scrive il registro). Nel diagramma, in una colonna non compare due volte lo stesso stadio. I registri di pipeline (IF/ID, ID/EX, EX/MEM, MEM/WB) trasportano dati e segnali di controllo. Conflitti: banco registri (WB e ID) risolto scrivendo nella prima metà del ciclo e leggendo nella seconda; memoria (IF e MEM) con cache separate (Memoria cacheBlocchi, linee ed etichette; scomposizione dell'indirizzo; associazione diretta, completamente associativa e associativa a insiemi con calcolo dei campi; politiche di rimpiazzo (LRU, FIFO, casuale); politiche di scrittura (write-through, write-back con bit sporco, write-allocate); dimensione del blocco; cache multilivello e separate; come ridurre i miss; quesiti sui campi dell'indirizzo.Memoria cache →).
Prestazioni
- 9 istruzioni su 6 stadi: cicli invece di 54. , : .
- Stadi 200, 100, 200, 200, 100 ps, : ps; senza pipeline 800 ps; .
- Con stalli (Hazard nella pipelineHazard strutturali, sui dati e sul controllo; dipendenze RAW, WAR e WAW; stalli e bolle con diagrammi; data forwarding (bypass) e caso load-use; riordino delle istruzioni da parte del compilatore e dell'hardware; costo dei salti.Hazard nella pipeline →): .
Limiti
Stadi sbilanciati; overhead dei registri; hazard. Pipeline profonde (oltre 15-20 stadi): clock alto ma stalli costosi dopo un salto sbagliato (Branch predictionTecniche per gli hazard sul controllo: stallo, flussi multipli, prelievo anticipato del bersaglio, loop buffer, salto ritardato; predizione statica e dinamica con bit di storia, predittore a 1 e a 2 bit con esempio su un ciclo, tabella dei bersagli (BTB); costo di una predizione errata.Branch prediction →).
Errori tipici: senza il riempimento ( cicli); credere che la latenza della singola istruzione diminuisca (aumenta un poco).
Esercizi su questo argomento
- Esercizio 19 · speedup di una pipeline con salti
- Esercizio 24 · pipeline MIPS senza forwarding, numero di cicli
- Esercizio 25 · pipeline MIPS con forwarding, stalli e bypass
- Esercizio 26 · fattore di velocizzazione di una pipeline a 4 stadi con salti
- Esercizio 27 · pipeline MIPS, dipendenze e cicli totali di un ciclo