Qu'est-ce que Instruction atomique ?

Instruction qui effectue lecture et écriture mémoire en une seule opération indivisible, sans interruption par un autre cœur : CAS, fetch-and-add, LR/SC, etc.

Nom japonais: アトミック命令

« Instruction atomique » apparaît dans 5 questions d'entraînement réparties sur 1 thèmes, dont Multicœur et synchronisation.

Domaine: Multicœur et synchronisation

S'entraîner : questions sur Instruction atomique

Quelle description d’une instruction atomique (instruction indivisible) est correcte ?

  1. AInstruction qui effectue la lecture et l’écriture en mémoire comme une seule opération que les autres cœurs ne peuvent pas interrompre
  2. BInstruction de calcul physique servant à compter les atomes
  3. CInstruction la plus rapide, qui s’exécute toujours en 1 cycle d’horloge
Afficher la réponse et l'explication

Réponse : A. Instruction qui effectue la lecture et l’écriture en mémoire comme une seule opération que les autres cœurs ne peuvent pas interrompre

Une instruction atomique effectue la séquence lecture, calcul, écriture sans qu’une lecture ou écriture d’un autre cœur puisse s’intercaler. Les autres cœurs ne voient que l’état d’avant ou d’après l’opération. Parmi elles figurent CAS (compare-and-swap), fetch-and-add, ainsi que LR/SC et les instructions AMO de RISC-V ; elles servent de base à la construction des verrous et des structures de données sans verrou.

Quel est le fonctionnement de l’instruction atomique CAS (compare-and-swap) ?

  1. AElle n’écrit la nouvelle valeur que si la valeur en mémoire est égale à la valeur attendue, et indique si elle a réussi
  2. BElle compare deux valeurs en mémoire et écrit la plus grande dans les deux
  3. CElle échange sans condition la valeur en mémoire et la valeur du registre
Afficher la réponse et l'explication

Réponse : A. Elle n’écrit la nouvelle valeur que si la valeur en mémoire est égale à la valeur attendue, et indique si elle a réussi

CAS effectue de façon indivisible l’opération « si la valeur à cette adresse est toujours la valeur attendue, la remplacer par la nouvelle valeur ». Si un autre thread a modifié la valeur entre la lecture et l’écriture, l’opération échoue ; on peut donc mettre à jour en vérifiant que la valeur n’a pas changé. Avec une boucle qui, en cas d’échec, relit, recalcule et retente le CAS, on met à jour une valeur partagée en toute sécurité sans verrou. L’instruction cmpxchg de x86 en est un exemple.

« Instruction atomique » dans les explications

Questions mentionnant « Instruction atomique » (5)

  1. Quelle description d’une instruction atomique (instruction indivisible) est correcte ?
  2. Quel est le fonctionnement de l’instruction atomique CAS (compare-and-swap) ?
  3. Dans un spinlock, pourquoi attendre la libération par des lectures ordinaires et n’utiliser l’instruction atomique que lorsque le verrou semble libre (test-and-test-and-set), plutôt que de tenter directement la modification par instruction atomique ?
  4. Si 64 cœurs mettent à jour en continu et simultanément un compteur partagé unique par instruction atomique, l’ajout de cœurs n’accélère pas le traitement. Quelle en est la raison principale ?
  5. Quelle description du verrou à attente active (spinlock) est correcte ?

Termes associés

Compare-and-swap Sans verrou (lock-free) Verrou tournant (spinlock) LR/SC Interruption Acquisition-libération (acquire-release) Barrière mémoire Cohérence séquentielle Course aux données (data race) Espionnage de bus (snooping)

Retour au glossaire