Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah AVX2 Boleh Digunakan Paling Cekap untuk Pembungkusan Kiri dengan Topeng?

Bagaimanakah AVX2 Boleh Digunakan Paling Cekap untuk Pembungkusan Kiri dengan Topeng?

Patricia Arquette
Lepaskan: 2024-12-22 16:39:10
asal
719 orang telah melayarinya

How Can AVX2 Be Used Most Efficiently for Left Packing with a Mask?

Masalah Pembungkusan Kiri

Pertimbangkan senario di mana terdapat tatasusunan input dan tatasusunan output, tetapi hanya elemen tertentu yang memenuhi syarat perlu ditulis pada tatasusunan output. Apakah pendekatan yang paling berkesan untuk mencapai ini menggunakan AVX2?

Pendekatan SSE

Pendekatan SSE melibatkan penggunaan _mm_movemask_ps untuk mengekstrak topeng 4-bit daripada topeng input, dan kemudian menggunakan topeng ini untuk menjana data kawalan shuffle dengan _mm_load_si128. Akhir sekali, _mm_shuffle_epi8 digunakan untuk mengubah suai nilai untuk menjajarkan elemen yang sah di hadapan daftar SIMD. Pendekatan ini berfungsi dengan baik untuk vektor SSE 4 lebar dengan jadual carian (LUT) 16 entri.

Penghadan AVX

Walau bagaimanapun, untuk AVX 8 lebar vektor, LUT memerlukan bilangan entri yang jauh lebih besar (256), setiap satu dengan 32 bait, menghasilkan 8k memori penggunaan. Adalah menghairankan bahawa AVX tidak menawarkan arahan untuk memudahkan proses ini, seperti kedai bertopeng dengan pembungkusan.

Penyelesaian AVX2

Walaupun kekurangan arahan khusus , adalah mungkin untuk mencapai pembungkusan kiri yang cekap dalam AVX2 menggunakan gabungan teknik:

  • Gunakan vpermps untuk pembolehubah-shuffle: _mm256_permutevar8x32_ps boleh digunakan untuk melakukan kocok pembolehubah lintasan lorong, membenarkan data dibungkus berdasarkan topeng.
  • Jana topeng pada fly: BMI2 menyediakan arahan pext (Ekstrak Bit Selari), yang boleh digunakan untuk mengekstrak bit daripada topeng input dan menjana data kawalan shuffle.
  • Elakkan pdep/pext pada CPU AMD : CPU AMD sebelum Zen 3 mempunyai kependaman yang jauh lebih tinggi untuk pdep dan pext, jadi pendekatan alternatif mungkin diperlukan untuk optimum prestasi.

Algoritma

Algoritma untuk pembungkusan kiri dalam AVX2 melibatkan langkah berikut:

  1. Ekstrak indeks daripada input topeng menggunakan pext.
  2. Buka bungkusan indeks untuk menjana shuffle mask.
  3. Gunakan vpermps untuk mengocok data input mengikut topeng shuffle.

Kesimpulan

Pendekatan ini menyediakan penyelesaian yang sangat cekap untuk pembungkusan kiri dalam AVX2. Dengan menggunakan vpermp, pext dan arahan BMI2 yang lain, adalah mungkin untuk membungkus data berdasarkan topeng dengan overhed dan kependaman minimum.

Atas ialah kandungan terperinci Bagaimanakah AVX2 Boleh Digunakan Paling Cekap untuk Pembungkusan Kiri dengan Topeng?. 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