而 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 位元原子性。
對 16 位元組物件執行原子操作,這大於原生原子操作寬度,必須使用鎖定cmpxchg16b。與普通原子操作相比,這可能會導致顯著的效能開銷,使其不適合效能至關重要的場景。
以上是x86_64 是否為雙精度浮點值和向量提供真正的原子支援?的詳細內容。更多資訊請關注PHP中文網其他相關文章!