【问题标题】:Good portable SIMD library [closed]良好的便携式 SIMD 库 [关闭]
【发布时间】:2010-11-02 04:18:42
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 曾经看过某人的硕士论文。我这辈子都想不起来在搜索中会出现什么字词。
  • 查看 libsimdpp 库 - 它为 SSE2-SSE4.1、AVX、AVX2、NEON、FMA3/4 和 XOP 内部函数提供了一个通用接口。作为奖励,提供了方便的动态分派机制:相同的源代码可以使用不同的编译器选项编译多次(命名空间负责 ODR),链接到同一个可执行文件,库将自动为目标处理器选择最佳实现. (免责声明:我是作者)
  • 这个问题最好迁移到softwarerecs.stackexchange.com

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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,摆脱特定于处理器的组件是我的主要目标。我不想担心 CPU 是否支持 SSE 或 SSE2 并在某些情况下编写 2 个不同版本的代码。我希望有人已经在图书馆里这样做了=)。编译器特定的扩展等也是如此。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        相关资源
        最近更新 更多