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:
Algoritma
Algoritma untuk pembungkusan kiri dalam AVX2 melibatkan langkah berikut:
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!