Heim >Backend-Entwicklung >C++ >Bietet x86_64 echte atomare Unterstützung für Gleitkommawerte und Vektoren mit doppelter Genauigkeit?
Während C 11 std::atomic
Außerdem stellt C 11 std::atomic keine API für Intels Transactional-Memory-Erweiterungen (TSX) für Ganzzahl- oder Gleitkommawerte bereit. Punktoperationen. TSX kann die Leistung für atomare Operationen erheblich verbessern, indem es den mit der Datenverschiebung zwischen Allzweckregistern und Gleitkommaregistern verbundenen Overhead eliminiert.
Trotz Behauptungen, dass x86_64 nicht atomar ist Unterstützung für Vektoren, natürlich ausgerichtete Ladevorgänge und Speicherungen von bis zu 8 Bytes, einschließlich Vektoren, sind auf x86-Prozessoren atomar. Dazu gehören das Laden und Speichern mithilfe von x87- oder SSE-Anweisungen. Daher sind ausgerichtete Ladevorgänge und Speicherungen von Gleitkommawerten mit doppelter Genauigkeit atomar.
Atomere Lese-, Änderungs- und Schreiboperationen (z. B. atomare Addition) sind Wird für Gleitkommawerte oder Vektoren mit doppelter Genauigkeit nicht direkt unterstützt. Die einzige Option für diese Operationen auf x86_64 ist eine Wiederholungsschleife mit der cmpxchg-Anweisung oder TSX.
Einige Sonderfälle für IEEE-Gleitkommaoperationen können mit Ganzzahlen implementiert werden Operationen. Beispielsweise kann die Negierung eines Gleitkommawerts mit doppelter Genauigkeit erreicht werden, indem das Vorzeichenbit mithilfe einer atomaren Operation umgedreht wird.
Während es für atomic keine Hardwaregarantie gibt Bei Vektorladungen und -speicherungen kann man im Allgemeinen mit Sicherheit davon ausgehen, dass ausgerichtete Vektorladungen und -speicherungen von Gleitkommawerten mit doppelter Genauigkeit nicht zu einem Tearing führen. Allerdings sind atomare Vektoroperationen mit nicht ausgerichteten Werten möglicherweise nicht sicher. Eine Ausnahme hiervon bildet die AVX-Funktion von Intel, die eine 128-Bit-Atomizität für SSE/AVX-Operationen garantiert.
Um atomare Operationen für 16-Byte-Objekte durchzuführen, die größer als die native atomare Operationsbreite ist, muss die Sperre cmpxchg16b verwendet werden. Dies kann im Vergleich zu normalen atomaren Vorgängen zu einem erheblichen Leistungsaufwand führen, sodass es für Szenarien, in denen die Leistung von entscheidender Bedeutung ist, ungeeignet ist.
Das obige ist der detaillierte Inhalt vonBietet x86_64 echte atomare Unterstützung für Gleitkommawerte und Vektoren mit doppelter Genauigkeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!