Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sta je O2 ili O3 optimizacija?

[es] :: C/C++ programiranje :: Sta je O2 ili O3 optimizacija?

[ Pregleda: 2669 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

aleksandar1519

Član broj: 307863
Poruke: 8
*.dynamic.isp.telekom.rs.



+2 Profil

icon Sta je O2 ili O3 optimizacija?01.11.2012. u 23:09 - pre 138 meseci
Da li bi neko mogao da mi ukratko objasni, ili preporuci neki tekst koji bih mogao da procitam na ovu temu?
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Sta je O2 ili O3 optimizacija?01.11.2012. u 23:42 - pre 138 meseci
GNU kompajler, baš kao i svaki drugi, ima razne direktive kojima mu se naglašava kako da odradi posao. -O se odnosi na optimizaciju. -O0 znači "ne optimizuj ništa"; -O1 znači "optimizuj malo, ali požuri sa kompajliranjem"; -O2 znači "budi umeren, optimizuj ali nemoj previše da žilaviš sa kompajliranjem"; -O3 znači "optimizuj u sitna crevca štagod možeš". Preciznije, postoji sijaset vrsta optimizacije, koje se uključuju i isključuju raznim pojedinačnim direktivama, pri čemu -O0 isključuje sve optimizacije, -O1 uključuje neke, -O2 još neke i -O3 skoro sve, ali ne baš sve.

Za više informacija

man gcc


Naravno, drugi kompajleri imaju svoje direktive.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

aleksandar1519

Član broj: 307863
Poruke: 8
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Sta je O2 ili O3 optimizacija?02.11.2012. u 10:12 - pre 138 meseci
Hvala puno na brzom odgovoru. Da li bi mogao da mi navedes neki primer kako se ta optimizacija koristi u nekom programu? Da li je to neka on "opcija" pri samom setup-u prijekta ili se upisuje neki kod itd?

Nikad nisam radio sa tim optimizacijama tako da bilo kakva informacija je veoma dobro dosla. Kako bi mogao da izguglam vise info o tome? Ja obicno koristim, tj vezbam, na code::block-u, pa me zanima kako da se ta optimizacija implrementira u tom programu.

Jos jednom, hvala puno i pozdrav
 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: Sta je O2 ili O3 optimizacija?02.11.2012. u 10:16 - pre 138 meseci
Citat:
Ja obicno koristim, tj vezbam, na code::block-u, pa me zanima kako da se ta optimizacija implrementira u tom programu.

Iz Settings izabereš compiler and debugger i postaviš željene compiler flagove i onda se oni primenjuju, tj. prosleđuju gcc-u pri kompajliranju.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Sta je O2 ili O3 optimizacija?02.11.2012. u 10:41 - pre 138 meseci
Tačno. Naravno, pod uslovom da koristi GNU prevodilac (standardan pod Linux-om ili iz MinGW projekta pod Windows-om), jer Code::Blocks može da radi i sa drugim kompajlerima. Ako je skinuo Code::Blocks za Windows sa integrisanim kompajlerom, pa to koristi, onda je to to.

Inače, direktive se zadaju kao parametri komandne linije

g++ -O3 program.cpp

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16683
*.dip.t-dialin.net.



+7169 Profil

icon Re: Sta je O2 ili O3 optimizacija?02.11.2012. u 10:44 - pre 138 meseci
@aleksandar1519,

-Ox (gde je x broj) je informacija za kompajler koja nalaze kompajleru da ukljuci/iskljuci odredjene optimizacije.

Postoji vise nacina da se tvoj kod pisan u, recimo, C++ jeziku, prevede u masinski kod za CPU. U zavisnosti od nivoa optimizacija, kompajler ce izlazni masinski kod optimizovati manje ili vise.

Nisu sve optimizacije "besplatne" - recimo, neke optimizacije za brzinu imaju za cenu veci masinski kod (sto rezultuje vecim izvrsnim fajlom ili bibliotekom) isto kao sto neke optimizacije za velicinu koda imaju los efekat na brzinu. Zbog toga postoje opcije koje to kontrolisu.

U najvecem broju slucajeva -O2 radi posao, ako ti je brzina kljucna stvar i briga te za velicinu fajla koristi -O3

Ako te zanima koje individualne optimizacije mozes da kontrolises, za GCC kompajler to imas ovde:

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Kao sto vidis opcija -Ox (gde je x broj) zapravo kontrolise koje individualne optimizacije kompajler koristi.

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Sta je O2 ili O3 optimizacija?02.11.2012. u 13:26 - pre 138 meseci
Citat:
Ivan Dimkovic: Nisu sve optimizacije "besplatne" - recimo, neke optimizacije za brzinu imaju za cenu veci masinski kod (sto rezultuje vecim izvrsnim fajlom ili bibliotekom) isto kao sto neke optimizacije za velicinu koda imaju los efekat na brzinu. Zbog toga postoje opcije koje to kontrolisu.

U najvecem broju slucajeva -O2 radi posao, ako ti je brzina kljucna stvar i briga te za velicinu fajla koristi -O3

S tim da je danas malo koga briga za veličinu fajla (osim možda u nekim jako specifičnim slučajevima). Glavni "negativan efekat" optimizacije je vreme kompajliranja. Takođe, kada se pravi debug verzija programa, sve optimizacije se isključuju da bi program radio "po Vuku" - onako kako je napisano, ne bi li čovek lakše uvideo grešku u onome što je napisano.
Citat:
Ivan Dimkovic: Ako te zanima koje individualne optimizacije mozes da kontrolises, za GCC kompajler to imas ovde:

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

A sve opcije GNU kompajlera ovde

http://linux.die.net/man/1/gcc

To što je Ivan napisao je pod "Optimization options", ali te možda mogu zanimati i druge opcije. Recimo, neke od najčešće korišćenih su

-oname (daje navedeno ime izlaznom fajlu, ako ne želiš da ti se program zove a.out)
-c (prevedi bez linkovanja. Tako se prevodi svaka jedinica za prevođenje, a tek na kraju sve linkuje)
-llibrary (uključi datu biblioteku),
-Idirectory (uključi navedeni direktorijum u include pretragu)
-Ldirectory (uključi navedeni direktorijum u pretragu biblioteka)
-g uključi debug informacije (neophodne za rad dibagera)
-glevel (gde je level broj od 0 do 3, koji kaže koliko debug informacija da se uključi, 0 za ništa, 3 za skoro sve ili sve)
-fPIC -shared (u kombinaciji za pravljenje deljenih biblioteka, tj. biblioteka za dinamičko linkovanje - pod Linux-om .so,a pod Windows-om (koji valjda ne tražin -fPIC) .dll).
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16683
*.dip.t-dialin.net.



+7169 Profil

icon Re: Sta je O2 ili O3 optimizacija?02.11.2012. u 15:24 - pre 138 meseci
^ Ovo sto Nedeljko kaze - ako radis debugging, optimizacije treba drzati iskljucene posto inace masinski kod vise nece biti blizak originalnom i imaces znatno teze 'step-ovanje' po linijama koda posto kompajler ima mnogo vecu slobodu za optimizacije.

U svakom slucaju, ako nemas nikakve specificne prohteve, u release verziji stavi -O3, a u debug verziji ne ukljucuj optimizacije - i to bi trebalo da ti radi posao u 99% slucajeva.

Tek kada imas vrlo specificne optimizacione zahteve i kada se detaljno upoznas sa time sta individualne opcije rade, ima nekog smisla eksperimentisati.

Primera radi, code inlining je tipicna opcija koja je mac sa 2 ostrice - sa jedne strane, code inlining ima potencijal da ubrza kod time sto ce male rutine direktno ukljuciti u vece, eliminisuci vreme rezije funkcije. Medjutim, u nekim slucajevima moze da uspori kod zato sto ce povecati footprint koda i zahtevati vise mesta u kesu.

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

[es] :: C/C++ programiranje :: Sta je O2 ili O3 optimizacija?

[ Pregleda: 2669 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.