Memoria caché: qué es, tipos y cómo funciona
La memoria caché es una de las especificaciones más importantes del procesador y es un dato que siempre nos proporcionan los fabricantes. Seguramente te has planteado alguna vez que es la memoria caché y para qué sirve, para tratar de solucionar estas dudas hemos elaborado este artículo en el que tratamos de explicarlo de una forma muy sencilla y entendible.
El objetivo de este artículo no es profundizar en los conceptos relacionados en este sistema de memoria sino explicarlo de una forma clara y entendible.
Índice de contenidos
Memoria caché: concepto y funcionamiento básico
Antes de ver que es la memoria caché necesitamos tener claro cómo funciona un procesador en nuestros ordenadores, de una forma muy simple lo podemos resumir diciendo que este toma los datos e instrucciones que necesita para trabajar de la memoria RAM. Cuando el procesador necesita acceder a una información para hacer sus tareas, esta información es pedida a la RAM que la proporciona al procesador tan rápido como puede. Este proceso no es instantáneo, sino que se necesita un tiempo, varios ciclos de reloj dependiendo de la latencia, solo son unos nanosegundos, pero, aunque a nosotros nos parezca que no es nada en realidad es un mundo y mientras el procesador está esperando se pierde la oportunidad de hacer otros cálculos y operaciones.
Para solucionar este problema se creó la memoria caché, esta no es más que una pequeña cantidad de memoria que está dentro del procesador, la finalidad de la memoria caché es hacer que el acceso a la información por parte del procesador sea lo más rápida posible. La memoria caché está dentro del procesador por lo que la información tiene que viajar muy poco hasta llegar al lugar donde se procesa, por lo que el tiempo que se necesita para acceder a ella es mucho más reducido que en el caso de la RAM.
La cantidad de esta memoria es minúscula en comparación con la RAM, un PC de gama alta actual puede tener capacidades del orden de GB o más de RAM pero la cantidad de caché máxima está en el orden de KB y MB generalmente. Esto también tiene su importancia ya que el tiempo que se necesita para acceder a un dato en la memoria es proporcional a la cantidad de esta. Por tanto, tenemos que el acceso a la caché es mucho más rápido que el acceso a la RAM y además está más cerca y los datos tienen que viajar menos distancia.
Niveles
La memoria caché del procesador está organizada en varios niveles, la mayoría de los procesadores actuales tienen tres niveles de esta memoria, es lo que se conoce como caché L1, L2 y L3… hasta la LLC (Last Level Cache), que es el último nivel que se implementa, sea una L2, una L3, L4, etc. Los niveles más bajos son los más rápidos, pero con menor capacidad, mientras los niveles más altos están algo más alejados de la unidad de control y se tarda algunos ciclos más en acceder, sin embargo, son de mayor capacidad.
Además, la memoria cache L1 suele estar separada en L1 de instrucciones, donde solo se almacenan instrucciones, y la L1 de datos, solo para datos, mientras la L2 y niveles superiores está unificada, es decir, compartida por datos e instrucciones.
Los niveles más altos, en los procesadores multinúcleo, pueden estar compartidos o no. Por ejemplo, puede que un procesador de 8 núcleos tenga una ocho L1 para cada núcleo, pero sin embargo comparta la L2 para dos núcleos, o tal vez la L3 esté compartida por los ocho.
Conceptos
Por último, la memoria caché explota dos conceptos básicos para acelerar el procesamiento: localidad y velocidad. Es decir, está situada en un lugar cercano a las unidades de procesamiento o núcleos, para reducir la latencia, sin necesidad de ir «tan lejos» a buscarla a la RAM o a algún lugar de la memoria virtual del sistema. Por otro lado, son memorias muy caras, por ese motivo no tienen capacidades demasiado grandes, ya que tendrían costes muy elevados debido a que las celdas de memoria tienen tiempos de acceso muy rápidos frente a otras celdas de otros tipos de memoria, como la RAM, la flash, etc.
Para que te hagas una idea, acceder a la memoria principal, o RAM, se puede demorar unos 100 ciclos de reloj, lo que equivaldría a unos 50 ns. Puede parecer poco, pero son 100 ciclos en los que el procesador podría haber ejecutado decenas de instrucciones y ha tenido que esperar. En cambio, para acceder a la L1, por su baja latencia, podría hacerlo entre 3-5 ciclos nada más, mientras que para la L2 puede ir desde los 8-20 ciclos, y desde 30-80 ciclos para la L3. Esto significa una ganancia de tiempo que se traduce en un aumento del rendimiento bastante considerable.
Tal es el aumento del rendimiento, que últimamente está proliferando un nuevo paradigma en el que se le da bastante importancia al acercamiento de los datos e instrucciones a las unidades de procesamiento usando memorias HBM cercanas a los núcleos, caché empaquetada sobre la unidad de procesamiento (3D), etc.
Y es algo bastante obvio, imagina que tienes que desempeñar un trabajo de bricolaje para el que necesitas materia prima (datos) y las herramientas (instrucciones). ¿Cómo puedes realizar el trabajo más rápidamente? ¿Si tienes todas las materias primas y las herramientas a tu lado (caché)? ¿O si tienes que ir al trastero donde las guardas a por ellas (RAM) o tal vez a la ferretería cercana (disco duro)?
Funcionamiento de la jerarquía de memoria
Cuando la memoria caché contiene un dato o instrucción que la CPU está buscando, se dice que se produce un acierto (hit), mientras que si no lo contiene se produce un fallo (miss). Según el hit rate y miss rate de un sistema, se tendrá mayor o menor rendimiento. Ten en cuenta que si la capacidad de la caché es mayor, hay más posibilidades de que una información buscada esté y no haya sido borrada para almacenar otra información diferente. Aunque esto no solo depende del tamaño de la caché, también de las políticas y algoritmos empleados, etc.
Imaginemos una CPU con 3 niveles de caché, y que dicha CPU quisieses localizar una instrucción y un dato para ejecutarlos. Podría ocurrir lo siguiente:
- L1d y L1i: la CPU buscará primero en la L1, si se encuentra lo que busca se produce un hit y se obtiene el dato y la instrucción rápidamente, ya que se encuentra allí alojada de ejecuciones anteriores. En caso de que no se encontrase se produce un fallo o miss.
- L2: al producirse el fallo en el L1, lo siguiente que haría la CPU es buscar en la L2 si se encuentra el dato y la instrucción (recuerda que esta memoria está unificada). Si se localiza aquí se produce un hit y se obtienen para su ejecución. En caso contrario, se produce un fallo en la L2 y se pasa al siguiente nivel.
- L3 (LLC): la CPU buscará la información que necesita en este otro nivel, si se encuentra se produce un hit y se obtiene, si no se encuentra se produce un miss.
- Memoria principal o RAM & E/S: en caso de que en el LLC de la CPU no esté presente lo que se busca, la CPU optará por buscarlo en la RAM, que llevará más ciclos por la mayor latencia. Es muy probable que se encuentre allí. Sin embargo, puede darse el caso de que no lo esté…
- Memoria secundaria (SWAP o memoria virtual): entonces el S.O. deberá pasar el proceso con el dato e instrucción buscada a mayor prioridad, pasándolo desde la memoria de intercambio o memoria virtual hasta la RAM. Una vez cargada en la RAM, la CPU podrá acceder a ella. Por tanto, este paso es el que implica mayor número de ciclos de espera y es lo que se busca evitar.
He agregado el E/S como si fuese una memoria principal más, ya que éste también es tratado como un sistema de memoria a «ojos» de la CPU. Hay datos entrantes por parte de los periféricos de entrada (leer), y datos salientes para los periféricos de salida (escribir).
Te recomendamos nuestro artículo de qué es y cómo funciona le memoria caché L1, L2 y L3.
Tipos de memoria caché
Los tipos de memoria caché se pueden catalogar teniendo en cuenta diversos parámetros, como por ejemplo:
- Según su uso: según para qué se está usando la memoria caché se pueden dar los siguientes casos:
- Scratchpad Memory: es un tipo de memoria local muy rápida para el almacenamiento temporal de algunos datos u operaciones de cálculo, etc. Esta memoria es similar a una L1 y se encuentra próxima a la ALU.
- Buffer víctima o victim cache: es una pequeña caché completamente asociativa de tamaño pequeño que actúa como repositorio de datos e instrucciones descartados en la L1.
- Assist cache: similar a la anterior, completamente asociativa y con algoritmo de sustitución FIFO.
- Trace cache o L0: son memorias de muy pequeño tamaño, cercanas a la unidad de decodificación de instrucciones y con objetivo de almacenar micro-operaciones generadas por instrucciones recientes, para no tener que decodificarlas la próxima vez que se necesiten.
- Otros.
- Según el algoritmo de reemplazo: es la forma en la que van eliminando datos para dejar espacio para otros dentro de la caché:
- Aleatorio o RR: se elige de una forma pseudoaleatoria.
- LRU: relacionado con el principio de la localidad temporal, sustituyendo el menos reciente.
- FIFO: primero en llegar, primero en salir.
- MRU: reemplaza el más recientemente accedido.
- PLRU: en cachés asociativas, generalmente con más de 4 vías, se implementa este pseudo-LRU.
- SLRU: se divide en un segmento de prueba y otro protegido, donde las líneas del protegido están ordenadas desde la más antigua a la más reciente, y las líneas de un segmento se van pasando al final del protegido para que tengan una segunda oportunidad de acceso.
- LFU: con un contador va eliminando los menos accedidos primero.
- Otros.
- Según la política de emplazamiento: según el nivel de correspondencia u organización se tiene:
- Correlación directa: a cada bloque de memoria principal se le asigna un marco de memoria caché concreto.
- Asociativa total: cualquier posición de memoria principal se puede almacenar en cualquier posición de la caché.
- Asociativa de n vías: seguro que has visto en las descripciones de algunos procesadores que la caché es 4-way, 8-way, etc., pues esto son las vías. En caso de ser 1-way, cada posición de un bloque de memoria principal solo puede almacenarse en una posición concreta de la caché. Con más vías se mezcla una correspondencia directa a nivel de conjuntos y una correspondencia asociativa a nivel de bloques.
- Según la política de escritura:
- Write-through: modifica tanto la caché como la memoria principal para que no existan datos caducos y mantener así una coherencia.
- Write-back: solo se escribe la caché, y si la línea escrita va a ser reemplazada, también se modificará en la memoria de niveles jerárquicos superiores antes de su reemplazo.
Resumen y conclusión final
Como resumen y conclusión podemos decir que la memoria cache del procesador es la solución al problema de rendimiento del sistema de memoria, esta se encarga de acelerar las lecturas y escrituras que necesita hacer el procesador sobre el sistema de memoria principal para conseguir un mayor rendimiento general del sistema.
Te recomendamos la lectura de nuestras guías más interesantes:
- Mejores procesadores del mercado.
- Mejores placas bases.
- Mejores Memoria RAM.
- Mejores discos SSD del mercado.
Se trata de una memoria que está dentro del propio procesador en cantidades muy reducidas, pero es extremadamente importante para que este pueda funcionar correctamente.