Calcolatori Elettronici
Gerarchia di memorie:
memorie cache
Massimiliano Giacomin
1
Semplice classificazione delle memorie
•  Memorie a sola lettura
(ROM, PROM, EPROM, EEPROM-Flash)
•  Memorie volatili (RAM)
- Dynamic RAM (DRAM)
> maggior densità, minor costo per bit, minor velocità
- Static RAM (SRAM)
> minor densità, maggior costo, maggior velocità
LA MEMORIA IDEALE
Economica, basso tempo di accesso, grande capacità
DRAM
SRAM + integrata
nel processore
esterna
2
Il principio di località
Località spaziale
Istruzioni e dati riferiti ⇒ tendenza a riferire quelli vicini
- es: sequenze di istruzioni, array
Località temporale
Istruzioni e dati cui si è fatto riferimento di recente
tendono ad essere riutilizzati
- es: istruzioni all’interno di un ciclo (che possono anche
riferire dati)
SOLUZIONE: usare una memoria cache
3
MEMORIA CACHE: L’IDEA DI BASE
Processore
Cache
Memoria
principale
+ VELOCE
+ COSTOSA
- CAPIENTE
+ LENTA
+ ECONOMICA
+ CAPIENTE
4
Hit e miss
•  Se il dato richiesto da un livello
compare in uno dei blocchi
presenti nel livello superiore, la
richiesta ha successo (hit).
Processore
Cache
Memoria
principale
5
Hit e miss
•  Se il dato richiesto da un livello
non compare in uno dei blocchi
presenti nel livello superiore, la
richiesta fallisce (miss).
Il blocco viene reperito
al livello inferiore
Processore
Cache
Memoria
principale
Miss di cache:
- Stallo della CPU
- richiesta alla memoria princ.
del blocco contenente
il dato cercato
- copia in cache
- ripetizione dell’accesso
in cache.
6
Prestazioni della memoria cache
Frequenza di hit (hit rate)
- frazione degli accessi che possono essere risolti nella cache
Frequenza di miss (miss rate)
- frazione degli accessi non risolti nella cache
NB:
fmiss = 1 – fhit
Tempo di hit
- tempo necessario per accedere alla cache in caso di hit
Tempo di miss (e penalità di miss)
- tempo necessario per accedere alla cache in caso di miss
(tempo per sostituire il blocco del livello superiore con quello
del livello inferiore + tempo per produrre il dato al processore)
Tmiss = Thit + PENmiss
7
Tempo medio di accesso alla memoria
(Average Memory Access Time)
TAMAT = THIT + fmiss*Pmiss
caratterizza la cache tenendo conto anche del tempo di hit
Esempio
-  CPU con Tclock=1ns,
Thit= 1 ciclo,
Pmiss = 20 cicli, fmiss = 5%
-  TAMAT = 1ns + 0,05*20ns = 2ns
(2 cicli di clock)
8
ORGANIZZAZIONE DELLA CACHE
Ipotesi semplificativa iniziale
•  Blocchi di un solo byte
indirizzo
Mem. principale
Mem. cache
?
…
•  Problema del piazzamento del blocco:
- Dato un blocco in memoria centrale (o
indirizzo) dove può essere nella cache?
- Come determinare se il blocco (indirizzo)
è presente o meno nella cache?
9
Il problema del piazzamento del blocco
•  Dato un indirizzo di un blocco nella memoria principale,
qual è la sua posizione nella memoria cache?
⇒ necessaria corrispondenza tra l’indirizzo in memoria
del blocco e la locazione nella memoria cache.
•  Questa corrispondenza dipende dall’architettura della
memoria cache:
–  Cache completamente associativa
–  Cache a corrispondenza diretta
–  Cache set-associativa a n vie
10
Cache completamente associativa
•  Un blocco può essere posto in qualunque posizione nella cache
Caso blocco = 1 byte
indirizzo
Memoria cache
V
etichetta
?
Per ogni blocco nella cache vengono memorizzati:
- bit di validità (valid bit) che indica se il blocco contiene dati
(all’inizio i bit di tutti i blocchi indicano NON validità)
- etichetta (TAG) che contiene l’indirizzo (se blocco valido)
11
CASO GENERALE: blocchi (memoria centrale e cache) di 2k byte
k bit
indirizzo di byte
offset
Indirizzo del blocco
0
2k byte
1
2
…
Memoria centrale
NB: indirizzo del blocco = indirizzo del byte / byte per blocco
12
ORGANIZZAZIONE CACHE COMPLETAMENTE ASSOCIATIVA
Indirizzo blocco
offset
Memoria cache
?
?
?
BLOCCO
…
-  etichetta non memorizza l’intero indirizzo, ma l’indirizzo di blocco
-  offset indentifica il byte all’interno del blocco
NB: con la cache completamente associativa occorre esaminare tutte
le etichette per verificare se il blocco richiesto è in cache
13
Esempio
indirizzo richiesto dal processore
157
Indirizzo blocco
2
offset
0
157
1
157 BLOCCO
1
189
…
Memoria cache
14
Cache a corrispondenza diretta (direct mapped)
•  Ogni blocco della memoria centrale (e quindi ogni indirizzo)
può risiedere solo in un preciso blocco dei 2c blocchi della cache,
indicato dai c bit meno significativi dell’indirizzo di blocco
Indirizzo di blocco
Indirizzo di byte
etichetta
indice bl.
offset
c bit: posizione blocco in cache
Memoria
cache
BLOCCO
BLOCCO
…
BLOCCO
-  l’etichetta corrisponde ai bit più significativi dell’indirizzo di blocco
-  la ricerca di un blocco in cache richiede un solo confronto
15
etichetta
indice bl.
offset
0
Cache
1
0
2
1
3
2
4
3
5
6
(indice blocco) =
(indirizzo blocco)
modulo (# blocchi in cache)
7
…
16
UN ESEMPIO (0)
•  cache con 8 blocchi
(NB: block addr indica l’indirizzo di blocco, offset non indicato!)
Stato iniziale
Index
V
000
N
001
N
010
N
011
N
100
N
101
N
110
N
111
N
Tag
Data
17
UN ESEMPIO (1)
•  cache con 8 blocchi
(NB: block addr indica l’indirizzo di blocco, offset non indicato!)
Lettura
Block addr
Binary addr
Hit/miss
Cache block
22
10 110
Miss
110
Index
V
000
N
001
N
010
N
011
N
100
N
101
N
110
N
111
N
Tag
Data
18
UN ESEMPIO (1)
•  cache con 8 blocchi
Lettura
Block addr
Binary addr
Hit/miss
Cache block
22
10 110
Miss
110
Index
V
000
N
001
N
010
N
011
N
100
N
101
N
110
Y
111
N
Tag
Data
10
Mem[10110….]
19
UN ESEMPIO (2)
Lettura
Block addr
Binary addr
Hit/miss
Cache block
26
11 010
Miss
010
Index
V
000
N
001
N
010
N
011
N
100
N
101
N
110
Y
111
N
Tag
Data
10
Mem[10110….]
20
UN ESEMPIO (2)
Lettura
Block addr
Binary addr
Hit/miss
Cache block
26
11 010
Miss
010
Index
V
000
N
001
N
010
Y
011
N
100
N
101
N
110
Y
111
N
Tag
Data
11
Mem[11010….]
10
Mem[10110….]
21
UN ESEMPIO (3)
Lettura
Block addr
Binary addr
Hit/miss
Cache block
22
10 110
Hit
110
26
11 010
Hit
010
Index
V
000
N
001
N
010
Y
011
N
100
N
101
N
110
Y
111
N
Tag
Data
11
Mem[11010….]
10
Mem[10110….]
22
UN ESEMPIO (4)
Lettura
Block addr
Binary addr
Hit/miss
Cache block
16
10 000
Miss
000
3
00 011
Miss
011
16
10 000
Hit
000
Index
V
000
N
001
N
010
Y
011
N
100
N
101
N
110
Y
111
N
Tag
Data
11
Mem[11010….]
10
Mem[10110….]
23
UN ESEMPIO (4)
Lettura
Block addr
Binary addr
Hit/miss
Cache block
16
10 000
Miss
000
3
00 011
Miss
011
16
10 000
Hit
000
Index
V
Tag
Data
000
Y
10
Mem[10000….]
001
N
010
Y
11
Mem[11010]
011
Y
00
Mem[00011….]
100
N
101
N
110
Y
10
Mem[10110]
111
N
24
UN ESEMPIO (5)
Lettura
Block addr
Binary addr
Hit/miss
Cache block
18
10 010
Miss
010
Index
V
Tag
Data
000
Y
10
Mem[10000]
001
N
010
Y
11
Mem[11010]
011
Y
00
Mem[00011]
100
N
101
N
110
Y
10
Mem[10110]
111
N
25
UN ESEMPIO (5)
Lettura
Block addr
Binary addr
Hit/miss
Cache block
18
10 010
Miss
010
Index
V
Tag
Data
000
Y
10
Mem[10000]
001
N
010
Y
10
Mem[10010]
011
Y
00
Mem[00011]
100
N
101
N
110
Y
10
Mem[10110]
111
N
26
Cache set-associativa a n vie
•  La cache è suddivisa in insiemi (set), ognuno con n blocchi
•  Un blocco può essere messo in un solo insieme (determinato dal suo
indirizzo) ma può occupare uno qualunque degli n blocchi componenti
Indirizzo di byte
etichetta
indice set
offset parola
offset
byte
indica posizione (set) blocco in cache
?
?
…
[in questo caso: set-associativa a 2 vie]
27
Cache set-associativa a n vie
•  La cache è suddivisa in insiemi (set), ognuno con n blocchi
•  Un blocco può essere messo in un solo insieme (determinato dal suo
indirizzo) ma può occupare uno qualunque degli n blocchi componenti
Indirizzo di byte
etichetta
indice set
offset parola
offset
byte
indica posizione (set) blocco in cache
?
?
2k insiemi
⇒ k bit
…
[in questo caso: set-associativa a 2 vie]
#insiemi della cache: #blocchi della cache / n
28
Una visione di insieme: diversi gradi di associatività
•  Per una cache con 8 blocchi
29
Una visione di insieme: indirizzi
•  Indirizzamento diretto: blocco memoria in posizione fissa
Indirizzo
etichetta
blocco
offset
Indica blocco in cache
•  Indirizzamento set-associativo
Indirizzo
etichetta
set
offset
•  Indirizzamento completamente associativo
Indirizzo
etichetta
offset
30
Il problema della sostituzione del blocco
•  Se un blocco è caricato dalla memoria centrale alla memoria cache
ed il set coinvolto è pieno, quale dei suoi blocchi sostituire?
MEM C.LE
CACHE
…
?
Set
…
- LRU (least recently used)
ideale, ma costoso per cache con grado di associatività > 2
- LRU approssimato
- Random: per associatività di grado 2, fmiss solo 1.1 volte rispetto a
LRU e la differenza decresce per gradi di associatività maggiori
31
Il problema della coerenza dei dati
CPU
CPU
CPU
Cache
Cache
Cache
A’
100
A’
100
A’
100
B’
200
B’
1450
B’
200
Memoria
Memoria
Memoria
A
100
A
100
A
745
B
200
B
200
B
200
I/O
Cache e Memoria
Coerenti
[A]=[A’]& [B]=[B’]
I/O
Cache e Memoria
Incoerenti per operazione CPU
[B]≠[B’], [B] vecchio
I/O
Cache e Memoria
Incoerenti
per operazione di I/O
[A] ≠[A’]. [A’] vecchio
32
Lettura e scrittura in cache
Mem. C.LE
LETTURA (non genera inconsistenze)
…
CPU
Cache
in caso
di MISS
…
Spiegazione lucido precedente
•  hit: la parola/byte richiesta viene consegnata al processore
•  miss (tipicamente richiede più cicli di clock):
- stallo della CPU in fase di lettura dalla memoria cache
- un controllore separato accede alla memoria principale
> invio indirizzo richiesto alla memoria principale
> lettura dalla memoria del blocco
> aggiornamento tag del blocco caricato in cache
- CPU riprende ripetendo il fetch, questa volta con hit!
34
SCRITTURA
Usando la tecnica del write-through
Mem. C.LE
…
CPU
Cache
…
35
SCRITTURA
Usando la tecnica del write-through
Mem. C.LE
…
Write
buffer
CPU
…
Cache
…
36
Spiegazione lucidi precedenti
Usando la tecnica del write-through
•  hit:
- il dato è scritto sia nella cache sia in memoria (no inconsistenza)
•  miss:
- trasferimento del blocco da memoria a cache
- scrittura del dato sia nella cache sia in memoria
Tecnica costosa in termini di tempo (attesa del
tempo di accesso della memoria principale)
in pratica è necessario l’uso di write buffer
- stallo in hit solo quando il buffer è pieno
- maggiore è la frequenza di scrittura maggiore deve
essere la capienza del buffer
37
SCRITTURA
Usando la tecnica del write-back
Mem. C.LE
…
CPU
dirty bit
Cache
1
…
38
Rimpiazzo blocco Usando la tecnica del write-back
Mem. C.LE
…
CPU
dirty bit
Cache
se
dirty bit ==1
…
39
Spiegazione lucidi precedenti
(tecnica del write-back)
•  hit:
- il dato è scritto solo nella cache (si genera inconsistenza)
ed un bit associato al blocco della cache (dirty bit) posto a 1
•  miss:
- trasferimento del blocco da memoria a cache
- scrittura del dato come nel caso di hit
•  Il blocco è trasferito in memoria principale solo quando deve
essere rimpiazzato e solo se è stato effettivamente modificato
da una scrittura (se dirty bit = 1)
•  Anche in questo caso si può usare un write buffer quando
un blocco deve essere rimpiazzato e scritto in DRAM
40
Trasferimento DA dispositivo A memoria DRAM
Mem. C.LE
…
bit
validità
Cache
0
DMA
…
41
41
Trasferimento DA memoria DRAM A dispositivo
Mem. C.LE
…
(In caso di write-back!):
FLUSH DELLA CACHE
dirty bit
Cache
1
DMA
1
…
42
42
Spiegazione lucidi precedenti:
Trasferimento dispositivo/memoria principale
•  ogni volta che DMA trasferisce dati
da dispositivo a memoria DRAM:
se il blocco è presente in cache il sistema operativo
pone il bit di validità a 0 [dati incoerenti con DRAM]
•  ogni volta che DMA trasferisce dati da DRAM [blocco] a dispositivo:
- se cache usa write-through: nessun problema (DRAM coerente)
- con write-back: la memoria può non riflettere la cache,
una possibilità è lo svuotamento (flush) cache:
i blocchi con dirty bit a 1 sono trasferiti
in memoria DRAM
43
PRESTAZIONI: VALUTAZIONE QUALITATIVA
Thit
Dim. blocchi
Associatività
↑
PENmiss
↓
↑
↓
↓
Banda bus
Write back*
vs.
write-through
fmiss
↓
↑
* i buffer rendono più complicata la comparazione
44
IMPATTO DELLA CACHE SU PRESTAZIONI
Assunzione: Thit pari a Tclock (hit impiega sempre 1 ciclo di clock)
TCPU = (I * CPIid + Cmiss) * Tclock
= I * (CPIid + δmiss) * Tclock
Ovvero: CPI = CPIid + δmiss
δmiss = δmiss-lettura + δmiss-scrittura
= flettura*fmiss-lettura*Plettura + fscrittura*fmiss-scrittura* Pscrittura
NB: δmiss indica i cicli di stallo medi per istruzione!
45
CACHE MULTILIVELLO
•  Per avere tempi di accesso paragonabili a Tclock processore:
- cache integrata all’interno del chip processore
- piccole dimensioni e capacità
⇒ Thit ridotto, ma aumenta fmiss
•  Oltre alla cache L1, si usa una cache L2 (interna o esterna):
- ad ogni miss della cache L1, si accede a cache L2 con tempo
di accesso molto inferiore rispetto a DRAM (riduzione Pmiss)
- solo se ho un miss anche in cache L2 si accede a DRAM
•  Molti sistemi usano anche una cache L3
46
ESEMPIO: Intel Core i7
(Source: Intel)
Per ogni core: L1 (32kB instruction + 32 kB data, set-associativa 8 vie)
L2 (256kB, set-associativa 8 vie)
Condivisa:
L3 (8MB, set-associativa 16 vie)
47
Gerarchia di memorie (1)
Livello superiore
Registri
+ veloce
Cache
Memoria principale
Disco
Nastro
+ grande
Livello inferiore
Tecnica per far apparire la memoria grande ma veloce : portare vicino alla CPU
blocchi di parole che prevedibilmente saranno usate in base ai principi di località
48
Gerarchia di memorie (2)
Processore
Registri
Cache
Blocco
Memoria
principale
Unità minime di
informazione che
possono essere
presenti o assenti
(tra i due livelli
coinvolti)
Pagina
49
APPENDICE
50
Memorie: forma
Ampiezza:
m bit per cella
Altezza:
2k celle
indirizzabili
…
k linee di indirizzo
…
m linee
dato
Dimensione (in bit): altezza * ampiezza
Esempio
32K x 8: ⇒ dimensione 32 KB
⇒ 15 linee di indirizzo e 8 linee dato
51
Memorie a sola lettura vs. volatili (1)
•  Memorie a sola lettura
(ROM, PROM, EPROM, EEPROM-Flash)
…
Decoder
k linee di indirizzo
Cella
…
m linee dato
Linea di parola
Linea di bit
2k linee di
parola
-  ROM: connessione/non connessione
- PROM: fusibile
- EPROM: sempre a massa +
transistor speciale
- FLASH: cancellazione elettrica,
a blocchi
52
Memorie a sola lettura vs. volatili (2)
•  Memorie volatili (RAM): SRAM vs. DRAM
DRAM (RAM Dinamica)
•  Cella di memoria costituita
da un singolo transistor
Linea di parola
Linea di bit
- maggior densità
- minor costo
- minor velocità – 5/6 volte
(e necessità di refresh)
SRAM (RAM Statica)
•  Cella di memoria costituita
da latch (4-6 transistor)
- minor densità
- maggior costo
- maggior velocità
53
Alcuni valori di riferimento (solo indicativi)
•  Static RAM (SRAM)
–  1ns – 20 ns, $2000 – $5000 per GB
•  Dynamic RAM (DRAM)
–  50ns – 70ns, $20 – $75 per GB
•  Magnetic disk
–  5ms – 20ms, $0.20 – $2 per GB
NB: con un processore che lavora a 1Ghz, Tclock = 1ns !!!
54
Esempio: schema con 256 blocchi di 16 parole (ciascuna di 4 byte)
55
Nota al lucido precedente
Se ciascun blocco ha m parole di 4 byte ciascuna, possiamo
suddividere il campo offset in due sottocampi
K bit
Indirizzo del blocco
offset parola
offset
byte
m bit
2 bit
La lettura dalla memoria è in genere di un’intera parola
56
Cache set-associativa a 4 vie (256 insiemi) con blocchi di 1 parola
NB: multiplexer
ad ingresso decodificato
57