Heim >Backend-Entwicklung >C++ >Bietet x86_64 echte atomare Unterstützung für Gleitkommawerte und Vektoren mit doppelter Genauigkeit?

Bietet x86_64 echte atomare Unterstützung für Gleitkommawerte und Vektoren mit doppelter Genauigkeit?

DDD
DDDOriginal
2024-12-02 02:57:10727Durchsuche

Does x86_64 Offer True Atomic Support for Double-Precision Floating-Point Values and Vectors?

Ist atomare Unterstützung auf Assembly-Ebene für Doubles und Vectors in x86_64 verfügbar?

Während C 11 std::atomic Da es bei typischen Implementierungen im Allgemeinen sperrenfrei ist, unterliegt es aufgrund möglicher Ineffizienzen im vom Compiler generierten Code Einschränkungen in der Effizienz. Compiler erzeugen möglicherweise nicht immer eine optimale Assembly für atomare Operationen mit Gleitkommawerten.

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.

Atomere Lasten und Speicher für Vektoren

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

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.

Sonderfälle für atomare Operationen

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.

Atomic Vector Loads and Stores

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.

Atomere Operationen für 16B-Objekte

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!

Stellungnahme:
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