Veselé vyhlídky překladačů

"Nyní se nacházíme přibližně uprostřed radikálního posunu v tom, co jsou kompilátory schopny provádět a řešit," ...


"Nyní se nacházíme přibližně uprostřed radikálního posunu v tom, co jsou
kompilátory schopny provádět a řešit," říká Andrew Ayers, vedoucí výzkumu u
společnosti InCert Software. Java a další jazyky představily koncept
just-in--time kompilace, při níž musejí být části kódu (např. applety)
přeloženy do optimalizovaného strojového jazyka za běhu programu. "Zde už
nestačí, aby překladač generoval potřebný kód, jako tomu bylo v minulých
letech. Samotný kompilátor nyní musí běžet rychle." To ovšem klade mnohem vyšší
nároky na důmyslnost překladače při rychlém hledání nejdůležitějších míst
vyžadujících optimalizaci, aniž by se přitom zdržoval s kódem, který je
vykonáván jen zřídka. Dynamické profily
Jednou z metod, která k takovému výsledku vede, je tzv. "profiling"
(profilování). To znamenalo shromažďování dat o provádění a běhu programu,
která překladač použil při jeho dalším spuštění, čímž byla zajištěna vyšší
úroveň optimalizace. Dnes však profilováním rozumíme dynamickou optimalizaci
programu přímo za běhu.
Ayers, který dříve působil jako specialista v oblasti překladačů u společnosti
Hewlett-Packard, vysvětluje: "Javový program začíná částečně optimalizován.
Just-in-time kompilátor provádí monitorování, při němž zjišťuje, kde skutečně
stráví nejvíce času na tyto úseky se pak soustředí a provede zde další,
důkladnější optimalizaci. Dokáže se navíc přizpůsobovat: Jestliže se změní
chování programu, překladač dynamicky optimalizuje některé z jeho dalších
částí."
Společnost Transmeta používá podobný princip profilování ve své technologii
code morphing, kterou používá v procesorech Crusoe určených pro různá mobilní
zařízení a vyznačujících se nízkou spotřebou. Zpracování některých instrukcí je
přesunuto z hardwarové části a řešeno softwarově. Tato technologie zpracovává
statistiky o provádění programu, a jestliže najde často používané sekvence x86
instrukcí, dynamicky je rekompiluje do optimalizovaného nativního kódu
procesoru Crusoe.
Uživatelské jazyky
Zatímco techniky jako profiling jsou používány k optimalizaci kódu za běhu
programu, vědci na Rice University v Houstonu se pokoušejí přistupovat k
problému optimalizace z jiného pohledu. Ken Kennedy, který se touto oblastí
zabývá, člení proces překladu do dvou hlavních fází. V první fázi je generován
programovací jazyk vysoce optimalizovaný pro určitý typ použití jako např. pro
operace s maticemi ve vědeckých aplikacích nebo pro vyhodnocování dotazů při
práci s databázemi v komerčních aplikacích. Celý proces je založen na hluboké
znalosti dané oblasti aplikací, generátor jazyka může strávit celé hodiny
kompilací a optimalizací rutin běžně využívaných programátory v této oblasti.
Překladač pro druhou fázi, který posléze pracuje se zdrojovým kódem uživatele,
je schopen substituovat tyto vysoce optimalizované rutiny za kód, který
vytvořil uživatel.
"Budeme mít množství oborově specifických jazyků pro koncové uživatele," říká
Kennedy. "Znamená to, že můžete mít několik lidí, kteří neprošli 5letou praxí
objektově orientovaného programování, a ti budou schopni sestavovat kvalitní
aplikace integrací komponent napsaných skutečnými profesionálními programátory.
Tento přístup nabízí mnohem širší možnosti využití schopností zkušených
profesionálů."
Tytéž techniky, které překladače používají pro produkování efektivně
pracujícího kódu, mohou být využity k tomu, aby pomohly vývojářům při
debugování a ladění jejich aplikací. "Kompilátor je nástrojem, který vytváří
model chování programu," říká Ayers. "Nejen, že s jeho pomocí lze generovat
strojové instrukce, ale je zde i mnoho dalších možností, jak jednou vytvořený
model využít.
Manipulace s daty v paměti
Další slibná větev výzkumu je založena na principu optimalizace umístění dat a
kódu v hierarchii paměťových zařízení na pevném disku, v operační paměti a v
různých úrovních cache procesoru. Pokusné verze těchto kompilátorů mohou
analyzovat chování programu, aby zjistily, do které úrovně data umístit, a poté
jsou vygenerovány instrukce pro přemísťování částí dat v rámci hierarchie
paměti.
Todd Mowry, profesor na Carnegie Mellon University v Pittsburgu, pracuje na
tzv. prefetchingu, při němž překladač generuje instrukce, které přesouvají data
z hlavní paměti do cache procesoru ještě před tím, než jsou skutečně využita.
Zabývá se také způsoby, jak přemístit data z disku do paměti před jejich
zpracováním. "Jestliže tedy zpracováváte úlohu většího rozsahu, při níž jsou
neustále potřebná data umístěná na pevném disku, jsou automaticky načítána z
disku o miliony cyklů dopředu," říká Mowry.
1 1903 / wep









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.