Duda general de Cache

Duda general de Cache

de Cristiano Coelho De Asis -
Número de respuestas: 17
Al ver como se usan los bits de la direccion de memoria para acceder a la caché, los bits asignados para el desplazamiento tienen que ser para acceder de a 1 byte? o depende del tamaño de palabra del procesador?

Por ejemplo, en el ejercicio 1 se da un procesador de 32 bits y una cache donde cada linea tiene 4 palabras de 32 bits c/u.

El procesador por ser de 32 bits, y suponiendo que la palabra de memoria es de 8 bits, traería de a 4 bytes. Entonces como accedo yo a los bytes dentro de la caché?
Tendría que usar 2 bits para elegir entre las 4 palabras( cada una de 4 bytes) tal cual lo hace el cpu, o tendria que usar 4 bits y elegir entre los 16 bytes de la linea( 16 bytes porque tiene 4 palabras de 4 bytes cada una)?
En respuesta a Cristiano Coelho De Asis

Re: Duda general de Cache

de Juan Pablo Lorier Arismendi -
hola Cristiano,

Lo que se me ocurre a mí es que como la memoria es asociativa x conj de 4 vías, tendrías 4 chips de mapeo directo, uno con cada palabra de 32bits, por lo que tu dirección en la cache tendría 2 bits para referenciar cual byte de los cuatro vas a acceder, luego el resto son los bits que seleccionan la línea y lo que sobra para el tag. La lógica de asociación se encarga de decirte cual es el chip que tiene la palabra que buscas, luego usas la dirección para encontrar la línea y el byte dentro de la línea (siempre que esté, porque puede que no esté)
Es lo que a mí se me ocurre, no se si algún profe lo valide.
Saludos,
En respuesta a Juan Pablo Lorier Arismendi

Re: Duda general de Cache

de Juan Saavedra -
Juan Pablo, fijate en la respuesta a ver si te quedan dudas.
¿Cómo queda la estructura de direccionamiento de la caché? (Para el ejercicio 1).

Saludos.
En respuesta a Juan Saavedra

Re: Duda general de Cache

de Juan Pablo Lorier Arismendi -
Hola Juan,

Gracias nuevamente por tu respuesta.
No me queda del todo claro lo que pusiste. Veo que definis la palabra de memoria como 32 bits por la letra del problema.
En este caso, como la memoria es asociativa x conj de 4 vías, yo parto de la base que voy a utilizar 4 memorias de mapeo directo de 1/4 de la capacidad del total (4KB) y que va a existir una lógica de control que se encarga de mandarme a buscar en el chip que según el tag le toca tener el dato. Una vez ahí, utilizo la parte de la dirección que me señala la línea que tiene el dato que busco. En esa línea tengo 4 palabras de 32 bits.
O sea, tengo 2 bit para elegir la palabra de la línea, 12 bits para elegir la línea y 18 bit para el tag = 32 bit address.
Así sería correcto?
Saludos,
En respuesta a Juan Pablo Lorier Arismendi

Re: Duda general de Cache

de Juan Saavedra -
Hola, te respondo entre líneas:
como la memoria es asociativa x conj de 4 vías

La caché es asociativa por conjuntos de 4 vías. Cuidado con el vocabulario y las definiciones!!

como la memoria es asociativa x conj de 4 vías, yo parto de la base que voy a utilizar 4 memorias de mapeo directo de 1/4 de la capacidad del total (4KB)

Cuidado porque eso está mal. Los conjuntos son de 4 líneas. No son 4 conjuntos de líneas.

que va a existir una lógica de control que se encarga de mandarme a buscar en el chip que según el tag le toca tener el dato. Una vez ahí, utilizo la parte de la dirección que me señala la línea que tiene el dato que busco.

Funciona al revés. Primero la línea, luego el tag. Cabe aclarar que de hecho, se le dice set y no línea, ya que en N-way associative lo que busca es un conjunto de líneas.

Intentá reformular la dirección a ver como te queda.

Saludos.
En respuesta a Juan Saavedra

Re: Duda general de Cache

de Juan Pablo Lorier Arismendi -
Hola Juan,

Ayer no vi tu respuesta y la hice en la consulta. Ya entendí como va el tema de las vías. Solo me resta una confirmación respecto a lo que tu decís porque ayer lo dije como "4 bloques de 4k líneas" y no me corrigieron, así que quiero verificar cual de las 2 versiones es la final.
Yo pensaba que eran 4 "bloques" de cache con 4k líneas (12 bits) de 4 palabras. Me quedó claro que yo con la línea voy al "set" de las 4 líneas con igual número y me fijo en los 4 tags a ver si coinciden con mi tag.
Lo que quiero confirmar es si son 4 bloques de 4k líneas o si son 4k sets de 4 líneas.
Gracias,
En respuesta a Cristiano Coelho De Asis

Re: Duda general de Cache

de Juan Saavedra -
Hola, respondo entre líneas:

los bits asignados para el desplazamiento tienen que ser para acceder de a 1 byte? o depende del tamaño de palabra del procesador?

La dirección que genera el CPU es para acceder a una palabra de memoria. Usualmente, esa palabra es 1 byte.

Por ejemplo, en el ejercicio 1 se da un procesador de 32 bits y una cache donde cada linea tiene 4 palabras de 32 bits c/u.

Por lo subrayado, la palabra de memoria es de 32 bits entonces.

La cache es un mecanismo transparente para el programador que disminuye el tiempo de acceso a memoria. Como es transparente, en realidad no cambia el direccionamiento de memoria según si estás accediendo en la caché o a memoria directamente.

Espero se entienda.

Saludos.
En respuesta a Juan Saavedra

Re: Duda general de Cache

de Cristiano Coelho De Asis -
Pero por ejemplo, el 8086 es de 16 bits, y aunque el tamaño de palabra de la memoria sea de 1 byte, puede traer de a 2 bytes o no?
Si haces mov AX, ES:[BX], en AL quedan los 8 bits de la direccion en BX y en AH los proximos 8 bits no?

Tengo que suponer cuando me dicen que la caché tiene tantas palabras de tantos bits, el tamaño de palabra de la memoria es el mismo?

Ya que estoy, en el ejercicio 1 la direccion me quedaría divida asi:

|15 bits tag | 15 bits linea | 2 bits desplazamiento|

En respuesta a Cristiano Coelho De Asis

Re: Duda general de Cache

de Juan Saavedra -
Hola, te respondo entre líneas

Pero por ejemplo, el 8086 es de 16 bits, y aunque el tamaño de palabra de la memoria sea de 1 byte, puede traer de a 2 bytes o no?

Si, pero direcciona de a byte (razón por la cual hay que aumentar de a dos la dirección si recorremos un arreglo de enteros, por poner un ejemplo).
Cuidado porque 8086 no tiene caché.

Tengo que suponer cuando me dicen que la caché tiene tantas palabras de tantos bits, el tamaño de palabra de la memoria es el mismo?

No se me ocurre razón para que fuese diferente la granularidad del direccionamiento en caché y en memoria. Por lo que supongo que si, pero tampoco lo tomes como una certeza.

¿Porqué te quedaron 15 bits de línea?

Saludos.
En respuesta a Juan Saavedra

Re: Duda general de Cache

de Cristiano Coelho De Asis -
Me di cuenta que lo hice mal, a ver si está bien asi:

La caché es de 16KB = 2^17 bits. Ahora por ser asociativa de 4 vias, cada "sub cache" seria de 2^15 bits (dividí entre cuatro).

Ahora además me dice que cada linea es de 4x32 bits = 2^6. Entonces divido la capacidad total por el tamaño de cada linea y me quedaría que cada caché es de 2^9 lineas.

Otra forma de verlo capaz mas facil es, hacer 2^17 / 2^8, donde 2^8 viene de que cada conjunto tiene 4 lineas de 2^6 bits cada uno.

Entonces al final quedaría : | 21 TAG | 9 linea | 2 despl|
En respuesta a Cristiano Coelho De Asis

Re: Duda general de Cache

de Juan Pablo Lorier Arismendi -
Hola Cristiano,

Fijate que 16k son 14 bits (1k=10, 2k=11,4k=12,8k=13,16k=14), por eso,al dividirla entre 4 te quedan de 12 (4k) bits de dirección de línea. Cada línea tiene 4 palabras de 32 bits que solo te interesa ubicar cual de las 4 palabras es la que buscas, por eso solo utilizas 2 bits dentro de la línea independientemente del tamaño de palabra.
No confundas la dirección de la cache con la de la ram, el procesador te pide una dirección de memoria de 32 bits, vos con eso haces un hash que te da en que línea le toca que se guarde esa dirección en la cache. Vas a esa línea de la cache en cada bloque de 4k y ahí te fijas que tu tag sea el mismo que el de la línea (que se guarda en memoria fuera de la línea y para vos no forma parte del tamaño de la cache) y si te da ok el tag, ahí usas los bits de desplazamiento para llegar a la palabra de 32 bits que tenes que devolverle al cpu. Si tu tag no concuerda con ninguno de los tags de esa línea en cada bloque, tenes un miss y tenes que ir a ram a buscar el dato.
¿Ayuda? Lo verifiqué ayer en la consulta, así que debería estar bien.
En respuesta a Juan Pablo Lorier Arismendi

Re: Duda general de Cache

de Cristiano Coelho De Asis -
Una cosa, la letra dice 16Kbytes no bits, entonces a ese 2^14 te falta multiplicarlo por 8 ya que cada byte son 8 bits, y te queda 2^17... no?

Y para obtener los bits de la linea, no te falta hacer la division entre la capacidad de la cache y la cantidad de bits o bytes que tenes en cada linea?
En respuesta a Cristiano Coelho De Asis

Re: Duda general de Cache

de Juan Pablo Lorier Arismendi -
Hola Cristiano,

Tenes razón, me comí lo de los bytes. Te pido disculpas.
Así que quedaría 2bit desplazamiento, 8bit línea (son 256 sets de 4 líneas) y 22bit de tag como dice Matías.
Suerte que no era el exámen... sino estába fregado :-)
Saludos,
En respuesta a Cristiano Coelho De Asis

Re: Duda general de Cache

de Matias Guzman Cubero Delgado -
Hola cristiano esta bien tu razonamiento si no fuera por un pequeño detalle:

4x32 bits = 2^6 esto no es correcto. 2^2*2^5 = 2^7.

La dirección de memoria queda dividida de la siguiente manera:

| 22 TAG | 8 linea | 2 despl|

Es lo mismo hacerlo por bytes o por bit, mientras siempre hagas la cuenta en la misma unidad, yo lo hice por bytes.

Saludos,
Matias
En respuesta a Matias Guzman Cubero Delgado

Re: Duda general de Cache

de Matias Guzman Cubero Delgado -
Hola,

Les digo mi razonamiento porque me mario un poco los comentarios,

La capcidad de la cache es 16Kbytes = 2^14 bytes.

En cada linea de la cache tenemos 4*32 bits = 4*4 bytes = 2^4 bytes.

Por lo tanto existen capacidad/tamaño_de_linea lineas.

2^14/2^4 = 2^10 lineas.

Todo este razonamiento es si fuera una cache con correspondencia directa.

Como es de 4 vias, esto significa que agrupo las lineas en 4 obteniendo.

Cantidad lineas/ lineas por conjuntos = Cantidad conjuntos

osea 2^10/2^2 = 2^8 conjuntos.

Por lo tanto se necesitan 8 bits para codificar en que conjunto va el contenido de una direccion.

La direccion queda dividida:

22 tag | 8 set | 2 desplasamiento