我找了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矢量化三角函数?