Lección 15: caché de la CPU y localidad de memoria
El procesador es mucho más rápido que la memoria principal. Para cerrar esa brecha, usa una jerarquía de caché — L1, L2, L3 — que almacena copias de los datos accedidos recientemente. Cuando el código C++ accede a los datos en un orden favorable para la caché, el rendimiento puede multiplicarse de 1
El procesador recuerda las cosas a las que accediste recientemente — si lees los datos en el orden en que están en memoria, el procesador ya tendrá listo el siguiente dato antes de que lo pidas.
- cache line
- La unidad de transferencia entre la memoria principal y la caché — 64 bytes en la mayoría de las CPU modernas. Cualquier acceso a memoria carga toda la cache line que contiene esa dirección.
- false sharing
- Cuando dos hilos escriben en variables distintas que comparten la misma cache line, causando una invalidación innecesaria de la caché en cada hilo.
- localidad espacial
- La tendencia de los programas a acceder a direcciones de memoria cercanas entre sí. El acceso secuencial a un array aprovecha la localidad espacial porque toda la cache line se carga de una vez.
- localidad temporal
- La tendencia de los programas a acceder a la misma dirección de memoria repetidamente en un lapso corto. Los bucles que reutilizan la misma variable aprovechan la localidad temporal.
- prefetch
- Un mecanismo por el cual el procesador (o el compilador) carga cache lines por adelantado antes de que el código las pida, detectando patrones de acceso secuenciales.