# 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.