registrite allokeeriminekodu.ut.ee/~varmo/tm2006/slides/tm-reg.pdf · 2006. 11. 27. · registrite...

35

Upload: others

Post on 23-Jan-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

Page 2: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

ÜlevaadeMuutujate väärtusi võib hoida põhimälus või registrites.

� Mällu kirjutamine ja mälust lugemine on registritega

võrreldes väga aeglane (umbes kaks suurusjärku).

� Registrite arv on rangelt piiratud (mõni kuni

mõnikümmend).

Registrite allokeerimise eesmärk on vähendada

mälupöördumiste arvu hoides võimalikult paljude

muutujate väärtusi registrites.

� Otsustab milliseid väärtusi hoida registrites ja milliseid

mälus.

� Määrab registrites hoitavatele väärtustele konkreetsed

registrid.

Page 3: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

PõhitähelepanekudTavaliselt on registreid vähem kui muutujaid.

Samaaegselt elusolevad muutujad ei saa paikneda samas

registris (muutujad interfereeruvad).

Küll aga võivad muutujad mille eluajad ei kattu paikneda

samas registris.

Vastavaid kitsendusi saab esitada graa�na:

� tipud = muutujad;

� kaared = samaaegselt elus olevate muutujate vahel;

� nn. interferentsigraaf.

Registrite määramine on selle graa� k värviga värvimise

probleem (Lavrov 1962, Chaitin 1981)

� k = registrite arv.

Page 4: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

{a}b = a + 2

{a,b}c = b * b

{a,c}b = c + 1

{a,b}return b*a

Code Live sets

a b c

Live ranges

a

b c

Interference graph

Page 5: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

{a}b = a + 2

{a,b}c = b * b

{a,c}b = c + 1

{a,b}return b*a

Code Live sets

a b c

Live ranges

a

b c

Interference graph

Page 6: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

{a}b = a + 2

{a,b}c = b * b

{a,c}b = c + 1

{a,b}return b*a

Code Live sets

a b c

Live ranges

a

b c

Interference graph

= Register 1 (R1)

= Register 2 (R2)

R2 = R1 + 2

R2 = R2 * R2

R2 = R2 + 1

return R2*R1

Page 7: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

Graa� konstrueerimineInterferentsigraa� konstrueerimiseks tuleb leida muutujate

elususpiirkonad.

Baasploki piires registrite allokeerimisel on

elususpiirkonnad lineaarsed.

4 Nii elususpiirkondade leidmine kui kattumise

kontrollimine väga lihtne.

8 Baasploki alguses tuleb muutujad registritesse lugeda

ning lõpus mällu salvestada.

Globaalsel registrite allokeerimisel moodustavad

elususpiirkonnad võrgu (web).

8 Elususpiirkondade leidmine keerulisem.

4 Võimaldab efektiivsemat registrite kasutust.

Page 8: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

Page 9: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

Page 10: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

Page 11: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

Page 12: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

Page 13: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

Page 14: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

Page 15: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Registrite allokeerimine

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

s1

s2

s3

s4

Võrgud s1 ja s2 kattuvad

Võrgud s1 ja s4 kattuvad

use x

use y

def x

def y

use x

def x

use x

def xuse y

def y

Page 16: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Graa� värvimine

De�nitsioonidGraa� värvimiseks nimetatakse tema tippude

märgendamist arvudega selliselt, et ükski tipp ei omaks

ühegi oma naabriga sama märgendit.

Graa� mis on värvitav k värviga nimetatakse k-aluseliseks.

PõhiküsimusedKuidas efektiivselt leida graa� k-värvimine?

Kas ja kuidas leida optimaalset (so. minimaalse värvide

arvuga) värvimist?

Mida teha, kui graa� värvimiseks pole piisavalt värve (so.

registreid)?

Page 17: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Graa� värvimine

ProbleemGraa� värvimise ülesanne on NP-täielik.

TähelepanekudOptimaalne algoritm töötab kõigil graa�del.

� Halvima juhtumi graa� praktikas ei esine.

Leiab alati minimaalse värvimise.

� Tihti piisab ligikaudsest heuristilisest värvimisest.

Page 18: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Graa� värvimine

ProbleemMida teha kui graaf pole k-aluseline?

So. pole piisaval arvul registreid.

Juhtub väga sageli.

PillamineValime muutuja ning hoiame teda registri asemel

põhimälus (so. magasinis).

� Seda protsessi nimetatakse pillamiseks (spilling).

Muutuja kasutuskohtadesse genereerime ekstra koodi tema

mälust ajutisse registrisse lugemiseks ja mällu

kirjutamiseks.

Page 19: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Graa� värvimine

IdeeValime graa�s tipu mille järk on väiksem kui k.

� See tipp on k-värvitav!

Eemaldame selle tipu (ja kõik temaga seotud servad)

graa�st.

� Kõigi naabertippude järk väheneb ühe võrra.

� Võib tekkida juurde uusi tippe mille järk on k-st

väiksem.

Kui kõik tipud on vähemalt k naabriga, siis valime tipu

mille pillame mällu ja jätkame.

Page 20: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Graa� värvimine

Chaitini algoritm1 Kuni leidub tippe mille järk on väiksem kui k:

� valime ühe sellise tipu ja paneme ta magasini;

� kustutame selle tipu ja temaga seotud servad graa�st.

2 Kui graaf on mittetühi (ja kõigi tippude järk on vähemalt

k), siis:

� valime tipu (kasutades mingit heuristikat) ja pillame ta

mällu;

� kustutame selle tipu ja temaga seotud servad graa�st;

� kui selle tulemusena tekkis tippe mille järk on k-st

väiksem, siis lähme sammule 1;

� vastasel korral jätkame sammuga 2.

3 Võtame üksteise järel magasinist tippe ja värvime nad

vähima värviga, mis erineb juba värvitud naabertippude

värvidest.

Page 21: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

1

2

3

4 5

Page 22: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

2

3

4 5

1

Page 23: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

3

4 5

12

Page 24: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

3

5

12

4

Page 25: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

5

12

43

Page 26: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack Colors

12

43

5

Page 27: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

5

Colors

12

43

Page 28: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

3

5

Colors

12

4

Page 29: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

3

4 5

Colors

12

Page 30: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

2

3

4 5

Colors

1

Page 31: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Chaitini algoritm

Näide:

Stack

1

2

3

4 5

Colors

Page 32: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Graa� värvimine

Optimistlik värvimine (Briggs et al)

Kui kõik tipud on järguga vähemalt k, siis mitte ei pilla

tippe mällu vaid paneme mingi prioriteedi alusel magasini.

� Magasinist tippe võttes võivad nad kõik olla ikkagi

värvitavad!

Näide alljärgnev graaf on 2-värvitav:

1

2

3

4

Page 33: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Graa� värvimine

Optimistlik värvimine (Briggs et al)

Kui kõik tipud on järguga vähemalt k, siis mitte ei pilla

tippe mällu vaid paneme mingi prioriteedi alusel magasini.

� Magasinist tippe võttes võivad nad kõik olla ikkagi

värvitavad!

Näide alljärgnev graaf on 2-värvitav:

1

2

3

4

Page 34: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Graa� värvimine

Chaitin-Briggs'i algoritm1 Kuni leidub tippe mille järk on väiksem kui k:

� valime ühe sellise tipu ja paneme ta magasini;

� kustutame selle tipu ja temaga seotud servad graa�st.

2 Kui graaf on mittetühi (ja kõigi tippude järk on vähemalt

k), siis:

� valime tipu, paneme ta magasini ning kustutame ta

(koos servadega) graa�st;

� kui selle tulemusena tekkis tippe mille järk on k-st

väiksem, siis lähme sammule 1;

� vastasel korral jätkame sammuga 2.

3 Võtame üksteise järel magasinist tippe ja värvime nad

vähima vaba värviga.

� Kui tippu ei õnnestu värvida, siis valime värvimata tipu,

pillame ta mällu ja alustame sammult 1.

Page 35: Registrite allokeeriminekodu.ut.ee/~varmo/TM2006/slides/tm-reg.pdf · 2006. 11. 27. · Registrite allokeerimine Ülevaade Muutujate äärtusiv võib hoida põhimälus või registrites

Graa� värvimine

PillamisheuristikadPillamiseks tipu valimine on efektiivsuse kohalt kriitilise

tähtsusega.

Chaitini heuristika:

� minimiseerida pillamiskao cost ja tipu hetkejärgu degree

jagatise costdegree

väärtust;

� so. valime pillamiseks võimalikult �odava� tipu, mis

samas vähendab võimalikult paljude tippude järku.

Alternatiivseid meetrikaid: cost

degree2, cost , pillamiste arv.

Variatsioonid:

� interferentsipiirkonna pillamine;

� elususpiirkondade tükeldamine;

� rematerialiseerimine.