Blocchi di più parole

Transcript

Blocchi di più parole
Blocchi di più parole
Per trarre vantaggio dalla località spaziale non conviene avere
blocchi di una sola parola ma blocchi di più parole che occupano
nella memoria principale posizioni vicine.
Esempio: blocchi di 4 parole (16 byte) ciascuno.
=
Mux
hit
dato
La coppia di bit 3-2 dell’indirizzo permette di individuare la
parola all’interno del blocco.
Esercizio.
Si consideri una cache con 64 blocchi di 16 byte ciascuno. A quale
numero di blocco corrisponde il byte di indirizzo 1200?
Poiché ogni blocco contiene 16 byte, il byte di indirizzo 1200 è
nel blocco:
1200:16 = 75.
Il blocco 75 viene mappato nel blocco della cache:
75 modulo 64 = 11
E il byte di indirizzo 16?
16:16 = 1.
1 modulo 64 = 1
E il byte di indirizzo 20?
20:16 = 1.
1 modulo 64 = 1
Blocco 0
Blocco 1
0.… … … … ..
16.… … … …
15
31
Blocco 2
32.… … … …
47
Blocco3
48… … … … .
63
Miss in scrittura con blocchi di più parole
La gestione dei successi e dei fallimenti durante le operazioni di
lettura vengono gestiti come per la corrispondenza blocco-singola
parola.
Per le operazioni di scrittura non è possibile scrivere nella cache
una sola parola senza controllare la corrispondenza dell’intero
blocco.
Se questa corrispondenza non c’e’ il nuovo blocco deve essere
letto prima che la parola al suo interno venga modificata.
Z1
Z2
cache
Z3
Z4
Blocco Z
Y1
Y2
Y3
Y4
Blocco Y
Se deve essere riscritta la seconda parola del blocco Z nella cache
e questa corrisponde alla seconda parola nel blocco Y della RAM,
prima di sostituire nella cache la seconda parola di Z deve essere
controllata la corrispondenza delle altre parole e, se necessario,
trasferito tutto il blocco Y.
Trasferimento di blocchi di più parole: svantaggi
L’aumento della dimensione di un blocco cerca di sfruttare il
principio della località spaziale e quindi diminuire il numero di
fallimenti, ma …
- la gestione del singolo fallimento aumenta con l’aumentare
della dimensione del blocco;
- l’aumento della dimensione dei blocchi fa diminuire il numero
di blocchi presenti nella cache e ciò, se la cache non è tanto
grande, può far perdere il vantaggio della località temporale, e
quindi crescere il numero dei fallimenti;
- l’aumento della dimensione del blocco fa aumentare il numero
di oggetti nello stesso blocco “non” spazialmente vicini, e
quindi può anche far perdere il vantaggio della località spaziale.
Misura della performance di una Cache
Tempo CPU =
( Numero di cicli di clock spesi in esecuzione +
Numero di cicli di clock spesi in stallo di memoria)
× Durata del ciclo di clock
dove assumiamo che gli stalli di memoria siano quelli causati da
un fallimento (miss) della cache.
Numero di cicli di clock spesi in stallo di memoria =
Cicli di stallo per lettura + Cicli di stallo per scrittura
Supponendo che
- il tempo perso per il passaggio di informazione sia lo stesso sia
in caso di miss in lettura che in caso di miss in scrittura
( miss penality per lettura = miss penality per scrittura)
- e che gli stalli per scrittura del write-buffer siano trascurabili si
può accettare l’approssimazione:
Numero di cicli di clock spesi in stallo di memoria =
Accessi alla memoria
× Miss ratio (Frequenza miss rispetto agli accessi)
× Miss penality
Nel caso di memorie istruzioni e dati separate anche l’analisi deve
essere separata.
Esempio. Si consideri un programma (gcc) con le seguenti
caratteristiche:
- frequenza di accessi alla memoria (rispetto al numero di
istruzioni) = 36%
- miss rate per la cache delle istruzioni = 2%
- miss rate per la cache dei dati = 4%
Si supponga di eseguire il programma su di una macchina con
miss penality di 40 cicli (ogni miss “costa” 40 cicli “in più”) ed un
valore di CPI = 2 nel caso di assenza di stalli.
1. Quale è il numero di cicli di clock spesi in stallo di memoria?
Per la cache delle istruzioni si ha:
Numero accessi = Numero Istruzioni
× Miss ratio
× Miss penality
I ×
2% ×
40 =
---------0.80 × I
Per la cache dei dati si ha:
Accessi alla memoria
× Miss ratio
× Miss penality
I × 36% ×
4% ×
40 =
-----------0.56 × I
Numero totale di cicli di clock spesi in stallo di memoria =
0.80 × I + 0.56 × I = 1.36 × I
2. Quale è il valore di CPIstall cioè il numero medio di cicli per
istruzione che tiene conto degli stalli?
2 + (1.36 × I) / I = 3.36
3. Di quanto sarebbe migliorabile la performance con una
macchina con una cache ideale che non crea stalli?
Tempo CPU con stalli
--------------------------------- =
Tempo CPU con cache ideale
I × CPIstall × Durata ciclo di clock
--------------------------------------------I × CPIideale × Durata ciclo di clock
= 3.36 / 2 = 1.68
4. Si supponga di migliorare le prestazioni del processore
riducendo la CPI (senza modificare la frequenza di clock) da 2 a
1.
- Quale è in questo caso il rapporto tra le prestazioni di una
macchina con una cache ideale e quella con stalli?
Nella nuova versione
CPIstall = 1 + (1.36 × I) / I = 2.36
CPIideale = 1
Quindi la realizzazione ideale sarebbe 2.36 volte più veloce di
quella con stalli.
Nota: La performance della macchina ideale è raddoppiata
mentre per la macchina con stalli si passa da 3.36 a 2.36.
Perché cosi’poca differenza?
Perché aumentando le prestazioni i punti più critici vengono
evidenziati (legge di Amdahl).
Il tempo perso in stalli di memoria aumenta (in percentuale)
quando l’esecuzione, senza stalli, diminuisce.
Prima era:
1.36
------- = 41%
3.36
cicli per stallo
1.36
------- = 58%
2.36
cicli per stallo
cicli totali
Ora:
cicli totali
Si supponga infine di raddoppiare la frequenza di clock ma che
il tempo totale dedicato alla gestione dei miss non cambi.
- Tenendo conto degli stalli, quale è in questo caso il rapporto
tra le prestazioni delle due macchine?
Avendo supposto che il tempo totale dedicato alla gestione dei
miss non cambi, la miss penality è ora 80.
Ripetendo le operazioni precedenti si ottiene il nuovo valore di
CPIstall-new :
2 + [(I × 2% × 80) + (I × 36% × 4% × 80)] / I = 2 + 2.75 = 4.75
tempo esecuzione con clock lento
---------------------------------------------- =
tempo di esecuzione con clock veloce
I × CPIstall × durata clock lento
3.36 ×2
------------------------------------------- = ----------------- = 1.41
I × CPIstall-new × durata clock lento/2
4.75
Causa gli stalli di memoria, pur raddoppiando la frequenza del
clock si ha un incremento delle prestazioni di 1.41 volte (anziché
di 2 volte).
Esercizio.
Si considerino due implementazioni di una cache ad
indirizzamento diretto:
C1 con 16 blocchi da 1 parola e miss penality di 8 cicli di clock.
C2 con 4 blocchi da 4 parole e miss penality di 11 cicli di clock.
Supponendo che le cache siano inizialmente vuote,
1) trovare una sequenza di accessi in cui C2 ha miss rate più
basso rispetto a C1 ma un maggior numero di cicli di clock spesi
in stallo di memoria;
Consideriamo i seguenti indirizzi di parola in una sequenza di
letture:
0
4
8
12
5
0
1
2
3
1
C2
miss
miss
miss
miss
hit
4 ×11 = 44
C1
0
miss
4
miss
8
miss
12
miss
5
miss
5 ×8 = 40
2) trovare una sequenza di accessi in cui C2 ha miss rate più alto
rispetto a C1.
1
16
1
16
0
0
0
0
C2
miss
miss
miss
miss
1
0
1
0
C1
miss
miss
hit
hit