【问题标题】:vectorization of loops by compiler编译器对循环进行矢量化
【发布时间】:2013-11-15 09:48:41
【问题描述】:

我有一个非常基本的问题,关于编译器(在我的例子中是 gcc)使用 -O 标志完成的优化。我想在这里只关注循环的矢量化。假设一个简单的 for 循环没有指针别名/竞争条件的危险。是否可以重写此循环,使编译器生成的带有 -O0 标志的代码与编译器对循环进行矢量化时一样快?

【问题讨论】:

  • 我不知道为什么这被投票为“过于宽泛”而关闭。
  • 出于好奇,你为什么关心-O0代码的效率?如果你希望代码更快,为什么要使用 -O0 编译?
  • -O0 专门关闭优化,所以通过 -O0 时不做任何优化。
  • @JoshHaberman:我知道 -O0 会关闭优化。我只是想知道是否可以通过直接在 c++ 代码中应用“手动矢量化”来更好地控制优化过程。

标签: c++ compiler-construction vectorization compiler-optimization


【解决方案1】:

很有可能:不。使用 -O0 可以让编译器全权委托使代码尽可能低效。当然,不是什么恶兽要惹你,但除非你告诉它,否则它不会努力。

一些优化通常必须由编译器完成。通常,您无法通过源代码中的微优化获得与使用激进的编译器优化所获得的相同的性能。

关于您的具体示例:是的,您可以在代码中包含向量指令以强制使用向量指令。但是,如果您执行此类操作,您的代码可能无法在所有平台上运行,除非您非常非常了解自己在做什么并始终提供回退。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多