Walaupun C 11 menyokong std::atomic
x86_64 menyokong operasi atom berikut pada beregu, dilakukan menggunakan kunci- percuma arahan:
Malangnya, tiada cara untuk menjamin keatoman 128b atau 256b storan atau pemuatan vektor merentasi sistem koheren cache. Walau bagaimanapun, untuk vektor sejajar, anda boleh menggunakan beban vektor dan menyimpan dengan selamat pada tatasusunan berganda yang dikongsi tanpa risiko koyak.
Jika beban atom 16B diperlukan, satu-satunya pilihan anda ialah menggunakan kunci cmpxchg16b dengan dikehendaki=jangkaan. jika ia berjaya, ia menggantikan nilai sedia ada dengan dirinya sendiri. Jika ia gagal, anda mendapat kandungan lama. Ambil perhatian bahawa "beban" ini rosak pada memori baca sahaja, jadi berhati-hati apabila menghantar penunjuk kepada fungsi yang melaksanakan operasi ini.
Stor atom 16B dan RMW boleh menggunakan kunci cmpxchg16b dengan cara yang jelas. Ini menjadikan kedai tulen jauh lebih mahal daripada kedai vektor biasa, terutamanya dengan berbilang percubaan semula cmpxchg16b. Walau bagaimanapun, RMW atom sudah mahal.
Anda boleh mengemas kini objek 16B secara atom tetapi membaca bahagian 8B secara berasingan. Walau bagaimanapun, pengkompil tidak menyediakan cara yang bersih untuk menyatakan ini, dan inline cmpxchg16b tidak boleh dipercayai kerana pertimbangan berterusan oleh pembangun pengkompil.
Atas ialah kandungan terperinci Adakah x86_64 Menyokong Operasi Atom pada Vektor Beregu dan SSE/AVX?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!