Rumah >pembangunan bahagian belakang >C++ >Bilakah Anda Harus Menggunakan _mm_sfence, _mm_lfence, atau _mm_mfence?

Bilakah Anda Harus Menggunakan _mm_sfence, _mm_lfence, atau _mm_mfence?

Patricia Arquette
Patricia Arquetteasal
2024-11-18 00:05:02454semak imbas

When Should You Use _mm_sfence, _mm_lfence, or _mm_mfence?

Memutuskan Masa Untuk Menggunakan _mm_sfence, _mm_lfence, atau _mm_mfence

Apabila menggunakan kod berbilang benang, keperluan untuk mengawal susunan memori dengan berkesan. Walaupun pemproses x86 mempunyai model ingatan yang sangat teratur, C dan C mematuhi model yang lebih santai. Ini boleh membawa kepada kekeliruan mengenai penggunaan yang sesuai bagi _mm_sfence, _mm_lfence, dan _mm_mfence intrinsik.

Memahami Susunan Memori

Untuk memperoleh/melepaskan semantik, menghalang penyusunan semula masa penyusunan sahaja sudah memadai, seperti yang diserlahkan oleh konsep penghalang-pengkompil. Ini memastikan susunan operasi yang betul dalam mesin abstrak, tanpa menghalang prestasi dengan arahan asm yang tidak perlu. Pilihan seperti GNU C/C asm("" ::: "memory") berkesan bertindak sebagai penghalang pengkompil, mencapai matlamat ini sambil meminimumkan kesan prestasi.

Sebagai alternatif, C 11 std::atomic menawarkan penyelesaian yang lancar dengan shared_var.store(tmp, std::memory_order_release), memastikan keterlihatan global perubahan. _mm_mfence memegang nilai berpotensi jika anda melaksanakan versi C11/C 11 std::atomic anda sendiri, menggunakan mfence untuk mewujudkan konsistensi berjujukan dan menghalang muatan berikutnya daripada mengambil nilai sebelum kedai sebelumnya boleh diakses secara global.

Memeriksa Peranan Setiap Intrinsik

_mm_sfence:

  • Ideal untuk kedai NT, memerlukan pagar sebelum menetapkan bendera yang menjadi sandaran benang lain .
  • Memastikan keluaran/peroleh penyegerakan apabila menggunakan kedai NT, yang dipesan dengan lemah tidak seperti kedai biasa.

_mm_lfence:

  • Jarang digunakan sebagai pagar beban, kerana beban hanya tersusun lemah apabila melibatkan kawasan memori WC (Write-Combining).
  • Boleh digunakan untuk mengawal aliran pelaksanaan pada sesetengah pemproses, menghalang arahan kemudian daripada melaksanakan sehingga lfence telah selesai.

_mm_mfence:

  • Berpotensi berguna untuk melaksanakan versi std::atomic anda sendiri, memanfaatkan mfence untuk konsistensi berjujukan.
  • Nota: mfence boleh menjadi lebih perlahan daripada operasi atomic-RMW berkunci.

Nota Awas Berkenaan Prestasi

Adalah penting untuk mengakui bahawa pagar tidak mempercepatkan keterlihatan kedai. Mereka hanya menangguhkan operasi dalam urutan semasa sehingga operasi sebelumnya telah selesai.

Kesimpulan

Untuk kes penggunaan am, C 11 std::atomic atau C11 stdatomic menawarkan mantap dan penyelesaian mesra pengguna untuk mengawal pesanan memori. Dalam senario yang melibatkan kedai NT atau pelaksanaan tersuai std::atomic, _mm_sfence dan _mm_mfence mungkin terbukti berharga, tetapi pertimbangan yang teliti terhadap kesannya terhadap prestasi adalah penting.

Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan _mm_sfence, _mm_lfence, atau _mm_mfence?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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