GCC a optimalizace s profilerem
ve flamu na rootu jsem nasel krasnou vecicku o niz jsem ani netusil, ze ji gcc umi -- optimalizace podle vysledku profileru. pri beznych optimalizacich nema tradicni prekladac (nemlouvim ted o JIT kompilaci) sanci zjistit, jak ktere casti kodu budou volany casto, z jakych mist a podobne... a proste jen hada a tipuje. nicmene, pomoci vcelku zastrcenych direktiv prekladace -fprofile-generate a -fprofile-use jde situace velice hezky zmenit a hodne pozitivnim smerem.
- nedjriv je potreba skompilovat cely projekt s direktivou -fprofile-generate (aby se mohly generovat profilacni informace)
- pak je nutne spustit program v typicke uloze (aby profiler mohl nasbirat data o behu programu)
- vymazat stare binarky
- spustit preklad s direktivou -fprofile-use (aby se vyuzily optimalizace)
v Makefile jsem si na to udelal novy cil "optimal" a vypada to nejak takto:
CFLAGS+=${PROFILE_ARGS} optimal: make clean make PROFILE_ARGS=-fprofile-generate make test0 PROFILE_ARGS=-fprofile-generate make clean make PROFILE_ARGS=-fprofile-use rm *.gcda rm *.gcno
vysledky jsou opravdu "vau!":
jako test jsem pouzil svuj interpretr schemu s temito dalsimi nastavenimi:
-Wall -Winline -O3 -std=c99 -pedantic -finline-limit=100000 --param large-function-growth=10000030 fibonacciho cislo:
- bez optimalizaci -- 3.163
- s optimalizacemi -- 2.580
- zrychleni -- cca 19%
33 fibonacciho cislo:
- bez optimalizaci -- 13.378
- s optimalizacemi -- 10.778
- zrychleni -- cca 20%
Vytvořil(a) deda.jabko v 08. 05. 2007, 13:16
Přidat komentář