Maison > développement back-end > C++ > Dans quelle mesure les opérations doubles et vectorielles sur x86_64 sont-elles atomiques ?

Dans quelle mesure les opérations doubles et vectorielles sur x86_64 sont-elles atomiques ?

Susan Sarandon
Libérer: 2024-11-28 13:27:14
original
624 Les gens l'ont consulté

How Atomic Are Double and Vector Operations on x86_64?

Opérations atomiques sur les doubles et les vecteurs dans x86_64

Alors que C 11 std::atomic propose des opérations sans verrouillage sur la plupart des implémentations, les opérations vectorielles atomiques AVX ou SSE restent dépendantes du processeur et manquent de prise en charge au niveau de l'assembleur.

Opérations atomiques sur les doubles

  • Les opérations de chargement et de stockage sont naturellement atomiques pour 8 octets, y compris les doubles.
  • Les opérations de lecture-modification-écriture nécessitent une boucle de nouvelle tentative avec cmpxchg (ou TSX) car il n'y a pas d'instruction directe de destination mémoire.
  • Cmpxchg16b est disponible pour les opérations RMW atomiques de 16 octets.
  • Certains cas particuliers d'opérations flottantes IEEE peuvent être implémentés à l'aide d'entiers opérations (par exemple, valeur absolue, négation).

Atomique Opérations sur les vecteurs

  • Il n'existe aucune prise en charge matérielle pour les opérations de chargement/stockage de vecteurs atomiques dans le système de cohérence de cache.
  • Les chargements/stockages de vecteurs sur des tableaux alignés de doubles sont probables utilisation sûre sans risquer de déchirer la ligne de cache.
  • Pour une charge/stockage/RMW atomique de 16 octets, cmpxchg16b peut être utilisé.
  • La mise à jour atomique d'objets de 16 octets est possible, mais la lecture séparée des moitiés de 8 octets n'est pas garantie comme étant atomique.

Prise en charge du compilateur

  • Prise en charge du compilateur
Les compilateurs ne génèrent pas toujours un assemblage efficace pour atomique charger/stocker (par exemple, en utilisant des instructions mov directement vers/depuis les registres xmm).Les vecteurs atomiques (atomic<__m128d> ou atomique<__m256d>) ne sont pas implémentés efficacement, car ils nécessitent cmpxchg16b même en lecture seule ou des opérations en écriture seule.

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