用于SSE和AVX的SIMD数学库

14 sse simd math.h avx

我正在为SSE和AVX寻找SIMD数学库(最好是开源).我的意思是,例如,如果我有一个具有8个浮点值的AVX寄存器v,我希望sin(v)一次返回所有八个值的sin.

AMD有一个propreitery库,LibM http://developer.amd.com/tools/cpu-development/libm/,它有一些SIMD数学函数,但如果它检测到Intel CPU没有的FMA4,LibM只使用AVX.另外我不确定它是否完全使用AVX,因为所有的功能名称都以s4(d2)而不是s8(d4)结尾.它提供了比英特尔CPU上的标准数学库更好的性能,但它并没有好多少.

英特尔将SVML作为其C++编译器的一部分,但编译器套件在Windows上非常昂贵.此外,英特尔还削弱了非英特尔CPU上的库.

我找到了以下AVX库,http://software-lisc.fbk.eu/avx_mathfun/,它支持一些数学函数(exp,log,sin,cos和sincos).它为我提供了非常快的结果,比SVML更快,但我没有检查准确性.它仅适用于单个浮点,并且在Visual Studio中不起作用(尽管这很容易修复).它基于另一个SSE库.

有没有人有任何其他建议?

编辑:我发现一个SO线程有很多关于这个主题的答案 Vectorized Trig函数在C?

Eri*_*ter 9

我已经实现了Vecmathlib https://bitbucket.org/eschnett/vecmathlib/作为其他两个项目的通用库(The Einstein Toolkit和pocl http://pocl.sourceforge.net/).Vecmathlib是开源的,用C++编写.