Penukaran Berganda/int64 dengan SSE/AVX
Set arahan SSE2 menyediakan intrinsik untuk menukar vektor antara apungan ketepatan tunggal dan 32-bit integer, tetapi setara tidak wujud untuk ketepatan berganda dan 64-bit integer. AVX juga kekurangan penukaran ini.
Sokongan AVX512 Terhad
AVX512 memperkenalkan intrinsik untuk menukar kepada dan daripada integer 64-bit, kedua-duanya ditandatangani dan tidak ditandatangani. Walau bagaimanapun, AVX2 dan konfigurasi terdahulu tidak mempunyai kefungsian sedemikian.
Menghampirkan Penukaran Int64
Untuk AVX2 dan kurang, terdapat kaedah untuk mensimulasikan ketepatan berganda kepada/dari penukaran uint64 dan int64 dengan had julat nilai tertentu dan pembundaran tingkah laku.
Berganda Cepat <-> uint64_t Penukaran:
Kaedah ini berfungsi untuk nilai dalam julat [0, 2^52). Dengan menambah nombor ajaib dan menutup bit atas, anda boleh mendapatkan anggaran perwakilan uint64_t bagi gandaan itu.
Berganda Cepat <-> int64_t Penukaran:
Sama seperti versi uint64_t, anggaran ini berfungsi untuk nilai dalam [-2^51, 2^51].
Julat Penuh Int64 <- > Penukaran Berganda:
uint64_t -> double:
Kaedah ini menggunakan 5 arahan untuk mewakili julat int64 penuh sebagai double.
int64_t -> berganda:
Penukaran ini memerlukan 6 arahan dan dibundarkan dengan betul kepada gandaan yang boleh diwakili terdekat.
Kesimpulan
AVX512 menyediakan sokongan langsung untuk berganda /int64 penukaran, tetapi untuk konfigurasi lebih awal, anggaran yang disediakan menawarkan penyelesaian yang cekap dengan julat nilai tertentu dan gelagat pembundaran kekangan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Antara Terapung Ketepatan Berganda dan Integer 64-bit Dengan Cekap Menggunakan SSE, AVX dan AVX-512?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!