マスクに基づいた効率的な左パッキングのための AVX2 と BMI2 の使用
AVX2 では、vpermps (_mm256_permutevar8x32_ps) 命令を利用して実行できます。車線横断可変シャッフル。さらに、BMI2 は pext (Parallel Bits Extract) を提供し、問題にとって重要なビット単位の抽出操作を実行できるようにします。
アルゴリズム:
コード実装:
#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); }
利点:
欠点:
以上がAVX2 および BMI2 命令はマスクに基づいて左パッキングをどのように最適化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。