« Fonctionnement d'un ordinateur/Architectures multiprocesseurs et multicœurs » : différence entre les versions

Contenu supprimé Contenu ajouté
mAucun résumé des modifications
Ligne 62 :
[[File:Shared cache coherency.png|centre|vignette|upright=2|Cohérence et caches partagés]]
 
On voit donc que la cohérence des caches n'est pas automatiquement maintenue avec les caches dédiés. Pour maintenircorriger cettece '''cohérence des caches'''problème, onles ingénieurs aont inventé de quoi détecter les données périmées et les mettre à jour : des '''protocoles de cohérence des caches'''. Il existe beaucoup de protocoles de cohérence des caches et nous ne les verrons pas tous dans ce chapitre. Tout protocole de cohérence des caches doit répondre ce problème : comment les autres caches sont-ils au courant qu'ils ont une donnée périmée ?
 
AvecSur les architectures à mémoire partagée, ces protocole utilisent la technique dite de l’'''espionnage du bus''',. Son nom trahit l'idée qui se cache derrière cette technique : les caches interceptent les écritures sur le bus (qu'elles proviennent ou non des autres processeurs), afin de mettre à jour la ligne de cache ou de la périmer. Avec ces protocoles, chaque ligne de cache contient des bits qui indique si la donnée contenue est à jour ou périmée. Quand on veut lire une donnée, les circuits chargés de lire dans le cache vérifient ces bits. Si ces bits indiquent que la ligne de cache est périmée, le processeur lit les données depuis la RAM ou les autres caches et la ligne de cache est mise à jour. La mise à jour de ces bits de validité a lieu à chaque écriture (y compris les caches des autres cœurs). Les caches sont interconnectés entre eux et échangent des informations pour maintenir la cohérence. Si un cache contient une donnée partagée, il prévient les autres caches quand la donnée est mise à jour. La mise à jour des données périmées peut être automatique ou basée sur une invalidation. Avec la '''mise à jour sur écriture''', les caches sont mis à jour automatiquement le plus tôt possible, avant même toute tentative de lecture. Avec l''''invalidation sur écriture''', toute écriture invalide les versions de la donnée dans les autres caches. Ces versions seront mises à jour quand le processeur les lira : il détecta que la ligne de cache a été invalidée et la mettra à jour si besoin.
Tout protocole de cohérence des caches doit répondre ce problème : comment les autres caches sont-ils au courant qu'ils ont une donnée périmée ? Pour cela, il existe deux solutions : l'espionnage du bus et l'usage de répertoires.
 
Certains protocoles utilisent un '''répertoire''', une table de correspondance qui mémorise, pour chaque ligne de cache, toutes les informations nécessaires pour maintenir sa cohérence. Ces protocoles sont surtout utilisés sur les architectures distribuées : ils sont en effet difficiles à implémenter sur les machines à mémoire partagée.
 
Avec l’'''espionnage du bus''', les caches interceptent les écritures sur le bus (qu'elles proviennent ou non des autres processeurs), afin de mettre à jour la ligne de cache ou de la périmer. Avec ces protocoles, chaque ligne de cache contient des bits qui indique si la donnée contenue est à jour ou périmée. Quand on veut lire une donnée, les circuits chargés de lire dans le cache vérifient ces bits. Si ces bits indiquent que la ligne de cache est périmée, le processeur lit les données depuis la RAM ou les autres caches et la ligne de cache est mise à jour. La mise à jour de ces bits de validité a lieu à chaque écriture (y compris les caches des autres cœurs). Les caches sont interconnectés entre eux et échangent des informations pour maintenir la cohérence. Si un cache contient une donnée partagée, il prévient les autres caches quand la donnée est mise à jour. La mise à jour des données périmées peut être automatique ou basée sur une invalidation. Avec la '''mise à jour sur écriture''', les caches sont mis à jour automatiquement le plus tôt possible, avant même toute tentative de lecture. Avec l''''invalidation sur écriture''', toute écriture invalide les versions de la donnée dans les autres caches. Ces versions seront mises à jour quand le processeur les lira : il détecta que la ligne de cache a été invalidée et la mettra à jour si besoin.
 
===Les protocoles sans nouveaux états===