Bilakah Anda Harus Menggunakan _mm_sfence, _mm_lfence, dan _mm_mfence?
Pengaturcaraan berbilang benang memperkenalkan kerumitan berkaitan konkurensi, memerlukan mekanisme untuk mengekalkan data integriti dan penyegerakan. Pustaka intrinsik Intel menyediakan beberapa fungsi, termasuk _mm_sfence, _mm_lfence, dan _mm_mfence, untuk mengawal susunan memori dalam seni bina x86.
Pemesanan Memori dalam x86
CPU x86 mempunyai kuat model memori yang dipesan, tetapi C dan C mempunyai model yang lebih lemah. Oleh itu, langkah berjaga-jaga tambahan diperlukan untuk memastikan pesanan memori yang betul dan mengelakkan kerosakan data atau keadaan perlumbaan.
_mm_sfence
_mm_sfence digunakan terutamanya selepas stor bukan sementara (NT) (_mm_stream_*) untuk mengelakkan penyusunan semula spekulatif. Stor NT disusun dengan lemah, bermakna ia boleh kelihatan tidak teratur berbanding dengan operasi memori lain. _mm_sfence mencipta penghalang yang memastikan operasi ingatan seterusnya dapat dilihat secara global selepas stor NT komited kepada ingatan.
_mm_lfence
_mm_lfence jarang digunakan sebagai pagar beban. Ia hanya mempunyai kaitan apabila memuatkan daripada kawasan memori Write-Combining (WC), seperti RAM video. _mm_lfence boleh menghalang pelaksanaan arahan seterusnya sehingga ia bersara, yang boleh berguna untuk penanda aras mikro.
_mm_mfence
_mm_mfence menyediakan konsistensi berurutan, memastikan nilai seterusnya sehingga selepas tidak dapat dibaca kedai sebelum ini boleh dilihat secara global. Ia boleh berguna jika anda melaksanakan versi tersuai std::atomic anda atau perlu mengawal susunan memori secara eksplisit untuk operasi yang mungkin spekulatif.
Ringkasan
Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan _mm_sfence, _mm_lfence, dan _mm_mfence?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!