Atomere Gleitkommaoperationen auf x86_64
Obwohl C nativ keine atomaren Doppeloperationen unterstützt, bietet es sperrenfreie atomare
Für atomare Vektoroperationen auf x86_64 gibt es keine direkte Hardwareunterstützung. Allerdings ist bei ausgerichteten 128-Bit- und 256-Bit-Ladevorgängen und -Speichern im Allgemeinen garantiert, dass sie atomar sind. Für nicht ausgerichtete Vektoroperationen sind die Atomizitätsgarantien weniger klar.
Unterstützung auf Assembly-Ebene für Doppel- und Vektoroperationen
x86_64 bietet Unterstützung auf Assembly-Ebene für atomare Operationen auf Doppel und Vektoren:
MSVC 2017 Implementierung von Lock-Free atomic
MSVC 2017 implementiert sperrenfreies atomares
CAS: movq QWORD PTR [dst_addr], rax // 64-bit CAS
Der Add-Vorgang verwendet:
CAS: lock cmpxchg16b QWORD PTR [dst_addr], rax // 128-bit CAS
Atomic RMW (Read-Modify-Write) Operations
Atomere Read-Modify-Write-Operationen (RMW) wie fetch_add erfordern eine CAS-Schleifenimplementierung. Auf x86_64 unterstützt der CAS-Befehl 16-Byte-Operationen (cmpxchg16b).
CAS: lock cmpxchg16b QWORD PTR [dst_addr], rax
CAS-Schleifen bieten zwar atomare RMW-Funktionalität, sind jedoch teurer als atomare Lade- und Speichervorgänge.
Zusätzliche Hinweise
Das obige ist der detaillierte Inhalt vonWie werden atomare Gleitkomma- und Vektoroperationen auf x86_64-Architekturen gehandhabt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!