¿Cómo funciona la memoria caché de la CPU?

La memoria caché no siempre ha estado en la CPU. De hecho, los antiguos procesadores carecían de ella. Luego vinieron unos módulos similares a los actuales de RAM para poder agregar de forma opcional una memoria caché para mejorar el rendimiento de tu CPU, de forma similar a como se añadían los coprocesadores matemáticos o FPUs.

En los actuales microprocesadores, la memoria caché se ha integrado dentro del propio chip, formando ya una parte casi inseparable de ellos y con varios niveles para obtener un mayor beneficio de ella. En este tutorial podrás conocer más de fondo a este tipo de memoria y su importancia.

¿Qué es la memoria caché?

Antes de comenzar a explicar qué es la memoria caché me gustaría resumir de una forma muy breve cómo funciona una CPU, para que puedas comprender mejor su rendimiento. Dicho de una forma muy simple, la CPU no es más que una “calculadora” que va a procesar una serie de operaciones con los bits de los datos.

Es el software, el programa, el que indicará qué cálculos debe hacer la CPU. El programa se compone de una serie de datos e instrucciones. Todo esos datos e instrucciones almacenadas en la memoria secundaria (disco duro) serán enviados a la memoria principal (primaria). Desde allí serán captados por la CPU para introducirse en su interior. La instrucción indicará qué tiene que hacer la CPU con los datos. Por ejemplo, podría ser una instrucción de suma. Así es como se ejecuta el software…

Dicho eso de una forma breve, decir que los primitivos computadores usaban un único nivel de memoria lenta (algún tipo de ROM o magnética) desde la que obtener esas instrucciones y datos. Pero conforme las CPUs evolucionaban y se hacían más rápidas, se producían grandes cuellos de botella por la lentitud de esa memoria. Por eso se introdujo una memoria rápida intermedia entre la CPU y la secundaria: la RAM (SDRAM).

Pese a eso, la CPU seguía evolucionando de forma más rápida que la rapidez de al propia RAM, generando nuevamente otro cuello de botella. Entonces se pensó en otra memoria mucho más rápida y cercana al procesador y que estuviese entre la RAM y la CPU: la memoria caché (SRAM).

La memoria secundaria es barata, por lo que se pueden obtener grandes capacidades a buen precio. En el caso de la RAM, es más rápida, y también más cara que la secundaria. Por eso las capacidades de la memoria principal no son tan grandes. Si seguimos bajando de nivel nos topamos con la memoria caché, aún más cara y por ello sus capacidades son muy bajas. Luego estarían los registros, también extremadamente caros y limitados…

Con esta memoria caché se puede alimentar de forma mucho más rápida a los núcleos de la CPU, para que las latencias y ancho de banda con los que trabaja la RAM no afecten tanto al rendimiento de la CPU. Una forma de darle esos datos e instrucciones de una forma mucho más local y rápida… Dicho de un modo chabacano, para que los tenga más “a mano”.

En la actualidad, la mejora de la memoria secundaria ha supuesto un gran salto. Me refiero a los nuevos discos duros SSD o de estado sólido. Aun así, siguen siendo más lentos que la RAM, por lo que sigue siendo necesario estos otros niveles.

Niveles de caché en un procesador moderno

Dieshot de Intel Pentium III (Tualatin) en el que he marcado la memoria caché L2 unificada en verde y la caché L1 de datos e instrucciones en morado.

En un procesador moderno no solo existe un solo nivel de caché, sino que se divide en varios niveles. Por lo general son entre 2 y 4 niveles o levels (L):

  • LLC (Last Level Cache): se denomina así al último de los niveles de la memoria caché, es decir, el más “proximo” a la RAM, el que tiene el número más elevado dentro del procesador. Puede ser una L4, L3 o L2, dependiendo de los niveles que tenga. Por ejemplo, en los actuales procesadores de Intel y AMD es la L3. Una memoria que puede llegar a varios megas y que está unificada, es decir, se almacenan datos e instrucciones. Por lo general, este tipo de memoria es compartida por todos los núcleos, en caso de haber varios. Si por ejemplo hay L3 y L2, la L2 podría estar dedicada solo a un núcleo o compartida por dos núcleos, y la L3 alimentaría a todos.
  • Caché L1: esta caché es más rápida que la anterior, y se encuentra aún más cerca de la unidad de control para que pueda obtener la información y enviarlas a las unidades de ejecución de forma veloz. A diferencia de los niveles superiores, la L1 tiene una capacidad inferior, algo normal, ya que conforme se baja de nivel va siendo de menor capacidad. Pero la diferencia más notable es que en muchos procesadores no está unificada como el resto de niveles. En este caso está separada en L1I y L1D, es decir, solo para instrucciones y solo para datos.

¿Por qué es importante?

CPU Cores

Bueno, llegados a este punto ya tendrás una impresión del motivo por el que mejora el rendimiento. Con un ejemplo práctico lo entenderás muy bien. Imagina que tú (CPU) tienes que ir a por las herramientas (instrucciones y datos) que necesitas para hacer un trabajo (programa).

No es lo mismo tener las herramientas en la tienda (memoria secundaria), que tenerlas en el garaje (RAM) o que tenerlas justo al alcance de tu mano (caché). Si tiene que ir a la tienda o al garaje tardarás mucho más que si puedes alargar tu mano para cogerlas justo al lado. Esto no siempre es así. Cuando se necesita una instrucción o dato por primera vez, se tendrá que ir a la habitación de al garaje a por ellas. Pero una vez las has cogido y las tienes a tu lado, la próxima vez que las necesites será mucho más eficiente.

La CPU, mediante un sistema de búsqueda y fallos buscará siempre las instrucciones y datos primero en la L1. Si se produce un fallo se buscará en la L2, y si tampoco están allí se irá a la L3 (si hay). Y en caso de fallar también, no habrá más remedio que buscarlo en la RAM, demorándose más ciclos de reloj. Pero en caso de acierto, el acceso será mucho más rápido. Recuerda que se necesitan menos ciclos para acceder a la L1 que para la L2, y ésta a su vez se accede con menos ciclos que la L3, y así.

Ese es el objetivo de la caché, reducir la latencia de acceso a memoria. Insisto, estoy resumiendo mucho el funcionamiento. Pero básicamente así es como hace que tus apps y videojuegos puedan ser ejecutados de una forma mucho más rápida.