¿Como determino el conjunto en una Cache de N vias?

¿Como determino el conjunto en una Cache de N vias?

de Pablo Danilo Guartes Cesaro -
Número de respuestas: 10

Buenas, leyendo el teorico y las diapositivas me surgio la siguiente duda,

Dice que "En este tipo de función de correspondencia, con los bits d selecciono el conjunto de

líneas donde podría estar almacenado el bloque"

Pero no me queda claro el funcionamiento, Por ejemplo teniendo 

una memoria cache con un tamaño de 64 KBytes, con un tamaño de
bloque de 4 Bytes, en una CPU de 24 bits de dirección (16 MBytes).

Dada una direccion de memoria a la que quiero acceder que no está en la cache, digamos BC1100, ¿Cómo se en cual de los dos conjuntos de la memoria caché va a ser almacenado?

En respuesta a Pablo Danilo Guartes Cesaro

Re: ¿Como determino el conjunto en una Cache de N vias?

de Matias Rodal Medina -

Si es de 2 vías, al buscar una direccion vos sabes q podría estar en alguna de las 2 linas que corresponden al offset dado. Para averiguar en cual de las 2 esta (si esta en alguna) lo que hace es darle a la memoria el TAG, y la memoria devuelve el dato buscado en caso de que el TAG corresponda a alguno de los 2. Asi es como funciona la memoria asociativa.
Si no esta el dato da un miss.

Edito: Conteste otra cosa jaja lei mal tu pregunta.
La decision es mediante alguno de los algoritmos de sustitucion que se presentan en las notas

Saludos

En respuesta a Matias Rodal Medina

Re: ¿Como determino el conjunto en una Cache de N vias?

de Pablo Danilo Guartes Cesaro -

Gracias por tu respuesta, pero no contesta mi duda que es como decidir en que via se guarda el dato teniendo dos vias, vos me decis que compara con las dos vias pero en el teorico dice que es segun los bits d con los que identifico en que via va a estar, mi duda en el ejemplo que puse es al guardar un dato en el cache, en cual de las dos vias lo almaceno

En respuesta a Pablo Danilo Guartes Cesaro

Re: ¿Como determino el conjunto en una Cache de N vias?

de Matias Rodal Medina -

Edite el mensaje anterior porque me di cuenta que conteste mal  jaja. Se coloca en el lugar que indique el algoritmo de sustitucion que se esté usando. 

Saludos

En respuesta a Pablo Danilo Guartes Cesaro

Re: ¿Como determino el conjunto en una Cache de N vias?

de Leonardo Alfredo Levy Garrido -

Hola,

Segun entiendo los d bits los utilizas para identificar el conjunto. luego si es de dos vias, significa que tenes dos lineas para guardar el bloque. Entonces hace una busqueda por tag ( que puede ser uno a uno, o si es cache asociativa le das el tag y te lo devuelve o no ). Con eso sabes si tenes un hit o un miss. Supongo que si tenes un hit vas a reemplazar esa linea con la nueva. Si tenes un miss entonces va a guardar decidiendo segun un algoritmo que puede ser LRU, FIFO, LFU o random.

En respuesta a Leonardo Alfredo Levy Garrido

Re: ¿Como determino el conjunto en una Cache de N vias?

de Pablo Danilo Guartes Cesaro -

Gracias por la respuesta..todavía no me queda muy claro, segun lo que entiendo yo el algoritmo de sustitucion se usa solo cuando la cache está llena, y me parece que si es de dos vias, lo que tengo son dos conjuntos con cantidad_total_de_lineas/2 en cada uno por lo que si en principio tenia 16k lineas entonces  voy a tener dos vias con 8k lineas cada una. Lo que me interesa saber es la forma en que se usan esos d bits del conjunto para saber a cual de las dos vias pertenece, porque no encontre en el teorico que se especifique de que manera se utilizan, gracias.

En respuesta a Pablo Danilo Guartes Cesaro

Re: ¿Como determino el conjunto en una Cache de N vias?

de Matias Rodal Medina -

Los algoritmos de sustitucion se usan cuando queres colocar algo en la cache y no hay lugares libres donde podria ir ese algo.
En el caso de N vias, cada algo puede ir en N lugares distintos, por lo que si los N lugares estan ocupados, hay que desocupar alguno para alojar el nuevo dato.
En el caso de la cache totalmente asociativa cada algo puede ir en cualquier lugar, por lo que mientras haya al menos un lugar libre no va a haber que sustituir datos.

Saludos

En respuesta a Pablo Danilo Guartes Cesaro

Re: ¿Como determino el conjunto en una Cache de N vias?

de Diego Barreiro Indart -

Hay diferentes políticas, como dijo un compañero arriba, depende del algoritmo de sustitución que tenga la cache.

Si quedan lugares libres en el set, utilizaría el primero libre (es una solución, puede haber otras); si están todos los lugares ocupados, la mayoría de las implementaciones optarían por sobreescribir el más "viejo" (el que se accedió por última vez hace más tiempo). Eso va en la solución que hayan elegido para la cache en particular, no hay una regla general, te comento las más usuales o por lo menos, de las que conozco, las más lógicas desde mi perspectiva.

@Leonardo, fijate bien que te estás confundiendo con el tema de hit y miss, eso es cuando tratás de leer desde la cache. Si hay un miss (literalmente "errarle") vas a buscar a la memoria y después vendrás a guardarlo al set correspondiente (que sí, es el mismo donde buscaste primero). Si hay un hit, no hacés nada más con la memoria, ya tenés lo que buscabas (esa es la definición de un hit: encontrar lo que buscabas).

En respuesta a Diego Barreiro Indart

Re: ¿Como determino el conjunto en una Cache de N vias?

de Pablo Danilo Guartes Cesaro -

Gracias por aclararme lo de los algoritmos de sustitucion! 

Igual sigo teniendo la duda del principio, el algoritmo se aplica cuando ya sabes en cual de las vias vas a guardar el dato para saber en que linea lo almacenas,¿Pero como sabes  en cual es la vía? 

Por ejemplo teniendo dos vias, en el ejemplo que puse, como se en cual de las dos vias guardo el elemento  0xBC1100? 

Recien despues de saber eso aplico el algoritmo de sustitucion, pero no entiendo como averiguarlo..

En respuesta a Diego Barreiro Indart

Re: ¿Como determino el conjunto en una Cache de N vias?

de Leonardo Alfredo Levy Garrido -

@diego En realidad yo queria responder cuando guarda un dato ( haces un write ) como me parece que estaba pereguntando Pablo. Entonces primero buscas y si lo encontras (hit ) lo sustituis y sino ( miss ) ahi si utilizo alguna politica de las que mencionaba.

@pablo si es de 2 vias significa que cada conjunto puede tener 2 lineas. La n de n-way es el numero de lineas en las que puede potencialmente estar cacheado un bloque. Entonces cada bloque tiene disponible para guardarse n lineas todas dentro de un mismo conjunto.

Entonces segun entiendo dado un bloque primero identificas el conjunto ( con los bits d ) luego dado el conjunto buscas el bloque particular utilizando el tag.