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