Infrastruktura pro profilem řízené optimalizace v GCC ===================================================== Jedním ze základních problémů překladače je rozhodnout, kdy použít transformace, které zlepší jednu vlastnost kódu, ale zhorší jinou (napřiklad zrychlí, ale zvětší kód, nebo zrychlí kód v jednou případě a zpomalí v jiném). Jedou z cest, jak pomoci překladači dělat lepší rozhodnutí je odhadnout frekvence jednotlivých basic bloků funkce a pravděpodobnosti hran (profil). Základem těchto odhadů bývají buďto heuristiky (např. test ukazatele na NULL bývá typicky false), nebo data získaná statisticky spouštěním programu doplněného o kompilátorem vygenerovaný profilovací kód. Cílem projektu je rozšířit GNU Compiler Collection (GCC) o prakticky použitelou infrastrukturu pro optimalizace řízené profilem. To znamená: - vyčistit stávající implementaci centrálního flow grafu tak, aby bylo možné a snadné jej zachovat při transofrmacích programu - rozšířit záznamy basic bloků a hran o frekvence a pravděpodovnosti - opravit existující, zastaralou a nefunkční podporu pro profilování programů na úrovni basic bloků - rozchodit čtení statisticky získaných dat a uložit je v nové reprezentaci - implementovat pokročilejší heuristiky pro odhat pravděpodobností hran v případě, že experimentální data nejsou k dispozici - dodat nástroje pro ověřování a ladění spolehlivosti heuristik - implementovat průchod pro odhadnutí frekvence basic bloků na základe pravděpodobností hran - upravit některé existující optimalizační průchody tak, aby zachovaly profil, a poskytnout ostatním autorům gcc návod na takové úpravy - použít profil alespoň v některých optimalizacích Vše by mělo být řešeno tak, aby výsledek fungoval na většině platforem podporovaných GCC, ale primární cílovou platformou bude i386 s Linuxem. Možná rozšíření =============== Podle zájmu řešitelů a aktuálním vývoji GCC lze pak pokračovat implementací nových optimalizací (tracer, loop peeling, software trace cache, optimalizace smyček atd.), zlepšováním externích nástrojů pro profilování programů (umožnit uživateli prohlížet získaná data, měřit nejenom frekvence ale i časy strávené v jednotlivých částech programu, implementaci algoritmu pro opatrné spojování profilů z jednotlivých běhů) či upravením profilovacího kódu tak, aby fungoval pro programy s vlákny a nebo měřil i jiné vlastnosti programu. Počet řešitelů ============== Postačí 4, maximálně 5.