Fordítás Kódoptimalizálás

Hasonló dokumentumok
Fordítás Kódoptimalizálás

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Programok értelmezése

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Fordító Optimalizálás

Apple Swift kurzus 3. gyakorlat

Táblázatok fontosabb műveletei 1

BASH script programozás II. Vezérlési szerkezetek

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

84)Adott a következőképpen értelmezett f alprogram. Milyen értéket térit vissza f(1)? És f(100)? function f(x:integer):integer; begin

A digitális számítás elmélete

A félév során előkerülő témakörök

Algoritmizálás és adatmodellezés tanítása 1. előadás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Szoftver karbantartási lépések ellenőrzése

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Szélsőérték-számítás

Java programozási nyelv

Kiterjesztések sek szemantikája

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Bevezetés az informatikába

Algoritmizálás, adatmodellezés tanítása 6. előadás

Objektumorientált Programozás III.

Fordító Optimalizálás

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

Haladó DBMS ismeretek 1

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Dr. Oniga István DIGITÁLIS TECHNIKA 8

C programozási nyelv

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Matematika A1a Analízis

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Szkriptnyelvek. 1. UNIX shell

Bevezetés az informatikába

Erdélyi Magyar TudományEgyetem (EMTE

Programozási módszertan. Mohó algoritmusok

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

Fejlett programozási nyelvek C++ Iterátorok


S z á m í t ó g é p e s a l a p i s m e r e t e k

Maximum kiválasztás tömbben

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Funkcionális Nyelvek 2 (MSc)

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

1. Logikailag ekvivalens

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 3. előadás

Programozási alapismeretek 1. előadás

AWK programozás, minták, vezérlési szerkezetek

Algoritmizálás és adatmodellezés tanítása 3. előadás

Függvények int, long 1. Adott a mellékelt f alprogram.

Programozás és Digitális technika I. Pógár István eng.unideb.hu/pogari

2018, Diszkrét matematika

Informatika 1 2. el adás: Absztrakt számítógépek

A programozás alapjai

Adatszerkezetek 1. Dr. Iványi Péter

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Operációs Rendszerek II. labor. 2. alkalom

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

1. Jelölje meg az összes igaz állítást a következők közül!

Matematika (mesterképzés)

Mintavételes szabályozás mikrovezérlő segítségével

Dr. Schuster György február / 32

Algoritmizálás + kódolás C++ nyelven és Pascalban

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Programozási nyelvek 6. előadás

Assembly Utasítások, programok. Iványi Péter

Hardver leíró nyelvek (HDL)

Pénzügyi algoritmusok

AWK programozás, minták, vezérlési szerkezetek

Online algoritmusok. Algoritmusok és bonyolultságuk. Horváth Bálint március 30. Horváth Bálint Online algoritmusok március 30.

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Adatbányászati szemelvények MapReduce környezetben

Algoritmusok bonyolultsága

6. fejezet: Ciklusok

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Pere Balázs október 20.

1. ábra: Perifériára való írás idődiagramja

Szoftvertervezés és -fejlesztés I.

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Átírás:

Fordítás Kódoptimalizálás Kód visszafejtés. Izsó Tamás 2016. október 20. Izsó Tamás Fordítás Kódoptimalizálás / 1

Aktív változók Angol irodalomban a Live Variables kifejezést használják, míg az azt felhasználó elemzést Liveness Analysis-nek hívják. Az aktív változók ismeretében lehet a felesleges utasításokat megszüntetni. Egy változó a program egy pontján aktív, ha később az értéke felhasználásra kerül. Izsó Tamás Fordítás Kódoptimalizálás / 2

Példa aktív változóra Példa: [x:=2] 1 ; [y:=4] 2 ; [x:=1] 3 ; if [y>x] 4 do fi then [z:=y] 5 else [z:=y*y] 6 [x:=z] 7 ; Az 1-es címkéjű x változó nem aktív az első utasítás után (semelyik utasítás sem használja fel az értékét), ezért ez felesleges. Izsó Tamás Fordítás Kódoptimalizálás / 3

Aktív változók előállítása A feldolgozás az alapblokk végétől az eleje felé halad. A blokk végén lévő aktív változók halmazát az algoritmus alapján mi határozzuk meg. Amikor az a = b + c kifejezéshez érünk: az a változót ki kell venni; a b és c változókat be kell tenni az az aktív változók halmazába. Izsó Tamás Fordítás Kódoptimalizálás / 4

Aktív változó v=x+y; c=v+5; v=z+w Izsó Tamás Fordítás Kódoptimalizálás / 5

Aktív változó v=x+y; v változó definiálása c=v+5; v=z+w Izsó Tamás Fordítás Kódoptimalizálás / 5

Aktív változó v=x+y; v változó definiálása v változó használata c=v+5; v=z+w Izsó Tamás Fordítás Kódoptimalizálás / 5

Aktív változó v=x+y; v változó definiálása v változó használata v változó újradefiniálása c=v+5; v=z+w Izsó Tamás Fordítás Kódoptimalizálás / 5

Aktív változó v=x+y; v változó definiálása v változó használata v változó újradefiniálása v változó értéke felesleges c=v+5; v=z+w Izsó Tamás Fordítás Kódoptimalizálás / 5

Aktív változó globális analízise v változó aktív a p pontban start v változó nem aktív a p pontban start v változó aktív a p pontban start v=x+y; p v=x+y; p p a=v+5; v=x+5; v=v+5; end end end Izsó Tamás Fordítás Kódoptimalizálás / 6

Aktív változók előállítása c = a; e = d; f = e; Izsó Tamás Fordítás Kódoptimalizálás / 7

Aktív változók előállítása c = a; e = d; f = e; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 7

Aktív változók előállítása c = a; e = d; { b, d, e} f = e; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 7

Aktív változók előállítása c = a; e = d; { a, b, e} { b, d, e} f = e; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 7

Aktív változók előállítása c = a; { a, b, d } e = d; { a, b, e} { b, d, e} f = e; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 7

Aktív változók előállítása c = a; { a, b } { a, b, d } e = d; { a, b, e} { b, d, e} f = e; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 7

Aktív változók előállítása { a, b } c = a; { a, b } { a, b, d } e = d; { a, b, e} { b, d, e} f = e; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 7

Aktív változók előállítása { b } { a, b } c = a; { a, b } { a, b, d } e = d; { a, b, e} { b, d, e} f = e; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 7

Felesleges kód törlése { b } { a, b } c = a; { a, b } { a, b, d } e = d; { a, b, e} { b, d, e} f = e; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 8

Felesleges kód törlése { b } { a, b } c = a; { a, b } { a, b, d } e = d; { a, b, e} { b, d, e} f = e; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 8

Felesleges kód törlése { b } { a, b } c = a; { a, b } { a, b, d } e = d; { a, b, e} { b, d, e} {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 8

Felesleges kód törlése { b } { a, b } c = a; { a, b } { a, b, d } e = d; { a, b, e} { b, d, e} {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 8

Felesleges kód törlése { b } { a, b } { a, b } { a, b, d } e = d; { a, b, e} { b, d, e} {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 8

Felesleges kód törlése e = d; Izsó Tamás Fordítás Kódoptimalizálás / 8

Aktív változók előállítása II e = d; Izsó Tamás Fordítás Kódoptimalizálás / 9

Aktív változók előállítása II e = d; {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 9

Aktív változók előállítása II e = d; {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 9

Aktív változók előállítása II {a, b, d } e = d; {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 9

Aktív változók előállítása II {a, b } {a, b, d } e = d; {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 9

Aktív változók előállítása II { b } {a, b } {a, b, d } e = d; {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 9

Felesleges kód törlése { b } {a, b } {a, b, d } e = d; {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 10

Felesleges kód törlése { b } {a, b } {a, b, d } e = d; {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 10

Felesleges kód törlése { b } {a, b } {a, b, d } {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 10

Felesleges kód törlése Izsó Tamás Fordítás Kódoptimalizálás / 10

Aktív változók előállítása III Izsó Tamás Fordítás Kódoptimalizálás / 11

Aktív változók előállítása III {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 11

Aktív változók előállítása III {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 11

Aktív változók előállítása III {a, b } {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 11

Aktív változók előállítása III { b } {a, b } {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 11

Felesleges kód törlése { b } {a, b } {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 12

Felesleges kód törlése { b } {a, b } {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 12

Felesleges kód törlése { b } {a, b } {a, b } {b, d } Izsó Tamás Fordítás Kódoptimalizálás / 12

Felesleges kód törlése Izsó Tamás Fordítás Kódoptimalizálás / 12

Aktív változók előállításának a formalizálása In n = n Kill n ) Gen n (Out { Out n = BI n az utolsó blokk végén. x succ(n) In x máskülönben. A kimenet van összehuzalozva az n után következő bemenetek uniójával. -ból következik, hogy az inicializálás az üres halmazzal történik, kivéve a kezdő állapotot. Out n alapján számítjuk az In n -t, tehát a számítás visszafele halad. Izsó Tamás Fordítás Kódoptimalizálás / 13

Reaching Definition analízis Az analízis megadja, hogy a program egy adott pontján az x változó hol kapott értéket. Elágazások és ciklusok miatt több ponton is definiálva 1 lehet. RD entry (p) = { RDinit kezdetben. p pred(p) RD exit (p ) máskülönben. RD exit (p) = (RD entry (p)\kill RD (p)) Gen RD (p) 1 Itt a definíciót bővebb értelemben használjuk. Minden pont, ahol egy változó értéket kap definíciós pontnak hívjuk. Izsó Tamás Fordítás Kódoptimalizálás / 14

Reaching Definition jelölések Ha az x változót a p pontban definiálva van, akkor ezt a tényt a (x, p) párral fejezzük ki. Az RD entry (p) és az RD exit (p) ezeknek a pároknak a halmazát tartalmazza. Inicializálás RD init = {(x,?) x programváltozó.} A kérdőjel azt jelenti, hogy még nem lett inicializálva a változó. Izsó Tamás Fordítás Kódoptimalizálás / 15

Példa Reaching Definition-ra [ x := 5] 1 ; [ y := 1] 2 ; while [ x > 1] 3 do [ y := x y ] 4 ; [ x := x 1] 5 od RD entry(1) = {(x,?), (y,?)} RD entry(2) = RD exit (1) RD entry(3) = RD exit (2) RD exit (5) RD entry(4) = RD exit (3) RD entry(5) = RD exit (4) RD exit (1) = (RD entry(1)\{(x,?), (x, 1), (x, 5)}) (x, 1) RD exit (2) = (RD entry(2)\{(y,?), (y, 2), (y, 4)}) (y, 2) RD exit (3) = RD entry(3) RD exit (4) = (RD entry(4)\{(y,?), (y, 2), (y, 4)}) (y, 4) RD exit (5) = (RD entry(5)\{(x,?), (x, 1), (x, 5)}) (x, 1) Izsó Tamás Fordítás Kódoptimalizálás / 16

RD végeredmény RD entry RD exit 1 {(x,?),(y,?)} {(x,1),(y,?)} 2 {(x,1),(y,?)} {(x,1),(y,2)} 3 {(x,1),(y,2),(y,4),(x,5)} {(x,1),(y,2),(y,4),(x,5)} 4 {(x,1),(y,2),(y,4),(x,5)} {(x,1),(y,4),(x,5)} 5 {(x,1),(y,4),(x,5)} {(y,4),(y,5)} Izsó Tamás Fordítás Kódoptimalizálás / 17

Konstans kiértékelés fordítási időben I RD [x := a] l [x := a[y n]] l y FV (a) (y,?) / RD entry (l) ha (y, l ) RD entry (l) y = y [...] l = [y := n] l RD [x := a] l [x := n] l { FV (a) = a nem konstans ha a kifejezés értéke n Megj: FV (a) megadja, hogy az a aritmetikai kifejezés tartalmaz-e szabad változót. Izsó Tamás Fordítás Kódoptimalizálás / 18

Konstans kiértékelés fordítási időben II RD S 1 S 1 RD S 1 ; S 2 S 1 ; S 2 RD S 2 S 2 RD S 1 ; S 2 S 1 ; S 2 RD S 1 S 1 RD if[b l ] then S 1 else S 2 if[b l ] then S 1 else S 2 RD S 2 S 2 RD if[b l ] then S 1 else S 2 if[b l ] then S 1 else S 2 RD S S RD while[b l ] do S while[b l ] do S Izsó Tamás Fordítás Kódoptimalizálás / 19

Konstans kiértékelés példa I. Program: [ x :=10] 1 ; [ y := x +10] 2 ; [ z := y +10] 3 ; RD analízis eredménye: RD entry (1) = {(x,?), (y,?), (z,?)} RD exit (1) = {(x, 1), (y,?), (z,?)} RD entry (2) = {(x, 1), (y,?), (z,?)} RD exit (2) = {(x, 1), (y, 2), (z,?)} RD entry (3) = {(x, 1), (y, 2), (z,?)} RD exit (2) = {(x, 1), (y, 2), (z, 3)} Izsó Tamás Fordítás Kódoptimalizálás / 20

Konstans kiértékelés példa II. RD [x := 10] 1 ; [y := x + 10] 2 ; [z := y + 10] 3 ; [x := 10] 1 ; [y := 10 + 10] 2 ; [z := y + 10] 3 ; [x := 10] 1 ; [y := 20] 2 ; [z := y + 10] 3 ; [x := 10] 1 ; [y := 20] 2 ; [z := 20 + 10] 3 ; [x := 10] 1 ; [y := 20] 2 ; [z := 30] 3 ; Izsó Tamás Fordítás Kódoptimalizálás / 21

Konstans kiértékelés példa II. Visual Studio C eredménye 1 int funcion() { 2 int x,y,z; 3 x=1; 4 y=100*x; 5 z=100*y-y; 6 while( x < 4 ) { 7 z = z +y; 8 y = 2*x; 9 x++; 10 } 11 return z; 12 } Lefordított kód: _funcion : 00000000: mov eax,2710h 00000005: r e t Izsó Tamás Fordítás Kódoptimalizálás / 22

Adatfolyam analízis algoritmusok Az adatfolyam algoritmus előre halad, ha 1 a kimenetet out() számoljuk ki az alapblokkba bemenő in() értékek alapján 2 a bemenet az előző alapblokkok kimenetének a kombinációja Az adatfolyam algoritmus visszafele halad, ha 1 a bemenetet in() számoljuk ki az alapblokk kimenetelén lévő out() értékek alapján 2 a kimenet a következő alapblokkok bemenetének a kombinációja A következő táblázat a lehetséges adatfolyam algoritmusokat ábrázolja: Előre haladó Visszafele haladó Legalább Out(B i ) = Gen(B i ) (In(B i ) Kill(B i )) In(B i ) = Gen(B i ) (Out(B i ) Kill(B i )) egy úton In(B i ) = p Pred(B i ) Out(p) Out(B i ) = s Succ(B i ) In(s) Minden Out(B i ) = Gen(B i ) (In(B i ) Kill(B i )) In(B i ) = Gen(B i ) (Out(B i ) Kill(B i )) egy úton In(B i ) = p Pred(B i ) Out(p) Out(B i ) = s Succ(B i ) In(s) Izsó Tamás Fordítás Kódoptimalizálás / 23

Változó definíció-használat lánc Definíció: definíció-használat láncolat (du-chain) megadja, hogy a program egy pontján definiált változó, regiszter vagy feltétel kód értékére a programban található utasítások közül kik hivatkoznak. Definíció: használat-definíció láncolat (ud-chain) megadja, hogy a program egy pontján hivatkozott (használt) változó, regiszter vagy feltétel kód a programban hol kaphattak értéket. Izsó Tamás Fordítás Kódoptimalizálás / 24

u-d chain analízis Az u-d chain analízis megadja, hogy a program l címén az elérhető definíciós pontok analízis (Reaching definition analysis) szerint az l címke alatt definiált x változó értékét használjuk. UD entry (x, l) = { l (x, l ) RD entry (l) ha x gen LV (B l ) máskülönben. Izsó Tamás Fordítás Kódoptimalizálás / 25

Példa u-d és d-u láncra [ x := 0] 1 ; [ x := 3] 2 ; i f [ z = x ] 3 then [ z := 0] 4 ; else [ z := x ] 5 [ y := x ] 6 ; [ x := y+z ] 7 ; ud(χ, l) x y z 1 2 3 {2} {?} 4 5 {2} 6 {2} 7 {6} {4, 5} du(χ, l) x y z 1 2 {3, 5, 6} 3 4 {7} 5 {7} 6 {7} 7? {3} Izsó Tamás Fordítás Kódoptimalizálás / 26