Table des matières
La prise en charge atomique au niveau de l'assemblage est-elle disponible pour les doubles et les vecteurs dans x86_64 ?
Charges et stockages atomiques pour les vecteurs
Opérations atomiques de lecture-modification-écriture
Cas particuliers pour les opérations atomiques
Charges et stockages de vecteurs atomiques
Opérations atomiques sur des objets 16B
Maison développement back-end C++ x86_64 offre-t-il une véritable prise en charge atomique pour les valeurs et les vecteurs à virgule flottante double précision ?

x86_64 offre-t-il une véritable prise en charge atomique pour les valeurs et les vecteurs à virgule flottante double précision ?

Dec 02, 2024 am 02:57 AM

Does x86_64 Offer True Atomic Support for Double-Precision Floating-Point Values and Vectors?

La prise en charge atomique au niveau de l'assemblage est-elle disponible pour les doubles et les vecteurs dans x86_64 ?

Alors que C 11 std::atomic<double> est généralement sans verrouillage sur les implémentations typiques, il est confronté à des limitations d'efficacité en raison d'inefficacités potentielles dans le code généré par le compilateur. Les compilateurs ne produisent pas toujours un assemblage optimal pour les opérations atomiques impliquant des valeurs à virgule flottante.

De plus, C 11 std::atomic ne fournit pas d'API pour les extensions de mémoire transactionnelle (TSX) d'Intel pour les nombres entiers ou flottants. opérations ponctuelles. TSX peut améliorer considérablement les performances des opérations atomiques en éliminant la surcharge associée au mouvement des données entre les registres à usage général et les registres à virgule flottante.

Charges et stockages atomiques pour les vecteurs

Malgré les affirmations selon lesquelles x86_64 manque d'atomes la prise en charge des vecteurs, des charges naturellement alignées et des magasins jusqu'à 8 octets, qui incluent les vecteurs, sont atomiques sur les processeurs x86. Cela inclut les charges et les magasins utilisant des instructions x87 ou SSE. Par conséquent, les charges alignées et les magasins de valeurs à virgule flottante double précision sont atomiques.

Opérations atomiques de lecture-modification-écriture

Les opérations atomiques de lecture-modification-écriture (telles que l'addition atomique) sont n'est pas directement pris en charge pour les valeurs ou les vecteurs à virgule flottante double précision. La seule option pour ces opérations sur x86_64 est une nouvelle tentative en utilisant l'instruction cmpxchg ou TSX.

Cas particuliers pour les opérations atomiques

Certains cas particuliers pour les opérations à virgule flottante IEEE peuvent être implémentés en utilisant des nombres entiers. opérations. Par exemple, l'annulation d'une valeur à virgule flottante double précision peut être obtenue en inversant le bit de signe à l'aide d'une opération atomique.

Charges et stockages de vecteurs atomiques

Bien qu'il n'y ait aucune garantie matérielle pour les valeurs atomiques charges et stockages vectoriels, il est généralement prudent de supposer que les charges vectorielles alignées et les stockages de valeurs à virgule flottante double précision n'entraîneront pas de déchirure. Cependant, les opérations vectorielles atomiques impliquant des valeurs non alignées peuvent ne pas être sûres. L'exception à cela concerne la fonctionnalité AVX d'Intel, qui garantit une atomicité de 128 bits pour les opérations SSE/AVX.

Opérations atomiques sur des objets 16B

Pour effectuer des opérations atomiques sur des objets de 16 octets, qui est plus grand que la largeur d'opération atomique native, le verrou cmpxchg16b doit être utilisé. Cela peut entraîner une surcharge de performances importante par rapport aux opérations atomiques normales, ce qui le rend inadapté aux scénarios où les performances sont critiques.

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!

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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Musée à deux points: toutes les expositions et où les trouver
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Musée à deux points: toutes les expositions et où les trouver
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS Mar 03, 2025 pm 05:53 PM

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Gulc: Cibliothèque C construite à partir de zéro Gulc: Cibliothèque C construite à partir de zéro Mar 03, 2025 pm 05:46 PM

Gulc: Cibliothèque C construite à partir de zéro

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour? Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour? Mar 03, 2025 pm 05:52 PM

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les Mar 03, 2025 pm 05:53 PM

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Comment fonctionne la bibliothèque de modèle standard C (STL)? Comment fonctionne la bibliothèque de modèle standard C (STL)? Mar 12, 2025 pm 04:50 PM

Comment fonctionne la bibliothèque de modèle standard C (STL)?

Où est la valeur de retour de la fonction de langue C stockée en mémoire? Où est la valeur de retour de la fonction de langue C stockée en mémoire? Mar 03, 2025 pm 05:51 PM

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Utilisation distincte et partage de phrases Utilisation distincte et partage de phrases Mar 03, 2025 pm 05:51 PM

Utilisation distincte et partage de phrases

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)? Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)? Mar 12, 2025 pm 04:52 PM

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?

See all articles