我正在为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?
我已经实现了Vecmathlib https://bitbucket.org/eschnett/vecmathlib/作为其他两个项目的通用库(The Einstein Toolkit和pocl http://pocl.sourceforge.net/).Vecmathlib是开源的,用C++编写.
| 归档时间: |
|
| 查看次数: |
11117 次 |
| 最近记录: |