除了 gcc 还都有哪些编译器可以向量化代码?
Posted
技术标签:
【中文标题】除了 gcc 还都有哪些编译器可以向量化代码?【英文标题】:What compilers besides gcc can vectorize code?除了 gcc 还有哪些编译器可以向量化代码? 【发布时间】:2009-01-03 16:27:35 【问题描述】:当指定某些选项并给出正确的条件时,GCC 可以自动vectorize loops。是否有其他广泛可用的编译器可以做到这一点?
【问题讨论】:
【参考方案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 也将具有自动矢量化功能。
【讨论】:
以上是关于除了 gcc 还都有哪些编译器可以向量化代码?的主要内容,如果未能解决你的问题,请参考以下文章
在 C 和 C++ 中对齐堆数组以简化编译器 (GCC) 向量化
Python中除了matplotlib外还都有哪些数据可视化的库