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!