¿Qué es la memoria caché en un procesador y por qué es necesaria

Cuando miramos las especificaciones de un procesador, una de las cosas que resaltan es la memoria caché, la cual se encuentra no solo en todas las CPU, sino también en todas las GPU. En este artículo os explicaremos que es la memoria cache en un lenguaje llano y accesible, para que así sepáis para que sirve este tipo de memoria en vuestros PC.

La memoria cache fue implementada por primera vez en el Intel 80486, pero sus orígenes se remontan al IBM S/360 donde la idea fue implementada de la memoria cache fue implementada por primera vez. A día de hoy debido al abismo entre la CPU, la GPU y otros procesadores con la memoria, se ha convertido en una pieza indispensable de todo procesador.

¿Por qué es necesaria la memoria caché?

Distancia RAM Procesador

La memoria cache es necesaria por el hecho que la memoria RAM es demasiado lenta como para que una CPU pueda ejecutar sus instrucciones con la suficiente velocidad y no la podemos acelerar más. ¿La solución? Añadir un pozo de memoria interno en el procesador que permite acercar los datos e instrucciones más recientes.

El problema es que hacer esto es sumamente complejo, ya que obliga a hacer que sean los propios programas que lo hagan gastando así ciclos de la CPU. ¿La solución? Crear una memoria con un mecanismo que copie los datos e instrucciones más cercanos a los que se está ejecutando en la actualidad.

Debido a que la caché está dentro del procesador, una vez la CPU encuentra los datos en su interior los ejecuta mucho más rápido que si tuviese un acceso natural a la memoria RAM.

¿Cómo funciona la memoria caché?

Cache Microscopio

En primer lugar hemos de tener en cuenta que la memoria caché no es parte de la memoria RAM ni funciona como tal, además que no puede ser controlada como la memoria RAM donde los programas pueden ocupar y liberar memoria como les antoje para cuando la necesiten. ¿El motivo? La caché funciona totalmente aparte de la memoria RAM.

El trabajo de la caché es el de acercar los datos desde la memoria al procesador. Lo habitual en un programa es que el código se ejecute en secuencia, es decir, que si la instrucción actual se encuentra en la línea 1000 entonces la siguiente se encontrará en la 1001 a no ser que sea una instrucción de salto. ¿La idea de las cachés? Pues trasladar parte de los datos y las instrucciones hacia una memoria interna del procesador.

Cuando la CPU o la GPU busque un dato o una instrucción, lo primero que hará será mirar en la caché más cercana al procesador y por tanto la de menor nivel para ir incrementando hasta llegar al dato esperado. La idea es que no tenga que acceder a la memoria.

Niveles de caché en CPU y GPU

Cachés CPU GPU

En un sistema multinúcleo donde tenemos dos o más núcleos nos encontramos con que todos ellos acceden al mismo pozo de memoria RAM hay una sola interfaz para la memoria y varios procesadores peleándose por un acceso a la misma. Es en este punto donde es necesario crear un nivel de caché adicional, el cual se comunica con el controlador de memoria y este con los niveles de caché superiores.

Normalmente las CPU multinúcleo suelen tener dos niveles de caché, pero en algunos diseños lo que tenemos son clústeres, los cuales se basan en grupos de varias CPU con una caché L2 compartida, pero que comparten el espacio con otros clústeres, lo que fuerza a veces a la inclusión de una caché de tercer nivel.

Aunque no son habituales, las cachés de nivel 3 hacen acto de aparición tan pronto como la interfaz de memoria es un cuello de botella lo suficientemente grande para que el añadido de un nivel adicional en la jerarquía ayude en el rendimiento.

La jerarquía de memoria

Jerarquia Caches

Las reglas de la jerarquía de memoria son muy claras, empieza desde los registros del procesador y termina en la memoria más lenta del mismo y sigue siempre las mismas normas:

  • El nivel actual de la jerarquía tiene más capacidad que el anterior pero menos que el siguiente.
  • A medida que nos vamos alejando de la CPU va aumentando la latencia de las instrucciones.
  • A medida que nos vamos alejando de la CPU va disminuyendo el ancho de banda con los datos.

En el caso concreto de los niveles de caché, estas almacenan partes cada vez más pequeñas de información pero contienen siempre un fragmento del siguiente nivel. Así pues la caché L1 es un subconjunto de los datos de la caché L2 que a su vez es un superconjunto de los datos de la caché L1 y un subconjunto de los datos de la caché L3 si la hubiera.

No obstante la caché de último nivel, la más cercana a la memoria, no es un subconjunto de la memoria RAM, sino solamente una copia de la página de memoria o conjunto de estas más cercanas al procesador.

Cache Miss o cuando no se encuentran los datos

Caché Miss

Uno de los problemas de rendimiento más grandes es cuando se produce un Caché Miss que ocurre cuando un dato no se encuentra en un nivel de caché. Eso es sumamente peligroso para el rendimiento de una CPU en-orden ya que la consecuencia son una gran cantidad de ciclos del procesador perdidos, pero no por ello es menos peligroso en una CPU con ejecución fuera de orden.

Para el diseño de una CPU, el hecho que la suma total del tiempo de búsqueda de todos los Caché Miss combinados junto al tiempo de búsqueda sea superior a buscar los datos directamente en la caché es un fracaso. Muchos diseños de CPU han tenido que volver a la mesa de diseño por el hecho que el tiempo de búsqueda es superior que el acceso a la RAM.

Es por eso que los arquitectos son muy reacios a añadir niveles adicionales en una arquitectura porque si, tiene que estar justificado de cara a una mejora del rendimiento.

Coherencia con la memoria

CPU RAM

Debido a que la caché tiene copias de datos de la memoria RAM, pero no es la propia memoria RAM esto provoca el peligro de que los datos no concuerden, no solo entre la caché y la RAM, sino también entre los diferentes niveles de caché donde algunos están separados.

Es por ello que son necesarios mecanismos que se encarguen de mantener la coherencia de los datos en todos los niveles entre sí. Algo que es supone la implementación de un sistema sumamente complejo que aumenta con la cantidad de núcleos del procesador.

3 Comentarios