28

任何人都可以推荐提供 ac/c++ API、适用于 Intel 和 AMD 扩展以及 Visual Studio、GCC 兼容的便携式 SIMD 库。我正在寻求加快诸如缩放 512x512 双精度数组之类的速度。矢量点积、矩阵乘法等。

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

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

谢谢。

4

5 回答 5

11

由于您提到了矩阵和向量的高级操作,因此ATLAS英特尔的 MKLPLASMAFLAME可能会引起人们的兴趣。

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

如果您正在寻找较低级别的可移植性原语,我的一位同事开发了一个围绕 SSE2、Altivec、VSX、Larrabee 和 Cell SPE 矢量操作的包装器。它可以在我们的源代码库中找到,但如果您想将它作为您工作的一部分进行分发,它的许可(学术)可能不合适。它还处于重大发展阶段,以涵盖其所针对的应用程序需求范围。

于 2009-06-11T19:32:14.857 回答
11

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

于 2011-05-16T01:34:45.587 回答
3

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

于 2010-09-05T20:21:06.720 回答
3

查看 macstl:http ://www.pixelglow.com/macstl/

于 2010-09-05T20:24:31.003 回答
2

如果您不介意对汇编程序感到厌烦,那么您始终可以对所有 SIMD 指令使用内部函数。它们将是特定于处理器的,即 SSE4 内在函数将仅在启用 SSE4 的 CPU 上运行,并且由您决定是否存在扩展。

这里有一篇关于应用 SIMD的好文章。

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

于 2009-06-11T15:36:37.527 回答