GCC自动向量化

时间:2018-07-08 12:41:40

标签: gcc compiler-optimization auto-vectorization

在gcc编译器中,是否有仅启用自动矢量化的方法?我确实知道-ftree-vectorize标志启用自动矢量化。但它至少需要-O2个优化级别。有没有一种方法可以在不使用-O2优化标志的情况下启用自动矢量化?

先谢谢了。

1 个答案:

答案 0 :(得分:4)

实际上,您可以结合使用-ftree-vectorize-O1来实现良好的自动矢量化,例如:Godbolt

但是,对于-O0,即使对于非常简单的示例,也不会生成矢量化代码。 我怀疑gcc的树矢量化器甚至没有用-O0调用,也没有被调用并解救,但这必须在gcc源代码中进行验证。

通常,-O0和自动矢量化不能很好地融合在一起。在编译器中,优化是分阶段进行的,每个优化阶段都为下一个阶段做准备。 为了使自动矢量化发生,至少在不平凡的示例中,编译器必须事先执行一些优化。例如,包含跳转的循环通常无法向量化,除非通过名为 if-conversion 的优化消除分支并用谓词指令替换-导致代码块平坦,可以更方便地对其向量化

脚注-我遇到了关于nice presentation的有关GCC自动矢量化的知识,您可能会发现它很有趣-它很好地介绍了如何使用gcc,编译器标志和基本概念进行自动矢量化。