Principy překladačů Vysokoúrovňové optimalizace Jakub Yaghob.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení.
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
Elektrické obvody – základní analýza
Ing. Jan Vondrus Transformace Ing. Jan Vondrus
Příkazy Přednáška č. 4. Příkazy (statements)  Příkaz – dílčí krok programu (část kódu – zpravidla jeden řádek)  Program – posloupnost příkazů  Příkazy.
Vytváření, použití dávkových souborů
Aplikace teorie grafů Základní pojmy teorie grafů
Sylabus V rámci PNV budeme řešit konkrétní úlohy a to z následujících oblastí: Nelineární úlohy –Řešení nelineárních rovnic –Numerická integrace Lineární.
Programování v Pascalu Přednáška 5 RNDr. Hana Havelková.
JUI - 1. přednáška Funkcionální programování Úvod do jazyka Lisp RNDr. Jiří Dvořák, CSc.
VY_32_INOVACE_02 - RYCHLOST
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Principy překladačů Mezikód Jakub Yaghob.
Algoritmizace a programování
Hardwarová implementace Petriho sítí Vlastní HW implementace a syntéza.
Numerické (CFD) výpočty v aerodynamice
Tvorba konceptuálního modelu
Principy překladačů Překladač Jakub Yaghob. Literatura a slajdy Aho, Sethi, Ullman: Compilers - Principles, Techniques and Tools, Addison-Wesley 1986.
Principy překladačů Interpretované jazyky Jakub Yaghob.
Generování mezikódu Jakub Yaghob
Principy překladačů Architektury procesorů Jakub Yaghob.
Lexikální a syntaktická analýza Jakub Yaghob
MATLAB® ( Funkce v Matlabu ).
FORMALIZACE PROJEKTU DO SÍŤOVÉHO GRAFU
Vývojové diagramy a základy algoritmizace
Algoritmizace a programování
Růstové a přírůstové funkce
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
ALGO – Algoritmizace 2. cvičení
Sémantická analýza Jakub Yaghob
Syntaxí řízený překlad
Rozdělení registrů.
POUŽIVÁNÍ FUNKCÍ V EXCELU DOMÁCÍ ÚKOL - KURZ PRÁCE S POČÍTAČI „POKROČILÍ“ NA TÉMA FUNKCE V EXCELU Vypracoval: Petr Šimek
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
Generování vnitřní reprezentace programu Miroslav Beneš Dušan Kolář.
Transakce Roman Špánek TU v Liberci Transakce Transakce = série příkazů čtení a zápisu do databáze A Atomic C Consistency I Isolation D Durability.
Dokumentace informačního systému
Algoritmizace a programování Vývojové diagramy - 03
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Milan Kryl(c) 2004 MFF UK Databáze Caché NLS national language settings.
doc. RNDr. Zdeněk Botek, CSc.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Typy cyklů Do...Loop For...Next For Each...Next.
Anotace Prezentace, která se zabývá měřením rychlosti Autor Mgr. Michal Gruber Jazyk Čeština Očekávaný výstup Žáci umí měřit a zpracovávat získané hodnoty.
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES CYKLY V PHP.
ŘÍZENÍ DOPRAVY POMOCÍ SW AGENTŮ Richard Lipka, DSS
Projektový cyklus, analýza SWOT
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Překladače Vnitřní struktura překladače © Milan Keršláger
Překladače 7. Optimalizace © Milan Keršlágerhttp:// Obsah: ● typy optimalizací.
Překladače Optimalizace © Milan Keršláger
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
Vývoj architektur mikroprocesorů Od 4 bitů k superskalárnímu RISC Vývoj architektur mikroprocesorů Od 4 bitů k superskalárnímu RISC Pavel Píša
Č.projektu : CZ.1.07/1.1.06/ Portál eVIM 3. Newtonův zákon.
NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6.
ZAL – 3. cvičení 2016.
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Operační systémy Vnitřní struktura překladače
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Ing. Milan Houška KOSA PEF ČZU v Praze
© Copyright Radim Štefan
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Tradiční metody vývoje softwaru
Přednášky z distribuovaných systémů
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Transkript prezentace:

Principy překladačů Vysokoúrovňové optimalizace Jakub Yaghob

Optimalizace Ideální případ – generovaný kód je stejně dobrý jako ručně psaný Platí to dnes ještě? Skutečnost Pouze v několika vymezených situacích Obtížné Optimalizace Transformace programu Na rychlost nebo na velikost kódu Vysokoúrovňové optimalizace Prováděné nad mezikódem

Kritéria pro transformace Zachování smyslu programu Výstup a chování programu nesmí být transformací změněny Zrychlení o měřitelnou velikost Obvykle transformace zvyšující rychlost Někdy optimalizace zpomalí, i když v průměrném případě zrychluje Transformace musí být hodna vynaložené námaze Složitá/pomalá optimalizace s malým zrychlením není moc užitečná

Druhy optimalizací V rámci jednoho základního bloku Nejsou žádné skoky V rámci jedné funkce Pohyb kódu mezi bloky Vznikají, zanikají základní bloky V rámci celého programu (interprocedurální) Zrychlení volání mezi funkcemi Provádí se ve fázi linkování zpožděným překladem

Organizace optimalizátoru Analýza toku řízení Konstrukce grafu toku řízení Analýza toku dat Výpočet životnosti proměnných Optimalizátor kódu Front end Generátor kódu Analýza toku řízení Analýza toku dat Transformace

Lokální optimalizace V rámci jednoho základního bloku Eliminace společného podvýrazu (common subexpression elimination) Propagování kopií (copy propagation) Eliminace mrtvého kódu (dead-code elimination) x = y+z, a x již není nikde dál použitá Výpočet konstantních výrazů (constant folding) Algebraické transformace x = x + 0, x = x * 1

Lokální eliminace společného podvýrazu a = b + c b = a – d c = b + c d = a – d a = b + c b = a – d c = b + c d = b Je tady schovaný problém Pointer aliasing ap = &a b = a + c *ap = d e = a + c

Analýza toku dat „Obarvení“ uzlů grafu toku řízení (základních bloků) proměnnými, které jsou v tomto uzlu živé Nemusí být živé v celém základním bloku Uvnitř základního bloku se dopočítá přesná životnost Výpočet pořadí vyhodnocení Topologické setřídění DAGu, který popisuje definici proměnné jako cíl hran uzlů použitých pro výpočet Modelování ukazatelů Pointer aliasing Modelování volání funkcí Interprocedurální optimalizace

Globální optimalizace Více základních bloků, možný pohyb kódu mezi bloky, příp. i změna grafu toku řízení Eliminace společného podvýrazu (common subexpression elimination) Propagování kopií (copy propagation) Eliminace mrtvého kódu (dead-code elimination) Optimalizace cyklů Přesun invariantního kódu Redukce síly operace Odstranění indukční proměnné

Optimalizace cyklů – 1 while(i<limit-5) St = limit – 5; while(i<t) S Přesun invariantního kódu Výpočet, který se v cyklu nemění se předpočítá před cyklem

Optimalizace cyklů – 2 Redukce síly operace Typicky operace násobení převedená na sčítání Odstranění indukční proměnné Stačí pouze jediná indukční proměnná cyklu Obvykle se podaří zrušit při redukci for(i=3;i<8;i+=3) { j = i*2; a[j] = j; } for(t=6;t<16;t+=6) a[t] = t;

Příklad – kód v C i=m-1; j=n; v=a[n]; for(;;) { do ++i; while(a[i]<v); do --j; while(a[j]>v); if(i>=j) break; x=a[i]; a[i]=a[j]; a[j]=x; } x=a[i]; a[i]=a[n]; a[n]=x;

Příklad – tříadresový kód 1)i = m-1 2)j = n 3)t1 = 4*n 4)v = a[t1] 5)i = i+1 6)t2 = 4*i 7)t3 = a[t2] 8)if t3<v goto 5 9)j = j-1 10)t4 = 4*j 11)t5 = a[t4] 12)if t5>v goto 9 13)if i>=j goto 23 14)t6 = 4*i 15)x = a[t6] 16)t7 = 4*i 17)t8 = 4*j 18)t9 = a[t8] 19)a[t7] = t9 20)t10 = 4*j 21)a[t10] = x 22)goto 5 23)t11 = 4*i 24)x = a[t11] 25)t12 = 4*i 26)t13 = 4*n 27)t14 = a[t13] 28)a[t12] = t14 29)t15 = 4*n 30)a[t15] = x

Příklad – graf toku řízení i = m-1 j = n t1 = 4*n v = a[t1] i = i+1 t2 = 4*i t3 = a[t2] if t3<v goto B2 j = j-1 t4 = 4*j t5 = a[t4] if t5>v goto B3 if i>=j goto B6 t6 = 4*i x = a[t6] t7 = 4*i t8 = 4*j t9 = a[t8] a[t7] = t9 t10 = 4*j a[t10] = x goto B2 t11 = 4*i x = a[t11] t12 = 4*i t13 = 4*n t14 = a[t13] a[t12] = t14 t15 = 4*n a[t15] = x B1 B2 B3 B4 B5B6

Příklad - LCSE t6 = 4*i x = a[t6] t7 = 4*i t8 = 4*j t9 = a[t8] a[t7] = t9 t10 = 4*j a[t10] = x goto B2 B5 t6 = 4*i x = a[t6] t8 = 4*j t9 = a[t8] a[t6] = t9 a[t8] = x goto B2 B5

Příklad – GCSE i = m-1 j = n t1 = 4*n v = a[t1] i = i+1 t2 = 4*i t3 = a[t2] if t3<v goto B2 j = j-1 t4 = 4*j t5 = a[t4] if t5>v goto B3 if i>=j goto B6 x = t3 a[t2] = t5 a[t4] = x goto B2 x = t3 t14 = a[t1] a[t2] = t14 a[t1] = x B1 B4 B5B6 B2 B3

Příklad – copy propagation a dead-code elimination x = t3 a[t2] = t5 a[t4] = x goto B2 B5 x = t3 a[t2] = t5 a[t4] = t3 goto B2 B5 x = t3 a[t2] = t5 a[t4] = t3 goto B2 B5 a[t2] = t5 a[t4] = t3 goto B2 B5

Příklad – redukce síly operace i = m-1 j = n t1 = 4*n v = a[t1] B1 j = j-1 t4 = 4*j t5 = a[t4] if t5>v goto B3 B3 B2 if i>=j goto B6 B4 B5B6 i = m-1 j = n t1 = 4*n v = a[t1] t4 = 4*j B1 j = j-1 t4 = t4-4 t5 = a[t4] if t5>v goto B3 B3 B2 if i>=j goto B6 B4 B5B6

Příklad – odstranění indukční proměnné i = m-1 j = n t1 = 4*n v = a[t1] t4 = 4*j B1 j = j-1 t4 = t4-4 t5 = a[t4] if t5>v goto B3 B3 B2 if i>=j goto B6 B4 B5B6 i = m-1 j = n t1 = 4*n v = a[t1] t4 = 4*j B1 t4 = t4-4 t5 = a[t4] if t5>v goto B3 B3 B2 if i>=j goto B6 B4 B5B6

Příklad – výsledek i = m-1 j = n t1 = 4*n v = a[t1] t2 = 4*i t4 = 4*j t2 = t2+4 t3 = a[t2] if t3<v goto B2 t4 = t4-4 t5 = a[t4] if t5>v goto B3 if t2>=t4 goto B6 a[t2] = t5 a[t4] = t3 goto B2 t14 = a[t1] a[t2] = t14 a[t1] = t3 B1 B4 B5B6 B2 B3 Je to pěkný výsledek?

Příklad – pořádný výsledek i = m-1 t1 = 4*n v = a[t1] t2 = 4*i t4 = t1 t2 = t2+4 t3 = a[t2] if t3<v goto B2 t4 = t4-4 t5 = a[t4] if t5>v goto B3 if t2>=t4 goto B6 a[t2] = t5 a[t4] = t3 goto B2 t14 = a[t1] a[t2] = t14 a[t1] = t3 B1 B4 B5B6 B2 B3 Další aplikace lokálních optimalizací na B1

Paralelizace a vektorizace Paralelizace Implicitní x explicitní Části kódu, které lze vykonávat současně Přednačítání proměnných do cache Vektorizace Paralelizace výpočtu s použitím SIMD operací

Optimalizace řízená profilem (Profile Guided Optimization) Tři fáze Instrumentace Speciálně přeložený kód s voláním „sběrných“ funkcí na konci a začátku základních bloků Profilování Spouštění instrumentovaného programu s „typickými“ vstupy Sběr statistických dat o průchodu kódu „sběrnými“ funkcemi Optimalizace Nasbíraná statistická data ovlivní optimalizaci Využití při optimalizaci v mezikódu i kódu Změření váhy cest v grafu toku řízení Přidělování registrů