首頁 > 後端開發 > C++ > x86_64 是否為雙精度浮點值和向量提供真正的原子支援?

x86_64 是否為雙精度浮點值和向量提供真正的原子支援?

DDD
發布: 2024-12-02 02:57:10
原創
766 人瀏覽過

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

彙編級原子支援是否可用於 x86_64 中的雙精確度數和向量?

而 C 11 std::atomic在典型實作上通常是無鎖的,但由於編譯器產生的程式碼可能效率低下,它面臨效率限制。編譯器可能不會總是為涉及浮點值的原子操作產生最佳彙編。

此外,C 11 std::atomic 不為英特爾的整數或浮點事務記憶體擴充 (TSX) 提供 API點操作。 TSX 可以透過消除與通用暫存器和浮點暫存器之間的資料移動相關的開銷來顯著提高原子操作的效能。

向量的原子載入和儲存

儘管聲稱x86_64 缺乏原子操作對向量、自然對齊載入和最多8 個位元組的儲存(包括向量)的支援在x86 處理器上是原子的。這包括使用 x87 或 SSE 指令進行載入和儲存。因此,雙精度浮點值的對齊載入和儲存是原子的。

原子讀-修改-寫入操作

原子讀-修改-寫入操作(例如原子加法)是不直接支援雙精確度浮點值或向量。 x86_64 上這些操作的唯一選項是使用 cmpxchg 指令或 TSX 重試循環。

原子操作的特殊情況

IEEE 浮點運算的一些特殊情況可以使用整數實現運作。例如,可以透過使用原子操作翻轉符號位元來實現雙精度浮點值的求反。

原子向量加載和存儲

雖然原子操作沒有硬體保證向量加載和存儲,通常可以安全地假設雙精度浮點值的對齊向量加載和存儲不會導致撕裂。但是,涉及未對齊值的原子向量操作可能不安全。例外情況是 Intel 的 AVX 功能,它保證 SSE/AVX 操作的 128 位元原子性。

16B 物件上的原子操作

對 16 位元組物件執行原子操作,這大於原生原子操作寬度,必須使用鎖定cmpxchg16b。與普通原子操作相比,這可能會導致顯著的效能開銷,使其不適合效能至關重要的場景。

以上是x86_64 是否為雙精度浮點值和向量提供真正的原子支援?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板