我正在寻找 SSE 和 AVX 的 SIMD 数学库(最好是开源的)。我的意思是,例如,如果我有一个带有 8 个浮点值的 AVX 寄存器 v,我希望 sin(v) 一次返回所有八个值的 sin。
AMD 有一个专有库 LibM http://developer.amd.com/tools/cpu-development/libm/,它有一些 SIMD 数学函数,但 LibM 只有在检测到英特尔 CPU 没有的 FMA4 时才使用 AVX。此外,我不确定它是否完全使用 AVX,因为所有函数名称都以 s4 (d2) 而不是 s8 (d4) 结尾。它比 Intel CPU 上的标准数学库提供更好的性能,但也好不了多少。
英特尔将 SVML 作为其 C++ 编译器的一部分,但编译器套件在 Windows 上非常昂贵。此外,英特尔会削弱非英特尔 CPU 上的库。
我找到了以下 AVX 库http://software-lisc.fbk.eu/avx_mathfun/,它支持一些数学函数(exp、log、sin、cos 和 sincos)。它为我提供了非常快的结果,比 SVML 更快,但我没有检查准确性。它仅适用于单浮点,在 Visual Studio 中不起作用(尽管这很容易修复)。它基于另一个 SSE 库。
有没有人有任何其他建议?
编辑:我找到了一个 SO 线程,它在 C 中对这个主题 Vectorized Trig 函数有很多答案?