Définition
Un mécanisme et un ensemble de règles qui garantissent que plusieurs copies mises en cache d’emplacements mémoire partagés dans un système multiprocesseur ou multicœur restent mutuellement cohérentes selon le modèle de mémoire et de cohérence choisi, de sorte que lectures et écritures se comportent de manière prévisible entre caches.

Principe

Principe
Les protocoles de cohérence appliquent des invariants sur la visibilité des écritures portant sur une même adresse entre caches : les approches courantes utilisent des états (par ex. MESI : Modified, Exclusive, Shared, Invalid), des transitions sur lectures/écritures et des messages (snooping sur bus ou schéma basé sur un annuaire) pour mettre en œuvre des politiques write‑invalidate ou write‑update. Le protocole doit s’intégrer au modèle de consistance mémoire et aux garanties d’ordonnancement du système.

Démonstration

Démonstration
Instances concrètes : familles de protocoles MESI utilisées sur caches snooping d’un bus ; variantes MSI/MESIF ; cohérence basée sur annuaire pour machines NUMA/fortement multicœurs ; compromis write‑invalidate vs write‑update illustrés par une variable partagée fréquemment modifiée vs partagée majoritairement en lecture.

Mauvaise application

Mauvaise application
Confondre cohérence et modèles de consistance de plus haut niveau — la cohérence garantit la visibilité cohérente des mises à jour d’une même adresse, mais ne garantit pas à elle seule l’ordonnancement global requis par la consistance séquentielle. Supposer que la cohérence supprime le besoin de synchronisation : les courses et problèmes d’atomicité subsistent même avec un protocole de cohérence correct.

Conséquence

Conséquence
Un protocole de cohérence correct simplifie le raisonnement sur les mises à jour d’un emplacement unique et permet une programmation mémoire partagée plus intuitive, mais impose des coûts en bande passante, latence et complexité de montée en charge et influe sur la migration et l’éviction des lignes cache, impactant la performance.

Inversion

Inversion
Caches non cohérents ou gérés par logiciel (par ex. passage de messages explicite, architecture distribuée sans partage) suppriment la cohérence matérielle automatique : des couches logicielles ou protocolaires doivent assurer la cohérence à granularité applicative, échangeant complexité matérielle contre scalabilité ou contrôle explicite.

Limite

Limite
S’applique au matériel et au logiciel bas niveau qui gèrent des copies mises en cache de mémoire partagée dans des systèmes à espace d’adressage cohérent ; exclut la cohérence de caches distribués de niveau supérieur entre machines sans espace d’adresses partagé (CDN, caches web) et ne définit pas à elle seule de contraintes d’ordonnancement au‑delà de la cohérence par emplacement.

Tension sémantique

Tension sémantique
Tension entre cohérence (visibilité par emplacement) et consistance (ordonnancement global) ; une autre tension existe entre write‑invalidate (moins de trafic pour les écrivains) et write‑update (meilleure latence pour les lecteurs), ainsi que des interactions avec modèles de mémoire relâchés et exigences de performance.

Synthèse

Synthèse
Un protocole de cohérence de cache est l’ensemble de règles et la machinerie de messages/états qui maintiennent la cohérence des copies en cache d’un même emplacement mémoire entre processeurs, généralement via des machines à états (MESI/MSI) et des schémas snooping ou basés sur annuaire, arbitrant la correction de visibilité par adresse contre les coûts en bande passante et scalabilité, tout en coexistant avec le modèle de consistance mémoire du système.