Mengapakah `std::atomic` Menggunakan `XCHG` untuk Kedai Konsisten Berturutan?

Linda Hamilton
Lepaskan: 2024-11-24 01:37:14
asal
987 orang telah melayarinya

Why Does `std::atomic` Use `XCHG` for Sequentially Consistent Stores?

Mengapa std::atomic Menggunakan XCHG untuk Stor Konsistensi Berjujukan

Latar Belakang

Dalam bidang multithreading, kelas std::atomic menyediakan cara untuk akses serentak kepada data yang dikongsi merentas rangkaian sambil memastikan integriti data. Fungsi ahli stornya membenarkan untuk menulis nilai kepada pembolehubah atom dengan semantik susunan memori yang ditentukan.

Dalam kes ketekalan jujukan (std::memory_order_seq_cst), seni bina x86 menggunakan arahan xchg untuk melaksanakan stor atom. Arahan ini melakukan pertukaran nilai serentak dan bukannya operasi stor yang mudah.

Motivasi untuk XCHG

Walaupun nampaknya arahan stor yang mudah digabungkan dengan penghalang ingatan (cth., _ReadWriteBarrier() atau asm volatile("" ::: "memori");) akan mencukupi untuk konsistensi berjujukan, menggunakan xchg mempunyai beberapa kelebihan:

1. Penghalang Memori Penuh: xchg bertindak sebagai pagar ingatan lengkap pada x86 kerana awalan kunci tersiratnya. Ini memastikan bahawa semua operasi memori sebelum dan selepas xchg dipesan, dengan berkesan menghalang penyusunan semula memori.

2. Semantik Keluaran Tidak Mencukupi: Operasi kedai biasa pada x86 mempamerkan semantik keluaran, yang membenarkan penyusunan semula dengan operasi seterusnya, termasuk memperoleh beban. Konsistensi berurutan, sebaliknya, menuntut agar penyusunan semula sedemikian adalah dilarang.

Pertimbangan Prestasi

Pilihan antara xchg dan mov mfence untuk stor atom mempunyai implikasi prestasi:

  • Skylake: gerai pagar pelaksanaan arahan ALU di luar perintah, manakala xchg tidak. Walau bagaimanapun, xchg membawa pergantungan palsu pada nilai yang dimuatkan sebelum ini.
  • AMD: Manual pengoptimuman perkakasan mengesyorkan penggunaan xchg untuk stor konsistensi berjujukan.
  • GCC/ Pengoptimuman Clang: Penyusun moden biasanya lebih suka xchg berbanding mov mfence.

Alternatif untuk Pagar Benang

Selain daripada menggunakan xchg untuk kedai atom, pilihan lain untuk melaksanakan pagar benang atom (juga dengan pesanan memori seq_cst) termasuk:

  • tambah kunci pada tindanan
  • kunci atau dword [rsp], 0

Membezakan Pelepasan dan Memperoleh

Adalah penting untuk ambil perhatian bahawa:

  • Stor dengan konsistensi berjujukan tidak membayangkan memperoleh semantik.
  • asm volatile("" ::: "memori"); ialah penghalang pengkompil sahaja dan tidak menguatkuasakan konsistensi jujukan.
  • Meniru konsistensi jujukan dengan operasi susunan yang lebih lemah dan pagar mungkin tidak sejajar sepenuhnya dengan model mesin abstrak C.

Kesimpulan

Ringkasnya, std::penyimpanan atom dengan konsistensi berjujukan pada seni bina x86 gunakan xchg kerana kesan penghalang memori penuh dan keserasian dengan keperluan konsistensi berjujukan. Walaupun pelaksanaan alternatif wujud, xchg kekal sebagai penyelesaian yang diterima pakai secara meluas untuk kecekapan dan pematuhannya terhadap pengesyoran industri.

Atas ialah kandungan terperinci Mengapakah `std::atomic` Menggunakan `XCHG` untuk Kedai Konsisten Berturutan?. 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