对数计算在各种科学和工程应用中至关重要。本文探讨了使用高级向量扩展 2 (AVX2) 实现 4 元素双精度浮点向量的高效 log2() 函数。
Intel 的可扩展向量数学库 (SVML) 提供内部函数 __m256d _mm256_log2_pd (__m256d a) 用于对 4 位向量执行 log2 运算。然而,该内在函数仅在 Intel 编译器中可用,并且据报道在 AMD 处理器上存在性能缺陷。
要在不依赖编译器特定内在函数的情况下实现 log2(),我们可以利用多项式近似。我们可以将 log2(x) 表示为围绕 x = 1 展开的泰勒级数,或者更具体地说,我们可以使用多个多项式项来近似 [1.0, 2.0] 范围内的 log2(mantissa)。
以下 C 实现使用 AVX2 和自定义多项式为 4 位双精度向量提供高效的 log2() 函数近似:
__m256d __vectorcall Log2(__m256d x) { // Extract exponent and normalize it // Calculate t=(y-1)/(y+1) and t**2 // Calculate log2(y) and add exponent return log2_x; }
使用的近似公式可以可视化为:
拟合多项式系数以最小化最大值绝对误差范围 [1.0, 2.0].
基准测试表明,该实现的性能明显优于 std::log2() 和 std::log() ,性能约为 std 的 4 倍::log2().
实现的准确性可以通过添加更多多项式项来定制。然而,增加多项式阶数会增加浮点运算的数量,并可能降低性能。
提供的 log2() 的 AVX2 实现为向量化对数计算提供了高效率和高性能。通过利用自定义多项式近似,该函数为 4 位双精度浮点向量上的 log2 运算提供了一种可移植且高效的解决方案。
以上是如何利用AVX2高效实现log2(__m256d)?的详细内容。更多信息请关注PHP中文网其他相关文章!