【问题标题】:Array copying with compile flag -o3使用编译标志 -o3 进行数组复制
【发布时间】:2014-03-21 13:44:38
【问题描述】:

当使用 gcc -o3 编译下面的代码时,它比不使用“-o3”的时间长大约 50%。 这可能是什么原因?

const int stepsize = 2;
for (j = 0; j < NOOFITERATIONS; j++) {
  for(i=0; i < ROUND_DOWN(SOMEBIGSIZE, stepsize); i+=stepsize) {
      c[i] = a[i] + b[i];
      c[i+1] = a[i+1] + b[i+1];
  }
  for(; i < SOMEBIGSIZE; i++)
      c[i] = a[i] + b[i];
}

【问题讨论】:

  • 其实你说的是编译时间还是执行时间
  • @user1147851 你问的是数组复制的具体优化吗?或者这是一个关于优化的一般问题?

标签: c arrays gcc


【解决方案1】:

取自GCC docs(所有重点都是我的):

打开优化标志会使编译器尝试以牺牲编译时间和调试程序的能力为代价来提高性能和/或代码大小。 [...]

优化编译需要更多时间,以及更多内存 用于大型功能。

使用 -O,编译器会尝试减少代码大小和执行时间,而不执行任何需要大量编译时间的优化

这是完全预期的行为。基本上,你的编译器需要为你做更多的工作,这增加了编译时间。

【讨论】:

    【解决方案2】:

    来自Optimize Options-

    进一步优化。 -O3 开启 -O2 指定的所有优化,同时开启 -finline-functions,-funswitch-loops,-fpredictive-commoning,-fgcse-after-reload, -ftree-loop-vectorize、-ftree-slp-vectorize、-fvect-cost-model、-ftree-partial-pre 和 -fipa-cp-克隆选项。

    我的假设是这些循环优化是昂贵的......尤其是循环矢量化优化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      相关资源
      最近更新 更多