Multicœur et synchronisation

Pourquoi utilise-t-on, dans les systèmes à grand nombre de cœurs, la cohérence par répertoire plutôt que l’espionnage ?

  1. AParce qu’en enregistrant quels cœurs détiennent chaque ligne et en ne notifiant que les cœurs concernés, on réduit les échanges
  2. BParce que le répertoire rend les caches inutiles
  3. CParce que le répertoire permet de notifier tous les cœurs à chaque écriture
Afficher la réponse et l'explication

Réponse : A. Parce qu’en enregistrant quels cœurs détiennent chaque ligne et en ne notifiant que les cœurs concernés, on réduit les échanges

La cohérence par répertoire maintient, pour chaque ligne, une table (répertoire) indiquant quels cœurs en ont une copie et dans quel état. Lors d’une écriture, on consulte le répertoire et l’on n’envoie de demande d’invalidation qu’aux cœurs détenteurs d’une copie. Les échanges étant moins nombreux qu’avec l’espionnage, qui prévient tous les caches à la fois, cette méthode est utilisée notamment dans les CPU pour serveurs comptant plusieurs dizaines de cœurs ou plus.

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

Autres questions sur Multicœur et synchronisation

  1. 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 ?
  2. Quelle description du faux partage (false sharing), qui survient dans les programmes multithreads, est correcte ?
  3. 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 ?
  4. Quelle description de la course aux données (data race) est correcte ?
  5. Si le code ci-dessus est exécuté simultanément par deux threads, la valeur finale de counter peut être inférieure à 200000. Pour quelle raison ?

Comparatifs sur ce thème