SVML의 __m256d _mm256_log2_pd(__m256d a)는 Intel 컴파일러로 제한되며 AMD 프로세서에서는 속도가 느린 것으로 알려졌습니다. 대체 구현이 존재하지만 AVX2보다는 SSE에 중점을 두는 경우가 많습니다. 이 논의의 목적은 다양한 컴파일러와 호환되고 AMD 및 Intel 프로세서 모두에서 잘 작동하는 4개의 이중 숫자 벡터에 대한 log2()의 효율적인 구현을 제공하는 것입니다.
기존 전략
일반적인 접근 방식은 log2(a*b) = log2(a) log2(b) 공식을 활용하여 지수로 단순화됩니다. log2(가수)는 이중 숫자입니다. 가수의 범위는 1.0~2.0으로 제한되어 있어 log2(가수)를 구하는 다항식 근사에 적합합니다.
정확도 및 정밀도
원하는 정확도와 입력 범위가 구현에 영향을 미칩니다. Agner Fog의 VCL은 오류 방지 기술을 사용하여 높은 정밀도를 목표로 합니다. 그러나 보다 빠른 대략적인 float log()를 위해서는 JRF의 다항식 구현을 고려하십시오(여기에서 확인: http://jrfonseca.blogspot.ca/2008/09/fast-sse2-pow-tables-or-polynomials.html).
VCL 알고리즘
VCL의 로그 부동 및 이중 기능 두 부분으로 구성된 접근 방식을 따릅니다.
최종 결과는 다항식 근사값에 지수를 추가하여 얻습니다. VCL에는 반올림 오류를 최소화하기 위한 추가 단계가 포함되어 있습니다.
대체 다항식 근사치
정확도를 높이려면 VCL을 직접 사용할 수 있습니다. 그러나 float에 대한 보다 빠른 대략적인 log2() 구현을 위해서는 JRF의 SSE2 함수를 FMA를 사용하여 AVX2로 이식하는 것을 고려하십시오.
반올림 오류 방지
VCL은 다양한 기술을 사용하여 오류를 줄입니다. 반올림 오류. 여기에는 다음이 포함됩니다:
불필요한 단계 제거
값이 유한하고 양수인 것으로 알려진 경우 다음 검사에 주석을 추가하여 성능을 크게 향상시킬 수 있습니다. 언더플로, 오버플로 또는 비정규.
더 보기 독서
위 내용은 Intel 및 AMD 프로세서 모두에 대해 AVX2에서 log2(__m256d)를 어떻게 효율적으로 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!