使用GCC强制自动矢量化

时间:2013-02-06 16:22:57

标签: c gcc vectorization simd

这是我非常简单的问题。使用ICC,我知道可以使用#pragma SIMD来强制编译器选择不进行矢量化的循环的矢量化。海湾合作委员会有类似的东西吗?或者,是否有计划在将来的版本中添加此功能?

很相关,用Graphite强制矢量化怎么办?

感谢您考虑我的要求 法比奥

1 个答案:

答案 0 :(得分:1)

只要gcc被允许使用SSE / SSE2 / etc指令,编译器通常会在它意识到它“值得”时生成向量指令。像编译器中的大多数东西一样,这需要程序员一些运气/计划/关心,以避免编译器思考“可能这不安全”或“这太复杂,我无法弄清楚发生了什么”。但是很多时候,如果你使用一个相当现代的gcc版本就会成功(4.x版本都应该这样做)。

您可以通过添加-msse-msse2(等等以用于以后的SSE扩展)使编译器使用SSE或SSE2指令。 -msse2是x86-64中的默认值。

但是,我不知道你有什么方法可以强迫这一点。编译器要么这样做,因为它很高兴它是一个很好的解决方案,或者它不会。

抱歉,无法回答有关Graphite的问题。