Optimalizace (was: Re: porty II)
Dan Lukes
dan at obluda.cz
Mon Jan 13 13:40:51 CET 2003
Pav Lucistnik wrote:
>>>- mate moznost zapnout si vyssi optimalizace (-O2 v make.conf)
>>Co presne udela tento parametr?
>
> Optimalizace v gcc. Standardne se pouziva -O. Da se optimalizovat i vic
> (-O2 a -O3), ale to uz v nekterych pripadech produkuje rozbite binarky
> (aspon se to tvrdi, ja zatim nemel problem).
Zato ja to videl. Kdyz jednoho dne zjistite, ze program nejde prelozit
pro syntakticke chyby a zjistite, ze je to proto, ze je vadny conf.h
generovany v ramci autokonfigurace pred prekladem - a zjistite, ze to je
proto, ze to je kvuli tomu, ze v AWK
printf("%f %f", 10.0, 11.0)
vytiskne "A 11"
ale
printf("%f %f", 11.0, 10.0)
vytiskne "p 10"
...
No, nebudu to napinat - nakonec byla chyba ve floatove casti libc
knihovny, ktera byla napsana spatne z hlediska mozne optimalizace - a
diky tomu se chyba projevovala v kde-cem (a jelikoz ja mezitim
nekolikrat prelozil "world" byly v celem systemu zavlecene chyby z
poskozenych lec nahodou syntakticky spravnych zdrojaku).
Hledal jsem to tyden v disasseblovanem programu (debugovat pomoci gdb
nestaci, protoze to problem zamaskuje) ...
Jo a libc v currentu je pri prelozeni s -O3 take nepouzitelna - chybeji
v ni nektere potrebne symboly.
Opravdu - radeji s optimalizacemi opatrne, nebo alespon - mate-li
jakykoliv problem s "podivnym" chovanim programu - zacnete tim, ze
program sam a vsechny souvisejici knihovny prelozite bez optimalizace
(to, ze je bez optimalizace prelozen kernel povazuji za zcela samozrejme).
Podotykam, ze v obou zminenych pripadech nejde o chybu gcc, ale
zdrojaku - chyby pri optimalizaci dela gcc take, ale to uz je zase jiny
pribeh ...
S obtimalizaci jsou opravdu realne problemy, navic se obvykle velice
obtizne lokalizuji a identifikuji ...
Dan
--
Dan Lukes tel: +420 2 21914205, fax: +420 2 21914206
root of FIONet, KolejNET, webmaster of www.freebsd.cz
AKA: dan at obluda.cz, dan at freebsd.cz, dan at kolej.mff.cuni.cz
More information about the Users-l
mailing list