Heim >Backend-Entwicklung >C++ >Wie können trotz C-Einschränkungen atomare Operationen auf Doubles und Vektoren auf x86_64 durchgeführt werden?
Trotz der Einschränkungen von C 's std::atomic
Atomere Doppeloperationen an x86_64
SSE/AVX-Vektoroperationen auf x86_64
Während C derzeit keine Unterstützung für atomare AVX/SSE-Vektoroperationen bietet, gibt es keine Möglichkeit, dies zu garantieren Atomare Übertragungen von 128b oder 256b Cache-Zeilen über das gesamte System.
Allerdings sicher Es können Vorsichtsmaßnahmen getroffen werden, um das Risiko eines Tearings zu minimieren, wenn Vektorladungen/-speicherungen auf gemeinsam genutzten Arrays ausgerichteter Doubles verwendet werden.
Atomic 16B Load
Atomic 16B Store und RMW
Atomoperationen an 16B-Objekten mit 8B Hälften
Compiler und atomare Operationen
Compiler generieren möglicherweise nicht immer optimalen Assemblercode für atomare Operationen. Beispielsweise können sie direkte movsd-Ladevorgänge/-speicherungen zwischen XMM und Doppelregistern vermeiden und sich stattdessen für Umgehungsmethoden entscheiden.
Das obige ist der detaillierte Inhalt vonWie können trotz C-Einschränkungen atomare Operationen auf Doubles und Vektoren auf x86_64 durchgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!