Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Arahan AVX2 dan BMI2 Boleh Mengoptimumkan Pembungkusan Kiri Berdasarkan Topeng?

Bagaimanakah Arahan AVX2 dan BMI2 Boleh Mengoptimumkan Pembungkusan Kiri Berdasarkan Topeng?

Barbara Streisand
Lepaskan: 2024-12-30 13:45:13
asal
465 orang telah melayarinya

How Can AVX2 and BMI2 Instructions Optimize Left Packing Based on a Mask?

Menggunakan AVX2 dan BMI2 untuk Pembungkusan Kiri Yang Cekap Berdasarkan Topeng

Dalam AVX2, kita boleh memanfaatkan arahan vpermps (_mm256_permutevar8x32_ps) ubah-shuffle lintasan lorong. Selain itu, BMI2 memberikan kami pext (Ekstrak Bit Selari), membolehkan kami melakukan operasi pengekstrakan bitwise yang penting untuk masalah kami.

Algoritma:

  1. Mulakan dengan indeks 3-bit padat pegangan berterusan ([7 6 5 4 3 2 1 0]).
  2. Ekstrak indeks yang diingini ke dalam jujukan bersebelahan menggunakan pext.
  3. Jana topeng di mana setiap bit sepadan dengan bait indeks (buka bungkusan indeks satu setiap bait).
  4. Replikasi setiap bit dalam topeng untuk mengisi bait yang sepadan.
  5. Ekstrak indeks yang dikehendaki daripada identiti shuffle menggunakan pext.
  6. Tukar bait indeks kepada integer 32-bit.
  7. Gunakan vpermps untuk melakukan shuffle berdasarkan vektor indeks 32-bit.

Kod Pelaksanaan:

#include <stdint.h>
#include <immintrin.h>

__m256 compress256(__m256 src, unsigned int mask)
{
  uint64_t expanded_mask = _pdep_u64(mask, 0x0101010101010101);
  expanded_mask *= 0xFF;
  const uint64_t identity_indices = 0x0706050403020100;
  uint64_t wanted_indices = _pext_u64(identity_indices, expanded_mask);

  __m128i bytevec = _mm_cvtsi64_si128(wanted_indices);
  __m256i shufmask = _mm256_cvtepu8_epi32(bytevec);

  return _mm256_permutevar8x32_ps(src, shufmask);
}
Salin selepas log masuk

Kelebihan:

  • Menggunakan pemalar segera dan mengelakkan beban memori.
  • Kesederhanaan dan kecekapan.

Kelemahan:

  • Mungkin lebih perlahan pada CPU AMD sebelum Zen 3 disebabkan oleh prestasi pdep/pext yang perlahan.

Atas ialah kandungan terperinci Bagaimanakah Arahan AVX2 dan BMI2 Boleh Mengoptimumkan Pembungkusan Kiri Berdasarkan Topeng?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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