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 (IF, ID, EI, WO), nessun meccanismo di trattamento dei salti. Incondizionati risolti alla fine di ID (stadio 2), condizionati alla fine di EI (stadio 3). 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 →.
Formula: , con stadi. Si sommano le frazioni di ogni tipo di salto per i cicli persi .
Cicli persi per tipo:
- incondizionato: 1 (si risolve in ID, una istruzione sbagliata già prelevata);
- condizionato preso: 2 (due istruzioni sbagliate);
- condizionato non preso: 0 (il prelievo sequenziale era già giusto).
Frazioni, con = condizionati, = incondizionati, = condizionati presi: incondizionato ; condizionato preso ; non preso . Quindi stalli .
Calcolo:
| versione | cond. presi | stalli | ||||
|---|---|---|---|---|---|---|
| 2010-11 | 0,20 | 0,03 | 0,55 | 0,11 | 3,2 → opzione e | |
| 2011-12 | 0,10 | 0,03 | 0,55 | 0,055 | 3,508772 → opzione b | |
| 2014-15 | 0,17 | 0,01 | 0,70 | 0,119 | 3,205128 |
Per il 2010-11 il valore 3,2 non è tra le opzioni (3,23 e 3,25 sono vicine ma diverse): la risposta è e.
Verifica: la funzione nella nota stampa 0.25 3.2, 0.14 3.508772, 0.248 3.205128.
Errori comuni:
- Contare 2 cicli per ogni salto, anche per quelli non presi, o 1 ciclo per i condizionati.
- Incondizionato a 2 cicli: si risolve prima, costa 1.
- Applicare a tutte le istruzioni: è la quota dei condizionati presi.
- Usare invece di .
- Scegliere l'opzione "più vicina" (3,23 per 3,2): conta il valore esatto.