


Bietet x86_64 echte atomare Unterstützung für Gleitkommawerte und Vektoren mit doppelter Genauigkeit?
Dec 02, 2024 am 02:57 AMIst atomare Unterstützung auf Assembly-Ebene für Doubles und Vectors in x86_64 verfügbar?
Während C 11 std::atomic<double> 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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
