Salta al contenuto
Note per Studenti Esercizio 26 · fattore di velocizzazione di una pipeline a 4 stadi con salti

Esercizio 26fattore di velocizzazione di una pipeline a 4 stadi con salti

Esame
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 kk stadi completa un'istruzione per ciclo: lo speedup ideale rispetto a un'esecuzione non in pipeline è kk. Ogni ciclo di stallo aggiunto in media per istruzione lo riduce:

S=k1+cicli di stallo per istruzione,cicli di stallo per istruzione=∑tipi di saltopi⋅siS = \frac{k}{1 + \text{cicli di stallo per istruzione}}, \qquad \text{cicli di stallo per istruzione} = \sum_{\text{tipi di salto}} p_i \cdot s_i

dove pip_i è la frazione di istruzioni di quel tipo e sis_i 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 sis_i
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 cc = frazione di condizionati, uu = incondizionati, qq = frazione di condizionati presi:

  • incondizionato: uu;
  • condizionato preso: c⋅qc \cdot q;
  • condizionato non preso: c⋅(1−q)c \cdot (1 - q).

stalli=u⋅1+c q⋅2+c (1−q)⋅0=u+2 c q.\text{stalli} = u \cdot 1 + c\,q \cdot 2 + c\,(1 - q) \cdot 0 = u + 2\,c\,q.

Versione 2011-12

c=0,10c = 0{,}10, u=0,03u = 0{,}03, q=0,55q = 0{,}55: condizionati presi 0,10⋅0,55=0,0550{,}10 \cdot 0{,}55 = 0{,}055.

stalli=0,03⋅1+0,055⋅2=0,03+0,11=0,14,S=41,14=3,508772…\text{stalli} = 0{,}03 \cdot 1 + 0{,}055 \cdot 2 = 0{,}03 + 0{,}11 = 0{,}14, \qquad S = \frac{4}{1{,}14} = 3{,}508772\ldots

Risposta b.

Versione 2010-11

c=0,20c = 0{,}20, u=0,03u = 0{,}03, q=0,55q = 0{,}55: condizionati presi 0,20⋅0,55=0,110{,}20 \cdot 0{,}55 = 0{,}11.

stalli=0,03+0,11⋅2=0,25,S=41,25=3,2.\text{stalli} = 0{,}03 + 0{,}11 \cdot 2 = 0{,}25, \qquad S = \frac{4}{1{,}25} = 3{,}2.

3,23{,}2 non figura tra le opzioni (3,233{,}23 e 3,253{,}25 sono vicine ma diverse): risposta e (nessuna delle precedenti).

Versione 2014-15

c=0,17c = 0{,}17, u=0,01u = 0{,}01, q=0,70q = 0{,}70: condizionati presi 0,17⋅0,70=0,1190{,}17 \cdot 0{,}70 = 0{,}119, non presi 0,17⋅0,30=0,0510{,}17 \cdot 0{,}30 = 0{,}051.

stalli=0,01⋅1+0,119⋅2+0,051⋅0=0,01+0,238=0,248,S=41,248=3,205128…\text{stalli} = 0{,}01 \cdot 1 + 0{,}119 \cdot 2 + 0{,}051 \cdot 0 = 0{,}01 + 0{,}238 = 0{,}248, \qquad S = \frac{4}{1{,}248} = 3{,}205128\ldots

(Lo stesso risultato della soluzione allegata al testo.)

Verifica

python
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.205128

Errori 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 (0,550{,}55 è il 55% dei condizionati).
  • Dare lo speedup come k⋅(1−stalli)k \cdot (1 - \text{stalli}) invece di k/(1+stalli)k / (1 + \text{stalli}).
  • 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 →.

S=k1+∑pisi,cicli persi: incondizionato 1, condizionato preso 2, condizionato non preso 0S = \frac{k}{1 + \sum p_i s_i}, \quad \text{cicli persi: incondizionato } 1, \text{ condizionato preso } 2, \text{ condizionato non preso } 0

con pp: incondizionato uu, condizionato preso c qc\,q, non preso c(1−q)c(1-q); stalli =u+2 c q= u + 2\,c\,q.

versione cc uu qq stalli S=4/(1+stalli)S = 4/(1 + \text{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; qq applicato a tutte le istruzioni; k(1−stalli)k(1 - \text{stalli}); opzione "più vicina".

Teoria collegata