Heim > Backend-Entwicklung > C++ > Hauptteil

Wie können trotz C-Einschränkungen atomare Operationen auf Doubles und Vektoren auf x86_64 durchgeführt werden?

Patricia Arquette
Freigeben: 2024-11-28 06:06:19
Original
358 Leute haben es durchsucht

How Can Atomic Operations on Doubles and Vectors Be Achieved on x86_64 Despite C   Limitations?

Trotz der Einschränkungen von C 's std::atomic, 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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage