2012-07-05 9 views
9

Estoy un poco trabado porque no puedo encontrar nada que cubra la parte de "datos" de la memoria caché, todo lo que he buscado en Google trata el 99.9% con el direccionamiento de la memoria caché. La pregunta que me hicieron está redactado como talcapacidad de "bit de datos" frente al tamaño de "bits de tara"?

 
Contrast the difference between "data bit" capacity and "overhead bit" size 
for the two caches. 

no quiero la respuesta, así que no voy a publicar los tamaños conjunto real y lo que no, sólo estoy en busca de una dirección de un sitio web o tal vez una explicación de cómo "contrastar" los dos. ¡Cualquier ayuda posible es muy apreciada!

+4

La mejor manera de aprender es preguntar por la dirección y no la respuesta –

Respuesta

2

No estoy seguro de que nos haya dado suficiente contexto para esta pregunta, pero aquí va.

Las memorias caché deben almacenar no solo los datos en caché reales, sino también, para cada dato, el "índice" al que se refiere. Por lo tanto, cuando busca N registro, la memoria caché debe contener no solo el valor de la grabación N, sino también N, para que pueda buscar los datos. Y esa es una forma bastante simplista de verlo. Cachés pueden tener otros metadatos para indicar la validez y la hora del último acceso, etc.

Ejemplo # 1: una memoria caché de bytes en un espacio de direcciones de 32 bits

Cada entrada de caché tiene que almacenar el valor de datos (8 bits), además de la dirección (32 bits) = 40 bits,

Ejemplo # 2: una memoria caché de palabras de 32 bits en un espacio de direcciones de 32 bits entrada

cada caché tiene que almacenar el valor de datos (32 bits) más la dirección (32 bits) = 64 bits,

Puede ver que el ejemplo n. ° 1 tiene una sobrecarga significativamente mayor.

Como siempre, Wikipedia puede ayudar. http://en.wikipedia.org/wiki/Cache_(computing)

+0

Cuando definimos un espacio de direcciones de memoria de 32 bits, siempre será el tamaño de datos de 32 bytes +? –

+0

@ user1260028 - bueno, no. El espacio de direcciones de 32 bits contendría 2^32 bytes == 2^30 ints, por lo que podría necesitar solo 30 bits en ese caso. dependiendo de cómo funcionó tu caché. Además de bits de bandera ... – Roddy

1

Dado que ha etiquetado la arquitectura de la computadora y C supongo que esta es una tarea en la que se le pide que haga un "simulador" de caché en C o algo por el estilo. Y que los "dos cachés" en la pregunta se refieren a dos tipos diferentes de caché (asociativo completo, n-way, mapeado directo ...). En ese ámbito, la pregunta es pedirle que discuta la diferencia entre los dos tipos de cachés y principalmente la relación entre el tamaño del bit superior, que es la información que necesita el caché para las entradas de caché (bit válido, desplazamiento, etiqueta) y " bit de datos "que es la información real almacenada en la línea de caché. Espero que esto ayude.

2

Los datos almacenados en caché almacenan, generalmente en SRAM como matrices de datos, pero también tienen una sobrecarga. No me gustan particularmente los términos "tamaño de bit de datos" y "tamaño de bit adicional", porque (a) hay una tara que no es celdas de bits de almacenamiento, y (b) no todas las celdas de bits son igualmente costosas. Pero sigamos con esos términos por ahora.

Mi opinión es que el "tamaño de bit superior" probablemente se refiere a la cantidad de bits de etiquetas que deben almacenarse para acceder a la memoria caché. A menudo, estos se almacenan en una matriz diferente, una matriz de etiquetas separada de la matriz de datos. Compare con la cantidad de bits de datos.

Éstos son tres ejemplos sencillos:

considerar un caché de 32 KiB (kilobytes), con 64 líneas B (bytes) de memoria caché. Normalmente, permitimos que los bits 0 a 5 de la dirección sean el desplazamiento de la línea de caché.

32 KiB/(64 B/línea) => 2^(5 + 10)/2^6 => 2^9 => 512 líneas de caché.

--- ++ Ejemplo 1: correspondencia directa

Imaginemos que se trata de una caché de mapeado directo. Entonces podríamos tomar los siguientes 9 bits, bits 6-14 de la dirección, como un "índice" en la matriz de líneas de caché.

Hasta ahora todo bien. Ahora, para descubrir la etiqueta, necesitamos saber el ancho completo de la dirección. Digamos que es de 64 bits (aunque la mayoría de las máquinas de "64 bits" solo implementan 40 o 48 bits a partir de 2012). Para distinguir una línea de caché de cualquier otra línea de caché que se mapee a la misma entrada en la caché, necesitamos almacenar los bits restantes de la dirección, bits 15-63, 49 bits, como la etiqueta.

A continuación, el acceso a dicho caché mapeado directo procede extrayendo el índice, leyendo la etiqueta y los datos con ese índice, comparando la etiqueta leída con la etiqueta de la dirección que estamos buscando, declarando un hit si partido y una falta si no, y así sucesivamente.

Sobrecarga: 49 bits de etiqueta por cada 64B (512 bits) de datos.

Total: * etiqueta o "sobrecarga": 512 * 49 bits * bits de datos: 512 * 512 = 32KiB = 256 Kib (kibi-bits).

--- ++ Ejemplo 2: 8 vías asociativa por conjuntos de

Ahora imaginemos que la caché es de 8 manera asociativa. Esto significa que las 512 líneas se dividirán en 512/8 = 64 conjuntos, cada uno con 8 líneas.

El desplazamiento dentro de una línea de caché sigue siendo bits 0-5.

Sin embargo, ahora necesitamos solo 6 bits como índice para determinar el número de conjunto. Bits 6-11.

La etiqueta debe contener todos los bits restantes, bits 12-63, 52 bits en total.

Por lo tanto, la sobrecarga de etiqueta para una caché asociativa de 8 vías es de 52 bits de etiqueta para 512 bits de datos.

Total: * etiqueta: 512 * 52 bits de datos *: 512 Kib

Comparar a los 49 bits de la etiqueta de asignación directa. El conjunto asociativo de 8 vías básicamente mueve log2 (8) más bits en la etiqueta; en general, el conjunto asociativo de N vías mueve bits de ceil (log2 (N)) a la etiqueta.

--- ++ Ejemplo 3: totalmente asociativa

Este es el extremo más lejano del espectro de mapeado directo. Todavía tenemos 512 bits de datos por línea de caché, pero ahora la dirección completa de 64 bits, a excepción de la compensación de 6 bits, es la etiqueta. 58 bits de etiqueta para totalmente asociativo, frente a 52 bits para 8 vías, frente a 49 bits para el mapeo directo.

¿Pero recuerdas que dije que no me gusta el término "bits de tara"? Los bits de etiqueta en una memoria caché completamente asociativa normalmente tienen que ser no solo bits de almacenamiento ordinarios, sino que también deben tener comparadores, básicamente puertas XOR. Dichos bits "CAM (memoria direccionable por contenido)" suelen ser más caros que los bits ordinarios.

--- + Conclusión

Por lo tanto, creo que esto es lo que el maestro quiere: una comparación directa de bits de datos en comparación con bits de etiqueta. Este es un límite inferior en la parte superior.

El espectro que va desde el mapeado directo hasta el conjunto de vías N asociativo a totalmente asociativo proporciona un ejemplo. Pero hay otros aspectos del diseño de la memoria caché que afectan a los gastos generales. Por ejemplo:

  • si utiliza diferentes tamaños de dirección, el porcentaje de sobrecarga cambia. P.ej. Las direcciones de 32 bits solo tendrían 17 bits de etiqueta en el ejemplo diredt asignado, frente a 49 bits para una dirección de 64 bits.

  • si cambia la función de indexación de caché, es posible que tenga que cambiar el tamaño de la etiqueta. Por ejemplo, hay algunos beneficios de tener un número primo de líneas de caché o conjuntos en un caché, p. 511 líneas en lugar de 512 para un caché mapeado sdirect. Los números primos como este tienen problemas de resonancia reducidos. Pero hecho simplemente, requieren aumentar el ancho de la etiqueta a un ancho completo de 58 bits.

  • esquemas como caches sectorizados permiten compartir algunas partes de los bits de etiquetas.

Y así sucesivamente.

En cuanto a un sitio web tutorial:

  • lo siento, no sé de uno de tales cosas principiante. Pero buscaría notas de clase en muchas universidades.

  • mi sitio web, http://comp-arch.net, cubre temas avanzados en arquitectura de computadoras. Pero este tipo de cosas es demasiado básico, demasiado elemental, para ponerme comp.arch. Aunque supongo que probablemente debería escribir algunas explicaciones simples de los conceptos básicos antes de pasar a los temas avanzados. Ocasionalmente escribo tales tutoriales, como aquí, pero no los he recopilado.

  • USEnet newsgroup comp.arch puede ser útil.

--- + ¿Por qué esto les importa a los programadores en stackoverflow?

Esto es principalmente un tema de hardware.

Pero el código de ajuste de los programadores necesita entender cosas como esta para obtener el mejor rendimiento.

Cuestiones relacionadas