Maison >développement back-end >C++ >Comment réaliser des opérations atomiques sur les doubles et les vecteurs sur x86_64 malgré les limitations de C ?
Malgré les limitations de std::atomic
Doubles opérations atomiques sur x86_64
Opérations vectorielles SSE/AVX sur x86_64
Bien que C ne prenne actuellement pas en charge les opérations vectorielles atomiques AVX/SSE, il n'y a aucun moyen pour garantir les transferts atomiques de lignes de cache 128b ou 256b sur l'ensemble du système.
Cependant, certaines précautions peuvent être prises pour minimiser le risque de déchirure lors de l'utilisation de charges/stockages vectoriels sur des tableaux partagés de doubles alignés.
Charge atomique 16B
Atomic 16B Store et RMW
Opérations atomiques sur des objets 16B avec 8B Moitiés
Compilateurs et opérations atomiques
Les compilateurs ne génèrent pas toujours un code assembleur optimal pour les opérations atomiques. Par exemple, ils peuvent éviter les chargements/stockages directs movsd entre XMM et les doubles registres, optant plutôt pour des méthodes détournées.
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!