Maison > développement back-end > C++ > Les charges et les magasins x86 sont-ils atomiques ?

Les charges et les magasins x86 sont-ils atomiques ?

Mary-Kate Olsen
Libérer: 2024-11-28 10:55:12
original
353 Les gens l'ont consulté

Are x86 Loads and Stores Atomic?

Atomicité des charges et des magasins sur x86

Malgré l'impression que les opérations de mémoire dans std::atomic reposent uniquement sur le verrouillage du bus, les opérations atomiques sont en fait exécutés dans le cache.

Cache Cohérence

La cohérence du cache garantit que tous les cœurs ont une vue cohérente de la mémoire. Les lignes de cache sont transférées entre les cœurs et la mémoire sous forme de morceaux atomiques. Cela permet aux opérations atomiques de se produire dans le cache, sans dépendre du verrouillage de bus externe.

Opérations alignées

Les opérations de chargement et de stockage alignées jusqu'à 64 bits sont garanties. atomique sur les processeurs x86. En effet, les accès alignés peuvent être transférés sur des chemins de données suffisamment larges pour s'adapter à l'ensemble de l'opération.

Opérations non alignées

Les charges et les magasins non alignés peuvent devenir non atomiques. , car ils peuvent nécessiter plusieurs accès pour être complétés. Par exemple, un chargement ou un stockage qui traverse une limite de ligne de cache doit être effectué dans deux accès distincts, ce qui le rend non atomique.

Opérations atomiques de lecture-modification-écriture

Les opérations atomiques de lecture-modification-écriture, telles que lock add [mem], eax, sont plus complexes à mettre en œuvre que de simples chargements ou magasins. Ces opérations nécessitent que le cœur maintienne la ligne de cache affectée dans un état modifié et empêche toute modification externe jusqu'à ce que l'opération soit terminée. Les opérations de lecture-modification-écriture non alignées peuvent nécessiter l'activation du signal LOCK# pour verrouiller le bus et empêcher les autres cœurs d'accéder à la mémoire affectée.

Optimisation du compilateur

Les compilateurs peuvent optimisez les charges seq_cst en omettant l'instruction mfence, car l'ordre de la mémoire x86 empêche la réorganisation de LoadLoad et LoadStore. Cependant, des clôtures sont toujours nécessaires pour les magasins seq_cst afin d'empêcher la réorganisation de StoreLoad.

En résumé, l'atomicité sur les processeurs x86 est obtenue grâce à une combinaison de cohérence du cache, d'opérations alignées et de verrouillage de bus pour les opérations de lecture-modification-écriture non alignées. . Cela permet aux opérations atomiques de se produire efficacement et sans affecter les performances globales du système.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal