diff --git a/T1/TD/TD2.md b/T1/TD/TD2.md new file mode 100644 index 0000000..562d51c --- /dev/null +++ b/T1/TD/TD2.md @@ -0,0 +1,87 @@ +# 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. +