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
639 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!

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