왼쪽 패킹 문제
입력 배열과 출력 배열이 있지만 조건을 만족하는 특정 요소만 필요한 시나리오를 생각해 보세요. 출력 배열에 기록됩니다. AVX2를 사용하여 이를 달성하는 가장 효율적인 접근 방식은 무엇입니까?
SSE 접근 방식
SSE 접근 방식에는 _mm_movemask_ps를 사용하여 입력 마스크에서 4비트 마스크를 추출하는 작업이 포함됩니다. 그런 다음 이 마스크를 사용하여 _mm_load_si128로 셔플 제어 데이터를 생성합니다. 마지막으로 _mm_shuffle_epi8을 사용하여 SIMD 레지스터 앞의 유효한 요소를 정렬하기 위해 값을 순열합니다. 이 접근 방식은 16개 항목 LUT(룩업 테이블)가 있는 4와이드 SSE 벡터에 적합합니다.
AVX 제한 사항
그러나 8와이드 AVX의 경우 벡터의 경우 LUT에는 각 항목이 32바이트인 상당히 많은 수의 항목(256개)이 필요하므로 메모리 사용량은 8k가 됩니다. AVX에서는 포장을 한 마스크 매장 등 이 과정을 단순화하는 지침을 제공하지 않는다는 점이 놀랍습니다.
AVX2 솔루션
전담 지침이 없음에도 불구하고 , 다음의 조합을 사용하여 AVX2에서 효율적인 왼쪽 패킹을 달성하는 것이 가능합니다. 기술:
알고리즘
AVX2의 왼쪽 패킹 알고리즘은 다음 단계로 구성됩니다.
결론
이 접근 방식은 매우 효율적인 솔루션을 제공합니다. AVX2의 왼쪽 패킹용입니다. vpermps, pext 및 기타 BMI2 명령어를 활용하면 오버헤드와 대기 시간을 최소화하면서 마스크 기반으로 데이터를 패킹할 수 있습니다.
위 내용은 마스크를 사용한 왼쪽 패킹에 AVX2를 어떻게 가장 효율적으로 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!