마스크 기반 효율적인 왼쪽 패킹을 위해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!