Ejercicios Tema 4 - Memorias Caché

Ejercicio 1

🎯
Sea una memoria caché de correspondencia directa. Suponiendo siempre que la unidad direccionable de la memoria es el byte, realizar la división en campos de una dirección de memoria en los siguientes casos
notion image

Apartado A

Parámetros
  • Tamaño de las direcciones de memoria son 20-bits → n=20n = 20
  • Número de líneas de la caché son 88r=3=log28\boxed {r = 3} = \log_2 8
  • Tamaño de un bloque son 8 palabras → q=3=log28\boxed {q = 3} = \log_2 8
  • Tamaño de una palabra son 32-bits (4 Bytes)→ q=2=log24\boxed {q = 2} = \log_2 4
Tamaño de la etiqueta: e=12=nrqp\boxed{e = 12} = n-r-q-p
Etiqueta
Num. línea
Desp. palabra
Desp. byte
12
3
3
2

Apartado B

Parámetros
  • n=32n = 32
  • r=7r = 7
  • q=6q = 6
  • p=3p = 3
Etiqueta
Num. línea
Desp. palabra
Desp. byte
16
7
6
3

Apartado C

Parámetros
  • n=16n = 16
  • r=5r = 5
  • q=1q = 1
  • p=0p = 0
Etiqueta
Num. línea
Desp. palabra
Desp. byte
10
5
1
0

Apartado D

Parámetros
  • n=36n = 36
  • r=10r = 10
  • q=7q = 7
  • p=1p = 1
Etiqueta
Num. línea
Desp. palabra
Desp. byte
18
10
7
1

Ejercicio 2

🎯
Sea una memoria caché de correspondencia totalmete asociativa. Suponiendo siempre que la unidad direccionable de la memoria es el byte, realizar la división en campos de una dirección de memoria en los siguientes casos
notion image

Apartado A

Parámetros
  • Tamaño de las direcciones de memoria son 20-bits → n=20n = 20
  • Tamaño de un bloque son 8 palabras → q=3=log28\boxed {q = 3} = \log_2 8
  • Tamaño de una palabra son 32-bits (4 Bytes)→ q=2=log24\boxed {q = 2} = \log_2 4
Tamaño de la etiqueta: e=15=nqp\boxed{e = 15} = n-q-p
Etiqueta
Desp. palabra
Desp. byte
15
3
2

Apartado B

Parámetros
  • n=32n = 32
  • q=6q = 6
  • p=3p = 3
Etiqueta
Desp. palabra
Desp. byte
23
6
3

Apartado C

Parámetros
  • n=16n = 16
  • q=1q = 1
  • p=0p = 0
Etiqueta
Desp. palabra
Desp. byte
15
1
0

Apartado D

Parámetros
  • n=36n = 36
  • q=7q = 7
  • p=1p = 1
Etiqueta
Desp. palabra
Desp. byte
28
7
1

Ejercicio 3

🎯
Sea una memoria caché de correspondencia asociativa por conjuntos. Suponiendo siempre que la unidad direccionable de la memoria es el byte, realizar la división en campos de una dirección de memoria en los siguientes casos
notion image

Apartado A

Parámetros
  • Tamaño de las direcciones de memoria son 20-bits → n=20n = 20
  • Número de conjuntos de la caché son 44s=2=log24\boxed {s = 2} = \log_2 4
  • Tamaño de un bloque son 8 palabras → q=3=log28\boxed {q = 3} = \log_2 8
  • Tamaño de una palabra son 32-bits (4 Bytes)→ q=2=log24\boxed {q = 2} = \log_2 4
Tamaño de la etiqueta: e=13=nsqp\boxed{e = 13} = n-s-q-p
Etiqueta
Num. conjunto
Desp. palabra
Desp. byte
13
2
3
2

Apartado B

Parámetros
  • n=32n = 32
  • s=4s = 4
  • q=6q = 6
  • p=3p = 3
Etiqueta
Num. conjunto
Desp. palabra
Desp. byte
19
4
6
3

Apartado C

Parámetros
  • n=16n = 16
  • s=3s = 3
  • q=1q = 1
  • p=0p = 0
Etiqueta
Num. conjunto
Desp. palabra
Desp. byte
12
3
1
0

Apartado D

Parámetros
  • n=36n = 36
  • s=6s = 6
  • q=7q = 7
  • p=1p = 1
Etiqueta
Num. conjunto
Desp. palabra
Desp. byte
22
6
7
1

Ejercicio 4 (ejercicio de examen)

🎯
Tres computadores disponen del mismo procesador, que tiene un bus de datos de 32 bits y un bus de direcciones también de 32 bits. Cada uno de ellos tiene una memoria caché con capacidad para 4 kB (sin contar etiquetas ni bits de control) y todos ellos realizan transferencias entre caché y memoria principal mediante bloques de 4 palabras.
 
Se pide indicar en qué campos se divide una dirección de memoria, en qué orden se encuentra cada uno, así como su tamaño en bits. En los tres casos habrá que realizar un dibujo explicativo de la división en campos de la dirección.

Apartado A

🎯
El primer computador posee de una memoria caché de correspondencia directa
Parámetros
  • n=32n = 32
💡
Para calcular el número de líneas de la caché, debemos realizar unos cálculos a partir de la siguiente información
  • Cada líneas almacena un bloque, cada bloque ocupa 4 palabras
  • La caché tiene 4kB de almacenamiento (sin contar las etiquetas ni los bits de metadatos)
Por lo que si cada bloque ocupa 4 palabras y cada palabra ocupa 32-bits ó 4 Bytes entonces cada bloque ocupa 4×4=164 \times 4 = 16 bytes
Ahora dividiremos el almacenamiento de la caché entre el tamaño de cada bloque
n_lineas=421016=256n\_lineas = \cfrac{4 · 2^{10}}{16} = 256
Si lo calculamos todo en una operación…
n_lineas=4kB×210Bytes1kB4palabras1bloque×4Bytes1palabra=256 bloquesn\_lineas = \cfrac {4kB \times \frac{2^{10}Bytes}{1kB}} {\frac{4 palabras}{1bloque} \times \frac{4Bytes}{1palabra}} = 256\ bloques
Ahora calcularemos que r=log2256r = \log_2 256
  • r=8r = 8
  • q=2q = 2
  • p=2p = 2
Etiqueta
Num. línea
Desp. palabra
Desp. byte
20
8
2
2

Apartado B

🎯
El segundo computador tiene una caché totalmente asociativa
Parámetros
  • n=32n = 32
  • q=2q = 2
  • p=2p = 2
Etiqueta
Desp. palabra
Desp. byte
28
2
2

Apartado C

🎯
El tercer computador tiene una caché asociativa por conjuntos de 8 vías
Parámetros
  • n=32n = 32
💡
Para halla el número total de conjuntos, realizaremos las siguientes operaciones
taman~o_conjunto=taman~o_linea×n_viastamaño\_conjunto = tamaño\_linea \times n\_vias
Como cada línea son 4 palabras y cada palabra son 4 Bytes, cada línes ocupa 16 bytes16\ bytes. Por lo que cada conjunto consta de 16×8=128 bytes16 \times 8 = 128\ bytes
n_conjuntos=4210128=32 conjuntosn\_conjuntos = \cfrac{4·2^{10}}{128} = 32\ conjuntos
  • s=5s = 5
  • q=2q = 2
  • p=2p = 2
Etiqueta
Num. conjunto
Desp. palabra
Desp. byte
23
5
2
2

Apartado D

🎯
Si el tiempo de acceso al nivel superior de la jerarquía de memoria es de 2,4 ns y al inferior es de 40 ns, ¿cuál debe ser la tasa de aciertos de la caché para conseguir un tiempo medio de acceso a la memoria de 5 ns?
💡
Sabiendo que el tiempo medio de acceso a memoria (AMAT) sigue la siguiente fórmula
tiempo_acierto×tasa_acierto+tiempo_fallo×tasa_fallo tiempo\_acierto \times tasa\_acierto + tiempo\_fallo\times tasa\_fallo
ó
tiempoacierto+tasa_fallo×penalizaciontiempo acierto + tasa\_fallo \times penalizacion
Sabiendo que…
  • Tiempo de acierto → 2.4ns2.4ns
  • Tasa de acierto → ??
  • AMAT → 5ns5ns
  • Penalización → 40ns40ns
Planteamos una ecuanción sustituyendo los datos en la segunda fórmula
tasa_fallo=AMATtiempo_aciertopenalizacion=52.440=0.065tasa\_fallo = \cfrac{AMAT - tiempo\_acierto}{penalizacion} = \cfrac{5 -2.4}{40} = 0.065
Por lo que la tasa de acierto será:
tasa_acierto=1tasa_fallo=10.065=0.935tasa\_acierto = 1 - tasa\_fallo = 1 - 0.065 = \boxed{0.935}

Ejercicio 5 (ejercicio de examen)

🎯
Sea un computador dotado con una jerarquía de memoria que incluye memoria caché y memoria principal. El ancho de palabra es de 32 bits y las direcciones de memoria son de 26 bits, con unidad direccionable el byte. Los detalles de la memoria caché son los siguientes:
  • Correspondencia directa
  • Caché de 4 líneas
  • Bloques de 16 palabras
  • Política de escritura write-back y write-allocate
  • Cada línea posee un bit de validez (V)(V) y un bit de suciedad (D)(D)
notion image

Apartado A

🎯
Indicar detalladamente los campos en los que se divide una dirección de memoria.
Parámetros
  • Ancho de la dirección de memoria → n=26n = 26
  • Bits para representar el total de líneas → r=2r = 2
  • Bits para representar las palabras de un bloque → q=4q = 4
  • Bits para representar los bytes de una palabra → p=2p = 2
Tamaño de la etiqueta: e=18=nrqp\boxed{e = 18} = n-r-q-p
Etiqueta
Num. línea
Desp. palabra
Desp. byte
18
2
4
2

Apartado B

🎯
Durante la ejecución de un programa se realiza la siguiente secuencia ordenada de accesos a memoria (direcciones en hexadecimal). Considerar que cada cambio en la caché afecta a los accesos siguientes. Indicar detalladamente si son aciertos o fallos de caché, explicar detalladamente cómo va cambiando la caché a lo largo del tiempo, si se actualiza la memoria principal y cuál es el estado final de la memoria caché
notion image

Apartado B.1

*️⃣
0x2E16D29 / Lectura
1️⃣ Decodificación
HEX: 2    E    1    6    D    2    9
BIN: 0010 1110 0001 0110 1101 0010 1001
  • Etiqueta → 0x2E16D
  • Línea → 0
  • Desplazamiento de palabra → 10
  • Desplazamiento de byte → 1
2️⃣ Búsqueda en la jerarquía de memoria
  1. Buscamos la línea 0
  1. Comprobamos si el bit de validez está activado → 0 (sin usar) → FALLO
🔴 Fallo, traer dato de la memoria
  1. Como ha fallado, debemos buscar en memoria principal el bloque, y traerlo a la línea 0 de la caché
    1. Escribiremos la etiqueta en la línea
    2. Estableceremos el bit de valdez a 1
    3. Estableceremos el bit sucio a 0
    4. Escribiremos el bloque en la línea
Estado actual de la caché tras el acceso
Estado actual de la caché tras el acceso

Apartado B.2

*️⃣
0x340C656 / Escritura
1️⃣ Decodificación
HEX: 3    4    0    C    6    5    6
BIN: 0011 0100 0000 1100 0110 0101 0110
  • Etiqueta → 0x340C6
  • Línea → 1
  • Desplazamiento de palabra → 5
  • Desplazamiento de byte → 2
2️⃣ Búsqueda en la jerarquía de memoria
Estado actual de la caché tras el acceso
Estado actual de la caché tras el acceso
  1. Buscamos la línea 1
  1. Comprobamos si el bit de validez está activado → 1 (en uso)
  1. Comprobamos si la etiqueta coincide ( 340c6 \neq 1d728 ) → FALLO
🔴 Fallo, write-back
  1. Como ha fallado, debemos comprobar si hace falta guardar el dato actual en la memoria. Bit sucio 1 . Por lo que hace falta volcar el valor actual de la línea en la dirección correspondiente en memoria
  1. A continuación buscaremos en la memoria la dirección que queremos consultar, la traeremos a la caché, y haremos la modificación ahí (write-allocate) a en el siguiente paso
    1. Escribimos la etiqueta calculada
    2. Activamos el bit de validez
    3. Desactivamos el bit sucio DD
    4. Escribimos el bloque en la caché (sin modificar)
  1. Finalmente, escribimos en la caché como si hubiera un acierto
    1. Activamos el bit sucio

Ejercicio 15

🎯
Sea un computador dotado con una jerarquía de memoria que incluye memoria caché y memoria principal. El ancho de palabra es de 8 bits y las direcciones de memoria son de 16 bits.
🔎
Los detalles de la memoria caché son los siguientes:
  • La caché es de correspondencia directa con 4 líneas
  • La transferencia entre la memoria y la caché se realiza mediante bloques de 8 palabras
  • La política de escritura es write-back y write-allocate
  • Aparte de etiquetas y datos, la caché posee para cada línea un bit de validez (V) y un bit de suciedad (D)
  • El contenido de la caché en un momento de dado es el siguiente:
Línea
V
D
Etiquetas
Datos
0
1
1
0x7A0
………………………
1
1
0
0x47D
………………………
2
1
1
0x1CB
………………………
3
1
1
0x65E
………………………

Apartado A

📚
Indicar detalladamente los campos en los que se divide una dirección de memoria
Etiqueta [11 bits]
Línea [2 bits]
Despl. Palabra [3 bits]
Despl. Byte [0 bits]
  • Deplazamiento Byte → Palabra 8 bits = 1 byte = 202^0 bytes = 0 bits
  • Desplazamiento Palabra → Bloque 8 palabras = 232^3 palabras = 3 bits
  • Líneas → 4 líneas = 222^2 líneas = 2 bits
  • Etiqueta → Total Dirección Memoria - (Total Campos) = 16 - (2 + 3 + 0) = 11 bits

Apartado B

📚
Durante la ejecución de un programa se realiza una secuencia de accesos a memoria
  • Indicar detalladamente si son aciertos o fallos de caché
  • Explicar detalladamente cómo va cambiando la caché a lo largo del tiempo
  • Explicar si se actualiza la memoria principal y cuál es el estado final de la memoria caché
1️⃣
0x8FAC (escritura)
2️⃣
0x524F (lectura)
3️⃣
0x0BAE (lectura)
4️⃣
0x8FA8 (escritura)

Apartado C

📚
Calcular el porcentaje mínimo de aciertos para que el AMAT no exceda los 8ns
  • El tiempo de acceso a la memoria caché es de 4 ns
  • Se requieren 60 ns para llevar un bloque desde la memoria principal a la caché
  • Redondear el porcentaje a un decimal