Localidad espacial en caché: ¿qué direcciones se cargan?

0

No entiendo muy bien el concepto de localidad espacial en el caché. Comprendo que cuando hay una falta en la memoria caché, no solo la dirección específica que escribimos se carga en la memoria caché, sino que también se cargan las "direcciones cercanas".

Sin embargo, no puedo entender QUÉ direcciones se cargan. Tengo una tarea con la siguiente pregunta:

The cache consists of 16 words (4 bytes per word). It is arranged in blocks of 2 words.
The following addresses are in BYTES in decimal base. The cache is initially empty.
12,8,24,28,36,44,48,52,60,64,68,76,136,140,144,148,152,220,224,228,220,224,228
Determine what are the addresses which are a MISS (determine if valid/tag miss).

Lo que me resulta difícil es entender qué direcciones se cargan cuando, por ejemplo, se alcanza la dirección 12. ¿Se carga 13 en el caché? 14? ¿15? o tal vez 11? ¿Cómo lo sé?

Creo que si entendiera esta pregunta fundamental, podría responder a esta pregunta con facilidad.

Gracias.

    
pregunta Alan

3 respuestas

1

Cuando dicen que el tamaño del bloque de caché es de dos palabras, eso significa que se transfieren 2 palabras, o 8 bytes de datos a la caché cada vez que se produce una falla. Puede pensar que la memoria principal está dividida en grupos de 8 bytes, en límites de 8 bytes (0-7, 8-15, 16-23, etc.). Cuando se accede a cualquier byte en uno de esos grupos, todo el grupo se carga en un bloque de caché.

Entonces, por ejemplo, cuando se accede al byte 12, todos los bytes del 8 al 15 se cargan en el caché. Mientras ese bloque permanezca en el caché, cualquier acceso posterior a cualquiera de esos bytes resultará en un acierto de caché, en lugar de un fallo.

Tenga en cuenta que el caché solo puede contener un total de 8 bloques (16 palabras / 2 palabras por bloque). Esto significa que si accede a un byte que está en un noveno bloque, primero tendrá que eliminar un bloque de la memoria caché. Seleccionar que bloque para eliminar es un tema completamente separado que es tema de mucho debate. Dado que el problema no especifica una estrategia de reemplazo de caché, supongo que no importa para este ejemplo en particular.

    
respondido por el Dave Tweed
0

Por lo general, una 'línea' de caché (en su caso, 8 bytes, 2 x 4 bytes) está alineada con las direcciones de memoria.

Por lo tanto, solo contendrá datos alineados con un límite de 8 bytes.

Cuando se lee el tercer byte, el área de los bytes 0 a 7 se lee en la 'línea'. Cuando se lee cualquier byte en el rango de cero a siete, todos se leen.

De manera similar, cuando se lee cualquier byte de ocho a quince, se lee todo el bloque.

Entonces, para una 'línea' de N bytes (donde N es casi siempre una potencia de 2), los N bytes están alineados en los límites de N bytes.

    
respondido por el gbulmer
0
  

El caché consta de 16 palabras (4 bytes por palabra). Está dispuesta en bloques de 2 palabras.

Entonces, hay 8 líneas de 2 palabras / 8bytes en el caché. Cada línea de caché está asociada dinámicamente a un rango de direcciones alineado.

Si el caché es "mapa directo", las direcciones son:

  • A [1: 0]: selección de bytes dentro de las palabras
  • A [2]: posición dentro de la línea de caché: 2 palabras por línea de caché
  • A [5: 3]: Número de línea de caché: 8 líneas
  • A [31: 6]: almacenado como etiquetas de caché.

Si el caché es "totalmente asociativo", las direcciones son:

  • A [1: 0]: selección de bytes dentro de las palabras
  • A [2]: posición dentro de la línea de caché: 2 palabras por línea de caché
  • A [31: 3]: almacenado como etiquetas de caché.

Debe escribir en un papel para todos los accesos a la dirección correspondiente en binario y visualizar el contenido de las 8 líneas de caché, cada una con un bit de Validez (todo borrado al principio) y una Etiqueta (que indica el rango de direcciones almacenadas en caché en la línea de caché)

    
respondido por el TEMLIB

Lea otras preguntas en las etiquetas