Heim > Backend-Entwicklung > C++ > Wie atomar sind Doppel- und Vektoroperationen auf x86_64?

Wie atomar sind Doppel- und Vektoroperationen auf x86_64?

Susan Sarandon
Freigeben: 2024-11-28 13:27:14
Original
618 Leute haben es durchsucht

How Atomic Are Double and Vector Operations on x86_64?

Atomere Operationen auf Doubles und Vektoren in x86_64

Während C 11 std::atomic bietet sperrenfreie Operationen für die meisten Implementierungen, atomare AVX- oder SSE-Vektoroperationen bleiben CPU-abhängig und haben keine Unterstützung auf Assembly-Ebene.

Atomic Operations on Doubles

  • Lade- und Speichervorgänge sind für 8 Bytes, einschließlich Doubles, natürlich atomar.
  • Lese-, Änderungs- und Schreibvorgänge erfordern einen Wiederholungsversuch Schleife mit cmpxchg (oder TSX), da es keine direkte Speicherzielanweisung gibt.
  • Cmpxchg16b ist für 16-Byte-atomare RMW-Operationen verfügbar.
  • Einige Sonderfälle von IEEE-Float-Operationen können implementiert werden unter Verwendung ganzzahliger Operationen (z. B. Absolutwert, Negation).

Atomar Operationen auf Vektoren

  • Es gibt keine Hardwareunterstützung für atomare Vektorlade-/Speicheroperationen im gesamten Cache-Kohärenzsystem.
  • Vektorladungen/-speicherungen auf ausgerichteten Arrays von Doubles sind wahrscheinlich sicher zu verwenden, ohne dass das Risiko eines Cache-Line-Tearings besteht.
  • Für 16-Byte atomares Laden/Speichern/RMW, cmpxchg16b kann verwendet werden.
  • Atomisches Aktualisieren von 16-Byte-Objekten ist möglich, aber das separate Lesen der 8-Byte-Hälften ist nicht garantiert atomar.

Compiler-Unterstützung

  • Compiler generieren nicht immer eine effiziente Assembly für atomar Laden/Speichern (z. B. mithilfe von mov-Anweisungen direkt zu/von xmm-Registern).
  • Atomere Vektoren (atomar<__m128d> oder atomar<__m256d>) werden nicht effizient implementiert, da sie cmpxchg16b selbst für schreibgeschützte Zwecke erfordern oder Nur-Schreib-Vorgänge.

Das obige ist der detaillierte Inhalt vonWie atomar sind Doppel- und Vektoroperationen auf x86_64?. 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