> 백엔드 개발 > C++ > 본문

메모리에서 __m256 변수로 8개 문자를 로드하는 방법: 세 가지 효율적인 접근 방식

Barbara Streisand
풀어 주다: 2024-11-03 15:52:02
원래의
158명이 탐색했습니다.

How to Load 8 Characters from Memory into an __m256 Variable: Three Efficient Approaches

메모리에서 __m256 변수로 8자 로드: 분석

문제:

알고리즘을 최적화하고 싶습니다. 성능을 향상시키기 위해 부동 버퍼[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.
로그인 후 복사

추가 참고 사항:

  • 추가 성능 향상을 위해 VCVTDQ2PS 대신 VPADDQ 사용을 고려하세요.
  • 주의하세요 다양한 언어로 잠재적인 컴파일러 최적화가 가능합니다.
  • 더 많은 통찰력을 얻으려면 솔루션 내에 링크된 특정 리소스를 참조하세요.

위 내용은 메모리에서 __m256 변수로 8개 문자를 로드하는 방법: 세 가지 효율적인 접근 방식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!