Rumah >pembangunan bahagian belakang >C++ >Adakah x86_64 Menawarkan Sokongan Atom Sebenar untuk Nilai dan Vektor Titik Terapung Ketepatan Berganda?

Adakah x86_64 Menawarkan Sokongan Atom Sebenar untuk Nilai dan Vektor Titik Terapung Ketepatan Berganda?

DDD
DDDasal
2024-12-02 02:57:10727semak imbas

Does x86_64 Offer True Atomic Support for Double-Precision Floating-Point Values and Vectors?

Adakah Sokongan Atom Peringkat Perhimpunan Tersedia untuk Beregu dan Vektor dalam x86_64?

Manakala C 11 std::atomic secara amnya bebas kunci pada pelaksanaan biasa, ia menghadapi had dalam kecekapan kerana potensi ketidakcekapan dalam kod yang dijana pengkompil. Pengkompil mungkin tidak selalu menghasilkan pemasangan optimum untuk operasi atom yang melibatkan nilai titik terapung.

Selain itu, C 11 std::atomic tidak menyediakan API untuk sambungan memori transaksi (TSX) Intel untuk sama ada integer atau terapung- operasi titik. TSX boleh meningkatkan prestasi dengan ketara untuk operasi atom dengan menghapuskan overhed yang dikaitkan dengan pergerakan data antara daftar tujuan umum dan daftar titik terapung.

Beban Atom dan Simpanan untuk Vektor

Walaupun terdapat dakwaan bahawa x86_64 kekurangan atom sokongan untuk vektor, beban yang dijajarkan secara semula jadi dan menyimpan sehingga 8 bait, yang termasuk vektor, adalah atom pada pemproses x86. Ini termasuk memuatkan dan menyimpan menggunakan arahan x87 atau SSE. Oleh itu, beban sejajar dan simpanan nilai titik terapung berketepatan dua adalah atom.

Operasi Baca-Ubah-Tulis-Tulis Atom

Operasi baca-ubah-tulis-tulis atom (seperti penambahan atom) ialah tidak disokong secara langsung untuk nilai titik terapung berketepatan dua atau vektor. Satu-satunya pilihan untuk operasi ini pada x86_64 ialah gelung cuba semula menggunakan arahan cmpxchg atau TSX.

Kes Khas untuk Operasi Atom

Sesetengah kes khas untuk operasi titik terapung IEEE boleh dilaksanakan menggunakan integer operasi. Contohnya, menafikan nilai titik terapung berketepatan dua boleh dicapai dengan membalikkan bit tanda menggunakan operasi atom.

Pemuatan dan Simpan Vektor Atom

Walaupun tiada jaminan perkakasan untuk atom beban vektor dan simpan, secara amnya selamat untuk mengandaikan bahawa beban vektor sejajar dan simpanan nilai titik terapung berketepatan dua tidak akan terhasil. dalam mengoyak. Walau bagaimanapun, operasi vektor atom yang melibatkan nilai tidak sejajar mungkin tidak selamat. Pengecualian untuk ini adalah dengan ciri AVX Intel, yang menjamin atomicity 128-bit untuk operasi SSE/AVX.

Operasi Atom pada Objek 16B

Untuk melaksanakan operasi atom pada objek 16-bait, yang lebih besar daripada lebar operasi atom asli, kunci cmpxchg16b mesti digunakan. Ini boleh mengakibatkan overhed prestasi yang ketara berbanding dengan operasi atom biasa, menjadikannya tidak sesuai untuk senario di mana prestasi adalah kritikal.

Atas ialah kandungan terperinci Adakah x86_64 Menawarkan Sokongan Atom Sebenar untuk Nilai dan Vektor Titik Terapung Ketepatan Berganda?. 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