【问题标题】:What compilers besides gcc can vectorize code?除了 gcc 还有哪些编译器可以向量化代码?
【发布时间】:2009-01-03 16:27:35
【问题描述】:

当指定某些选项并给出正确的条件时,GCC 可以自动vectorize loops。是否有其他广泛可用的编译器可以做到这一点?

【问题讨论】:

    标签: gcc compiler-construction loops simd vector-processing


    【解决方案1】:

    ICC

    【讨论】:

    • ICC 对 Intel CPU 的优化非常出色。
    【解决方案2】:

    llvm 也可以,vector pascal 也可以,还有一个不是免费的VectorC。这些只是我记得的一些。

    【讨论】:

    • VectorC 一针见血。 Vector Pascal 很有趣,它读起来像 Pascal,但受 APL 的影响;也就是说,它本身就是一种向量处理语言。但是,LLVM 项目似乎没有在任何地方提及 SIMD 输出?
    • OK,终于找到了LLVM的SSE2代码生成的参考!好东西!不知道为什么网站上没有更清楚地提及它。
    • LLVM 仍然是一个“新类型”项目,但看起来很有前途。
    • LLVM 没有自动矢量化,只有手动 SIMD 支持。
    【解决方案3】:

    还有PGI's compilers

    【讨论】:

      【解决方案4】:

      Mono 项目是微软 Silverlight 项目的开源替代方案,它添加了使用 SIMD 指令的对象。虽然不是编译器,但 Mono CLR 是第一个原生支持 generate vector operations 的托管代码系统。

      【讨论】:

        【解决方案5】:

        IBM 的 xlc 也可以在一定程度上自动矢量化 C 和 C++。

        【讨论】:

          【解决方案6】:

          实际上,在很多情况下,GCC 过去在自动代码向量化方面比 ICC 差很多,我不知道它最近是否改进得足够,但我对此表示怀疑。

          【讨论】:

            【解决方案7】:

            VectorC 也可以这样做。您还可以指定所有目标 CPU,以便它利用不同的指令集(例如 MMX、SIMD、SIMD2...)

            【讨论】:

              【解决方案8】:

              Visual C++(我使用的是 VS2005)可以强制使用 SSE 指令。它似乎不如 Intel 的编译器,但如果有人已经在使用 VC++,那么没有理由不打开这个选项。

              转到项目的属性、配置属性、C/C++、代码生成:启用增强指令集。设置“流式 SIMD 指令”或“流式 SIMD 指令 2”。您必须将浮点模型设置为快速。其他一些选项也必须更改,但编译器会告诉你。

              【讨论】:

              • 启用 SSE 与矢量化不同。
              【解决方案9】:

              尽管这是一个旧线程,但我会添加到此列表中 - Visual Studio 11 也将具有自动矢量化功能。

              【讨论】:

                猜你喜欢
                • 2016-03-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多