【问题标题】:GCC Auto VectorizationGCC 自动矢量化
【发布时间】:2018-12-16 08:15:18
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 您到底希望得到什么,为什么?没有上下文,只做自动矢量化听起来有点无意义。

标签: gcc compiler-optimization auto-vectorization


【解决方案1】:

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

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

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

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

【讨论】:

  • 也不会向量化任何一个 -Os
  • 好点@PeterJ_01,自动矢量化是发生它的函数的主要代码大小膨胀
猜你喜欢
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2015-07-30
  • 2017-06-10
  • 2019-03-27
  • 2017-05-15
相关资源
最近更新 更多