


Wie können trotz C-Einschränkungen atomare Operationen auf Doubles und Vektoren auf x86_64 durchgeführt werden?
Nov 28, 2024 am 06:06 AMTrotz der Einschränkungen von C 's std::atomic<double>, dem es an sperrenfreier Unterstützung mangelt, bietet x86_64 Unterstützung auf Assembly-Ebene für bestimmte atomare Operationen auf Doubles und Vektoren.
Atomere Doppeloperationen an x86_64
- Natürlich ausgerichtete Lade- und Speichervorgänge (bis zu 8 Bytes) sind atomar.
- Atomere Lese-, Änderungs- und Schreibvorgänge (RMW) erfordern eine Wiederholungsschleife mit cmpxchg .
- cmpxchg16b kann für atomare 16-Byte-Ladevorgänge, -Speicherungen usw. verwendet werden. und RMW.
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
- Verwendung der Sperre cmpxchg16b mit wünschte=erwartet kann ein atomares 16B liefern laden.
Atomic 16B Store und RMW
- lock cmpxchg16b kann für atomare 16B Stores und RMW-Operationen verwendet werden.
Atomoperationen an 16B-Objekten mit 8B Hälften
- Es ist möglich, ein 16B-Objekt atomar zu aktualisieren, während seine 8B-Hälften unabhängig voneinander gelesen werden.
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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
