Qu'est-ce que Modèle de cohérence mémoire ?
Ensemble de règles définissant dans quel ordre les lectures et écritures d'un cœur à plusieurs adresses peuvent être observées par les autres cœurs. Exemples : cohérence séquentielle, TSO de x86, modèles faibles d'ARM et de RISC-V.
Nom japonais: メモリ一貫性モデル
« Modèle de cohérence mémoire » apparaît dans 3 questions d'entraînement réparties sur 1 thèmes, dont Multicœur et synchronisation.
Domaine: Multicœur et synchronisation
Un exemple classique : le test du tampon d'écriture
Le cœur 0 exécute x = 1 puis lit y, tandis que le cœur 1 exécute y = 1 puis lit x, avec x et y initialement à 0. Sous cohérence séquentielle, au moins un cœur doit lire 1. Sous TSO, les deux peuvent lire 0, car chaque écriture peut encore se trouver dans le tampon d'écriture de son cœur lorsque le chargement de l'autre cœur s'exécute. Les algorithmes de verrouillage comme ceux de Dekker et de Peterson échouent exactement de cette manière, sauf si une barrière complète est placée entre l'écriture et le chargement. Sur un modèle faible, même la transmission de données au moyen d'un drapeau peut échouer si des barrières n'ordonnent pas les accès.
Questions fréquentes
Quelle est la différence entre cohérence de cache et cohérence mémoire ?
La cohérence de cache garantit que tous les cœurs voient les écritures vers une même adresse dans le même ordre et finissent par lire la dernière valeur. La cohérence mémoire définit l'ordre dans lequel les accès à des adresses différentes peuvent être observés par les autres cœurs.
Que signifie TSO ?
TSO signifie total store order (ordre total des écritures), le modèle mémoire utilisé par les processeurs x86. Il autorise seulement qu'un chargement ultérieur vers une adresse différente soit observé avant une écriture antérieure, un effet du tampon d'écriture.
Pourquoi les programmes Arm et RISC-V ont-ils besoin de plus de barrières mémoire que les programmes x86 ?
Arm et RISC-V utilisent des modèles mémoire faibles qui permettent la plupart des réordonnancements de chargements et d'écritures vers des adresses différentes ; l'ordre doit donc être demandé explicitement. Le TSO de x86 conserve déjà la plupart des ordres, si bien que les barrières ne sont nécessaires que dans des cas comme une écriture suivie d'un chargement vers une autre adresse.