Esercizi su cache (15 marzo 2016)
Transcript
Esercizi su cache (15 marzo 2016)
Tutorato 15-17 marzo 2016 Caching 1 Esercizio: Associatività Dati una cache con queste caratteristiche: #Block = 4096 (212 ), INDEX_SIZE = 10 b TAG_SIZE = 18 b DATA_dim = 64 kB (216 B). 1. Determinare il grado di associatività della cache stessa. 2. Determinare la dimensione dell’indirizzo fisico 3. Data la seguente sequenza di accessi alla memoria (sequenza di lw): 1. 2. 3. 4. 5. 6. 7. 8. 9. 0 x000000a4 0 x000000ac 0 x100000a4 0 x100000ac 0 x200000a4 0 x200000ac 0 x300000a4 0 x300000ac 0 x400000a4 Supponendo che la cache sia vuota ( valid = 0), dire quali accessi provocano hit, miss oppure miss con conflitto Soluzione della domanda 1: Il numero di vie è dal dal numero di blocchi totali diviso per il numero di set indirizzabili. Il numero di blocchi indirizzabili è dato da: #Set = 2IN DEXSIZE = 210 Quindi #way = #Block #Set = 212 210 = 22 = 4 Soluzione della domanda 2: BlockSIZE = DAT Adim #Block = 216 212 = 24 of f setSIZE = log2 BlockSIZE = log2 24 = 4 1 F IsicAddSIZE = IN DEXSIZE + T AGSIZE + of f setSIZE = 10 + 18 + 4 = 32b Soluzione della domanda 3: La cifra meno significativa corrisponde all’offset. L’INDEX occupa 2 cifre e mezza. Il TAG le altre 4 cifre e mezza. In questa particolare serie di chiamate si nota che l’INDEX resta invariato: quindi tutti e nove gli accessi fanno riferimento allo stesso INDEX, ovvero allo stesso set a 4 vie (00a). Inoltre, a coppie, si fa riferimento allo stesso blocco, in quanto in ogni coppia cambia solo il byte meno significativo. Quindi: 1. miss (TAG = 00...) 2. hit (TAG =00... , cambia solo l’offset.) 3. miss (TAG=10...) 4. hit (TAG =10... , cambia solo l’offset.) 5. miss (TAG=20...) 6. 4. hit (TAG =20... , cambia solo l’offset.) 7. miss (TAG=30...) 8. 4. hit (TAG =30... , cambia solo l’offset.) 9. miss (TAG=40..., tutti e quattro gli slot sono occupati) e conflitto. 2 Esercizio: Associatività confronto Data una cache con le seguenti caratteristiche: DATA_dim = 128 kB (217 B). Block_SIZE = 64b (8B) FIsicAdd_SIZE = 32b 1. determinare l’organizzazione della cache se: (a) TAG_SIZE = 16b (b) TAG_SIZE = 18b Soluzione della domanda 1a: Dato che la dimensione del blocco è di 8B la dimensione dell’offset è: of f setSIZE = log2 BlockSIZE = log2 23 = 3 IN DEXSIZE = F isicAddSIZE T AGSIZE Il numero di set indirizzabili è quindi: #set = 213 = 8192 Ogni insieme è composto da: 2 of f setSIZE = 32 16 3 = 13b setSIZE = #way = DAT Adim #set setSIZE BlockSIZE = = 217 213 16 8 = 24 = 16B quindi: =2 Ogni set è composto quindi da 2 blocchi da 8B cadauno e la cache è a 2-way associative. Soluzione della domanda 1a: L’offeset resta invariato. Cambiando il TAG_SIZE si ha: IN DEXSIZE = F IsicAddSIZE T AGSIZE of f setSIZE = 32 18 3 = 11b Il numero di set indirizzabili è quindi: #set = 211 = 2048 Ogni insieme è composto da: setSIZE = #way = DAT Adim #set setSIZE BlockSIZE = = 217 211 64 8 = 26 = 64B quindi: =8 Ogni set è composto quindi da 8 blocchi da 8B cadauno e la cache è a 8-way associative. 3 Esercizio: Prestazioni 1 Considerare l’esecuzione di un programma P su di una data CPU. IC = 200 · 106 (numero di istruzioni del programma) Fclock = 500M Hz I CPI medi sono: CP IL/S = 4, 5 (per le istruzioni lw e sw) CP Ioth = 2 (per le altre) Le percentuali medie sono: %LS = 40% %oth = 60% 1. Calcolare il CPI ideale 2. Calcolare il Miss_Penalty in cicli sapendo che: (a) CP Ireal = 3, 6 (b) Instrmiss rate = 4% (c) Datamiss rate = 2, 5% 3. Calcolare il tempo di escuzione ideale ed il tempo di esecuzione reale. Soluzione della domanda 1: CP Iid = CP IL/S · %L/S + CP Ioth · %oth = 4, 5 · 0, 4 + 2 · 0, 6 = 3 Soluzione della domanda 2: Chiamiamo MP il Miss_Penalty. Il CPI reale è dato dalla somma del CPI ideale e dei cicli dovuti ai miss. Per cui si ha: CP Ireal = CP Iid + Instrmiss rate · M P + Datamiss 3 rate · %L/S · M P Sostituendo i valori già in nostro possesso si ha: 3, 6 = 3 + 0, 04 · M P + 0, 025 · 0, 4 · M P da cui: MP = 0,6 0,04+0,025·0,4 = 12 cicli Soluzione della domanda 3: 1 9 Il periodo di clock vale: T = 500·10 = 2ns 6 = 2 · 10 Il tempo si esecuzione ideale è quindi: T Exeid = CP Iid · IC · T = 3 · 200 · 106 · 2 · 109 = 1, 2s T Exereal = CP Ireal · IC · T = 3, 6 · 200 · 106 · 2 · 109 = 1, 44s 3 Esercizio: Prestazioni 2 Il seguente listato: 1 . addi loop : 2. 3. 4. 5. 6. $20 , $6 , 1024⇤4 # $6 è l ’ i n d i r i z z o i n i z i a l e d i un a r r a y d i word lw $9 , 0 ( $6 ) add $9 , $9 , $10 sw $9 , 0 ( $6 ) a d d i $6 , $6 , 4 bne $6 , $20 , l o o p gira su una CPU pipeline con forwarding, file register speciale e delayed branch. La frequenza di clock è: Fclock = 500M Hz. Della cache sappiamo che: BlockSIZE = 16 word Cachepenaty = 100ns 1. Determinare il numero di cicli totali. Per questo calcolo, ignorare i cicli per riempire la pipeline. Assumere che dati e codice siano presenti in cache all’inizio dell’esecuzione. 2. Ricalcolare il numero di cicli totali e il CPI considerando ora che i dati acceduti non siano presenti in cache, ma che comunque essi siano presenti in memoria principale. Soluzione della domanda 1: Il loop interno viene eseguito 1024 volte. Per via delle dipendenze RAW bisogna inserire un NOP dopo la lw, dopo la addi e dopo la bne (delayed slot), quindi tutte le istruzioni hanno CP I = 1 poichè ad ogni ciclo di clock termina un’istruzione, salvo lw, addi e bne che, per via della NOP, terminano dopo il secondo ciclo (CP I = 2). Pertanto il numero di istruzioni del ciclo attive del ciclo è: ICciclo = 5, mentre il numero totale di istruzioni attive è: ICtot = 1 + 5 · 1024 = 5121 Il numero di cicli di clock utilizzati in un ciclo è invece: #clockciclo = 8 cosiderando che lw, addi e bne utilizzano 2 cicli cadauna. 4 Il numero totale di cicli per completare il programma è: #clocktot = 1 + 1024 · 8 = 8193 Il CPI medio è quindi: CP Iid = 8193 5121 = 1, 6 Soluzione della domanda 2: Calcoliamo i miss dovuti al caricamento nella cache dei dati. Poichè ogni blocco è costituito da 16W = 64B una volta caricato il blocco (miss), tutti e 15 gli accessi successivi hanno successo (principio di località). Quindi per eseguire il programma devo pagare #miss = 1024 16 = 64 Il peiodo di clock vale: T = 1 500·106 = 2 · 10 9 = 2ns La durata in cicli di clock di ogni miss è dunque: clockmiss = 100ns 2ns = 50 Il numero di cicli spesi quindi per l’esecuzione è dato quindi da: #clockreal = #clocktot + #miss · clockmiss = 8193 + 50 · 64 = 11393 Il CPI reale è quindi: CP Ireal = 11393 5121 = 2, 22 4 Esercizio Vien data una cache ad accesso diretto composta come segue: #block = 256 28 BlockSIZE = 16B 24 F isicAddSIZE = 32 1. Determinare Index, Tag e Offset. 2. Quanti byte di dati sono memorizzabili nella cache? 3. Quanti bytes di memoria sono necessari per realizzare la cache (includendo tag, valid bit, e dati)? 4. Data la sequenza di accessi alla cache, le cui entry sono all’inizio tutte non valide, individuare quali sono hit e miss, e quali miss provocano un conflitto: 1. 2. 3. 4. 0x1F 0x1F 0x1F 0x1B FA FA FA FA BA BB BA BA C0 C0 C4 C0 Soluzione della domanda 1: Le dimensioni dell’INDEX sono date da: IN DEXSIZE = log2 #block = log2 28 = 8b Le dimensioni dell’offset sono date da: of f setSIZE = log2 BlockSIZE = log2 24 = 4b T AGSIZE = F isicAddSIZE IN DEXSIZE 5 of f setSIZE = 32 8 4 = 20b Soluzione della domanda 2: I byte di dati memorizzabili nella cache sono dati da: #data = #block · BlockSIZE = 28 · 24 = 212 = 4096B = 4kB Soluzione della domanda 3: Alla quantità di dati memorizzabili bisogna aggiungere anche il numero di bit necessari a memorizzare il bit di validità ed il TAG. Qindi: T otalSIZE = (T AGSIZE +V alidSIZE ) 8 · 256 + #data = (20+1) 8 · 256 + 4096 = 672 + 4096 = 4768B Soluzione della domanda 4: L’offest è composto da 4 bit quindi è rappresentato dalla cifra exadecimale meno significativa. L’INDEX è composto da 8 bit quindi è rappresentato dalla terzultima e dalla penultima cifra. Il TAG dalle cifre restanti. poichèall’inizio le entry sono tutte non valide abbiamo: 1. miss: INDEX=AC 2. miss: INDEX=BC 3. hit: (INDEX=AC e offset diverso) 4. miss con conflitto (Stesso INDEX (=AC) ma TAG diverso. 4 Cache associativa: schema Costruiamo lo schema generale di una cache set-associativa a 4 vie con: #way = 4 22 Datadim = 4KB 212 BlockSIZE = 32b. F isicAddSIZE = 32 L’offset deve selezionare un byte dentro il blocco. Ogni blocco ha dimensione: 2 BlockSIZE = 32b 8b B = 4B 2 La dimensione dell’offset è quindi: of f setSIZE = log2 BlockSIZE = log2 22 = 2b La dimensione di ciascun set è di: 12 DAT Adim setSIZE = #way·Block = 222 ·22 = 28 = 256B SIZE La dimensione dell’INDEX è quindi: IN DEXSIZE = log2 setSIZE = log2 28 = 8b La dimensione del TAG è quindi: T AGSIZE = F isicAddSIZE IN DEXSIZE of f setSIZE = 32 8 2 = 22b. Lo schema è il seguente: 6 Figure 1: Cache associativa a 4vie Il multiplexer pilotato dall’offset serve a selezionare il set corretto, una volta controllato, tramite il TAG l’esistenza del blocco nella cache. 7