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