Multicœur et synchronisation

Dans un protocole de cohérence par invalidation, que se passe-t-il lorsqu’un cœur écrit dans une ligne en état Shared (S) ?

  1. AIl ne modifie que sa propre ligne en laissant intactes les copies des autres cœurs
  2. BIl invalide les copies de la même ligne détenues par les autres cœurs, puis passe sa ligne à l’état M et écrit
  3. CIl vide les caches de tous les cœurs avant d’écrire
Afficher la réponse et l'explication

Réponse : B. Il invalide les copies de la même ligne détenues par les autres cœurs, puis passe sa ligne à l’état M et écrit

L’état S indique que d’autres cœurs peuvent détenir la même ligne ; une écriture directe rendrait les autres copies obsolètes. Le cœur envoie donc une demande d’invalidation, fait passer les copies des autres cœurs à l’état I, puis passe sa ligne à l’état M et écrit. Lorsqu’un autre cœur lira ensuite cette donnée, il subira un défaut et rechargera la valeur la plus récente. La plupart des CPU adoptent ce type de protocole par invalidation.

S'entraîner sur ce thème Retour au thème

Autres questions sur Multicœur et synchronisation

  1. Dans le protocole MESI, quel est le comportement habituel lorsque le cœur 1 veut lire une ligne que le cœur 0 détient à l’état Modified (M) ?
  2. Quelle description de la cohérence de cache par espionnage (snooping) est correcte ?
  3. Pourquoi utilise-t-on, dans les systèmes à grand nombre de cœurs, la cohérence par répertoire plutôt que l’espionnage ?
  4. Les protocoles de cohérence se divisent en protocoles par invalidation et par mise à jour. Quelle est la raison la plus appropriée pour laquelle la plupart des CPU adoptent l’invalidation ?
  5. Quelle description du faux partage (false sharing), qui survient dans les programmes multithreads, est correcte ?

Comparatifs sur ce thème