SVML 的 __m256d _mm256_log2_pd (__m256d a) 仅限于 Intel 编译器,据报道在 AMD 处理器上速度较慢。存在替代实现,但它们通常关注 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中文网其他相关文章!