Cache e gerarchia di memoria
Cache e gerarchia di memoria
Gerarchia di Memoria:
motivazioni tecnologiche per caching.
Località:
perché il caching funziona
Processor
Input
Control
Memory
Datapath
Output
Tecnologie
I vari tipi di memoria sono realizzati con tecnologie
diverse e si differenziano per
• Costo per bit immagazzinato
• Tempo di accesso (o latenza): ritardo fra
l'istante in cui avviene la richiesta e l'istante in
cui il dato è disponibile
• Modo di accesso (seriale o casuale).
Tecnologie
• Memorie a semiconduttore con tecnologia VLSI
(memoria cache e DRAM)
• Memorie magnetiche (memoria secondaria).
• Memorie ottiche (memoria secondaria).
Memoria interna, principale e secondaria
Registri interni alla CPU
° Visibili o no al programmatore
° Memorizzano temporaneamente dati e
istruzioni
° Dimensioni: centinaia di bytes
° Tempo di accesso: tempo CPU
Memoria principale (DRAM)
° Memorizza dati e istruzioni dei programmi
° La CPU vi accede direttamente
Memoria secondaria (dischi, DVD, ..)
° dimensioni: Gbytes, Tbytes
° velocità: decine di millisecondi (milioni di
nanosecondi)
1980-2003, CPU più veloce delle DRAM ...
D.: come risolvere questa differenza?
Prestazioni
(1/ latenza)
1000
R.: utilizzare memorie “cache” tra CPU e
DRAM. Create a “memory hierarchy”.
0
CPU
60% per yr
2X in 1.5 yrs
1000
CPU
Gap grew 50% per
year
100
DRAM
9% per yr
2X in 10 yrs
10
1977: Apple II
DRAM
CPU 1000 ns
19
80
19
90
Anno
20
00
20
05 DRAM:
400 ns
Le memorie RAM statiche
La cella elementare è
costituita da 6 transistori
mos che formano un FLIPFLOP.
L’informazione permane
stabile in presenza della
tensione di alimentazione
• Tempi di accesso rapidi.
• Costi elevati.
Le memorie RAM dinamiche
° La cella elementare è costituira da un
condensatore che viene caricato (1) o
scaricato (0).
° La tensione sul condensatore tende a
diminuire (millisecondi) e quindi deve essere
ripristinata o rinfrescata
° Tempi di accesso alti
La semplicità della
cella consente capacità
molto elevate in spazi
(e costi) contenuti
Velocità CPU e DRAM
Nell’architettura VonNeuman il canale di
comunicazione tra la CPU e la memoria è il
punto critico (collo di bottiglia) del sistema.
La tecnologia consente di realizzare CPU sempre
più veloci e memorie sempre più grandi
MA la velocità di accesso delle memorie non
cresce così rapidamente come la velocità della
CPU
Gerarchia di memoria
La soluzione ottimale per un sistema di
memoria è:
° Costo minimo
° Capacità massima
° Tempi di accesso minimi
Soluzione approssimata: GERARCHIA
° Tecnologie diverse possono soddisfare al
meglio ciascuno dei requisiti.
° Una gerarchia cerca di ottimizzare
globalmente i parametri.
Gerarchia di memoria
Più livelli di memoria
Al crescere della
distanza dalla CPU
cresce il costo e la
capacità di
memorizzazione.
In ogni istante di tempo
i dati sono copiati
solamente tra ciascuna
coppia di livelli
adiacenti, per cui ci si
può concentrare su due
soli livelli.
Caches: latenza
Data in upper
memory
returned with
lower latency.
Data in lower
level returned
with higher
latency.
Da
CPU
Alla
CPU
Dati
Small, fast
Indiirizzi
Large,
slow
2005 Gerarchia di Memoria: Apple iMac G5
gestiti
dal
compilatore
Reg
gestiti
da hardware
L1 Inst L1 Data
L2
Size
1K
64K
32K
512K
Latency
(cycles)
1
3
3
11
gestiti dal Sistema
Oper., da hardware,
applicazione
DRAM
Disk
256M 80G
160
10e7
Obiettivo: creare l’illusione di una grande
economica e veloce memoria:
cioè che i programmi possano indirizzare uno
spazio di memoria grande come un disco alla
velocità con cui accedono ai registri interni
iMac G5
1.6 GHz
¤1299.00
90 nm, 58 M
transistors
L1 (64K Instruction)
512K
L2
R
e
gi
st
er
s
(1K)
CS 152 L14: Cache I
L1 (32K Data)
PowerPC
970 FX
UC Regents Spring 2005 © UCB
Latenza: tempi accesso lettura
Reg
L1 Inst
L1
Data
L2
DRAM
Disk
Size
1K
64K
32K
512K
256M
80G
Latency
(cycles)
1
3
3
11
160
1e7
Latency
(sec)
0.6n
1.9n
1.9n
6.9n
100n
12.5m
1.6G 533M 533M 145M
10M
80
Hz
Nota: tempi di accesso per accedere un dato in modo casuale
per accedere ad un blocco di dati in locazioni adiacenti i tempi
di accesso per il secondo, il terzo, .. dato sono inferiori
Ad esempio con N banchi di memoria separati posso accedere a
N dati con soli N cicli in più del primo (accesso interleaving)
Principio di località
Un sistema di memoria gerarchico è efficiente se
la modalità di accesso ai dati sono prevedibili
Il principio di località : in un dato istante i
programmi fanno accesso ad una porzione
relativamente piccola del loro spazio di
indirizzamento (sia dati che istruzioni)
° Località temporale: è probabile che un oggetto a
cui si è fatto riferimento venga nuovamente richiesto
in tempi brevi (Es: cicli in un programma: le istruzioni
sono richieste ripetutamente)
° Località spaziale: è probabile che gli oggetti che si
trovano vicini ad un oggetto a cui si è fatto
riferimento vengano richiesti in tempi brevi (Es:
esecuzione sequenziale in un programma; accesso
agli elementi di un vettore)
Località dei Programmi
Indirizzi di Memoria: un punto per accesso
No localita
Località
Temporale
Località
Spaziale
Time
Donald J. Hatfield, Jeanette Gerald: Program
Restructuring for Virtual Memory. IBM Systems
Journal 10(3): 168-192 (1971)
L’algoritmo di caching
Località Temporale: mantieni i dati
richiesti recentemente vicino alla CPU
Località Spaziale: Muovi blocchi contigui
di dati nei livelli di memoria più vicini alla
CPU
Terminologia del Caching
Hit: Dati
sono nel
livello
richiesto
Miss: dati devono
essere reperiti nel
livello inferiore
Hit Rate: la frazione
di dati trovata nel
livello richiesto
Miss Rate:
1 - Hit Rate
Tempo di Hit <<
Miss Penalty
Tempo Hit: tempo
di accesso ai datiinclude il costo di
non trovare il dato
penalità di Miss:
tempo di rimpiazzare
il blocco mancante +
tempo di consegna
alla CPU del dato
Hit & Miss
Si ha hit (successo nell’accesso) quando i dati richiesti dal livello
superiore (ad es. il processore) compaiono in qualche blocco nel livello
inferiore.
Si ha un miss (fallimento nell’accesso) se il dato non è presente nel
livello immediatamente inferiore ed occorre accedere al livello più
distante.
Uno dei parametri principali per la valutazione delle prestazioni di una
gerarchia di memoria è l’hit ratio (tasso di hit), ovvero la frazione
degli accessi in ram che si sono risolti al livello più vicino. Il miss ratio
è definito come 1-hit ratio ed indica la percentuale degli accessi che
non sono stati soddisfatti dal livello più vicino nella gerarchia.
Tempo di hit: tempo necessario a prelevare il dato dal livello più vicino,
comprendendo il tempo necessario a determinare se l’accesso è un hit
o un miss.
Tempo di miss: tempo necessario a sostituire un dato nel livello più
vicino con il blocco corrispondente nel livello inferiore, più il tempo
necessario per consegnare il dato al livello richiedente (ad es. il
processore).
La cache
Il termine cache è stato usato per la prima volta per indicare
il livello della gerarchia tra la CPU e la memoria
principale, ma è oggi utilizzato per indicare qualsiasi tipo
di gestione della memoria che tragga vantaggio dalla
località degli accessi.
Il meccanismo è semplice: Il processore interagisce
direttamente SOLO con la cache. Quando il processore
richiede una parola non presente nella cache (miss) la
parola viene trasferita dalla memoria nella cache
Occorre definire dei meccanismi per:
1. Conoscere se un dato è nella cache
2. Nel caso in cui il dato sia presente, conoscere la sua
posizione ed accedervi.
Queste operazioni devono essere eseguite nel minor tempo
possibile, poiché la velocità con cui si riesce ad accedere
ai dati nella cache influisce molto sulle prestazioni
dell’intero sistema di memoria.
Corrispondenza tra indirizzi
cache
Problema: ad una
posizione in cache
sono associate più
parole di memoria.
Come
è
possibile
sapere se il dato
presente nella cache
corrisponde
effetivamente
alla
parola richiesta?
Memoria
I tag
Oltre ai dati richiesti, la cache deve permettere la
memorizzazione di informazioni aggiuntive (tags)
che permettano la corretta gestione della gerarchia
di memorie.
Per associare univocamente una parola di memoria
ad una posizione in una cache direct mapped è
sufficiente memorizzare, assieme al dato,
anche la parte più significativa dell’indirizzo,
quella che non corrisponde ai bit utilizzati come
indice nella cache.
Per distinguere le posizioni della cache contenenti
dati validi (es.all’avvio del processore la cache è
vuota ed il suo contenuto non è significativo), il
metodo più comune è aggiungere un bit di
validità.
Sfruttare la località spaziale
Per trarre vantaggio del principio di località spaziale,
è opportuno prevedere che i blocchi della cache
siano più ampi di una sola parola. In caso di miss
saranno così caricate diverse parole adiacenti che
hanno un’elevata probabilità di essere richieste nel
prossimo futuro.
Ogni linea di cache memorizza più parole e si usa il
campo “Offset del blocco” per selezionare la
parola richiesta tra quelle presenti nella linea
Nota: una linea della cache contiene più dati ma i bit
di indirizzo e i tag non sono replicati. Perché?
CPU spazio indirizzi: vettore di “blocchi”
Block #
Nel seguito assumiamo
indirizzo di memoria 32-bit
blocco di memoria: 32 byte
Numero del blocco
0
1
0
2
Byte #
3
memoria
31
32-byte blocks
4
27 bits
5 bits
5
6
Il compito di una
cache è di
memorizzare le
pagine “più
popolari”
7
27
2 -1
.
.
.
Cache a corrispondenza diretta-direct mapped
A ciascuna parola di memoria corrisponde
esattamente una locazione della cache.
posizione nella cache=
(indir. parola) mod (numero di posizioni in cache)
Se il numero di blocchi nella cache e’ 2N allora
la posizione corrispondente della parola in cache è
data dai N bits meno significativi dell’indirizzo
Esempio:
Numero di elementi nella cache: 4
Bit per indirizzare una locazione della cache:log2(8)=2
Indirizzo della parola di memoria=
0111 01010 0010 0100
Posizione in cache: 00 (posizione 0)
Cache direct mapped
Block #
Blocchi di un dato colore
possono comparire SOLO
nella stessa linea di cache
0
1
2
32-bit Memory Address
31
7 6
5 4
0
Numero del blcoo Colore Byte #
25 bits
2 bits
5 bits
3
4
5
6
7
Indica la riga della
cache: sono sufficiente
2 bit per specificare
un colore fra quattro
32-byte blocks
27
2 -1
.
.
.
Cache Direct Mapped: esempio
31
indirizzo memoria (32 bit)
7
Cache Tag (25 bit)
6
5
Indice
Ex: 0x01
24
Cache Tag
0
No. Byte
Ex: 0x00
DATI Cache
0
=
Hit: si verifica se
i 25 bit
significativi
dell’indirizzo
sono uguali a tag
memorizzato in
cache
4
Bit
Validità
Byte
31
...
Byte
1
Byte
0
Byte
31
...
Byte
1
Byte
0
Se si verifica Hit il
dato viene fornito
alla CPU
Dimensione di una cache direct mapped
Calcolo della dimensione totale di una
cache a corrispondenza diretta
Il numero totale di bit in una cache a
corrispondenza diretta con 2n blocchi è
maggiore di: 2n x dim.blocco= 2n x 32 bits
Infatti
Assumendo che la cache abbia una capacità di 2n
parole, e blocchi di 32 bit (4 bytes) il campo tag
ha dimensione: 32 – (n+2) bit, (2 bit sono usati
per l’offset del byte, indir. su byte), la
dimensione è pari a
2n x (dim.blocco+dim.tag+dim.bit validità)=
2n x (32+32-(n+2)+1)= 2n x (63-n) bits
Indirizzo i di memoria : un punto per accesso
)
I limiti di cache direct-mapped...
Cosa succede se i blocchi
hanno lo stesso colore?
Time
Donald J. Hatfield, Jeanette Gerald: Program
Restructuring for Virtual Memory. IBM Systems
Journal 10(3): 168-192 (1971)
Cache Fully associative
Nelle cache direct mapped a ciascun blocco della memoria
corrisponde una specifica locazione nella cache
Cache fully associative (completamente associativa):
ogni blocco può essere collocato in qualsiasi locazione
della cache
Vantaggio: massima utilizzazione della cache
Contro: per ricercare un blocco nella cache è necessario
cercarlo in tutte le linee della cache.
° La ricerca sequenziale è troppo lenta
° Per velocizzare la ricerca è necessario effettuarla in
parallelo, associando un comparatore a ciascuna
posizione della cache. COSTO MOLTO ELEVATO
Cache Fully Associative
Ideali ma costose...
31
5 4
Cache Tag (27 bit)
Block # (”Tags”)
26
0
0
No. Byte
Cache Data
Holds 4 blocks
Ex: 0x04
=
Byte
31
...
Byte
1
Byte
0
=
Byte
31
...
Byte
1
Byte
0
=
=
Hit: esiste una linea della
cache in cui tag indirizzo=
tag in cache
Bit
Validità
Se si verifica Hit il
dato viene fornito
alla CPU
Cache set associative
Nelle cache direct mapped a ciascun blocco della memoria
corrisponde una specifica locazione nella cache.
In una cache fully associative ogni blocco può essere
collocato in qualsiasi locazione della cache.
Un buon compromesso è costituito dalle cache setassociative (anche n-way set associative) : ciascun
blocco di memoria ha a disposizione un numero fisso n
(>=2) di locazioni in cache. In questo caso la ricerca di
un blocco richiede di confrontare il tag in n posizioni
In questo modo si trae vantaggio della possibilità senza
aumentare il costo di ricerca in modo inaccettabile
Cache 2-Set Associative
“N-way” set associative -- N è il numero di blocchi di ciascun colore (in fig. 2)
Byte Select
(4 bits)
Index
Cache Tag (26 bits)
(2 bits)
Ex: 0x01
Cache Data
Valid
Cache Tags
Cache Tags
Cache Block
Cache Block
16 bytes
Cache Data
Cache Block
=
Hit
Left
=
Hit
Right
Hit: il dato è
trovato nel
blocco a destra
o in quello a
NOTA: in esempio la dim. blocco è la sinistra
metà per mantenere costante il
numero di bit dati in cache
Valid
Cache Block
16 bytes
PowerPC 970: 32K 2-way
set associative L1 D-cache
Cache 4-set associative
Politiche di rimpiazzamento in cache
Dopo un miss in cache se non ci sono blocchi
disponibili, quale blocco bisogna rimuovere
dalla cahce (per fare posto al blocco chiesto)?
L’ultimo blocco richiesto (LRU)?
Blocco scelto a caso (random)?
Auspicabile MA difficile da
Facile da realizzare;
implementare in cache complet.
MA è efficiente?
associat.
Miss Rate per cache 2-way Set Associative
Dimens.
Random
LRU
16 KB
5.7%
2.0%
1.17%
5.2%
1.9%
1.15%
64 KB
256 KB
Nota: nel caso 2-way è faciel realizzare LRU
Gestione delle operazioni di scrittura
Le operazioni di scrittura devono essere gestite in
maniera più complessa rispetto alle letture. Se le
scritture alterassero solo lo stato della cache e non
venissero propagate fino alla memoria principale si
creerebbero situazioni di incoerenza
Due modalità:
write-through: assicurare la coerenza di cache e
memoria scrivendo sempre i dati sia nella memoria
che nella cache.
write back: scrivere solo quando necessario
Write through
1. Accedere alla cache usando come indice i bit meno
significativi dell’indirizzo
2. Scrivere i rimanenti bit dell’indirizzo nel campo tag,
scrivere la parola di dato e settare il bit di validità
3. Scrivere la parola nella memoria principale
utilizzando l’indirizzo completo
Svantaggi: tutte le operazioni di scrittura implicano
scrittura nella memoria principale, durante le quali il
processore rimane in fase di stallo.
Possibile soluzione: buffer delle scritture. Limiti:
processore può generare richieste di scritture ad un
tasso maggiore di quello con cui la memoria porta a
termine le scritture
Nota: per scrivere non è necessario effettuare accessi in
lettura alla memoria principale.
Write back
Una tecnica alternativa che offre prestazioni in
genere superiori è il write-back.
I blocchi sono effettivamente scritti in memoria
principale solo quando è necessario rimpiazzarli
nella cache
Svantaggio: maggiore complessità implementativa
rispetto al write-through
Vantaggio: minore numero di accessi alla memoria
principale e quindi maggiore efficienza. Infatti, se
una variabile viene modificata più volte mentre è in
cache si accede alla memoria una sola volta
(quando esce dalla cache)
Gestione delle scritture
Quando si scrive è necessario verificare sempre
offset.
All’atto della scrittura si confronta il tag in cache con
quello associato all’indirizzo in cui scrivere. Se sono
uguali è sufficiente aggiornare la parola in cache.
Altrimenti è necessario caricare l’intero blocco in
cache e quindi riscrivere la parola che ha causato il
miss.
Politiche di scrittura
Write-Through
Politica
Write-Back
I dati sono
scritti solo in
I dati scritti in
cache
cache sono anche
Si aggiorna la
scritti nella
memoria di
memoria di livello
livello infer.
inferiore
solo quando si
ha miss
I miss in
scrittura
producono
operazioni di
lettura?
No
Sì
Scritture
ripetute sullo
stesso dato
provocano più
scritture in
memoria di
livello
inferiore?
Sì
No
Altra
questione:
le scritture
di blocchi
NON in cache
implicano
l’aggiorname
nto della
cache o solo
la scrittura
dei dati in
memoria di
livello
inferiore?
Prestazioni di cache
Tempo esecuz. Numero
programma = istruz. progr.*
(sec.)
Cause di miss
• miss obbligatori
• miss di conlfitto
• miss di capacità
Tipicamente miss rate
varia da
1% a 15%
Cicli
clock
per istr.
*
Secondi
per ciclo
NOTA: il numero di cicli di
clock per istr. dipende dal
Tempo Medio di Accesso in
Memoria per istr. e dati (TMAM)
TMAM = Hit Time +
(Miss Rate x Miss Penalty)
Obiettivo: Ridurre TMAM
NOTA: migliorare un fattore può
imlicare l’aumento di altri
fattori!
Cause di miss in cache: Miss di conflitto
cache M-way assoc.: N blocchi sono usati che
sono in conflitto ma M < N
Soluzione: aumentare M
(Associatività)
Miss
Rate
Miss rate
improvement
equivalent to
doubling
cache size.
cache associative
.
Altre soluzioni
Aumenta la dimensione
blocco. (perché funziona?)
NOTA: aumentare associatività
può aumentare hit time
aumentare dimensione del
blocco (a parità di dimensione
della cache può aumentare altri
tipi di conflitto
Dimens. Cache (KB)
Se aumenta Hit time aumenta TMAM
TMAM = Hit Time + (Miss Rate x Miss Penalty)
Altre cause di miss in cache
Miss di capacità
Miss obbligatori
La Cache non può
contenere tutti i blocchi
richiesti dal programma
La prima volta che si
richiede un blocco il Miss
è inevitabile
Soluzione: aumentare le
dimensioni della cache
Soluzione: indovinare e
caricare PRIMA i blocchi che
saranno chiesti nel futuro
Miss rates (relativo
fra i diversi tipi di
conflitto)
Obbligatori
Dimensione Cache (KB)
Miss rate e dimensione dei blocchi
D: Perché al crescere della dim.
del blocco il miss rate prima
diminuisce e poi cresce?
Altre domande su cache
Quali tipi di miss si verificano in cache
associative di dimensioni infinite?
R. miss obbligatori: bisogna portare un blcoo in memoria .
In una cache associtaiva di dimensione
finita, quali tipi di miss si verificano (oltre
agli obbligatori)?
R. miss di capacità. I programmi possonoi usare più
blocchi di quanto entrino in cache.
Inoltre quali tipi di miss asi verificano in una
cache set-associative o direct-mapped?
R. miss di conflitto.
Calcola il numero di bit richiesto da cache kset associative.
Esempio di accesso ad
una cache a corrispondenza
diretta
La sequenza di accessi considerata
Stato Iniziale
Primo accesso: 22=MISS
Secondo Accesso: 26=MISS
Terzo Accesso: 22 = HIT!
Quarto Accesso: 26 = HIT!
Quinto Accesso: 16 = MISS
Sesto Accesso: 3 = MISS
Settimo Accesso: 16 = HIT
Ottavo Accesso: 18 = Miss + Sovrascrittura
Cache multi livello
Aggiunta di un secondo livelo di cache:
spesso la cache primaria è nello stesso chip del processore
si introduce un altro cache basato su tecnologia SRAM tra la
cache primaria e la memoria principale (DRAM)
La penalità di miss è ridotta sensibilmente se il dato è trovato
sulla cache di secondo livello
Esempio:
CPI di 1.0 con elaboratore a 500Mhz con 5% miss rate, 200ns DRAM
accesso
Aggiungendo 2nd level cache con tempo di accesso di 20ns time
ilmiss rate si abbassa a 2%
Utilizzo di multilevel caches:
Si tenta di ottimizzare il tempo di hit sulla cache di primo livello
Si tenta di ottimizzare il tasso di miss sulla cache di secondo
livello.
Prestazioni delle cache a più livelli
Dato un Processore a 2 GHZ (tempo di clock 0.5 ns) con
CPIideale=1,0 (se tutti gli accessi sono risolti nella L1
cache).
Tempo di accesso a RAM=50ns;
Miss-rate L1 cache=5%
Miss penalty = 50 ns/ 0,5 ns/cicli di clock = 100 cicli di clock
CPIeffettivo=CPIideale+cicli di stallo per istruzione dovuti ad
accesso a RAM
CPIeffettivo=1+5%*100=6
Supponiamo di introdurre una cache di secondo livello con :
° Tempo di accesso= 5 ns ed
° grande abbastanza da avere: Miss-rate L2 cache=2%
Miss penalty L2 cache= 5 ns/0,5 ns/cicli di clock = 10 cicli di
clock
CPIeffettivo=CPIideale+cicli di stallo per istruzione dovuti ad
accesso a RAM+cicli di stallo per istruzione dovuti ad
accesso a L2 cache
CPIeffettivo=1+5%*10+2%*100=3,5