当使用-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];
}发布于 2014-03-21 21:47:59
摘自GCC docs (都是我的重点):
打开优化标志使编译器试图提高性能和/或代码大小,代价是编译时间和可能的程序调试能力。..。优化编译需要更多的时间和更多的内存来处理大型函数。使用-O,编译器试图减少代码大小和执行时间,而不执行任何需要大量编译时间的优化。
这完全是意料之中的行为。基本上,你的编译器需要为你做更多的工作,这增加了编译时间。
发布于 2014-03-21 21:50:00
从Optimize Options -
做了更多的优化。-O3会打开-O2指定的所有优化,还会打开-finline-function、-funswitch-loops、-fpredictive commoning、-fgcse-after-reload、-ftree-loop-vectorize、-ftree-slp-vectorize、-fvect-cost model、-ftree-pre pre和-fipa-cp-clone选项。
我的假设是,这些都是使用循环进行的代价高昂的优化。特别是循环向量化优化。
https://stackoverflow.com/questions/22560534
复制相似问题