¿Existe una correspondencia entre el tamaño de caché y la latencia de acceso?

¿Existe una correspondencia entre los tamaños de caché y la latencia de acceso? En igualdad de condiciones, ¿un caché más grande funciona más lento? Si es así, ¿por qué? ¿Cuánto más lento?

Si está interesado en explorar algunas ventajas y desventajas en el diseño de caché, HP desarrolló la herramienta CACTI que brinda estimaciones de latencia y uso de energía en función de las características de diseño. También está disponible una interfaz web para la versión 5.3 .

Respuestas (3)

Los artículos en sus manos son más rápidos de acceder que los artículos en sus bolsillos, que son más rápidos de acceder que los artículos en su armario, que son más rápidos de acceder que los artículos en Digikey. Cada tipo de almacenamiento sucesivo que he enumerado es más grande pero más lento que el anterior.

Entonces, tengamos lo mejor de ambos mundos, ¡hagamos que sus manos sean tan grandes como un almacén de Digikey! No, no funciona, porque ahora ya no son realmente manos. Son una bala de cañón que te pesa.

La razón por la cual el almacenamiento más grande es más lento para acceder es la distancia . En promedio, un almacenamiento más grande está más lejos de usted. Esto es cierto para los elementos físicos y para la memoria RAM.

La memoria de la computadora ocupa espacio físico. Por esa razón, las memorias más grandes son físicamente más grandes y algunas ubicaciones en esa memoria estarán físicamente más lejos. Las cosas que están lejos tardan más en acceder, debido a los límites de velocidad que existen. En el caso de sus bolsillos y Digikey, los límites de velocidad son la velocidad de sus brazos y los límites de velocidad de la carretera.

En el caso de la RAM, los límites de velocidad son la velocidad de propagación de las señales eléctricas, el retraso de propagación de las puertas y los controladores, y el uso común de relojes síncronos. Incluso si el dinero no fuera un problema y pudieras comprar todo lo que quisieras de la tecnología RAM más rápida disponible en la actualidad, no podrías beneficiarte de todo. Diseñe una hoja de tamaño A4 de caché L1 si lo desea, y coloque su CPU justo en el centro. Cuando la CPU quiere acceder a alguna memoria justo en la esquina de la memoria, la solicitud tardará literalmente un nanosegundo en llegar allí y un nanosegundo en volver. Y eso no incluye todos los retrasos de propagación a través de puertas y controladores. Eso ralentizará seriamente su CPU de 3 GHz.

Dado que la lógica síncrona es mucho más fácil de diseñar que la lógica asíncrona, un 'bloque' de RAM se sincronizará con el mismo reloj. Si desea convertir toda la memoria en un caché L1, entonces tendría que sincronizar todo el lote con un reloj lento para hacer frente al peor de los casos de tiempo de la ubicación más distante en la memoria. Esto significa que las ubicaciones de memoria distantes ahora están reteniendo las locales, que podrían haber sido cronometradas más rápido. Entonces, lo mejor que se puede hacer es zonificar la memoria. La sección más cercana y más pequeña del caché usaría el reloj más rápido. La siguiente sección más cercana y más pequeña usaría un reloj ligeramente más lento, etc.

Y ahora tiene cachés L1 y L2 y RAM.

Lo que nos lleva a la siguiente razón, el consumo de energía.

El caché en realidad consume una cantidad significativa de energía. No solo la memoria en sí, sino toda la lógica que la rodea que maneja el mapeo entre las líneas de caché y la memoria principal. Aumentar el rendimiento de esta lógica adicional puede resultar en un aumento en el consumo de energía. Ahora, para ciertas aplicaciones (móviles, integradas) tiene aún más incentivos para mantener el caché pequeño.

Consulte Compensaciones de diseño de caché para la optimización de potencia y rendimiento: un estudio de caso (Ching-Long Su y Alvin M. Despain, 1995).

+1 Me gusta tu respuesta. Golpea todos los puntos relevantes y lo respalda también. Fácil de leer
¿está bien? respuesta se basa en el retraso de la velocidad de la luz de una pulgada frente a varias pulgadas?
Esta respuesta es buena como descripción general, pero sospecho que no responde a la pregunta inicial. Uno no debe ser un experto en uArch para darse cuenta de que el caché de tamaño A4 no es práctico. Creo que OP preguntó sobre un aumento razonable en el tamaño del caché y cómo este aumento afectará la latencia del acceso al caché.
@AndyzSmith: es una gran exageración y una simplificación excesiva, pero creo que transmite el punto general de que, en algún momento, la memoria caché L1 no se puede ampliar indefinidamente. En algún momento, las leyes de la física entran y lo ralentizan.
El retraso de una señal en el chip no es la velocidad de la luz, es un valor más complicado que se calcula al considerar la capacitancia de la puerta neta/cable más accionada como una red RLC. No es lo suficientemente largo para ser una línea de transmisión. Cuanto más larga sea la red, más grande debe ser la puerta de conducción, o debe insertar búferes como repetidores. Todo lo cual también consume más energía.
Entonces, ¿el argumento aquí es que el tamaño del caché está determinado principalmente por la latencia del cable de conexión? Sospecho que también hay un gran problema con la demora agregada por el circuito de direccionamiento, ya que ese circuito tiene que abordar más y más ubicaciones discretas. ¿No? no estoy seguro. Quiero decir, si tiene la línea de direcciones y tiene un decodificador de direcciones, ¿ese decodificador de direcciones se vuelve más lento y tiene más 'fases' o bloques o lo que sea que tenga más direcciones? Sospecho que no, que el tiempo para decodificar una dirección es constante independientemente del tamaño del espacio de direcciones.
@ pjc50 "Cuanto más larga sea la red, más grande debe ser la puerta de conducción" ¿Quiere decir "puerta impulsada (MOSFET)", en lugar de conducir?
No, puerta de conducción (lógica).

Dejando de lado todos los factores económicos, de rendimiento y de consumo de energía, la respuesta a su pregunta es: depende de muchos factores microarquitectónicos.

Como ejemplo, vea esta referencia : la latencia de acceso L1 medida para todos los procesadores bajo prueba es de 4 ciclos de reloj. Las frecuencias de los procesadores son casi las mismas, pero los tamaños de caché L1 difieren hasta en un factor de 3.

La razón de la latencia constante a L1 a través de varios procesadores diferentes en la prueba anterior tiene sus raíces en la microarquitectura del caché: el acceso al caché en sí (recuperación de datos de la memoria) toma solo un ciclo de reloj. Se gastan tres ciclos adicionales para decodificar el acceso, verificar la presencia de datos y más... El número de etapas adicionales es el mismo en todos los procesadores en prueba, por lo tanto, las latencias de acceso son las mismas.

A pesar del ejemplo anterior, no se debe llegar a la conclusión de que la latencia de la memoria caché es independiente del tamaño de la memoria caché. Si alguien intentara implementar una caché L1 ridículamente grande, la lógica que realiza todas las operaciones requeridas para una lectura de caché también sería grande. En algún momento, el retardo de propagación a través de toda esta lógica sería demasiado largo y las operaciones que habían tomado un solo ciclo de reloj antes tendrían que dividirse en varios ciclos de reloj. Esto aumentará la latencia.

Suponiendo que la memoria caché en cuestión esté implementada en SRAM, los módulos que más se ven afectados por el tamaño de la memoria caché son: decodificadores de fila y muxes. Sin embargo, incluso los amplificadores de detección se verán afectados por cachés muy grandes: una oscilación de voltaje más pequeña en una línea de bits debido a una mayor capacitancia requerirá un amplificador de detección "más fuerte". Dicho esto, el efecto más severo en la velocidad lógica se agregará mediante la capacitancia de las interconexiones de cables: esta capacitancia tiene una dependencia más que lineal del tamaño de la SRAM. Los detalles exactos son específicos de la implementación.

Ahora, los cachés L1 son bastante estables en sus latencias porque su rendimiento es el más crucial. Si intenta analizar los cachés L2 y L3, la imagen se complica mucho.

La imagen se complica mucho más cuando considera los procesadores multinúcleo: tienen una lógica adicional para garantizar la coherencia de la memoria caché . Esto lleva a un factor adicional que afecta la latencia de acceso a la memoria caché: el historial de accesos a la memoria de todos los núcleos.

Resumen

Como puede ver, su pregunta está lejos de ser trivial y no puede responderse por completo. Sin embargo, si considera cachés preferibles desde el punto de vista económico y de rendimiento, entonces diría que su tamaño no afectará la latencia de manera apreciable.

Para lectores interesados:

Esta referencia es un análisis muy profundo de los factores de rendimiento de las CPU modernas. Hay mucho material relacionado con el caché allí. Requiere una comprensión profunda de la arquitectura informática y los principios de la microarquitectura (alternativamente, un buen resumen de los temas que uno necesita saber para convertirse en un profesional en este campo).

¡Gracias por la respuesta! Las respuestas tuyas y de @Rocketmagnet son bastante complementarias. Espero poder elegir ambos. Ya tengo mi copia de la referencia citada y últimamente me ha interesado mucho el tema, de ahí la pregunta.
¿Por qué la lógica para realizar una operación de lectura depende del tamaño del caché? ¿Por qué 'se vuelve demasiado largo' en qué número específico de direcciones hay un salto discreto? o si no hay un salto discreto, ¿cuál es la fórmula para el tiempo de acceso frente al tamaño?
puede ser específico sobre qué componente: "La recurrencia crítica, entonces, es un sumador, un decodificador, la línea de palabra SRAM, la(s) línea(s) de bit SRAM, el(los) amplificador(es) de detección, los muxes de dirección de bytes y el bypass muxes". hace que la lógica se vuelva grande? en.wikipedia.org/wiki/Sum_addressed_decoder
@AndyzSmith, la fórmula de tiempo de acceso frente a tamaño solo puede proporcionarla alguien que diseñe y simule el caché. En la referencia que publiqué, puede ver que se necesitan 4 ciclos de reloj para obtener datos de L1, pero nadie intenta estimar las demoras asociadas con estas lecturas. Pedir una fórmula no es una pregunta práctica sin mucha información adicional específica de implementación.
@AndyzSmith, asumiendo que el caché en cuestión se implementó en SRAM, los módulos que más se vieron afectados por el tamaño del caché son: decodificadores de fila y muxes. Sin embargo, incluso los amplificadores de detección se verán afectados por cachés muy grandes: menor oscilación de voltaje en una línea de bit debido a una mayor capacitancia -> amplificador de detección "más fuerte". Dicho esto, el efecto más severo en la velocidad lógica se agregará mediante la capacitancia de las interconexiones de cables: esta capacitancia tiene una dependencia más que lineal del tamaño de la SRAM. Una vez más, los detalles son específicos de la implementación.

Ingeniero de prueba de caché de CPU aquí: Dave Tweed en los comentarios tiene las explicaciones correctas. El caché está dimensionado para maximizar el rendimiento en el punto de precio esperado de la CPU. La memoria caché es generalmente el mayor consumidor de espacio de matriz y, por lo tanto, su tamaño hace una gran diferencia económica (y de rendimiento).

Eche un vistazo a la página de la familia de CPU Intel Ivy Bridge: http://ark.intel.com/products/codename/29902/Ivy-Bridge

El Xeon de gama alta viene con 30 MB de caché, tiene 12 núcleos y cuesta alrededor de $2700. El i3 de gama baja con 3 MB de caché (i3-3217) cuesta solo $ 500 por una computadora portátil completa (no puedo encontrarlo individualmente).

El Xeon ofrece el máximo rendimiento, pero también cuesta más fabricarlo y probarlo. El i3 es mucho más barato, pero la compensación es un tamaño de troquel más pequeño, del cual el caché es la parte más grande.

Respuesta muy interesante. Pero como dije en la pregunta, no estoy buscando la respuesta económica y obvia. Lo que estoy tratando de entender se relaciona con el rendimiento involucrado en el acceso a un caché muy grande (> 512 MB). ¿El tamaño degradaría el rendimiento de la memoria caché?