Bagaimanakah Operasi Atom pada Beregu dan Vektor Boleh Dicapai pada x86_64 Walaupun Had C?

Patricia Arquette
Lepaskan: 2024-11-28 06:06:19
asal
358 orang telah melayarinya

How Can Atomic Operations on Doubles and Vectors Be Achieved on x86_64 Despite C   Limitations?

Walaupun had C's std::atomic, yang tidak mempunyai sokongan bebas kunci, x86_64 menyediakan sokongan peringkat pemasangan untuk operasi atom tertentu pada beregu dan vektor.

Kendalian Berganda Atom dihidupkan x86_64

  • Beban dan stor sejajar semula jadi (sehingga 8 bait) adalah atom.
  • Operasi baca-ubah suai-tulis (RMW) atom memerlukan gelung cuba semula dengan cmpxchg .
  • cmpxchg16b boleh digunakan untuk 16-bait beban atom, stor dan RMW.

Operasi Vektor SSE/AVX pada x86_64

Walaupun C pada masa ini kekurangan sokongan untuk operasi vektor AVX/SSE atom, terdapat tiada cara untuk menjamin pemindahan atom bagi barisan cache 128b atau 256b di seluruh keseluruhan sistem.

Walau bagaimanapun, langkah berjaga-jaga tertentu boleh diambil untuk meminimumkan risiko koyak apabila menggunakan beban vektor/simpan pada tatasusunan kongsi beregu sejajar.

Beban Atom 16B

  • Menggunakan kunci cmpxchg16b dengan yang dikehendaki=dijangka boleh menyediakan beban atom 16B.

Stor Atom 16B dan RMW

  • kunci cmpxchg16b boleh digunakan untuk stor atom 16B dan operasi RMW.

Kendalian Atom dihidupkan Objek 16B dengan Separuh 8B

  • Adalah mungkin untuk mengemas kini objek 16B secara atom sambil membaca bahagian 8Bnya secara bebas.

Penyusun dan Operasi Atom

Penyusun mungkin tidak selalu menjana kod pemasang optimum untuk operasi atom. Sebagai contoh, mereka mungkin mengelakkan pemuatan/simpan movsd langsung antara XMM dan daftar berganda, sebaliknya memilih kaedah bulatan.

Atas ialah kandungan terperinci Bagaimanakah Operasi Atom pada Beregu dan Vektor Boleh Dicapai pada x86_64 Walaupun Had C?. 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