Not a guru, dar iata ce vad eu in man gcc (gcc 3.2-7 redhat): -O3
Optimize even more. -O3 turns on all optimizations specified by -O2 and also turns on the -finline-functions and -frename-registers options. -funroll-loops Unroll loops whose number of iterations can be determined at compile time or upon entry to the loop. −funroll−loops implies both -fstrength-reduce and -frerun-cse-after−loop. This option makes code larger, and may or may not make it run faster. -finline-functions: Integrate all simple functions into their callers. The compiler heuristically decides which functions are simple enough to be worth integrating in this way. If all calls to a given function are integrated, and the function is declared "static", then the function is normally not output as assembler code in its own right. Din cate inteleg eu, toate aceste optimizari nu optimizeaza marimea executabilului sau compile time-ul ci performantele codului odata executat. Cat despre motivele pt care 2.96 se impiedica, presupunerea mea cea mai sincera e ca 2.96 si kernelul nu prea au "tangente". Tin minte ca a fost o vreme cand unele rh-uri veneau cu 2 seturi de gcc, unul 2.96 si unul, denumit parca "kgcc", versiune "stabila" folosita pentru compilarea kernelului. Cat despre cine poarta vina... nu e necesar sa pornim un flamewar :) On Tue, 2003-01-14 at 15:44, Linux User wrote: > Hello all, > > Nefiind un specialist in compilatoare, as dori sa deschid un thread legat de > acestea si metodele de optimizare folosite. Cu o saptamina si ceva in urma, > am compilat un vanilla kernel 2.4.20 + ac2 patch pe un Rahat 7.3, folosind > doua compilatoare diferite: > - gcc-2.96-110 care vine default pe OS > - gcc3-3.1-5 pentru RedHat updates. > > Pima data am compilat cu gcc2.96, folosind fisierul Makefile default. Am > obtinut un kernel in jur de 1.1MB > A doua oara, am modificat Makefile asa cum arat mai jos, activind o metoda de > optimizare mai agresiva! > Am incercat cu gcc-2.96 dar nu se mai compileaza, da erori. In cazul acesta, > am schimbat compilatorul, cu gcc-3.1-5. De data asta s-a compilat frumos, dar > am obtinut un kernel cam cu 20-25% mai mare (nu mai am datele exacte acum). > > As avea citeva intrebari: > Fisierul de configurare al kernelului a fost identic in ambele cazuri. > - este normal sa obtin un kernel mai mare in cazul in care folosesc > "agressive optimization" sau acest lucru se datoreaza folosirii lui gcc-3.1-5 > (este adevarat, ca nu am mai incercat sa compilez cu gcc-3.1-5 folosind > Makefile-ul original, si apoi sa compar imagine obtinuta cu cea veche...mea > culpa... dar masina pe care eram nu ma prea indema sa tot compilez kernei) > > - de ce in aceasta situatie, cind am folosit O3 obtin o imagine mai mare, > cind de fapt eu ma asteptam sa fie pe dos. > > - cum ar fi mai bine sa procedez: sa pastrez imaginea obtinuta cu gcc3 (chiar > daca este mai mare), sau sa o folosesc pe cea obtinuta cu gcc-2.96? > Un kernel foarte mic, din cite stiu eu poate deveni instabil, dar...in > situatia de fata, nu este cazul. Am avut si imagini mai mici de kernel care > au fost foarte stabile. In mod normal, cind folosesti O3, nu trebuie sa se > faca oarece compresie? > Pe de alta parte, nici un kernel mare nu este recomandat (motivele se cunosc > deja)... > > - cum sa tratez faptul ca gcc-2.96 nu poate sa compileze cu O3, ca pe un > lucru "bun" sau nu.... (stiu ca gcc-2.96 este un subiect de largi > controverse... dar sa presupunem ca nu este gcc-2.96-redhat ci din seria > gcc-2.9.x). Prin readme-uri scrie ca O3 nu este obligatoriu sa mai si > mearga... > > - ma gindesc si la faptul ca o posibila cauza pentru care gcc-2.96 da rateuri > poate fi si pentru ca este mai vechi decit 3.1.x si nu stie sa trateze > anumite instructiuni? > > Iata in continuare, modificarile facute: > Original Make file: > HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer > > CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \ > -fno-strict-aliasing -fno-common > ifndef CONFIG_FRAME_POINTER > CFLAGS += -fomit-frame-pointer > endif > > Modified Make file: > HOSTCFLAGS = -Wall -Wstrict-prototypes -O3 -funroll-loops > -fomit-frame-pointer > > CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O3 \ > -funroll-loops -fno-strict-aliasing -fno-common > ifndef CONFIG_FRAME_POINTER > CFLAGS += -fomit-frame-pointer > endif > > Best Regards, > Alex > > > --- > Pentru dezabonare, trimiteti mail la > [EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'. > REGULI, arhive si alte informatii: http://www.lug.ro/mlist/ -- George Barbarosie <[EMAIL PROTECTED]> intelinet.ro SRL --- Pentru dezabonare, trimiteti mail la [EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'. REGULI, arhive si alte informatii: http://www.lug.ro/mlist/
