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

Principy překladačů

  • Upload
    landon

  • View
    55

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Principy překladačů

Principy překladačů

Vysokoúrovňové optimalizace

Jakub Yaghob

Page 2: Principy překladačů

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

Page 3: Principy překladačů

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á

Page 4: Principy překladačů

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

Page 5: Principy překladačů

Organizace optimalizátoru Analýza toku řízení

Konstrukce grafu toku řízení Analýza toku dat

Výpočet životnosti proměnných

Optimalizátorkódu

Front endGenerátor

kódu

Analýzatoku řízení

Analýzatoku dat

Transformace

Page 6: Principy překladačů

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

Page 7: Principy překladačů

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

Page 8: Principy překladačů

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

Page 9: Principy překladačů

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é

Page 10: Principy překladačů

Optimalizace cyklů – 1

while(i<limit-5) S t = 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

Page 11: Principy překladačů

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;

Page 12: Principy překladačů

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;

Page 13: Principy překladačů

Příklad – tříadresový kód

1) i = m-12) j = n3) t1 = 4*n4) v = a[t1]5) i = i+16) t2 = 4*i7) t3 = a[t2]8) if t3<v goto 59) j = j-110) t4 = 4*j

11) t5 = a[t4]12) if t5>v goto 913) if i>=j goto 2314) t6 = 4*i15) x = a[t6]16) t7 = 4*i17) t8 = 4*j18) t9 = a[t8]19) a[t7] = t920) t10 = 4*j

21) a[t10] = x22) goto 523) t11 = 4*i24) x = a[t11]25) t12 = 4*i26) t13 = 4*n27) t14 = a[t13]28) a[t12] = t1429) t15 = 4*n30) a[t15] = x

Page 14: Principy překladačů

Příklad – graf toku řízeníi = m-1

j = nt1 = 4*nv = a[t1]

i = i+1t2 = 4*i

t3 = a[t2]if t3<v goto B2

j = j-1t4 = 4*j

t5 = a[t4]if t5>v goto B3

if i>=j goto B6

t6 = 4*ix = a[t6]t7 = 4*it8 = 4*j

t9 = a[t8]a[t7] = t9t10 = 4*ja[t10] = xgoto B2

t11 = 4*ix = a[t11]t12 = 4*it13 = 4*n

t14 = a[t13]a[t12] = t14t15 = 4*na[t15] = x

B1

B2

B3

B4

B5 B6

Page 15: Principy překladačů

Příklad - LCSE

t6 = 4*ix = a[t6]t7 = 4*it8 = 4*j

t9 = a[t8]a[t7] = t9t10 = 4*ja[t10] = xgoto B2

B5

t6 = 4*ix = a[t6]t8 = 4*j

t9 = a[t8]a[t6] = t9a[t8] = xgoto B2

B5

Page 16: Principy překladačů

Příklad – GCSEi = m-1

j = nt1 = 4*nv = a[t1]

i = i+1t2 = 4*i

t3 = a[t2]if t3<v goto B2

j = j-1t4 = 4*j

t5 = a[t4]if t5>v goto B3

if i>=j goto B6

x = t3a[t2] = t5a[t4] = xgoto B2

x = t3t14 = a[t1]a[t2] = t14a[t1] = x

B1 B4

B5 B6

B2

B3

Page 17: Principy překladačů

Příklad – copy propagation a dead-code elimination

x = t3a[t2] = t5a[t4] = xgoto B2

B5x = t3

a[t2] = t5a[t4] = t3goto B2

B5

x = t3a[t2] = t5a[t4] = t3goto B2

B5a[t2] = t5a[t4] = t3goto B2

B5

Page 18: Principy překladačů

Příklad – redukce síly operacei = m-1

j = nt1 = 4*nv = a[t1]

B1

j = j-1t4 = 4*j

t5 = a[t4]if t5>v goto B3

B3

B2

if i>=j goto B6B4

B5 B6

i = m-1j = n

t1 = 4*nv = a[t1]t4 = 4*j

B1

j = j-1t4 = t4-4t5 = a[t4]

if t5>v goto B3

B3

B2

if i>=j goto B6B4

B5 B6

Page 19: Principy překladačů

Příklad – odstranění indukční proměnné

i = m-1j = n

t1 = 4*nv = a[t1]t4 = 4*j

B1

j = j-1t4 = t4-4t5 = a[t4]

if t5>v goto B3

B3

B2

if i>=j goto B6B4

B5 B6

i = m-1j = n

t1 = 4*nv = a[t1]t4 = 4*j

B1

t4 = t4-4t5 = a[t4]

if t5>v goto B3

B3

B2

if i>=j goto B6B4

B5 B6

Page 20: Principy překladačů

Příklad – výsledeki = m-1

j = nt1 = 4*nv = a[t1]t2 = 4*it4 = 4*j

t2 = t2+4t3 = a[t2]

if t3<v goto B2

t4 = t4-4t5 = a[t4]

if t5>v goto B3

if t2>=t4 goto B6

a[t2] = t5a[t4] = t3goto B2

t14 = a[t1]a[t2] = t14a[t1] = t3

B1 B4

B5 B6

B2

B3

Je to pěkný výsledek?

Page 21: Principy překladačů

Příklad – pořádný výsledek

i = m-1t1 = 4*nv = a[t1]t2 = 4*it4 = t1

t2 = t2+4t3 = a[t2]

if t3<v goto B2

t4 = t4-4t5 = a[t4]

if t5>v goto B3

if t2>=t4 goto B6

a[t2] = t5a[t4] = t3goto B2

t14 = a[t1]a[t2] = t14a[t1] = t3

B1 B4

B5 B6

B2

B3

Další aplikace lokálních optimalizací na B1

Page 22: Principy překladačů

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í

Page 23: Principy překladačů

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ů