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/


Raspunde prin e-mail lui