15

我正在寻找 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 函数有很多答案?

4

2 回答 2

10

我已经将 Vecmathlib https://bitbucket.org/eschnett/vecmathlib/实现为其他两个项目(爱因斯坦工具包和 pocl http://pocl.sourceforge.net/)的通用库。Vecmathlib 是开源的,是用 C++ 编写的。

于 2013-04-19T17:14:43.620 回答
2

Gromacs是一个高度优化的分子动力学软件包,用 C++ 编写,使用 SIMD。据我所知,数学 SIMD 功能尚未拆分到单独的库中,但我猜该实现可能对其他人有用。

https://github.com/gromacs/gromacs/blob/master/src/gromacs/simd/simd_math.h

http://manual.gromacs.org/documentation/2016.4/doxygen/html-lib/simd__math_8h.xhtml

于 2017-12-23T10:11:14.523 回答