为SSE和AVX SIMD数学库(SIMD math libraries for SSE and A

2019-08-18 08:12发布

我找了SIMD数学库(最好是开放源代码)为SSE和AVX。 我的意思是,例如,如果我有8个浮点值的AVX寄存器V I想罪(五)在一次返回所有八个值的罪。

AMD有propreitery库的libm http://developer.amd.com/tools/cpu-development/libm/其中有一些SIMD运算功能,但只的libm使用AVX如果检测FMA4英特尔CPU没有。 此外,我不知道它充分利用AVX因为所有的函数名在S4结束(D2),而不是S8(D4)。 它提供比Intel CPU的标准数学库更好的性能,但它不是要好得多。

英特尔有SVML作为其一部分的C ++编译器,但该编译器套件是Windows非常昂贵。 此外,英特尔跛子在非英特尔CPU的库。

我发现下面的AVX库, http://software-lisc.fbk.eu/avx_mathfun/ ,支持一些数学函数(EXP,日志,正弦,余弦,正余弦和)。 它提供了非常快的结果对我来说,比SVML快,但我没有检查的准确性。 它仅适用于单一的浮点和在Visual Studio中不起作用(尽管这将是容易解决)。 它是基于另一个SSE库。

没有人有任何其他建议?

编辑:我发现了一个SO线程关于这个问题有很多答案, 用C矢量化三角函数?

Answer 1:

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



Answer 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



文章来源: SIMD math libraries for SSE and AVX