¿Por qué la caché L1 es más rápida que la caché L2?

Estoy tratando de entender por qué ciertas memorias caché de CPU son más rápidas que otras. Al comparar la memoria caché con algo como la memoria principal, existen diferencias en el tipo de memoria (SRAM frente a DRAM) y problemas de localidad (en el chip frente a tener que atravesar un bus de memoria) que pueden afectar las velocidades de acceso. Pero L1 y L2 generalmente están en el mismo chip, o al menos en el mismo dado, y creo que son el mismo tipo de memoria. Entonces, ¿por qué L1 es más rápido?

Porque está construido de esa manera.
Hay múltiples formas de construir el mismo tipo de RAM. Algunas formas dan como resultado una RAM que es más rápida que la RAM construida de otras formas.
La misma razón por la que su RAM DDR es más rápida que su disco duro...
relacionado: mi respuesta y SO pregunta sobre los tamaños de caché también explica algunas razones de compensación de velocidad/consumo de energía para tener cachés de varios niveles. Básicamente, hacer que un caché sea súper rápido cuesta energía y área de troquel para hacer más en paralelo, y es incompatible con los grandes tamaños/asociaciones que desea en un caché de último nivel.

Respuestas (4)

No, no son el mismo tipo de RAM, aunque están en el mismo chip que utiliza el mismo proceso de fabricación.

De todos los cachés, el caché L1 debe tener el tiempo de acceso más rápido posible (la latencia más baja), en comparación con la capacidad que debe tener para proporcionar una tasa de "aciertos" adecuada. Por lo tanto, está construido con transistores más grandes y pistas de metal más anchas, intercambiando espacio y potencia por velocidad. Los cachés de nivel superior deben tener capacidades más altas, pero pueden darse el lujo de ser más lentos, por lo que utilizan transistores más pequeños que se empaquetan de forma más compacta.

Esto es lo que estoy buscando, gracias. ¿Conoces alguna buena fuente donde pueda leer más sobre las diferencias?
No, no de improviso. Los detalles de estas compensaciones de espacio/energía/tiempo, así como las opciones relacionadas con la arquitectura y la capacidad de caché, están estrechamente ligados a los detalles de propiedad de los procesos del fabricante, por lo que se publica muy poco (si es que se publica algo) al respecto. Sólo puedo hablar en términos generales.
L1 también es más pequeño, lo que significa que la propagación de la señal requiere menos ciclos de reloj: a menudo, el tamaño de L1 se decide como la memoria más grande accesible en 1 (o 2) relojes.
Además del punto de Brian Drummond, L1 también suele usar acceso paralelo de etiquetas de datos. Por lo general, L2 accede primero a las etiquetas (determinando de qué manera si hay algún acierto) y luego a los datos, aumentando la latencia pero ahorrando energía (significativo dado el mayor tamaño, la mayor asociatividad y la mayor tasa de fallas). (El acceso a L2 también suele comenzar después de que se confirma una pérdida de L1, lo que aumenta su latencia efectiva).
@BrianDrummond: más pequeño tanto en términos de carga de cable como de profundidad de puerta (no creo que sea obvio a partir de su comentario).

L1 generalmente se usa como almacenamiento para instrucciones decodificadas, mientras que L2 es un caché general para un solo núcleo. Cuanto más bajo es el caché, más pequeño es y más rápido suele ser. Como regla general aproximada para los procesadores de PC:

Caché L1: acceso de 2-3 ciclos de reloj

Caché L2: acceso a ~10 ciclos de reloj

Caché L3: acceso a ~20-30 ciclos de reloj

El diseño de la caché L1 debe ser para maximizar la tasa de aciertos (la probabilidad de que la dirección de instrucción deseada o la dirección de datos estén en la caché) mientras se mantiene la latencia de la caché lo más baja posible. Intel utiliza una caché L1 con una latencia de 3 ciclos. La caché L2 se comparte entre una o más cachés L1 y, a menudo, es mucho, mucho más grande. Mientras que la caché L1 está diseñada para maximizar la tasa de aciertos, la caché L2 está diseñada para minimizar la penalización por error (la demora en la que se incurre cuando ocurre un error L1). Para los chips que tienen cachés L3, el propósito es específico del diseño del chip. Para Intel, las cachés L3 aparecieron por primera vez en sistemas multiprocesador de 4 vías (procesadores Pentium 4 Xeon MP) en 2002. Las cachés L3 en este sentido redujeron en gran medida los retrasos en entornos de subprocesos múltiples y quitaron carga al FSB. En el momento,

Cita obtenida aquí de la respuesta de "Pinhedd".

L1 también se usa para datos en general, pero es cierto que a menudo los datos L1 y las instrucciones L1 están separados, mientras que L2 se comparte: programmers.stackexchange.com/questions/44731/… (una de las razones por las que se puede compartir es que tiene más formas ).
Es común que los procesadores tengan cachés de datos e instrucciones separados en el nivel L1. Ciertamente es cierto para los chips x86 y SPARC posteriores. Y algunos cachés de instrucciones L1 no almacenan instrucciones decodificadas. El Pentium 4 almacenó instrucciones decodificadas, pero luego Intel volvió a los I-cachés normales y luego agregó recientemente cachés de instrucciones decodificadas a sus chips.

Hay varias razones por las que la velocidad es inversamente proporcional al tamaño. Lo primero que me viene a la mente es el dominio físico de los conductores, donde la propagación de la señal se limita a algún factor de la velocidad de la luz. Una operación puede tardar tanto como una señal eléctrica tarda en recorrer la distancia más larga dentro del mosaico de memoria y volver. Otra razón relacionada es la separación de los dominios del reloj. Cada CPU funciona con su propio generador de reloj, lo que permite que la CPU funcione con relojes de varios GHz. El caché de nivel 1 se ejecuta y se sincroniza con el reloj de la CPU, que es el más rápido del sistema. El caché de nivel 2, por otro lado, tiene que servir a muchas CPU y se ejecuta en un dominio de reloj diferente (más lento). No solo el reloj L2 es más lento (mosaico más grande), sino que cruzar un límite de dominio de reloj agrega otro retraso. Luego, por supuesto, están los problemas de fan-out (ya mencionados).

Aparte de las características de rendimiento inherentes, la localidad también tiene un papel (L1 está más cerca de la CPU). Según lo que todo programador debe saber sobre la memoria :

Es interesante notar que para el caché L2 en matriz, una gran parte (probablemente incluso la mayoría) del tiempo de acceso es causado por retrasos en los cables. Esta es una limitación física que solo puede empeorar con el aumento de los tamaños de caché. Solo la reducción del proceso (por ejemplo, pasar de 60 nm para Merom a 45 nm para Penryn en la línea de Intel) puede mejorar esos números.

Creo que esto se aplica principalmente donde los cachés son grandes. Esto no se aplica a todos los tipos de procesadores (aunque la demora del cable es significativa).