문제:
알고리즘을 최적화하고 싶습니다. 성능을 향상시키기 위해 부동 버퍼[8]를 내장된 __m256 변수로 대체하여 이미지의 가우시안 블러를 생성합니다.
해결책 1: AVX2의 PMOVZX 및 VCVTDQ2PS 사용
이것은 접근 방식은 PMOVZX를 활용하여 8비트 문자를 32비트 정수로 확장한 다음 VCVTDQ2PS를 통해 부동 소수점 값으로 변환합니다. 구체적으로:
VPMOVZXBD ymm0, [rsi] ; Byte to DWord VCVTDQ2PS ymm0, ymm0 ; convert to packed float
해결책 2: 브로드캐스트 로드와 셔플링 결합
이 전략에는 128비트 브로드캐스트 로드를 수행하여 64비트 셔플 제어 벡터를 생성하는 것이 포함됩니다. vpshufb의 경우 0 확장 및 패킹된 부동 소수점 변환이 가능합니다. 추가 셔플 명령이 필요하지 않아 높은 처리량을 제공합니다.
VPMOVSXBD xmm0, [rsi] ; Byte to DWord VPMOVSXBD xmm1, [rsi+4] VINSERTF128 ymm0, ymm0, xmm1, 1 VCVTDQ2PS ymm0, ymm0 ; convert to packed float.
해결책 3: AVX1 제한 사항 처리
AVX2가 없는 경우 다음 단계 채용 가능:
VPMOVZXBD xmm0, [rsi] VPMOVZXBD xmm1, [rsi+4] VINSERTF128 ymm0, ymm0, xmm1, 1 ; put the 2nd load of data into the high128 of ymm0 VCVTDQ2PS ymm0, ymm0 ; convert to packed float.
추가 참고 사항:
위 내용은 메모리에서 __m256 변수로 8개 문자를 로드하는 방법: 세 가지 효율적인 접근 방식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!