任何人都可以推荐可移植的 SIMD 库,它提供 c/c++ API,适用于 Intel 和 AMD 扩展以及 Visual Studio,兼容 GCC。我希望加快缩放 512x512 双精度数组之类的速度。向量点积、矩阵乘法等。

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

据我所知,还有 Intel IPP,它不适用于 AMD。还有 AMD 的 Framewave,但我在编译和链接他们的库时遇到了一些问题,而且他们的论坛完全死了。有人设法在任何地方使用 Framewave 吗?

谢谢。

有帮助吗?

解决方案

既然你提到了矩阵和向量的高级运算, 阿特拉斯, 英特尔的MKL, 等离子体, , 和 火焰 可能会感兴趣。

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

如果您正在寻找较低级别的可移植性原语,我的一位同事开发了一个围绕 SSE2、Altivec、VSX、Larrabee 和 Cell SPE 矢量操作的包装器。它可以在我们的 源代码库, ,但如果您想将其作为您作品的一部分进行分发,则其许可(学术)可能不合适。它还仍在进行重大开发,以满足其目标应用需求的范围。

其他提示

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

尝试 利布伊尔 或相关的 兽人. 。特别是ORC很有趣;它实现了一种高级汇编语言,该语言被编译成特定于体系结构的代码。相当复杂,比简单的包装库要复杂得多。

如果你不介意下来,脏与汇编那么你可以随时使用内部函数对所有SIMD指令。他们将处理器特定的,即SSE4内部函数将只运行在SSE4启用的CPU,它是由你来确保扩展的存在。

这是一个很好的文章这里有关应用SIMD

您可以,但是,使用为您生成SIMD代码,而无需任何外部库的编译器。 VectorC 应该,虽然我从来没有使用过个人是好的。它不需要任何特殊的库,据我所知,它只是斑点,可以从SIMD benfit的源代码,这些位并编译成你指定的任何SSE的水平。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top