首頁 > 後端開發 > C++ > x86_64 上的雙精度運算和向量運算的原子性如何?

x86_64 上的雙精度運算和向量運算的原子性如何?

Susan Sarandon
發布: 2024-11-28 13:27:14
原創
625 人瀏覽過

How Atomic Are Double and Vector Operations on x86_64?

x86_64 中雙精度數和向量的原子操作

而C 11 std::atomic在大多數實現上提供無鎖操作,原子AVX 或SSE 向量操作仍然依賴CPU,並且缺乏彙編級支援。

雙精度上的原子操作

  • 對於 8 個位元組,包括雙精度數,加載和儲存操作自然是原子的。
  • 讀取-修改-寫入操作需要一個使用 cmpxchg(或 TSX)重試循環,因為沒有直接記憶體目標指令。
  • Cmpxchg16b 可用於 16 位元組原子 RMW 操作。
  • IEEE 浮點操作的一些特殊情況可以是使用整數運算實現(例如絕對值,

向量上的原子操作

  • 跨快取一致性系統的原子向量載入/儲存操作沒有硬體支援。 🎜>
  • 雙精確度對齊陣列上的向量載入/儲存可能可以安全使用,而不會帶來快取行的風險
  • 對於16 位元組原子載入/儲存/RMW,可以使用cmpxchg16b。
  • 原子更新16 位元組物件是可能的,但不能保證單獨讀取 8位元組一半是原子的。載入/儲存(例如,直接使用mov 指令傳入/傳出xmm暫存器)。

以上是x86_64 上的雙精度運算和向量運算的原子性如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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