当指定某些选项并给出正确的条件时,GCC 可以自动矢量化循环。是否有其他广泛可用的编译器可以做同样的事情?
9 回答
llvm也可以做到这一点,vector pascal也可以,而且不是免费的 VectorC。这些只是我记得的一些。
Mono项目是微软 Silverlight 项目的开源替代品,它添加了使用 SIMD 指令的对象。虽然不是编译器,但 Mono CLR 是第一个在本地生成向量操作的托管代码系统。
IBM 的 xlc 也可以在一定程度上自动矢量化 C 和 C++。
还有PGI 的编译器。
尽管这是一个旧线程,但我会添加到此列表中 - Visual Studio 11也将具有自动矢量化功能。
VectorC也可以做到这一点。您还可以指定所有目标 CPU,以便它利用不同的指令集(例如 MMX、SIMD、SIMD2...)
Visual C++ (I'm using VS2005) can be forced to use SSE instructions. It seems not to be as good as Intel's compiler, but if someone already uses VC++, there's no reason not to turn this option on.
Go to project's properties, Configuration properties, C/C++, Code Generation: Enable Enhanced Instruction Set. Set "Streaming SIMD Instructios" or "Streaming SIMD Instructios 2". You will have to set floating point model to fast. Some other options will have to be changed too, but compiler will tell you about that.
实际上,在很多情况下,GCC 过去在自动代码矢量化方面比 ICC 差很多,我不知道它最近是否改进得足够,但我对此表示怀疑。