Rumah > pembangunan bahagian belakang > C++ > Bagaimana Atom Berganda dan Operasi Vektor pada x86_64?

Bagaimana Atom Berganda dan Operasi Vektor pada x86_64?

Susan Sarandon
Lepaskan: 2024-11-28 13:27:14
asal
617 orang telah melayarinya

How Atomic Are Double and Vector Operations on x86_64?

Kendalian Atom pada Beregu dan Vektor dalam x86_64

Manakala C 11 std::atomic menawarkan operasi tanpa kunci pada kebanyakan pelaksanaan, operasi vektor AVX atom atau SSE kekal bergantung kepada CPU dan kekurangan sokongan peringkat pemasangan.

Operasi Atom pada Beregu

  • Operasi muat dan simpan secara semula jadi bersifat atom untuk 8 bait, termasuk berganda.
  • Operasi baca-ubah suai-tulis memerlukan gelung cuba semula dengan cmpxchg (atau TSX) kerana tiada arahan destinasi memori langsung.
  • Cmpxchg16b tersedia untuk operasi RMW atom 16-bait .
  • Sesetengah kes khas operasi apungan IEEE boleh dilaksanakan menggunakan operasi integer (cth., nilai mutlak, penolakan).

Kendalian Atom pada Vektor

  • Tiada sokongan perkakasan untuk operasi beban/storan vektor atom di seluruh sistem koheren cache.
  • Vektor dimuatkan/simpan pada tatasusunan sejajar bagi beregu mungkin selamat digunakan tanpa mengambil risiko koyak talian cache.
  • Untuk beban atom/kedai/RMW 16 bait, cmpxchg16b boleh digunakan.
  • Mengemas kini objek 16 bait secara atom adalah mungkin, tetapi membaca bahagian 8-bait secara berasingan tidak dijamin atomic.

Sokongan Penyusun

  • Penyusun tidak selalu menjana pemasangan yang cekap untuk atomic muat/simpan (cth., menggunakan arahan mov terus ke/dari daftar xmm).
  • Vektor atom (atom<__m128d> atau atom<__m256d>) tidak dilaksanakan dengan cekap, kerana ia memerlukan cmpxchg16b walaupun untuk baca sahaja atau operasi tulis sahaja.

Atas ialah kandungan terperinci Bagaimana Atom Berganda dan Operasi Vektor pada x86_64?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan