Mengapakah kedai `std::atomic` menggunakan XCHG untuk konsistensi berjujukan pada x86?

Mary-Kate Olsen
Lepaskan: 2024-11-23 14:52:20
asal
679 orang telah melayarinya

Why does `std::atomic`'s store use XCHG for sequential consistency on x86?

Mengapa kedai std::atomic menggunakan XCHG untuk ketekalan berurutan

Dalam konteks std::atomic untuk seni bina x86 dan x86_64, a operasi kedai dengan konsistensi berurutan (std::memory_order_seq_cst) menggunakan XCHG dan bukannya stor mudah dengan penghalang ingatan sebagai teknik untuk mencapai semantik keluaran berjujukan.

Ketekalan Berjujukan dan xchg

Ketekalan berurutan menentukan bahawa semua operasi memori muncul untuk melaksanakan dalam beberapa urutan berurutan, dan susunan ini adalah sama untuk semua urutan. XCHG, arahan x86 yang menukar nilai dua operan secara atom, sememangnya memenuhi keperluan ketekalan berjujukan ini. Dengan menggunakan XCHG untuk melaksanakan operasi tulis, std::atomic memastikan bahawa kedai menjadi kelihatan secara global kepada semua urutan pada titik tertentu dalam susunan pelaksanaan, menghalang penyusunan semula dengan operasi seterusnya.

mov- kedai mfence lwn. XCHG

Sementara kedai mov ringkas diikuti dengan memori pagar (seperti mfence) secara teorinya boleh memberikan semantik keluaran, ia tidak mencukupi untuk operasi kedai keluaran berjujukan. MFENCE, arahan pagar ingatan yang mewujudkan penghalang ingatan, memastikan bahawa operasi tulis sebelumnya komited kepada ingatan sebelum meneruskan. Walau bagaimanapun, ia tidak menghalang operasi pemuatan berikutnya daripada disusun semula sebelum stor keluaran.

Pertimbangan Prestasi

Pilihan antara mfence kedai mov dan XCHG untuk keluaran berjujukan operasi kedai melibatkan pertukaran prestasi.

  • Pada CPU tertentu (cth., Intel Skylake), XCHG boleh menjadi lebih cekap daripada mfence mov-store, terutamanya apabila tiada kod bergantung sekeliling yang perlu disegerakkan dengan operasi atom.
  • Pada CPU lain, mfence mov-store mungkin lebih baik untuk senario pemprosesan tinggi atau apabila kod sekeliling boleh bertindih pelaksanaan dengan atom operasi.

Butiran Pelaksanaan

Dalam praktiknya, pelaksanaan khusus std::atomic's store dengan konsistensi berjujukan berbeza-beza bergantung pada pengkompil dan seni bina perkakasan.

  • GCC/Clang: Asalnya digunakan mov-store mfence tetapi baru-baru ini telah beralih kepada menggunakan XCHG untuk kedai seq-cst.
  • Intel Compiler: Menggunakan XCHG untuk kedai seq-cst.
  • Microsoft Visual C : Juga menggunakan XCHG untuk seq-cst kedai.

Pagar Perolehan Tersirat

Pernyataan bahawa kedai x86 mempunyai pagar perolehan tersirat adalah tidak betul. Kedai di x86 mempunyai semantik keluaran, bukan memperoleh semantik. Semantik perolehan biasanya dikuatkuasakan menggunakan halangan memori seperti mfence atau operasi baca atom dengan semantik std::memory_order_acquire.

Atas ialah kandungan terperinci Mengapakah kedai `std::atomic` menggunakan XCHG untuk konsistensi berjujukan pada x86?. 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