1.6 KiB
Correction TD2
1 Etiquettes et index de cache
1.1 Index :
(1) 2²¹ 2¹⁷ blocs (2²¹/2⁴) 17 bits
(2) 2²² (2²³/2⁵) 17 bits
(3) 2²² (2²²/(2⁵*4)) 15 bits
Déplacement :
(1) 4 bits (16 octets)
(2) 5 bits (32 octets)
(3) 5 bits
Etiquette :
(1) 31 - 4 - 17 = 10 bits
(2) 31 - 5 - 17 = 9 bits
(3) 31 - 5 - 15 = 11 bits
1.2
Etiquette :
(1) 10 bits
(2) 9 bits
(3) 11 bits
Ctl :
(1) 1 (bit de validité)
(2) 1 + 1 (bit de réecriture)
(3) 1 + 1
Ligne d'instruction ou de données :
(1) 16 * 8 => 128 + 10 + 1
(2) 256 + 9 + 2 = 267 bits
(3) 256 + 11 + 2 = 269 bits
Nombre total de bits du cache :
(1) 2²¹ / 2⁴ = 128k soit 2¹⁷ * 139 = 17792 kbits
(2) 2²² / 2⁵ = 128k => 2¹⁷ * 267 = 34176 kbits
(3) 34432 kbits (accueille le meme nombre de lignes meme si 4 lignes par bloc)
2 Caches données
2.1
(1) Correspondance directe (2) Associativité par 2
Index :
(1) 2¹³/2⁵ = 2⁸ 8 bits
(2) 7 bits
Déplacement :
(1)(2) 5 bits
Pour que X et Y occupent le mot 0 de la ligne 0 il fut que l'index et le déplacement soient à 0. Soit (1) 13 bits / (2) 12 bits à 0. Donc un multiple de (1) 2¹³ | (2) 2¹².
Soit :
(1) X[0] et X[2048]
(2) X[0], X[1024], X[2048] et X[3072]
2.2
(1)
b1. X[0] et Y[0] commencent à l'index 0 et à chaque itération Y va écraser X. On a 2 défauts par itération.
b2. 4 défauts/it
b3. 2 défauts/it
b4. 3 déf/it si le compilateur est intelligent\
(2)
b1. It 1 : 2 défauts puis cache hit => 1/4 déf/it
b2. On a re 4 déf/it
b3. 1/4 déf/it (Est-ce que le compilateur peut passer de b2 à b3 ?)
b4. 2 + 1/8 meilleur cas.