Multicœur et synchronisation

Quel est le principe de la mémoire transactionnelle matérielle ?

  1. AExécuter spéculativement la section critique, valider en bloc s’il n’y a pas de conflit avec d’autres threads, et annuler puis recommencer en cas de conflit
  2. BEnregistrer sur disque toutes les lectures et écritures mémoire, comme des transactions bancaires
  3. CInterdire les écritures en mémoire et n’autoriser que les lectures
Afficher la réponse et l'explication

Réponse : A. Exécuter spéculativement la section critique, valider en bloc s’il n’y a pas de conflit avec d’autres threads, et annuler puis recommencer en cas de conflit

Avec la mémoire transactionnelle, la section critique s’exécute comme une transaction, ses écritures restant provisoires et invisibles des autres. Si aucun autre thread n’a touché les mêmes données, toutes les écritures sont validées d’un coup à la fin ; en cas de conflit, tout est annulé et l’on recommence ou l’on bascule vers un verrou ordinaire. Avec peu de conflits, on obtient même avec un verrou à gros grain un parallélisme proche de celui d’un verrou à grain fin.

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

Autres questions sur Multicœur et synchronisation

  1. Lors d’une attente « jusqu’à ce que la file ne soit plus vide » avec une variable de condition, pourquoi revérifier la condition après le réveil avec une instruction while plutôt qu’avec une instruction if ?
  2. Deux cœurs possèdent chacun dans leur cache une copie de la variable x. Après une écriture de x par le cœur 0, quel problème peut survenir lors de la lecture de x par le cœur 1 en l’absence de mécanisme de cohérence de cache ?
  3. Quelle combinaison correspond aux quatre états du protocole de cohérence de cache MESI ?
  4. Dans le protocole MESI, que signifie l’état Modified (M) d’une ligne de cache ?
  5. Dans le protocole MESI, que se passe-t-il lorsqu’un cœur écrit dans une ligne en état Exclusive (E) ?

Comparatifs sur ce thème