Cálculo de la memoria caché

1

Estoy aprendiendo la lógica de las memorias caché. Me pregunto si puedes verificar que entendí correctamente. Si una memoria caché en el campo de etiqueta tiene 16 bits, el campo establecido tiene 10 bits y el byte en el campo de bloque es 6 bits, entonces Solo puedo deducir de esa información que la capacidad es de 128 kbytes y que es un sistema asociativo de dos vías con un tamaño de bloque de 64 bytes porque 2⁶ = 64 bytes del byte en el campo de bloques. 2¹⁰ = 1024 pero, ¿podría alguna otra capacidad con algún otro número de asociatividad satisfacer los requisitos?

Aprendo que las fórmulas son

número de bloques = capacidad / tamaño de bloque

número de conjuntos = número de bloques / #asociatividad

Por lo tanto, podría duplicar la asociatividad a 4 vías pero no podría satisfacer los requisitos con un caché de 4 vías porque requeriría otro número de bits en el campo establecido.

¿Entendí correctamente?

    

1 respuesta

2

¿Esta imagen le ayuda a comprender cómo funcionan estructuralmente los cachés asociativos?

tomadode aquí

En pocas palabras, los bits de desplazamiento del bloque determinan el tamaño de su bloque (cuántos bytes hay en una fila de caché, cuántas columnas, si lo desea). Los bits de índice determinan cuántas filas hay en cada conjunto. La capacidad de la memoria caché es, por lo tanto, 2 ^ (blockoffsetbits + indexbits) * #sets. En este caso, es 2 ^ (4 + 4) * 4 = 256 * 4 = 1 kilobyte.

Para el mismo tamaño de caché (capacidad), si fuera de asociativo de 4 vías a asociativa bidireccional, asociativo de dos vías, podría hacerlo duplicando las filas en cada conjunto o duplicando las columnas en cada conjunto, es decir, duplicar el número de líneas de caché o duplicar el tamaño del bloque.

Si tuviera que elegir duplicar el número de filas, terminaría con su dirección de 12 bits dividida en un índice de 5 bits y un desplazamiento de bloque de 4 bits, dejando una etiqueta de 3 bits.

Si tuviera que elegir duplicar el tamaño del bloque, terminaría con su dirección de 12 bits dividida en un índice de 4 bits, un desplazamiento de bloque de 5 bits, dejando una etiqueta de 3 bits.

Por lo tanto, para repetir, creo que las fórmulas que rigen para las cachés asociativas son:

Cache Capacity = (Block Size in Bytes) * (Blocks per Set) * (Number of Sets)
Index Bits = LOG2(Blocks per Set)
Block Offset Bits = LOG2(Block Size in Bytes)
Tag Bits = (Address Bits) - (Index Bits) - (Block Offset Bits)

En su ejemplo original, no creo que pueda deducir el tamaño de la memoria caché en función del tamaño de sus respectivos campos de bits de dirección sin hacer una suposición sobre la asociatividad. Si es asociativo bidireccional, entonces podrías decir:

Capacidad de caché = (2 ^ 6) * (2 ^ 10) * (2) = 2 ^ 18 = 2 ^ 8 kilobytes = 256 kilobytes. No estoy seguro de cómo se te ocurrieron 128 kilobytes. Ese sería el caso si fuera asociativo de una vía (mapeado directo).

Para una capacidad de caché de 128 kB (2 ^ 17 bytes), puede crear un caché asociativo de 4 vías con un tamaño de bloque de 64 bytes diciendo:

2^17 = 2^6 * (Blocks per Set) * 4
Blocks per Set = 2^17 / 2^6 / 2^2 = 2^9 = 512

... y, por lo tanto, asignando 9 bits de índice, 4 bits de desplazamiento de bloque y el resto (19) de bits de etiqueta.

    
respondido por el vicatcu

Lea otras preguntas en las etiquetas