Ejercicio 6

Re: Ejercicio 6

de Federico Rivero -
Número de respuestas: 0
Daniel, Cómo estás? Voy entrelíneas:

1) Entiendo que como la Cache L1 tiene 1KB y 16 lineas, cada una de estas líneas puede almacenar 64 bytes. ¿En ese caso, debería que la parte byte/word de la dirección es de 6 bit? ¿Podría ser el tamaño de palabra almacenado 2 bytes (por dirección) en cuyo caso precise solamente 5 bit para direccionar?

Sí, a priori podrías hacerlo de ambas maneras. Lo más normal es que te digamos si el direccionamiento es de a byte (en ese caso la parte byte sería de 6 bits porque cada dirección debe apuntar a un byte diferente), o si el direccionamiento es de a palabra (y en ese caso deberías asumir que la palabra es del ancho de la arquitectura, en este caso 2 bytes). Si no decimos nada podés elegir cualquiera de las dos opciones y aclararlo en la resolución.

2) SI entendí bien, la cache L1 y L2 se transfieren bloques directamente, por lo que me parece que los bloques deberían tener el mismo tamaño entre las Caches, pero la L2 tiene 32KB para 128 líneas, por lo que cada línea debería de tener 256 bytes de capacidad, mientras que los de la L1 solamente 64 bytes. Me genera dudas el mecanismo de transferencia entre las cachés como debería ser. 

La idea es que la caché L2 pueda guardar varios bloques de la caché L1 a fin de explotar mayormente la localidad espacial. Para los datos de este ejercicio, la caché L2 puede guardar 4 bloques de L1 en cada línea.

Lo normal sería que la circuitería entre L1 y L2 esté armada de tal forma que las transferencias desde L2 a L1 sean siempre de a 64 bytes. En este caso se menciona que el bus entre L1 y L2 es de 2 bytes, por lo cual la transferencia duraría 32 ciclos de bus. Lo que resta ajustar es ver de qué forma se direccionan los bloques en L2: una forma sería que al realizar L1 un pedido de bloque hacia L2, que L1 indique la dirección inicio del bloque. De este modo, si la dirección en L1 se interpreta como

18  (tag)    |   6 (byte)

Y la CPU solicita la dirección 0x442233 = 010001000010001000   110011  , si eso da miss, la caché L1 podría pedirle a la caché L2 la dirección: 010001000010001000   000000, es decir, mismo tag, pero con ceros en el campo byte, ya que esa dirección marca el inicio del bloque. La caché L2 recibiría esa dirección y devolvería a L1 64 bytes a partir de esa dirección, es decir, un bloque L1 completo.

La otra opción es que la cache L2 utilice un direccionamiento de a palabra, con palabras de 64 bytes, por lo cual la dirección recibida sería de 18 bits. El efecto sería que el caché L1 enviaría únicmaente los 18 bits más significativos de la dirección (correspondientes al campo TAG), y la caché L2, en lugar de interpretar su línea como 256 bytes direccionables por separado, la consideraría como 4 palabras de 64 bytes. De esta forma, el campo byte/word de L2, en lugar de usar 8 bits (como precisaría si los 256 bytes fueran direccionables), utilizaría 2 únicamente, de forma de direccionar esos 4 bloques de L1 presentes en la línea. Esa diferencia de 6 bits entre una opción y otra son los 6 bits que L1 no enviaría al no enviar el campo byte.

Por favor comentame si algo no quedó claro.

Saludos,

            Federico