Cómo funciona una caché de CPU: explicación práctica

Fuentes: A very concrete explanation of how a cache works

Una caché es una memoria pequeña y rápida integrada en el chip de la CPU que almacena los datos utilizados con mayor frecuencia para evitar accesos lentos a la memoria principal. Su funcionamiento se basa en el principio de localidad: la localidad temporal, que refleja la tendencia a reutilizar datos accedidos recientemente (como la variable de índice de un bucle), y la localidad espacial, que explica por qué se accede a direcciones de memoria contiguas, como ocurre al recorrer un arreglo cuyos elementos se almacenan de forma consecutiva. La jerarquía de caché se organiza en niveles: el L1, dividido en caché de instrucciones (I$) y caché de datos (D$) por motivos de velocidad; el L2, de mayor capacidad y unificado; y el L3, compartido entre los núcleos en los procesadores multinúcleo actuales. En los chips modernos las cachés ocupan entre el 30 % y el 70 % del área del silicio; por ejemplo, el i486 de 1989 disponía de una única caché I/D de 8 KB, mientras que cada núcleo del Intel Core i7 cuenta con 256 KB de L2 y comparte 8 MB de L3. Las métricas clave son la latencia de acierto, cuando el dato solicitado está en la caché, y la latencia de fallo, cuando hay que buscarlo en un nivel superior o en la memoria principal. La caché se implementa con SRAM, que actúa como una tabla hash hardware: la dirección de memoria se divide en offset, índice y etiqueta (tag), de modo que el índice localiza el bloque y la etiqueta, junto con el bit de validez, confirma que el dato almacenado corresponde a esa dirección. Las colisiones de índice se resuelven mediante políticas de reemplazo como FIFO. La información adicional de la etiqueta representa un overhead espacial y temporal, que se mitiga accediendo en paralelo a las matrices de etiquetas y de datos. Frente a las colisiones频繁es, las cachés asociativas permiten ubicar un bloque en varios slots para reducir el problema del ping-pong. En conjunto, estos mecanismos permiten que la caché ofrezca tiempos de acceso del orden de O(1) y minimicen el impacto del desfase entre la velocidad del procesador y la de la memoria.