¿Por qué la memoria caché afecta tanto al rendimiento de CPUs y GPUs?

A día de hoy no existe ninguna arquitectura en cuanto a CPU o GPU que no disponga de memoria caché integrada. Ya que es esencial de cara al rendimiento, ya que sin la memoria caché entonces el rendimiento de cualquier CPU o GPU bajaría en picado. Pero, ¿hasta qué punto la memoria caché afecta al rendimiento en una CPU o una GPU? Os lo explicamos al detalle.

La primera CPU para PC en disponer de una memoria caché fue el Intel 80486, desde entonces hemos visto cómo todos los procesadores incorporan memoria caché en una jerarquía de varios niveles, y no solo en el caso de las CPU, sino también de las GPU.

Las utilidades principales son por todos conocidas. En primer reducir la enorme latencia entre el procesador y la memoria RAM, en segundo lugar el consumo energético de cada una de las diferentes instrucciones y el tercer lugar reducir la contención con el acceso a la memoria, lo que puede llevar a mayor latencia, especialmente si hablamos de varios núcleos accediendo a la misma dirección de memoria.

No obstante, hay una forma de medir el rendimiento de la caché, la cual se tiene en cuenta a la hora de diseñar nuevos procesadores. Sigue leyendo para descubrir cómo la caché afecta al rendimiento tanto en tu CPU como en tu GPU.

Resumen sobre la memoria caché

Cache primer nivel spllit

En primer lugar hemos de tener en cuenta que la caché no es un espacio direccionable por la CPU o la GPU, cuando hablamos de espacio direccionable nos referimos a que la CPU o GPU puede apuntar a una dirección de memoria concreta en la que se encuentra el siguiente dato o instrucción a procesar. Por lo que la caché no puede ser apuntada por la CPU y por tanto no puede ser manejada por esta.

Se puede decir que los mecanismos de la caché funcionan de manera automática y cuando un núcleo de la CPU realiza una búsqueda lo que hace es recorrer las diferentes memoria caché para encontrar el dato en concreto. Cuando un núcleo hace un cambio, entonces todas las copias de ese dato en el resto de memorias caché también se actualizan de manera automática. De la misma manera, son los propios mecanismos de la caché los que deciden qué copias del contenido de la RAM se mantienen en caché y cuáles no.

Y es que la caché lo que hace es almacenar copias de la memoria más cercana a las líneas de código que se están ejecutando en ese preciso momento. Esto se debe a que el código es en la mayoría de veces secuencial, por lo que la mayoría de veces la siguiente línea de programa a procesar será la inmediatamente siguiente.

¿Cómo se mide el rendimiento de la memoria caché?

Cuando la CPU o la GPU necesita acceder a un dato que se encuentra en memoria, lo primero que hacen es acceder a los diferentes niveles de la caché previos. Por lo que primero buscará en la caché de primer nivel, si no encuentra el dato entonces bajará al siguiente nivel y así hasta encontrar el dato que se está buscando.

Cuando el dato no se encuentra en un nivel de la caché entonces se produce lo que llamamos un «Cache Miss» y por tanto se necesita bajar al siguiente nivel de la jerarquía. Lo que provoca que haya un tiempo añadido en cuanto a la latencia que se ha de sumar. En cambio si disponemos

Para entenderlo, supongamos que tenemos una CPU o una GPU con 3 niveles de caché y hemos encontrado el dato en el tercer nivel. Por lo que el tiempo de búsqueda en ese caso se puede resumir de la siguiente manera:

Tiempo de búsqueda del dato en caché = tiempo de búsqueda en la caché de primer nivel + tiempo de desfase por el salto a la caché de segundo nivel + tiempo de búsqueda en la caché de segundo nivel + tiempo de desfase por el salto a la caché de tercer nivel + Tiempo de búsqueda en la caché de tercer nivel nivel

Se ha de tener en cuenta que si el tiempo de búsqueda en caché supera al tiempo de búsqueda directo en la RAM entonces el diseño de cachés de dicho procesador estará mal implementado, ya que bajo ningún sentido lógico tiene justificación que se tarde más en buscar un dato en la caché que en la memoria. Es por eso no solemos ver niveles de caché adicionales, ya que los diferentes tiempos de desfase añadidos por cada nivel añaden aún más latencia adicional al tiempo de acceso.

Midiendo el AMAT

Memoria Caché

AMAT son las siglas de Average Memory Access Time, o tiempo medio de acceso a memoria. Es una media por el hecho que no todas las instrucciones una CPU o una GPU tienen la misma latencia y dependen de la memoria de la misma manera. Pero al mismo tiempo nos sirve para medir el rendimiento de la caché de una CPU o una GPU.

Para calcular el AMAT de cualquier CPU o GPU se utiliza la siguiente fórmula:

AMAT = Hit Time + Miss Rate * Miss Penalty

Lo que nos interesa es que el AMAT sea bajo, ya que mide el tiempo de acceso de la CPU a los datos y por tanto la latencia a la hora de encontrar los datos. En cuanto a los diferentes valores de la fórmula AMAT para medir el rendimiento de la memoria caché estos son los siguientes:

  • El primer valor que es el Hit Time, que es el tiempo en que la CPU o la GPU tardará en encontrar el dato en la caché. En este caso es importante que la caché sea pequeña para que su recorrido se pueda realizar más rápido. Ya que cuanto más grande sea la caché entonces se tardará más en hacer el recorrido. Este es el motivo por el cual los niveles de caché más cercanos al núcleo tienen tamaños muy pequeños.
  • El segundo valor es el Miss Rate, que es el porcentaje de veces en los que los datos no se encuentran en la caché. Esto entra en contradicción con el Hit Rate, ya que la mejor manera de encontrar un dato en caché es aumentar la capacidad de almacenamiento de esta. La caché además ha de tener mecanismos para saber qué datos ha de conservar en su interior, para dar espacio a otros que van a tener un mayor acceso a corto plazo por parte de las CPU o las GPU.
  • El tercer valor es el Miss Penalty, este es el tiempo de latencia que se tarda en acceder a un dato si se encuentra en la memoria RAM y no en la caché. Esto supone un tiempo enorme en lo que a ciclos de reloj se refiere. Ya que como es obvió, en el caso de que el datos se encuentre en la RAM y no en la caché se ha de sumar el tiempo de búsqueda previó en la jerarquía de caches previa a la RAM.

El rendimiento de la memoria caché dependerá por tanto de cómo se optimice el Hit Time o el Miss Rate, dado que optimizar un apartado supone perjudicar al otro, los arquitectos han de decidir a qué valor le dan más importancia a la hora de diseñar una nueva CPU o una nueva GPU.