Comencemos con esto:
Creo que los últimos procesadores SMP utilizan cachés de 3 niveles, por lo que quiero entender la jerarquía de los niveles de caché y su arquitectura .
Para entender las cachés, necesita saber algunas cosas:
Una CPU tiene registros. Los valores en que se pueden usar directamente. Nada es más rápido.
Sin embargo, no podemos agregar registros infinitos a un chip. Estas cosas ocupan espacio. Si hacemos el chip más grande se vuelve más caro. Parte de eso se debe a que necesitamos un chip más grande (más silicio), pero también porque el número de chips con problemas aumenta.
(Imagen de una oblea imaginaria de 500 cm2. Corté 10 chips de él, cada chip de 50 cm2 de tamaño. Uno de ellos está roto. Lo descarto y me quedan 9 fichas de trabajo. Ahora toma la misma oblea y corté 100 fichas de ella, cada una diez veces más pequeña. Uno de ellos está roto. Descarto el chip roto y me quedo con 99 chips de trabajo. Esa es una fracción de la pérdida que de otro modo habría tenido. Para compensar las fichas más grandes, tendría que pedir precios más altos. Más que solo el precio del silicio adicional)
Esta es una de las razones por las que queremos chips pequeños y asequibles.
Sin embargo, cuanto más cerca esté la caché de la CPU, más rápido se podrá acceder a ella.
Esto también es fácil de explicar; las señales eléctricas viajan a la velocidad de la luz. Eso es rápido, pero sigue siendo una velocidad finita. La CPU moderna funciona con relojes en GHz. Eso también es rápido. Si tomo una CPU de 4 GHz, entonces una señal eléctrica puede viajar unos 7,5 cm por reloj. Es decir, 7,5 cm en línea recta. (Los chips no son conexiones rectas). En la práctica, necesitará significativamente menos de esos 7,5 cm, ya que no le da tiempo a los chips para presentar los datos solicitados y para que la señal viaje de regreso.
En pocas palabras, queremos que la caché esté lo más cerca posible físicamente. Lo que significa chips grandes.
Estos dos deben estar equilibrados (rendimiento-coste).
¿Dónde se encuentran exactamente los cachés L1, L2 y L3 en una computadora?
Asumiendo solo el hardware de estilo PC (los mainframes son bastante diferentes, incluso en el rendimiento vs. equilibrio de costos);
IBMEl original de 4,77 Mhz: Sin caché. La CPU accede a la memoria directamente. Una lectura de memoria seguiría este patrón:
- La CPU coloca la dirección que desea leer en el bus de memoria y afirma el indicador de lectura
- La memoria coloca los datos en el bus de datos.
- La CPU copia los datos del bus de datos a sus registros internos.
80286 (1982)
Todavía no hay caché. El acceso a la memoria no era un gran problema para las versiones de menor velocidad (6MHz), pero el modelo más rápido corría hasta 20MHz y, a menudo, necesitaba retrasarse al acceder a la memoria.
Luego obtienes un escenario como este:
- La CPU coloca la dirección que desea leer en el bus de memoria y afirma el indicador de lectura
- La memoria comienza a colocar los datos en el bus de datos. La CPU espera.
- La memoria terminó de obtener los datos y ahora es estable en el bus de datos.
- La CPU copia los datos del bus de datos a sus registros internos.
Es un paso adicional que se pasa esperando la memoria. En un sistema moderno que puede ser fácilmente de 12 pasos, por lo que tenemos caché.
80386: (1985)
Las CPU se vuelven más rápidas. Tanto por reloj, como al correr a velocidades de reloj más altas.
La RAM se vuelve más rápida, pero no tanto como las CPU.
Como resultado, se necesitan más estados de espera.Algunas placas base evitan esto agregando caché (que sería caché de 1er nivel) en la placa base.
Una lectura de memoria ahora comienza con una comprobación de si los datos ya están en la caché. Si lo es, se lee desde la caché mucho más rápida. Si no es el mismo procedimiento que se describe con el 80286
80486: (1989)
Esta es la primera CPU de esta generación que tiene algo de caché en la CPU.
Es una caché unificada de 8 KB, lo que significa que se utiliza para datos e instrucciones.
Alrededor de este tiempo, se vuelve común poner 256 KB de memoria estática rápida en la placa base como caché de 2do nivel. Por lo tanto, caché de 1er nivel en la CPU, caché de 2do nivel en la placa base.
80586 (1993)
El 586 o Pentium-1 utiliza un caché de nivel 1 dividido. 8 KB cada uno para datos e instrucciones. La caché se dividió para que los cachés de datos e instrucciones se pudieran ajustar individualmente para su uso específico. Todavía tiene una 1ª caché pequeña pero muy rápida cerca de la CPU, y una 2ª caché más grande pero más lenta en la placa base. (A una distancia física mayor).
En la misma área pentium 1 Intel produjo el Pentium Pro (‘80686’). Dependiendo del modelo, este chip tenía un caché integrado de 256 Kb, 512 KB o 1 MB. También era mucho más caro, lo que es fácil de explicar con la siguiente imagen.
Observe que la caché utiliza la mitad del espacio en el chip. Y esto es para el modelo de 256 KB. Más caché era técnicamente posible y algunos modelos se producían con cachés de 512 KB y 1 MB. El precio de mercado de estos era alto.
También tenga en cuenta que este chip contiene dos troqueles. Uno con la CPU real y la 1ª caché, y un segundo dado con la 2ª caché de 256 KB.
Pentium-2
El pentium 2 es un núcleo pentium pro. Por razones económicas, no hay caché 2 en la CPU. En su lugar, lo que se vende a una CPU es una PCB con chips separados para la CPU (y la 1ª caché) y la 2ª caché.
A medida que la tecnología progresa y comenzamos a crear chips con componentes más pequeños, se hace financieramente posible volver a colocar la segunda caché en el dado de CPU real. Sin embargo todavía hay una división. 1er caché muy rápido acurrucado a la CPU. Con un 1er caché por núcleo de CPU y un 2do caché más grande pero menos rápido junto al núcleo.
Pentium 3
Pentium-4
Esto no cambia para el pentium 3 o el pentium 4.
Alrededor de este tiempo, hemos alcanzado un límite práctico sobre la velocidad con la que podemos marcar las CPU. Un 8086 o un 80286 no necesitaba refrigeración. Un pentium – 4 que funciona a 3,0 GHz produce tanto calor y usa tanta potencia que resulta más práctico colocar dos CPU separadas en la placa base en lugar de una rápida.
(Dos CPU de 2,0 GHz usarían menos energía que una única CPU idéntica de 3,0 GHz, pero podrían hacer más trabajo).
Esto se puede resolver de tres maneras:
- Haga que las CPU sean más eficientes, para que hagan más trabajo a la misma velocidad.
- Usar varias CPU
- Usar varias CPU en el mismo ‘chip’.
1) Es un proceso continuo. No es nuevo y no se detendrá.
2) Se hizo al principio (por ejemplo, con placas base Pentium-1 dobles y el chipset NX). Hasta ahora esa era la única opción para construir un PC más rápido.
3) Requiere CPU donde múltiples ‘núcleos de cpu’ están integrados en un solo chip. (Luego llamamos a esa CPU una CPU de doble núcleo para aumentar la confusión. Gracias marketing:))
En estos días solo nos referimos a la CPU como un «núcleo» para evitar confusiones.
Ahora obtienes chips como el pentium-D (duo), que son básicamente dos núcleos pentium-4 en el mismo chip.
¿Recuerdas la foto del viejo pentium-Pro? ¿Con el enorme tamaño de caché?
¿Ves las dos grandes áreas de esta imagen?
Resulta que podemos compartir ese segundo caché entre ambos núcleos de CPU. La velocidad disminuiría ligeramente, pero una caché compartida de 512 Kb en 2º es a menudo más rápida que agregar dos cachés independientes de 2º nivel de la mitad del tamaño.
Esto es importante para su pregunta.
Significa que si lee algo de un núcleo de CPU y luego intenta leerlo de otro núcleo que comparte la misma caché, obtendrá una coincidencia de caché. No será necesario acceder a la memoria.
Dado que los programas migran entre CPU, dependiendo de la carga, el número de núcleos y el planificador, puede obtener un rendimiento adicional fijando programas que usan los mismos datos a la misma CPU (visitas de caché a L1 y inferiores) o a las mismas CPU que comparten caché L2 (y, por lo tanto, se pierden en L1, pero se registran lecturas de caché L2).
Por lo tanto, en modelos posteriores verá cachés de nivel 2 compartidos.
Si está programando para CPU modernas, tiene dos opciones:
- No te molestes. El sistema operativo debería ser capaz de programar las cosas. El programador tiene un gran impacto en el rendimiento de la computadora y las personas han invertido mucho esfuerzo en optimizarlo. A menos que haga algo extraño o esté optimizando para un modelo específico de PC, estará mejor con el programador predeterminado.
- Si necesita hasta el último bit de rendimiento y el hardware más rápido no es una opción, intente dejar las bandas de rodamiento que acceden a los mismos datos en el mismo núcleo o en un núcleo con acceso a una caché compartida.
Me doy cuenta de que aún no he mencionado la caché L3, pero no son diferentes. Una caché L3 funciona de la misma manera. Más grande que L2, más lento que L2. Y a menudo se comparte entre núcleos. Si está presente, es mucho más grande que la caché L2 (de lo contrario no tendría sentido tenerla) y a menudo se comparte con todos los núcleos.