良好的便携式SIMD库

时间:2009-06-11 15:24:26

标签: c++ open-source cross-platform simd

任何人都可以推荐提供c / c ++ API的便携式SIMD库,适用于Intel和AMD扩展以及兼容GCC的Visual Studio。我希望加快缩放512x512双打阵列的速度。矢量点积,矩阵乘法等。

到目前为止,我找到的唯一一个是: http://simdx86.sourceforge.net/但正如第一页所说它不能在visual studio上编译。

还有英特尔IPP,这对我收集的AMD不起作用。还有来自AMD的Framewave,但我在编译和链接他们的库时遇到了一些问题,他们的论坛已经完全死了。有人设法在任何地方使用Framewave吗?

感谢。

5 个答案:

答案 0 :(得分:10)

Eigen是一个MPL2许可的仅限标头的C ++库,它具有针对SSE,Neon和Altivec进行了优化的矢量/矩阵数学运算。他们的附加模块中有更复杂的数学运算。

答案 1 :(得分:9)

由于您提到了对矩阵和向量的高级操作,ATLASIntel's MKLPLASMAFLAME可能会引起关注。

一些C ++矩阵数学库包括来自Boost,Armadillo,Eigen,IT ++和Newmat的uBLAS。 POOMA库可能还包括其中的一些内容。 This question也指MTL。

如果您正在寻找更低级别的可移植性原语,我的一位同事开发了一个围绕SSE2,Altivec,VSX,Larrabee和Cell SPE向量操作的包装器。它可以在我们的source repository中找到,但如果您想将其作为工作的一部分进行分发,则其许可(学术)可能不合适。它仍然处于重大发展阶段,以满足其针对的应用需求范围。

答案 2 :(得分:3)

尝试liboil或相关的ORC。特别是ORC很有趣;它实现了一种高级汇编语言,该语言被编译为特定于体系结构的代码。相当复杂,比简单的包装库更加复杂。

答案 3 :(得分:3)

答案 4 :(得分:2)

如果您不介意使用汇编程序来解决问题,那么您始终可以使用所有SIMD指令的内部函数。它们将是特定于处理器的,即SSE4内在函数只能在支持SSE4的CPU上运行,并且由您决定是否存在扩展。

关于应用SIMD,有一篇很好的文章here

但是,您可以使用为您生成SIMD代码的编译器,而无需任何外部库。 VectorC应该是好的,虽然我从未亲自使用它。据我所知,它不需要任何特殊的库,它只是发现可以从SIMD中获得的那些源代码,并编译到你指定的任何级别的SSE。