Ershovin numero

Ershov-lukuja käytetään koodin optimoinnissa lausekkeen käyttämien rekisterien määrän minimoimiseksi . Niitä voidaan käyttää rekisterioptimaalisissa menetelmissä, kun koodilohkossa on vain yksi lauseke. Kun lauseke E = E 1 -operaatio E 2 , niin tavoitteena on luoda koodi siten, että käytettävien rekisterien kokonaismäärä minimoidaan ja mikäli käytettävissä olevia rekistereitä ei ole riittävästi, tilapäisten määrä minimoidaan. muuttujia (eli muistin sanoja).

Tietyn lausekepuun solmun Ershov-luku n määritellään seuraavasti [1] :

  1. Kaikkien lehtien arvo on 1.
  2. Yhden lapsisolmun sisäisen solmun Ershov-numero on yhtä suuri kuin lapsisolmun luku.
  3. Ershov-solmun numero, jossa on kaksi lasta, on: a) suurin lapsisolmujen lukumäärästä, jos lapsisolmujen Ershov-luvut ovat erilaiset; b) lapsisolmun lukumäärä kasvaa yhdellä, jos lapsisolmujen Ershov-luvut ovat samat.

Ershov - solmun numero edustaa vähimmäismäärää rekistereitä, jotka tarvitaan suorittamaan osalauseke, jonka juuri on tämä solmu. Ajatuksena on ensin suorittaa lapsilauseke suuremmalla Ershov-luvulla, sitten toinen lapsilauseke ja sitten operaatio juurissa.

Esimerkki

Harkitse ilmaisua . Merkitään tämän lausekkeen puun solmut (katso oikealla oleva kuva) Ershov-lukuja vastaavilla nimiöillä. Meillä on '+'-operaatio juuressa, vasemman ja oikean alipuun otsikot ovat 2, joten juuren nimi on 3, joten lausekkeen toteuttamiseen tarvitaan 3 rekisteriä.

Jokainen viidestä lehdestä on merkitty "1" (ensimmäisen säännön mukaan). Säännön 3 mukaan alkion "b" solmut t1 ja t2 saavat tunnisteita, jotka ovat yhtä suuria kuin 2. Nyt solmulla t3 on lapsisolmuja, joilla on erilaiset tunnisteet, joten sille nimike on myös 2 (säännön 3 mukaan kohta "a"). Solmulla t4 on jälleen lapsia, joilla on samat tunnisteet, joten sen tunniste on yhtä suuri kuin 3 (sääntö 3, kohta "b").

Koodin luominen

Alla on rekursiivinen algoritmi konekoodin luomiseksi [2] . Algoritmilla on "kanta" rekistereille, eli rekistereitä käytetään solmulle, jonka Ershov-luku on k :

  1. Luodaksemme sisäisen solmun (ei lehden) konekoodin Ershov-luvulla k ja kahdella alisolmulla, joiden lukumäärä on yhtä suuri (yhtä kuin k-1 ), suoritamme:
    • Luomme koodin oikealle lapsisolmulle, jossa on kanta , tulos sijoitetaan rekisteriin ;
    • Luomme koodin vasemmalle kantasolmulle , jonka tulos sijoitetaan rekisteriin ;
    • Luo tiimi "Operaatio" ;
  2. Tarkastellaan solmua, jonka tunniste on k , ja alisolmuilla on erilaiset tunnisteet. Tässä tapauksessa yhdellä lapsisolmuista on nimike k ja toisessa jokin alempi tunniste m . Toimi tällaiselle solmulle seuraavasti:
    • Luomme koodin lapsisolmulle, jolla on suurempi Ershov-numero, käytä kantaa b , tulos sijoitetaan rekisteriin ;
    • Luomme koodin toiselle lapsisolmulle, käytä kantaa b , tulos sijoitetaan rekisteriin ;
    • Luomme komennon "Operation" tai "Operation" (riippuen siitä, missä solmu, jossa on suurempi määrä Ershovia, sijaitsee);
  3. Lehtisolmulle, jossa on operandi x , luomme Lataa-komennon .

Lausekkeen arviointi riittämättömällä määrällä rekistereitä

Jos lausekkeen juurisolmun Ershov-numero on suurempi kuin käytettävissä olevien rekisterien määrä, niin Ershov-lukua voidaan käyttää koodin luomiseen minimimäärällä latausta ja tallentamiseen toimintoja seuraavasti [3]

Sillä juuri tehdä

  1. Luomme koodin lapsisolmulle, jolla on suurempi Ershov-numero;
  2. Luomme komennon tallentaaksesi tuloksen muistiin;
  3. Luomme koodin lapsisolmulle, jolla on pienempi Ershov-numero;
  4. Luomme käskyn ladata tallennettu arvo rekisteriin;
  5. Luomme komennon, joka suorittaa toiminnon juurissa.

Katso myös

Muistiinpanot

  1. Aho, Lam, Seti, Ullman, 2008 , s. 689-692.
  2. Aho, Lam, Seti, Ullman, 2008 , s. 690.
  3. Aho, Lam, Seti, Ullman, 2008 , s. 692-693.

Kirjallisuus

Linkit