使用编译标志-o3进行数组复制

时间:2014-03-21 13:44:39

标签: c arrays gcc

使用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];
}

2 个答案:

答案 0 :(得分:4)

取自GCC docs(所有强调我的):

  

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

     

优化编译需要更多时间,以及更多内存   为了一个大功能。

     

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

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

答案 1 :(得分: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-clone选项。

我的假设是对你的循环进行昂贵的优化......尤其是循环矢量化优化。