Eloisuusanalyysi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Eloisuusanalyysi.

Samankaltaiset tiedostot
TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 17. marraskuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

Muita rekisteriallokaatiomenetelmiä

Silmukkaoptimoinnista

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 7. joulukuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 26. lokakuuta 2009

Rekursiiviset tyypit

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 2. marraskuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja

PARITUS KAKSIJAKOISESSA

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

Ohjelmien analysointi. ER-kaaviot

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 26. tammikuuta 2012

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 6 (8 sivua) OT. 1. a) Määritä seuraavat summat:

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

Algoritmit 1. Luento 1 Ti Timo Männikkö

T : Max-flow / min-cut -ongelmat

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 16. toukokuuta 2011

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012

Muistinsiivous. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Muistinsiivous.

Polkuintegraali yleistyy helposti paloitain C 1 -poluille. Määritelmä Olkoot γ : [a, b] R m paloittain C 1 -polku välin [a, b] jaon

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Algoritmit 1. Luento 3 Ti Timo Männikkö

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Tietotekniikan valintakoe

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 6. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS. Pinoautomaatit.

Laskennan rajoja. Sisällys. Meta. Palataan torstaihin. Ratkeavuus. Meta. Universaalikoneet. Palataan torstaihin. Ratkeavuus.

Johdatus graafiteoriaan

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

1 Lukujen jaollisuudesta

isomeerejä yhteensä yhdeksän kappaletta.

Yksinkertaiset tyypit

6.4. Järjestyssuhteet

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 20. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS.

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

Dynaaminen ohjelmointi ja vaikutuskaaviot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m.

Tarkennamme geneeristä painamiskorotusalgoritmia

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Syntaksi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 22. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Syntaksi. Aluksi.

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

Department of Mathematics, Hypermedia Laboratory Tampere University of Technology. Roolit Verkostoissa: HITS. Idea.

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos:

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien

Attribuuttikieliopit

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009

Algoritmi on periaatteellisella tasolla seuraava:

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Kysymys: Voidaanko graafi piirtää tasoon niin, että sen viivat eivät risteä muualla kuin pisteiden kohdalla?

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku

1. Mitä tehdään ensiksi?

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

Johdatus graafiteoriaan

Algoritmit 1. Luento 9 Ti Timo Männikkö

Johdanto. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Johdanto. Luennoija.

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

10. Painotetut graafit

Eräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan.

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

811120P Diskreetit rakenteet

formalismeja TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 15. joulukuuta 2015 TIETOTEKNIIKAN LAITOS

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Diofantoksen yhtälön ratkaisut

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. marraskuuta 2015

Monipuolinen esimerkki

MS-A0402 Diskreetin matematiikan perusteet

TIES542 kevät 2009 Denotaatio

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Liittomatriisi. Liittomatriisi. Määritelmä 16 Olkoon A 2 M(n, n). Matriisin A liittomatriisi on cof A 2 M(n, n), missä. 1) i+j det A ij.

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

2017 = = = = = = 26 1

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

Algoritmit 2. Luento 11 Ti Timo Männikkö

Transkriptio:

TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. marraskuuta 2009

Sisällys

Sisällys

Seuraava deadline Vaihe E tiistai 1.12. klo 10 koodigenerointi (ilman rekisteriallokaatiota) Vaihe F maanantai 14.12. klo 10 rekisteriallokaatio

Kääntäjän rakenne lähdeohjelma SELAAJA sanasjono JÄSENTÄJÄ rakennepuu VÄLIKOODIN GENEROIJA välikoodi KOHDEKOODIN GENEROIJA kohdeohjelma TARKASTAJA SOKERINPILKKOJA OPTIMOIJA OPTIMOIJA

Rekisteriallokaatio Ideaalitilanteessa kaikki muuttujat ovat rekistereissä. Rekistereitä ei ole riittävästi. Tarvitaan vekotin, joka päättää, mitkä muuttujat ovat kulloinkin rekistereissä. olennainen käsitteellinen jako: lokaali (peruslohkojen sisäinen) globaali eli aliohjelmaa kokonaisuutena käsittelevä interproseduraalinen eli koko ohjelmaa kokonaisuutena käsittelevä Aiemmin esiteltiin yksinkertainen lokaali algoritmi. Nyt tarkoituksena puhua globaalista rekisteriallokaatiosta. Avuksi tarvitaan eloisuusanalyysiä, josta tänään.

Impressionistinen esimerkki syötteestä push rbp mov rbp, rsp ; ASSUME $f is in RDI ; ASSUME $a is in RSI ; REQUIRE $rv is in a register xor $rv, $rv cmp $a, 0 jna.l2 mov $rv, 1.L1: cmp $a, 0 jna.l2 ; REQUIRE $a is in RDI ; RELEASE RAX, RSI, RDX, RCX, R8, R9, R10, R11 call [$f] ; ASSUME RAX and RDX are taken ; REQUIRE $rv is in a register mul $rv ; ASSUME $rv is in RAX jump.l1.l2: ; REQUIRE $rv is in RAX leave ret

Sisällys

Peruslohkot engl. basic block voidaan etsiä niin välikielisestä kuin kohdekielisestä esityksestä Peruslohko on maksimaalinen ohjelman osa, jolle pätee seuraavaa: Siihen kuuluvat käskyt esiintyvät ohjelmassa peräkkäin. Siihen ei sisälly yhtään hyppykäskyä, paitsi mahdollisesti viimeisenä käskynä. Mistään ei hypätä sen keskelle. Määritelmästä seuraa mm. seuraavaa: Peruslohko vaihtuu aina hyppykäskyn jälkeen. Hyppykäskyn kohde aloittaa aina peruslohkon. Jokainen käsky kuuluu täsmälleen yhteen peruslohkoon.

Etsi peruslohkot push rbp mov rbp, rsp ; ASSUME $f is in RDI ; ASSUME $a is in RSI ; REQUIRE $rv is in a register xor $rv, $rv cmp $a, 0 jna.l2 mov $rv, 1.L1: cmp $a, 0 jna.l2 ; REQUIRE $a is in RDI ; RELEASE RAX, RSI, RDX, RCX, R8, R9, R10, R11 call [$f] ; ASSUME RAX and RDX are taken ; REQUIRE $rv is in a register mul $rv ; ASSUME $rv is in RAX jump.l1.l2: ; REQUIRE $rv is in RAX leave ret

engl. control flow graph suunnattu graafi, jossa solmuja ovat peruslohkot ja kaaret edustavat peruslohkojen välisiä hyppyjä mahdollista myös määritellä niin, että solmut ovat yksittäisiä käskyjä

Piirrä kontrollivuograafi push rbp mov rbp, rsp ; ASSUME $f is in RDI ; ASSUME $a is in RSI ; REQUIRE $rv is in a register xor $rv, $rv cmp $a, 0 jna.l2 mov $rv, 1.L1: cmp $a, 0 jna.l2 ; REQUIRE $a is in RDI ; RELEASE RAX, RSI, RDX, RCX, R8, R9, R10, R11 call [$f] ; ASSUME RAX and RDX are taken ; REQUIRE $rv is in a register mul $rv ; ASSUME $rv is in RAX jump.l1.l2: ; REQUIRE $rv is in RAX leave ret

Terminologiaa Solmulla on lähteviä kaaria (out-edges), tulevia kaaria (in-edges), seuraajasolmuja (successor nodes) ja edeltäjäsolmuja (predecessor nodes). Solmun n seuraajasolmujen joukko on succ(n) ja edeltäjäsolmujen joukko on pred(n).

Sisällys

engl. liveness analysis yksi tietovuoanalyysin (engl. data flow analysis) ilmentymä Muuttujalla tarkoitetaan tässä aliohjelman parametreja, muita paikallisia muuttujia sekä kääntäjän luomia väliaikaisia paikallisia muuttujia ei siis globaaleja muuttujia. Tarkastellaan kontrollivuograafia, jossa solmut ovat yksittäisiä käskyjä. mahdollista toki käyttää myös peruslohkoja peruslohkograafilla analyysi olisi nopeampaa mutta hieman sotkuisempaa

Muuttujan eloisuus Solmu käyttää muuttujaa, jos sen sisältämä käsky lukee muuttujan arvon. Solmu määrittelee muuttujan, jos sen sisältämä käsky kirjoittaa muuttujaan arvon. Muuttuja on elossa (engl. live) tietyssä kontrollivuograafin kaaressa, jos on olemassa suunnattu polku ko. kaaresta solmuun, joka käyttää kyseistä muuttujaa niin, etttä polulla ei ole kyseistä muuttujaa määrittelevää solmua. Muuttuja tulee elossa (engl. is live-in) solmuun, jos se on elossa jossain siihen tulevassa kaaressa. Muuttuja lähtee elossa (engl. is live-out) solmusta, jos se on elossa jossain siitä lähtevästä kaaresta.

Merkintöjä use(n) on solmun n käyttämien muuttujien joukko. def (n) on solmun n määrittelemien muuttujien joukko. in(n) on solmuun n elossa tulevien muuttujien joukko. out(n) on solmusta n elossa lähtevien muuttujien joukko.

Abstrakti analyysialgoritmi Syöte, jossa solmuja ovat käskyt, sekä kullekin solmulle use- ja def -joukot. Tulos Kullekin solmulle in- ja out-joukot. Algoritmi Tulokset ovat pienimmät in- ja out-joukot, joille pätee seuraavaa: Jos v use(n), niin v in(n). Jos v in(n), niin kaikilla n pred(n) pätee v out(n ). Jos v out(n) ja v def (n), niin v in(n).

Eloisuuden tietovuoyhtälöt Toisin sanoen: in(n) = use(n) (out(n) def (n)) out(n) = in(n ) n succ(n) Knasterin ja Tarskin lauseen 1 mukaan näillä joukkoyhtälöillä on vähintään yksi ratkaisu sekä yksikäsitteiset pienin ja suurin ratkaisu. 1 Alfred Tarski: A lattice-theoretical fixpoint theorem and its applications, Pacific Journal of Mathematics 5:2: 285-309, 1955.

Knasterin ja Tarskin lause 2 Olkoon meillä joukkoyhtälöryhmä X 1 = F 1 (X 1,..., X n ) X n = F n (X 1,..., X n ) Jos kullekin F i pätee, että se on aidosti monotoninen, eli jos väitteestä X j X j kaikilla j seuraa F i (X 1,..., X n ) F i (X 1,..., X n), niin yhtälöryhmällä on ainakin yksi ratkaisu, jos (X 1,..., X n ) ja (X 1,..., X n) ovat ratkaisuja, niin joko kaikilla i pätee X i X i tai kaikilla i pätee X i X i, on olemassa ratkaisu (X1,..., X n ) siten, että kaikilla ratkaisuilla (X 1,..., X n ) kaikille i pätee Xi X i, ja on olemassa ratkaisu (X1,..., X n ) siten, että kaikilla ratkaisuilla (X 1,..., X n ) kaikille i pätee X i Xi. 2 joukkoyhtälöryhmien tapauksesssa

Joukkoyhtälöryhmän ratkaiseminen Yleinen Knaster Tarskin täyttävien joukkoyhtälöryhmien ratkaisumenetelmä (pienimmän ratkaisun löytämiseksi) on ns. kiintopisteiteraatio: X1 = emptyset;... Xn = emptyset; do { X1 = X1;... Xn = Xn; X1 = F(X1,...,Xn );... Xn = F(X1,...Xn ); } while (X1!= X1... Xn!= Xn );

Konkreettinen algoritmi foreach n in(n) := out(n) := do foreach n in (n) := in(n) out (n) := out(n) in(n) := use(n) (out(n) def (n)) out(n) := in(n ) n succ(n) while n: in (n) = in(n) out (n) = out(n)

Tehokkuus pahin tapaus O(n 4 ), missä n on lauseiden määrä ohjelmassa solmut kannattaa käydä läpi mahdollisimman paljon kaarien vastaisessa järjestyksessä; tällöin yleensä o(n) ja O(n 2 ).

Kysymys Mistä on kyse, jos muuttuja tulee elossa aliohjelman ensimmäiseen käskyyn?

Sisällys

Seuraava deadline Vaihe E tiistai 1.12. klo 10 koodigenerointi (ilman rekisteriallokaatiota) Vaihe F maanantai 14.12. klo 10 rekisteriallokaatio