Leçon 15 : Cache CPU et localité mémoire
Le CPU est bien plus rapide que la mémoire principale. Pour combler cet écart, il utilise une hiérarchie de cache — L1, L2, L3 — qui stocke des copies des données récemment accédées. Quand le code C++ accède aux données dans un ordre favorable au cache, les performances peuvent bondir de 10 à 50×. D
Le CPU retient les choses auxquelles tu as accédé récemment — lis les données dans l'ordre où elles se trouvent en mémoire, et le CPU aura déjà la donnée suivante prête avant même que tu la demandes.
- cache line
- L'unité de transfert entre la mémoire principale et le cache — 64 octets sur la plupart des CPU modernes. Tout accès mémoire charge la cache line entière contenant cette adresse.
- false sharing
- Quand deux threads écrivent dans des variables différentes qui partagent la même cache line, provoquant une invalidation inutile du cache sur chaque thread.
- localité spatiale
- La tendance des programmes à accéder à des adresses mémoire proches les unes des autres. L'accès séquentiel à un tableau exploite la localité spatiale car toute la cache line est chargée en une fois.
- localité temporelle
- La tendance des programmes à accéder à la même adresse mémoire à plusieurs reprises sur une courte période. Les boucles qui réutilisent la même variable exploitent la localité temporelle.
- prefetch
- Un mécanisme par lequel le CPU (ou le compilateur) charge des cache lines à l'avance avant que le code ne les demande, en détectant des motifs d'accès séquentiels.