首页 > 解决方案 > GCC 自动矢量化

问题描述

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

提前致谢。

标签: gcccompiler-optimizationauto-vectorization

解决方案


您实际上可以通过-ftree-vectorize结合 with获得不错的自动矢量化-O1,例如:Godbolt

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

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

脚注 - 我遇到了这个关于 GCC 自动矢量化的精彩演示,您可能会觉得它很有趣 - 它很好地介绍了使用 gcc、编译器标志和基本概念的自动矢量化。


推荐阅读