Salta al contenuto
Note per Studenti Pipeline

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: nn esecutori completi in parallelo producono un lavoro ogni T/nT/n 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 dd:

τ=max⁡iτi+d\tau = \max_i \tau_i + d

Tempo per eseguire nn istruzioni con kk stadi, senza stalli: la prima istruzione esce dopo kk cicli, poi ne esce una per ciclo:

Tk=(k+n−1) τT_k = (k + n - 1)\,\tau

Esempio: 9 istruzioni, 6 stadi → 6+9−1=146 + 9 - 1 = 14 cicli invece di 9⋅6=549 \cdot 6 = 54.

Speedup rispetto all'esecuzione senza pipeline (che richiede kτk\tau per istruzione):

Sk=n k τ(k+n−1) τ=nkk+n−1→n→∞kS_k = \frac{n\,k\,\tau}{(k + n - 1)\,\tau} = \frac{nk}{k + n - 1} \xrightarrow{n \to \infty} k

Con k=5k = 5 e n=100n = 100: S=500/104≈4,8S = 500/104 \approx 4{,}8.

Esempio con stadi sbilanciati: stadi da 200, 100, 200, 200, 100 ps, d=20d = 20 ps → τ=220\tau = 220 ps. Senza pipeline un'istruzione dura 800800 ps; a regime la pipeline ne completa una ogni 220 ps: speedup 800/220≈3,6800/220 \approx 3{,}6, non 5. Lo stadio più lento detta il passo.

Con stalli (vedi 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 →), a regime:

S=k1+frazione di cicli di stallo per istruzioneS = \frac{k}{1 + \text{frazione di cicli di stallo per istruzione}}

Limiti

  • Stadi sbilanciati: il clock si adegua al più lento.
  • Overhead dei registri di pipeline: con stadi troppo corti dd diventa una parte rilevante di τ\tau.
  • 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 nn istruzioni come n⋅τn \cdot \tau dimenticando il riempimento iniziale (k−1k - 1 cicli).
  • Pensare che la latenza della singola istruzione diminuisca: aumenta leggermente (per dd 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 ←\leftarrow 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

τ=max⁡iτi+d,Tk=(k+n−1) τ,Sk=nkk+n−1→n→∞k\tau = \max_i \tau_i + d, \qquad T_k = (k + n - 1)\,\tau, \qquad S_k = \frac{nk}{k + n - 1} \xrightarrow{n\to\infty} k

Limiti

Stadi sbilanciati; overhead dd 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: nτn\tau senza il riempimento (k−1k - 1 cicli); credere che la latenza della singola istruzione diminuisca (aumenta un poco).

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata