integrisano razvojno okruŽenje – v deo poglavlje 5 - v deo... · okruŽenje – v deo kompaktor....
TRANSCRIPT
1
INTEGRISANO RAZVOJNO OKRUŽENJE – V DEO
Kompaktor
2
Definicija, ulaz i izlaz KompaktoraDef.: Kompaktor je uslužni program za mašinski zavisnu optimizaciju.Ulaz: memorijska struktura, koju formira povezivač nakon svog prvog prolaza.Izlaz: kompaktovana memorijska predstava povezanog programa, nad kojom nastavlja rad drugi prolaz povezivača.
3
Kompaktovanje = optimizacija povezanog programa
Ulaz u kompaktor je program povezan na slimboličkom nivou, koji se dobija učitavanjem labela, promenljivih i mašinskog koda svih objektnih datoteka u memoriju.Reference u instrukcijama, na podatke i druge instrukcije, su i dalje simboličke, odnosno preko labela, zato da bi se izbeglo preračunavanje adresa tokom kompaktovanja koda, koje se svodi na preuređivanje koda (npr. promena redosleda instrukcija).
Linker,I prolaz Kompaktor Linker,
II prolaz
4
Funkcija KompaktoraOsnovni zadatak kompaktora je daminimizira broj mašinskih instrukcija, tako što iterativno menja kod i uklanja nepotrebne mašinske instrukcije (pre svega NOP).Povoljna posledica ove minimizacije je ubrzanje izvršenja programa, što inačenije primarni cilj.
5
Komponente Kompaktora
niz tehnika kompaktovanja koda, nižeg i višeg nivoa
model programa model procesora
6
Program, Kontekst, Trajektorija,Značenje (funkcionalnost)
Program: niz instrukcija, čiji objekti su resursi procesora (registri, U-I prolazi, i memorijske lokacije). Kontekst: skup sadržaja objekata.Trajektorija: niz konteksta C0, C1, ... , Ci koji je posledica izvršenja niza instrukcija.Značenje: niz spoljnih rezultata (podataka i akcija), tkzv. izlaza, koji su proizvedeni izvršenjem programa.
7
Osnovni zahtev:očuvati semantiku programa!
Osnovni zahtev koji kompaktor mora da zadovolji je da u cilju optimizacije sme da menja program, tj. njegove tragove i trajaktoriju, ali nesme da promeni njegovo orginalno značenje (njegovu funkcionalnost).
8
Programski segment(basic block)
Linearni programski segment ili osnovni blok programa je niz instrukcija koji započinje labelom a završava se instrukcijom grananja.Svaki asemblerski program se može razložiti na skup programskih segmenata.
9
Kompaktor, faza analize
U fazi analize, kompaktor na osnovu polaznog asemblerskog koda, koji treba kompaktovati, i ugrađenog modela procesora (koji je dat u obliku modela njegovih mašinskih instrukcija), formira model polaznog programa.
PolazniProgram
Kompaktor,analiza
ModelProcesora
ModelPrograma
10
Model polaznog programa
Model se sastoji od skupa instanci klasa instrukcija (izvedenih iz osnovne klase CInstruction), koji je sortiran po tkzv. tački izvršenja, nekoliko kolekcija labela (programske labele, labele podataka, simboličke konstante i labele skokova), kao i jedne liste objekata programskih segmenata (instance klase CProgramSegment).
Kompaktor Segmenti
Instrukcije Tabele Simbola
11
Ugrađeni model procesora MASxSkup klasa izvedenih iz CInstruction.Za rad kompaktora ključna su dva atributa osnovne klase, i to:a) tačka izvršenja instrukcije (m_ExecutionPoint), tj. njena adresa ib) niz objekata klase CObject, koje instrukcija koristi na neki način (m_Objects[]).
12
CLOAD_HIGHER_PART_OF_ACCU_IMMEDIATELY_WITH_10_BIT_VALUE CSTORE_ACCUMULATOR_TO_REGISTER_WITH_SHIFT
CLOAD_REGISTER_WITH_MEMORY
CSTORE_ACCUMULATOR_WITH_SHIFT
CLOAD_LOWER_PART_OF_ACCU_IMMEDIATELY_WITH_10_BIT_VALUE
CLOAD_ACCUMULATOR_WITH_REGISTER
CDIRECT_HARDWARE_LOOP
CINDIRECT_HARDWARE_LOOP
CDIRECT_JUMP
CDIRECT_VECTOR_REPEAT
CINDIRECT_VECTOR_REPEAT
CDC_33333_DIRECTIVE
CMOVE_MEMORY_ACC
CNOP
CTASK
CRESET_LATCHED_FLAGS
CHALT
m_ExecutionPoint: int m_LineNumber: int m_FileName: char* m_InsideSkipZone: int m_InsideJumpZone: int m_InsideHardLoop: int m_InsideHaltZone: int m_Droppable: int m_Skippable: int m_Swappable: int m_NumberOfObjects: unsigned charm_Comment: char*
CMOVE_MEMORY_TO_MEMORY_VIA_ACCUMULATOR
CInstruction
CCONTINUE_HARDWARE_LOOP
CBREAK_HARDWARE_LOOP
CJUMP_VIA_SCHEDULER
CINDIRECT_JUMP
CCONDITIONAL_SKIP
CMAC_GROUP_WITH_D1_STORE_AND_D0_D1_FEEDBACK
CMAC_GROUP_WITH_D1_FEEDBACK
CMAC_GROUP_WITH_D0_FEEDBACK
CMAC_GROUP_WITH_D0_STORE_AND_D0_D1_FEEDBACK CMAC_GROUP_WITH_D0_STORE_AND_D0_FEEDBACK
CMAC_GROUP_WITH_D1_STORE_AND_D1_FEEDBACK
CMAC_GROUP_WITH_D0_D1_FEEDBACK
CMAC_GROUP_WITH_DIRECT_ACCESS_TO_BOTH_DATA_AREAS
CMAC_GROUP
CCONDITIONAL_GROUP
CALU_GROUP
CALU_GROUP_WITH_D0_FEEDBACK_AND_IMMEDIATE_D1_INPUT
CALU_GROUP_WITH_DIRECT_FEEDBACK_TO_D1_INPUT
CALU_GROUP_WITH_INDEXSED_ADDRESSING
CALU_GROUP_WITH_TWO_REGISTERS_FEEDBACKS
GET_LOW_BITS_OF_MULTIPLICATION_IN_PREVIOUS_INSTRUCTION
13
Model resursa – Klasa CObject
Ključni atributi objekta su: faza protočne obrade (m_PipelineStage) u kojoj se
objekat koristi, način korišćenja objekta: čitanje ili upis (m_Action), i tip objekta: akumulator, registar, itd.
(m_ObjectType).
CObjectType CAction
CPipelineStage
CObject m_index : int = (-1)
11
1 11 1
14
Model toka upravljanja(control flow model)
Tok upravljanja se modelira pomoću sledeće tri klase: Osnovni segment, CBasicProgramSegment Segment, CProgramSegment Virtuelni segment, CVirtualProgramSegment
15
Dijagram klasa za modeliranje toka upravljanja
1
(list<pair<multiset<CobjectUser, ClessObjectUser>>)
(list<CUsageZone*>) (set<CObject,less<CObject>>)
CVirtualProgramSegment
(list<CVirtualProgramSegment*>)(list<CVirtualProgramSegment*>)
CProgramSegment
CVectorSegment CHardLoopSegment
(pair<list<CInstruction*>,int>)
CBasicProgramSegment m_StartAddress : int = (startAddress) m_EndAddress : int = (endAddress)
1
1
m_ObjectUsers
1
8 m_UsageZones
1
1m_UsedObjects
1 1
1 1
m_IncomingPath
m_OutgoingPath
1m_PreviousSegments
1
1
m_VirtualProgramSegments1
1
1
m_RepeatedInstructions
(list<CInstruction*>)
1
m_NextSegments
16
Osnovni programski segmentModelira jedan izolovan programski segment.Njegovi atributi, sa stanovišta toka upravljanja, su početna adresa segmenta mStartAddress i završna adresa segmenta mEndAddress.
17
Programski segmentModelira programski segment kao
sastavni deo programa.Osnovna klasa se proširuje sa tri atributa: lista prethodnih programskih segementa
mPreviousSegments, lista narednih segmenata mNextSegments, i lista virtuelnih programskih segmenata
mVirtualProgramSegments.
18
Virtuelni programski segmentVirtuelni programski segment je nelinearni segment (sadrži i instrukcije skoka) koji obuhvata posmatrani linearni programski segment.Virtuelni segment je deo traga, koji čine segment predak i onoliko asemblerskih instrukcija pre i posle segmenta predak koliko faza postoji u protočnoj obradi (to se naziva “dubina” protočne obrade).
19
Segment i Virtuelni segmenti
Programski segment
Dolazne putanje Odlazne putanje
Jedan mogući virtuelniprogramski segment
20
Prostor Objekti-Vreme(objects-time space)
Model programa iz jednodimenzionalnog adresnog prostora se transformiše u model u višedimenzionalnom prostoru objekti-vreme.U tom prostoru su pojedine dimenzije vremenski redosledi korišćenja pojedinih objekata.
21
Model programa uprostoru objekti-vreme
Model se konstruiše pomoću dva atributa osnovne klase programskog segmenta CBasicProgramSegment: skup objekata korišćenih od strane
instrukcija u segmentu m_UsedObjects i skup korisnika objekata m_ObjectUsers
predstavljenih instancama klase CObjectUser, koji ustvari predstavlja jedanprogramski segment u prostoru objekti-vreme.
22
Klase CInstruction, CObjectUser i CAction
CObjectUser m_ExecutionPoint : int = (-1)m_AccessPoint : int = (-1) m_ObjectIndex : int = (-1)
CInstruction
CAction
1
1
1
0..1
23
Adresni i prostor objekti-vreme
Jedna moguća dolazna putanja (120) 30
LAB1
ZR0 (G0P20) = YC0
Telo programskog segment pretka
(031) 31 CC0 = AC0 + AC3
Korisnici objekta
(032) 32 NOP
31R
34R
36R
36W
41W
C0
LAB2
Granice segmenta
(192) 33 PC0 = AC0 * Z10 (193) 34 NOP(194) 35 NOP
Jedna moguća odlazna putanja
realnaadresa
"logička"adresa
Uređeno po vremenu pristupa
24
Faza sinteze = Kompaktovanje
Faza sinteze, odnosno kompaktovanja, u kojoj se polazni program bolje prilagođava protočnoj obradi, tako što se međusobno nezavisni zadaci “učešljavaju” (interleave).
ModelPrograma
Kompaktor,sinteza
ModelProcesora
KompaktanProgram
25
Zadaci sa podelom vremena izadaci sa podelom resursa
U slučaju zadataka sa podelom vremena potrebno je smenjivati njihov kontekst (context switching).U slučaju zadataka sa podelom resursa nema potrebe za deljenjem vremena, tj. smenom konteksta.Učešljavanjem takvih zadataka može se dobiti visoko optimizovan kod.
26
Učešljavanje instrukcija(eng. interleaving)zadatak A:A1, NOP, A2, NOP ... , NOP, Anzadatak B:B1, NOP, B2, NOP... , NOP, Bn
zadatak A+B: A1, NOP, A2, NOP ... , NOP, An, B1, NOP, B2, NOP... , NOP, Bn
zadatak A||B: A1, B1, A2, B2, ... , An, Bn
27
Zadatak KompaktoraPred kompaktor se ustvari postavlja opšti zadatak da bilo koji niz instrukcija:
... Ii ... NOP ... Ij ... NOP ... Ik ... NOPkompaktuje tako što će pronaći minimalan
niz instrukcija ekvivalentnog značenja.Problem kompaktovanja koda je širi od problema učešljavanja, pošto je dozvoljeno korišćenje bilo kojih instrukcija.
28
Tehnike kompaktovanja kodaKompaktor imitira praksu ručnog pisanja koda skupom tehnika koje su hijerarhijski organizovane u dva nivoa: tehnike nižeg nivoa rade na mikro nivou, tj.
nad jednom instrukcijom ili nad parom instrukcija
tehnike višeg nivoa koje rade na marko nivou, tj. nad segmentima odnosno grupama instrukcija.
29
Tehnike nižeg nivoaZAMENI redosled zadate instrukcije sa zadatim NOP, na postojećim adresama, unutar segmenta,IZBACI zadati NOP,ZAMENI-PREDHODNI: zameni redosled zadate instrukcije segmenta predak sa zadatim NOP iz predhodnog segmenta,ZAMENI-NAREDNI: zameni redosled zadate instrukcije segmenta predak sa zadatim NOP iz narednog segmenta, iPREIMENUJ resurs (akumulator) sa korišćenog imena na slobodno,MUTIRAJ instrukciju.
30
Tehnike višeg nivoaTRAŽI-UNAPRED,TRAŽI-UNAZAD,KOMPAKTUJ-SA-PREDHODNIM, iKOMPAKTUJ-SA-NAREDNIM.
31
ZAMENI instrukciju i NOP
Ova tehnika pokušava da zameni redosled zadate instrukcije i zadatog NOP u istom segmentu, a da ne promeni značenje programa (pri tom se konsultuje model programa u prostoru objekti-vreme).
CC0 = AC0 + AC3...NOP
NOP...CC0 = AC0 + AC3
32
IZBACI zadati NOP
Ona pokušava da IZBACI zadati NOP iz programa, a da ne promeni značenje prorama. Uklanjanje NOP instrukcije iz niza instrukcija, dovodi do približavanja instrukcija koje slede NOP, instrukcijama koje ga prethode.
CC0 = AC0 + AC3...NOPCC1 = AC0 – AC2...
33
TRAŽI-UNAPRED
Ova tehnika višeg nivoa koristi primitive ZAMENI i IZBACI. Polazi od početka programskog segmenta i u smeru njegovog izvršenja (unapred) traži NOP instrukciju.
CC0 = AC0 + AC3...NOP
NOP...CC0 = AC0 + AC3
ZAMENI IZBACI
34
TRAŽI-UNAZAD
Polazi od kraja programskog segmenta i u smeru prema početku (unazad) traži NOP instrukciju.
NOP...CC0 = AC0 + AC3
CC0 = AC0 + AC3...NOP
ZAMENI IZBACI
35
ZAMENI-PREDHODNI
Slična tehnici ZAMENI, uz dve bitne razlike: (a) kontekst je: segment-pretci i (b) u svakom pretku se zamenjuje po jedan NOP.
1 2
3
NOP instrukcija
korisna instrukcija
36
Pažnja: bez promene semantike!
Ilustracija uticaja korisne instrukcije na segment koji je alternativan segmentu predak.
2
1
3
37
ZAMENI-NAREDNI
Ilustracija operacije ZAMENI-NAREDNI: korisna instrukcija iz segmenta 1 zamenjuje NOP instrukcije iz segmenata 2 i 3.
2 3
1
38
KOMPAKTUJ-SA-PREDHODNIM
Ova tehnika višeg nivoa koristi primitive ZAMENI-PREDHODNI i IZBACI.
1 2
3
NOP instrukcija
korisna instrukcija
PROBAJ DA IZBACIŠ NOP!
39
KOMPAKTUJ-SA-NAREDNIM
Ova tehnika višeg nivoa koristi primitive ZAMENI-NAREDNI i IZBACI.
2 3
1PROBAJ DA IZBACIŠ NOP!
40
PREIMENUJ resurs (renaming)Zameni resurs u instrukciji slobodnim resursom istog tipa.Pokazuje se da ova tehnika, kad se kombinuje sa ZAMENI i IZBACI, stvara prilike za dodatno kompaktovanje koda.
41
Blok instrukcija u komse koristi isti resurs
Započinje instrukcijom punjenja akumulatora A1, a završava se instrukcijom koja predhodi narednoj instrukciji punjenja akumulatora A1
A1 X
X1 A1
Xn A1
. . .
. . .
A1 y
i
A1
42
Kompaktovanjeili Tetris?
A 1
6
5
4
3
2
1
6
1
4 2
3
5
A 2 A 3
BLOKOVI KODA SE RASPOREĐUJU NA PRVI SLOBODAN RESURS!
KORISTI SE “POHLEPAN” (GREEDY) ALGORITAM.
43
Šta ako se naprimer već koriste A1 i A3?
1
A1
6
9
3
6
6
3 42
8
A2 A3
9
5
7
7
8
1
42
5
7
3
or
2
1
4
5
8
9
44
U praksi jedna instrukcija koristi više resursa, naprimer A1 i A3.(Interesantna varijacija Tetrisa.)
A 1
6
3 '
2 '
3 '
1
4
2 '
6
3 ' '
A 2 A 3
2 ' '
5
5
4
3 ' '
2 ' '
1
45
Simulator i DibagerVideti u knjizi.