Multicœur et synchronisation

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) ?

  1. ALe cœur 0 réécrit la valeur la plus récente ou la transmet directement au cœur 1, et les deux lignes passent à l’état Shared (S)
  2. BLe cœur 1 lit l’ancienne valeur de la mémoire principale et le cœur 0 reste à l’état M
  3. CLa lecture du cœur 1 attend jusqu’à ce que le cœur 0 évince la ligne
Afficher la réponse et l'explication

Réponse : A. Le cœur 0 réécrit la valeur la plus récente ou la transmet directement au cœur 1, et les deux lignes passent à l’état Shared (S)

Informé de la demande de lecture du cœur 1, le cœur 0 sait qu’il détient la valeur la plus récente : il la réécrit en mémoire principale ou la transmet directement au cœur 1. Les deux cœurs détenant ensuite le même contenu, tous deux passent à l’état S. L’essentiel est de ne pas laisser lire l’ancienne valeur de la mémoire principale. La transmission directe livre la valeur plus vite qu’un passage par la mémoire principale.

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

Autres questions sur Multicœur et synchronisation

  1. Quelle description de la cohérence de cache par espionnage (snooping) est correcte ?
  2. Pourquoi utilise-t-on, dans les systèmes à grand nombre de cœurs, la cohérence par répertoire plutôt que l’espionnage ?
  3. 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 ?
  4. Quelle description du faux partage (false sharing), qui survient dans les programmes multithreads, est correcte ?
  5. Un faux partage se produit dans un tableau de compteurs par thread déclaré « long cnt[8]; ». Quelle est la mesure la plus appropriée ?

Comparatifs sur ce thème