Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Titik Terapung Atom dan Operasi Vektor Dikendalikan pada Seni Bina x86_64?

Bagaimanakah Titik Terapung Atom dan Operasi Vektor Dikendalikan pada Seni Bina x86_64?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-07 06:08:15488semak imbas

How are Atomic Floating-Point and Vector Operations Handled on x86_64 Architectures?

Kendalian Titik Terapung Atom pada x86_64

Walaupun C tidak menyokong operasi berganda atom secara asli, ia menyediakan atomic tanpa kunci; pelaksanaan pada kebanyakan platform. Pelaksanaan ini biasanya menggunakan operasi bandingkan-dan-tukar (CAS) dengan arahan cmpxchg kunci.

Untuk operasi vektor atom pada x86_64, tiada sokongan perkakasan langsung. Walau bagaimanapun, beban dan simpanan 128-bit dan 256-bit yang diselaraskan secara amnya dijamin sebagai atom. Untuk operasi vektor tidak sejajar, jaminan atomicity kurang jelas.

Sokongan Peringkat Perhimpunan untuk Operasi Berganda dan Vektor

x86_64 menyediakan sokongan peringkat pemasangan untuk operasi atom pada beregu dan vektor:

  • Beregu: Beban atom, menyimpan dan operasi tambah/tolak/darab disokong melalui arahan destinasi memori movsd, movq, addsd, subsd dan mulsd.
  • Vektor: Pemuatan dan simpanan 128-bit dan 256-bit yang diselaraskan adalah atom pada x86_64 dengan sokongan AVX. Untuk operasi vektor tidak sejajar, tiada jaminan perkakasan langsung mengenai atomicity.

Pelaksanaan MSVC 2017 atomic

MSVC 2017 melaksanakan atom bebas kunci operasi menggunakan daftar integer dwilebar. Contohnya, operasi beban melibatkan:

CAS: movq QWORD PTR [dst_addr], rax  // 64-bit CAS

Operasi tambah menggunakan:

CAS: lock cmpxchg16b QWORD PTR [dst_addr], rax  // 128-bit CAS

Operasi RMW (Baca-Ubahsuai-Tulis) Atom

Operasi baca-ubah-tulis (RMW) atom, seperti fetch_add, memerlukan gelung CAS pelaksanaan. Pada x86_64, arahan CAS menyokong operasi 16-bait (cmpxchg16b).

CAS: lock cmpxchg16b QWORD PTR [dst_addr], rax

Walaupun gelung CAS menyediakan kefungsian RMW atom, ia lebih mahal daripada beban dan simpanan atom.

Tambahan Nota

  • Sesetengah perkakasan bukan x86 menyokong operasi tambah atom untuk jenis apungan/double.
  • Sambungan Memori Transaksi Intel (TSX) menyediakan sokongan yang lebih baik untuk operasi FP atom dan SIMD .
  • Penyusun sering menghasilkan kod yang tidak cekap untuk atom operasi, tetapi penambahbaikan sedang dibuat.
  • Operasi atom pada tatasusunan kongsi gandaan sejajar harus selamat, manakala operasi pada vektor tidak sejajar mungkin melibatkan koyakan.
  • Adalah mungkin untuk melaksanakan operasi atom pada 16 -byte objek menggunakan cmpxchg16b, tetapi prestasi akan menjadi lemah.

Atas ialah kandungan terperinci Bagaimanakah Titik Terapung Atom dan Operasi Vektor Dikendalikan pada Seni Bina x86_64?. 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