Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menukar Antara Terapung Ketepatan Berganda dan Integer 64-bit Dengan Cekap Menggunakan SSE, AVX dan AVX-512?

Bagaimanakah Saya Boleh Menukar Antara Terapung Ketepatan Berganda dan Integer 64-bit Dengan Cekap Menggunakan SSE, AVX dan AVX-512?

Mary-Kate Olsen
Lepaskan: 2024-12-04 12:30:10
asal
359 orang telah melayarinya

How Can I Efficiently Convert Between Double-Precision Floats and 64-bit Integers Using SSE, AVX, and AVX-512?

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!

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