SVML 的__m256d _mm256_log2_pd (__m256d a處理器) 僅限於「Intel」較慢。存在替代實現,但它們通常專注於 SSE 而不是 AVX2。本次討論旨在為四個雙精度數向量提供 log2() 的高效實現,該實現與各種編譯器兼容,並且在 AMD 和 Intel 處理器上均表現良好。
傳統策略
通常的方法利用公式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 的log float 和double 函數遵循兩部分方法:
透過將指數加到多項式近似值來獲得最終結果。 VCL 包含額外的步驟來最小化舍入誤差。
替代多項式近似
為了提高準確性,您可以直接使用 VCL。然而,為了更快實現 float 的近似 log2(),請考慮使用 FMA 將 JRF 的 SSE2 函數移植到 AVX2。
避免捨入誤差
VCL 使用各種技術來減少捨入誤差。其中包括:
去除不必要的步驟
如果已知您的值是有限且正的,則可以透過註解掉以下檢查來顯著提高效能下溢、溢位或非正規。
進一步正在閱讀
以上是我們如何在 AVX2 中為 Intel 和 AMD 處理器高效實現 log2(__m256d)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!