Multicœur et synchronisation

Quelle affirmation sur les modèles de cohérence mémoire faibles comme ceux d’ARM ou de RISC-V (RVWMO) est correcte ?

  1. AIls autorisent de nombreux réordonnancements de lectures et écritures sur des adresses différentes, et le programme insère des barrières, etc., là où l’ordre est nécessaire
  2. BN’autorisant aucun réordonnancement, ils n’ont pas d’instruction de barrière
  3. CIls ne garantissent même pas l’ordre des lectures et écritures sur une même adresse
Afficher la réponse et l'explication

Réponse : A. Ils autorisent de nombreux réordonnancements de lectures et écritures sur des adresses différentes, et le programme insère des barrières, etc., là où l’ordre est nécessaire

Dans un modèle faible, le matériel peut réordonner assez librement les lectures et écritures sur des adresses différentes sans dépendance. Cela simplifie les circuits et améliore performances et efficacité énergétique, mais pour échanger des données avec d’autres cœurs, il faut expliciter l’ordre avec des instructions fence ou des lectures et écritures à sémantique acquire/release. Dans les langages de haut niveau, l’emploi de variables atomiques fait générer au compilateur les instructions appropriées.

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

Autres questions sur Multicœur et synchronisation

  1. Quel est le rôle d’une instruction de barrière mémoire (fence) ?
  2. 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 ?
  3. Quelle affirmation sur les opérations mémoire à sémantique d’acquisition (acquire) et de libération (release) est correcte ?
  4. En C, pourquoi ajouter seulement volatile à une variable drapeau échangée entre threads est-il insuffisant comme synchronisation ?
  5. Pourquoi _Atomic de C11 et std::atomic de C++11 permettent-ils de spécifier un ordre mémoire ?

Comparatifs sur ce thème