Multicœur et synchronisation

Quelle description de la cohérence séquentielle (sequential consistency) est correcte ?

  1. ALes opérations de chaque cœur s’exécutent à chaque fois dans un ordre aléatoire
  2. BLes opérations de tous les cœurs paraissent disposées dans un ordre unique, celles de chaque cœur y apparaissant dans l’ordre du programme
  3. CToutes les opérations s’exécutent sur un seul cœur
Afficher la réponse et l'explication

Réponse : B. Les opérations de tous les cœurs paraissent disposées dans un ordre unique, celles de chaque cœur y apparaissant dans l’ordre du programme

En cohérence séquentielle, les opérations des différents cœurs paraissent disposées en une seule file, comme des cartes mélangées, chaque cœur conservant l’ordre de son programme. C’est le modèle le plus intuitif pour le programmeur, mais il limite fortement les optimisations matérielles de réordonnancement, comme les tampons d’écriture ; la plupart des CPU réels adoptent donc un modèle plus relâché.

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

Autres questions sur Multicœur et synchronisation

  1. Les deux threads ci-dessus s’exécutent simultanément sur des cœurs différents (sans réordonnancement par le compilateur). Quel résultat est impossible en cohérence séquentielle mais possible sur un CPU réel comme x86 ?
  2. Quelle est la caractéristique du modèle de cohérence mémoire de x86 (TSO, Total Store Order) ?
  3. Quelle affirmation sur les modèles de cohérence mémoire faibles comme ceux d’ARM ou de RISC-V (RVWMO) est correcte ?
  4. Quel est le rôle d’une instruction de barrière mémoire (fence) ?
  5. Dans le code ci-dessus, le thread 1 prépare data puis le signale via flag, et le thread 2 lit data après avoir vu flag. Sur un CPU à modèle de cohérence faible, que faut-il pour que le thread 2 lise de façon certaine 42 ?

Comparatifs sur ce thème