Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah AVX2 dan BMI2 Boleh Digunakan untuk Pembungkusan Kiri yang Cekap Berdasarkan Topeng Dinamik?

Bagaimanakah AVX2 dan BMI2 Boleh Digunakan untuk Pembungkusan Kiri yang Cekap Berdasarkan Topeng Dinamik?

Patricia Arquette
Patricia Arquetteasal
2024-12-20 01:49:10747semak imbas

How Can AVX2 and BMI2 Be Used for Efficient Left Packing Based on a Dynamic Mask?

Membungkus Elemen Kiri yang Cekap Berdasarkan Topeng dengan AVX2 dan BMI2

Dalam AVX2, mencapai pembungkusan kiri yang cekap memerlukan penggunaan arahan dan teknik khusus. Satu pendekatan ialah memanfaatkan kedua-dua vpermp AVX2 (_mm256_permutevar8x32_ps) untuk shuffling pembolehubah lintasan lorong dan pext BMI2 (Ekstrak Bit Selari) untuk operasi bitwise.

Memanfaatkan BMI2 untuk Topeng Penjanaan

Arahan pext BMI2 membolehkan pengekstrakan bit tertentu daripada bitmask, menyediakan mekanisme untuk menjana data kawalan shuffle lintasan lorong secara dinamik dengan cepat. Ini menghapuskan keperluan untuk jadual carian pra-pengiraan yang besar (LUT).

Algoritma

Algoritma melibatkan:

  1. Mengekstrak Indeks Mampat: Menggunakan pext, bitmask termampat dihasilkan, mengandungi indeks lorong yang dikehendaki dalam bit bawah daftar integer.
  2. Membongkar Indeks Berbungkus: Untuk membongkar indeks termampat, urutan anjakan dan pendaraban digunakan. Langkah ini secara berkesan mereplikasi setiap bit untuk mengisi baitnya yang sepadan, mencipta topeng indeks per-bait.
  3. Menjana Topeng Kocok: Topeng kocok dikira menggunakan topeng indeks per-bait. Topeng ini kemudiannya digunakan untuk mengawal operasi shuffle pembolehubah merentas lorong menggunakan vpermps.

Pertimbangan Prestasi

Kelebihan pendekatan ini terletak pada keupayaannya untuk menjana topeng shuffle lintasan lorong dengan cepat, mengelakkan penciptaan dan penyimpanan LUT yang besar. Pendekatan ini boleh berfaedah dalam situasi di mana input topeng adalah dinamik. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa operasi pdep/pext boleh menjadi agak perlahan pada CPU AMD sebelum Zen 3, jadi kaedah alternatif seperti vektor 128-bit atau pendekatan berasaskan LUT mungkin lebih sesuai untuk seni bina sedemikian.

Atas ialah kandungan terperinci Bagaimanakah AVX2 dan BMI2 Boleh Digunakan untuk Pembungkusan Kiri yang Cekap Berdasarkan Topeng Dinamik?. 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