Desde el antediluviano 486 de Intel que las cachés están en las CPUs de nuestros PC. Las hemos visto de diferentes capacidades, organizaciones y capacidades y son clave para el buen rendimiento de un procesador contemporáneo, hasta el punto en que son una pieza indispensable dentro de los mismos. Pero estas vienen en pequeñas cantidades, lo que nos lleva a preguntarnos: ¿qué es lo que limita a los fabricantes colocar un tamaño de la cache más grandes en sus procesadores?
Si uno mira en el mercado de las CPUs para alto rendimiento entonces verá la gama de procesadores POWER de IBM que durante años han utilizado ingentes cantidades de memoria DRAM como caché, como el POWER9 con 120 MB de caché L3.
Pero el reciente lanzamiento de las GPUs RX 6000 con sus 128 MB de memoria Caché ha hecho que nos preguntamos a que viene la limitación a la hora de colocar grandes cantidades de memoria como cachés dentro de los procesadores.
Primera limitación al tamaño de la caché: el espacio
La limitación más obvia tiene que ver con el espacio disponible en el chip, la memoria caché al igual que otro componente ocupa espacio en el chip y no solo la memoria caché sino también las interfaces hacía la misma y los mecanismos de coherencia que hacen que esta contenga la información adecuada en cada momento.
Es por ello que pese a que en cada nodo de fabricación que aparece es la SRAM la que más disminuye su tamaño, la cache no lo hace porque trae consigo hardware lógico adicional que ocupa un espacio importante en el procesador.
Segunda limitación al tamaño de la caché: la velocidad
La caché es mucho más rápida que la memoria RAM por lo que puede responder a las peticiones de los datos mucho más rápido, pero tiene una serie de problemas que afectan al rendimiento:
- Si un dato no se encuentra en un nivel de caché entonces se produce un caché miss que se traduce en varios ciclos de reloj sin el procesador sin hacer nada, la mejor manera de evitarlo es aumentar el tamaño de las cachés.
- El tiempo de búsqueda en todas las cachés incluidos los caché miss no puede ser igual o más alto que el tiempo en el que el procesador tardaría en preguntarle a la RAM.
La CPU no es la que busca los datos en la caché, sino que este proceso lo hace el controlador de la caché, si la caché es demasiado grande entonces el controlador de la caché tardará mucho más en encontrar los datos. En los sistemas multinúcleo se mantiene una caché privada con su controlador de caché para cada núcleo de muy pequeño tamaño ya son muy fáciles de recorrer. La idea es que si una caché es demasiado grande suma ciclos de reloj adicionales y eso va en contra del rendimiento.
Soluciones al problema del tamaño de la caché
Hemos escogido las que están más claras que vamos a a ver a futuro con tal de aumentar la capacidad de almacenamiento de las caches, no son las únicas soluciones existentes, pero si las más viables que acabemos viendo implementadas en procesadores futuros,.
Compresión de los datos en cache para ganar capacidad
Una de las soluciones de cara al tamaño de la cache es la compresión de caché, es decir, que los datos incluidos en la caché estén comprimidos y sean servidos al procesador a través de una unidad de descompresión de datos por hardware, lo que significa que a nivel de capacidad la memoria caché podría almacenar más datos en su interior sin aumentar su tamaño físico.
La contrapartida de un mecanismo de compresión-descompresión es que esto añade un tiempo extra a todo el proceso de búsqueda de datos, por lo que únicamente tiene sentido si evita un caché miss y permite encontrar el dato que se busca en la caché en vez de tener que ir a la RAM para encontrarlo.
Montar la caché no dentro sino encima del procesador
Otra de las soluciones de cara al «problema» del tamaño de la cache es colocar la caché de último nivel encima del procesador. La idea es hacer uso de la tecnología TSV, para así tener un chip de memoria SRAM casi tan grande como el procesador y con una gran capacidad de almacenamiento.
La contrapartida a esto es que dos chips apilados generan una gran temperatura y evita el uso de grandes velocidades de reloj, por lo que el rendimiento final del procesador de puede ver afectado respecto a una configuración tradicional.