代码之家  ›  专栏  ›  技术社区  ›  Pasindu

GCC自动矢量化

  •  2
  • Pasindu  · 技术社区  · 8 年前

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

    事先谢谢。

    1 回复  |  直到 8 年前
        1
  •  4
  •   valiano    8 年前

    实际上你可以用 -ftree-vectorize 结合 -O1 ,例如: Godbolt .

    用 -O0 然而,即使对于非常简单的例子,也不会生成矢量化代码。 我怀疑GCC的树矢量器甚至没有用 -O0 或者调用和bails,但必须在gcc源代码中验证。

    一般来说, -O0 而且自动矢量化并不能很好地混合。在编译器中,优化分阶段进行,每个优化阶段都为下一个阶段做好准备。 为了实现自动矢量化,至少在一些重要的示例上,编译器必须事先执行一些优化。例如,包含跳转的循环通常不能向量化,除非分支被一个名为 中频转换 -从而产生一个扁平的代码块,可以更方便地向量化。

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