2015-11-20 29 views
7

Qui io compilo un programma di input con -O2 livello di ottimizzazione (con gcc 4.8.4) e misurare il tempo di esecuzione:GCC comportamento

gcc -O2 -c test.c -o obj.o 
TIMEFORMAT='%3R' && time(./obj.o) 
execution time = 1.825 

e quando sostituisco -O2 bandiera con la lista delle opzioni che si accendono come definito nel GCC manuel del livello -O2 https://gcc.gnu.org/onlinedocs/gcc-4.8.4/gcc/Optimize-Options.html#Optimize-Options così:

gcc -fauto-inc-dec -fcompare-elim -fcprop-registers -fdce -fdefer-pop -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion -fipa-pure-const -fipa-profile -fipa-reference -fmerge-constants -fsplit-wide-types -ftree-bit-ccp -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-phiprop -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -funit-at-a-time -fthread-jumps -falign-functions -falign-jumps -falign-loops -falign-labels -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks -fdelete-null-pointer-checks -fdevirtualize -fexpensive-optimizations -fgcse -fgcse-lm -fhoist-adjacent-loads -finline-small-functions -findirect-inlining -fipa-sra -foptimize-sibling-calls -fpartial-inlining -fpeephole2 -fregmove -freorder-blocks -freorder-functions -frerun-cse-after-loop -fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-overflow -ftree-switch-conversion -ftree-tail-merge -ftree-pre -ftree-vrp -c test.c -o obj.o 
    TIMEFORMAT='%3R' && time(./obj.o) 
execution time = 2.652 

mia domanda è perché il tempo di esecuzione è diverso anche così, ho applicato le stesse ottimizzazioni?

UPDATE

se (secondo la documentazione GCC):

Non tutte le ottimizzazioni sono comandati direttamente da una bandiera.

Quindi, come possono i ricercatori usare per riprodurre le sequenze di ottimizzazione anche più veloce di sequenze di ottimizzazione standard (utilizzando algoritmi evolutivi che usare per generare migliaia di sequenze di ottimizzazione e raccogliere quelli con maggiore impatto in termini di tempo di esecuzione)

come esempio "acovea" http://hg.ahs3.net/acovea/debian/html/acoveaga.html

e "Cole" http://users.elis.ugent.be/~leeckhou/papers/cgo08.pdf

+3

Potrebbe esserci una spiegazione più soddisfacente, ma sui sistemi di multitasking preventivi (ad esempio, tutti i desktop, i dispositivi mobili e il server), c'è sempre solo la possibilità che qualcosa stia succedendo. Generalmente, le persone tendono a eseguire molti test di temporizzazione e a fare la media per ottenere numeri più utili che non sono in balia del software di backup :). – Linuxios

+0

1) il codice è davvero lo stesso? In caso contrario: forse è meglio chiedere questa domanda alla mailing list gcc. Se sì: il tuo metodo di riferimento è sbagliato. – Olaf

+0

@Olaf Se il codice è diverso - perché chiedere sulla mailing list di gcc? –

risposta

-3

C'è 2 buona ottimizzazione t cappello deve essere sapere:

  • -O2: ottimizzare lo spazio e il tempo (attenzione: non inizializza variabile)
  • -Os: Ottimizzare spazio e il tempo (attenzione: non inizializza variabile)
+1

dall'argomento – staticx

Problemi correlati