簡體   English   中英

使用編譯標志-o3復制數組

[英]Array copying with compile flag -o3

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

取自GCC文檔 (全部為我的重點):

啟用優化標志會使編譯器嘗試以犧牲編譯時間和調試程序的能力為代價來提高性能和/或代碼大小。 [...]

優化編譯需要更多的時間 ,而大型函數需要更多的內存。

使用-O時,編譯器會嘗試減少代碼大小和執行時間,而不執行任何占用大量編譯時間的優化。

這是完全預期的行為。 基本上,您的編譯器需要為您做更多的工作,這會增加編譯時間。

從“ 優化選項”中 -

優化更多。 -O3打開-O2指定的所有優化,還打開-finline-functions,-funswitch-loops,-fpredictive-commoning,-fgcse-re-reload,-ftree-loop-vectorize,-ftree-slp-vectorize ,-fvect-cost-model,-ftree-partial-pre和-fipa-cp-clone選項。

我的假設是那些昂貴的循環優化……尤其是循環矢量優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM