Esercizio 26fattore di velocizzazione di una pipeline a 4 stadi con salti
In questa pagina 8
Testo (esempi di compitino di Architettura degli Elaboratori, UniPD, a.a. 2010-11, 2011-12 e 2014-15, quesito 3 a risposta multipla o esercizio di calcolo). Si consideri una pipeline a 4 stadi: fetch (IF), decodifica (ID), elaborazione (EI) e scrittura dei risultati (WO), per cui:
- i salti incondizionati sono risolti (identificazione del salto e calcolo dell'indirizzo target) alla fine del secondo stadio (ID);
- i salti condizionati sono risolti (identificazione del salto, calcolo dell'indirizzo target e calcolo della condizione) alla fine del terzo stadio (EI);
- il primo stadio (IF) è indipendente dagli altri.
Inoltre non ci sono altre istruzioni che possano mandare in stallo la pipeline e non è implementato alcun meccanismo di trattamento dei salti. Si sa che:
| versione | salti condizionati | salti incondizionati | condizionati con condizione soddisfatta (presi) |
|---|---|---|---|
| a.a. 2010-11 | 20% | 3% | 55% |
| a.a. 2011-12 | 10% | 3% | 55% |
| a.a. 2014-15 | 17% | 1% | 70% |
Calcolare il fattore di velocizzazione (speedup) della pipeline. Opzioni 2010-11: a) 3,23; b) 3,25; c) 2,35; d) 3,96; e) nessuna delle precedenti. Opzioni 2011-12: a) 3,230988; b) 3,508772; c) 2,356502; d) 3,960031; e) nessuna delle precedenti.
Teoria: PipelineIdea della catena di montaggio; pipeline a 5 stadi IF, ID, EX, MEM, WB; tempo di ciclo, tempo per n istruzioni in una pipeline a k stadi e speedup con esempi svolti; registri di pipeline; scrittura e lettura dei registri nello stesso ciclo; limiti (stadi sbilanciati, hazard).Pipeline →, 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 →, 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 →. Stesso metodo con 5 stadi: Esercizio 19 · speedup di una pipeline con salti.
Formula
A regime una pipeline a stadi completa un'istruzione per ciclo: lo speedup ideale rispetto a un'esecuzione non in pipeline è . Ogni ciclo di stallo aggiunto in media per istruzione lo riduce:
dove è la frazione di istruzioni di quel tipo e il numero di cicli persi per ciascuna.
Cicli persi per tipo di salto
Senza alcun meccanismo, il prelievo continua in sequenza dopo il salto. Finché il salto non è risolto le istruzioni prelevate sono quelle sequenziali; se il salto è preso vanno scartate.
| tipo | si risolve alla fine di | istruzioni sbagliate già prelevate | cicli persi |
|---|---|---|---|
| incondizionato (sempre preso) | stadio 2 (ID) | 1 (quella prelevata mentre il salto è in ID) | 1 |
| condizionato preso | stadio 3 (EI) | 2 | 2 |
| condizionato non preso | stadio 3 | 0 (la sequenza continua era giusta) | 0 |
(Nel caso "non preso" il prelievo sequenziale era già corretto: nessuna perdita, anche se il salto è risolto tardi.)
Probabilità per tipo
Con = frazione di condizionati, = incondizionati, = frazione di condizionati presi:
- incondizionato: ;
- condizionato preso: ;
- condizionato non preso: .
Versione 2011-12
, , : condizionati presi .
Risposta b.
Versione 2010-11
, , : condizionati presi .
non figura tra le opzioni ( e sono vicine ma diverse): risposta e (nessuna delle precedenti).
Versione 2014-15
, , : condizionati presi , non presi .
(Lo stesso risultato della soluzione allegata al testo.)
Verifica
def speedup(k, cond, incond, presi, stallo_inc, stallo_cond_preso, stallo_cond_non_preso=0):
stalli = incond * stallo_inc + cond * presi * stallo_cond_preso + cond * (1 - presi) * stallo_cond_non_preso
return stalli, k / (1 + stalli)
for anno, (c, u, q) in {"2010-11": (0.20, 0.03, 0.55), "2011-12": (0.10, 0.03, 0.55), "2014-15": (0.17, 0.01, 0.70)}.items():
stalli, s = speedup(4, c, u, q, 1, 2)
print(anno, round(stalli, 4), round(s, 6))
# 2010-11 0.25 3.2
# 2011-12 0.14 3.508772
# 2014-15 0.248 3.205128Errori comuni
- Contare 2 cicli persi per ogni salto (anche per quelli non presi) o 1 ciclo per i condizionati.
- Dimenticare che il salto incondizionato è risolto prima (stadio 2): costa 1 ciclo, non 2.
- Usare le percentuali dei salti presi come frazione di tutte le istruzioni invece che dei soli condizionati ( è il 55% dei condizionati).
- Dare lo speedup come invece di .
- Scegliere l'opzione "più vicina" (3,23 per 3,2): conta il valore esatto.
Versione ripasso
Esempi di compitino a.a. 2010-11, 2011-12 e 2014-15: pipeline a 4 stadi, incondizionati risolti in ID (fine stadio 2), condizionati in EI (fine stadio 3), nessun meccanismo di trattamento dei salti. Teoria: PipelineIdea della catena di montaggio; pipeline a 5 stadi IF, ID, EX, MEM, WB; tempo di ciclo, tempo per n istruzioni in una pipeline a k stadi e speedup con esempi svolti; registri di pipeline; scrittura e lettura dei registri nello stesso ciclo; limiti (stadi sbilanciati, hazard).Pipeline →, 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 →.
con : incondizionato , condizionato preso , non preso ; stalli .
| versione | stalli | ||||
|---|---|---|---|---|---|
| 2010-11 | 0,20 | 0,03 | 0,55 | 0,25 | 3,2 → opzione e |
| 2011-12 | 0,10 | 0,03 | 0,55 | 0,14 | 3,508772 → opzione b |
| 2014-15 | 0,17 | 0,01 | 0,70 | 0,248 | 3,205128 |
Errori comuni: 2 cicli per ogni salto; incondizionato a 2 cicli; applicato a tutte le istruzioni; ; opzione "più vicina".