패킹된 단일 정밀도 부동 소수점으로 메모리의 8개 문자를 __m256 변수에 로드
가우시안 블러 알고리즘에서는 더 빠른 실행을 위한 최적화를 달성할 수 있습니다. 데이터를 벡터 레지스터에 효율적으로 로드함으로써 이러한 최적화 중 하나는 부동 소수점 배열을 __m256 변수로 바꾸는 것입니다. 이 문서에서는 AVX2 명령어의 기능을 활용하여 이 작업에 대한 최적의 솔루션을 제공합니다.
AVX2 명령어를 사용한 솔루션
메모리에서 __m256 변수로 8자를 효과적으로 로드하려면 AVX2를 사용하는 경우 다음 지침을 따르는 것이 좋습니다.
VPMOVZXBD ymm0, [rsi] ; or SX to sign-extend (Byte to DWord) VCVTDQ2PS ymm0, ymm0 ; convert to packed foat
지침의 세부 사항
추가 최적화
이 프로세스를 더욱 최적화하려면 브로드캐스트 로드를 사용하여 VPMOVZXBD 명령어와 상위 64비트에 대한 Vpshufb 명령어를 공급하는 것을 고려하세요. 이 전략은 전체 uop 수를 줄여 효율성을 향상시킵니다.
<code class="pseudocode">__m256 b = [float(new_image[x+7]), float(new_image[x+6]), ... , float(new_image[x])]; __m256 b = _mm256_broadcast_ss(&new_image[x]) _mm256_shuffle_epi8(b, _mm256_set1_epi8(0)); // fills upper 64 bits with zeroes _mm256_cvtps_epu32(b); // convert to integers _mm256_cvtepu32_ps(b); // convert back to floats</code>
최적화되지 않은 기술 피하기
추가 고려 사항
위 내용은 AVX2를 사용하여 메모리의 8개 문자를 압축된 단일 정밀도 부동 소수점으로 __m256 변수에 로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!