7 - tok izvrsavanja instrukcija i instrukcijski paralelizam
Post on 07-Nov-2015
26 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
7-1
7.
TOK IZVRAVANJA INSTRUKCIJA I INSTRUKCIJSKI PARALELIZAM
Faza izvravanja instrukcija se moe podeliti na sledee celine:
- Dohvatanje instrukcije (Instruction Fetch),
- Dekodovanje instrukcije i pristup registrima (Instruction decode and register
fetch),
- Izvravanje instrukcije i raunanje efektivne adrese (Execution and effective
address calculation),
- Pristup memoriji i obrada skokova (Memory access and branch completion),
- Upis u registarski fajl (Write back).
Pipeline je jedna od tehnika realizacije izvravanja operacija po kojoj se preklapa
izvravanje vie operacija. Izvravanje operacije se moe razbiti na vie logikih celina koje
e se nazivati fazama (itanje instrukcije, formiranje adresa operanada, itanje operanada,
izvravanje operacije, itd). Za izvravanje neke faze postoji poseban deo koji e se nazivati
stepen S (slika 1).
Stepen se sastoji od kombinacione mree K i prihvatnog registra R. Kombinaciona
mrea izvrava aritmetike i logike operacije. Prihvatni registar sadri informacije potrebne
za izvravanje faze u datom stepenu i preostalih faza u stepenima koji slede. Faza 1 se
izvrava u stepenu S1, faza 2 u stepenu S2, itd. Istovremeno se moe nai k operacija u k
razliitih faza izvravanja. Prihvatni registar uz stepen i sadri informacije potrebne za
izvravanje faze u stepenu Si, ali i u svim preostalim stepenima.
Slika 1. Pipeline organizacija
-
7-2
7.1 Instrukcijski pipeline
U sluaju instrukcijskog pipeline-a izvravanje instrukcije se deli na vie faza i za svaku
fazu postoji poseban stepen u pipeline-u. Instrukcija ije je izvravanje podeljeno na k faza
zahteva k stepeni u pipeline-u. U idealnom sluaju u pipeline-u se nalazi k instrukcija, svaka u
razliitom stepenu pipeline-a i time u razliitoj fazi izvravanja. Ako je prva instrukcija u k-
tom stepenu, druga je u (k1)-om stepenu i tako redom do k-te instrukcije koja je u prvom
stepenu pipeline-a. Ovako idealnu situaciju je nemogue odrati u pipeline-u zbog itavog
niza razliitih razloga.
7.2 Organizacija procesora bez pipeline-a
Da bi se dolo do pipeline organizacije procesora, najpre se razmatra organizacija
procesora bez pipeline-a. Izmeu vie moguih organizacija procesora namerno je odabrana
ona organizacija iz koje prirodno proizlazi pipeline organizacija. Zbog toga odabrana
organizacija nije ni najekonominija ni sa najboljim performansama, menu moguim
organizacijama bez pipeline-a. Usvojeno je da se izvravanje instrukcija podeli na najvie pet
faza i da izvravanje jedne faze traje jednu periodu signala takta (slika 2). Tih pet faza su: IF
(instruction fetch), ID (instruction decode and register fetch), EX (execute and effective
address calculation), MEM (memory access and branch completion) i WB (write back).
Sa slike 2 se vidi kako tee izvravanje instrukcija. Na kraju svake periode signala takta,
vrednost sraunata za vreme date periode signala takta, a potrebna za vreme neke kasnije
periode signala takta bilo te ili neke sledee instrukcije, se upisuje u memoriju, neki od
registara opte namene, programski broja PC ili u neki od pomonih registara, kao na primer
LMD, Imm, A, B, IR, NPC, ALUOUT ili cond. Pomoni registri dre vrednosti izmenu
perioda signala takta iste instrukcije, dok memorijske lokacije, registri opte namene i
programski broja PC, kao programski vidljivi registri, dre vrednosti izmenu instrukcija.
Stoga izvravanje jedne instrukcije moe da traje najvie pet perioda signala takta.
-
7-3
Slika 2. Organizacija procesora bez pipeline-a
7.3 Organizacija procesora sa pipeline-om
U sluaju organizacije procesora sa pipeline-om, svakoj od pet faza kroz koje prolazi
instrukcija tokom izvravanja odgovara poseban stepen u pipeline-u. Na svaki signal takta
ubacuje se nova instrukcija u pipeline. Posle pet signala takta u pet stepeni pipeline-a izvrava
se pet razliitih faza za instrukcije i do i + 4 (slika 3). Tih pet stepeni pipeline-a imaju iste
nazive kao i odgovarajue faze koje se u njima izvravaju.
Za izvravanje svake instrukcije sada je potrebno pet perioda signala takta, ali za vreme
svake periode signala takta pet stepeni pipeline-a izvrava pet razliitih faza pet razliitih
instrukcija. Tako, na primer, u periodi 5 signala takta, instrukcija i izvrava fazu WB,
instrukcija i + 1 fazu MEM, itd. Program se kod ovakvog naina izvravanja instrukcija
izvrava pet puta bre nego kada bi instrukcija i + 1 poela sa svojom fazom IF tek u periodi
6 signala takta i to tek poto u periodi 5 signala takta instrukcija i izvri svoju fazu WB.
Slika 3. Preklapanje izvravanja pet faza, pet instrukcija u pet stepeni pipeline-a
-
7-4
Izvravanje jedne instrukcije kod organizacije procesora sa pipeline-om se sada ak i
produava u odnosu na organizaciju procesora bez pipeline-a. Kod procesora bez pipeline-a
vreme izvravanja jedne instrukcije je suma pojedinanih trajanja pet faza instrukcije. Kod
procesora sa pipeline-om vreme izvravanja jedne instrukcije je proizvod 5 puta trajanje
najsporije faze.
U sluaju preklapanja izvravanja razliitih faza vie instrukcija u stepenima pipeline-a,
svaki stepen pipeline-a je aktivan na svaku periodu signala takta. Zbog toga sve operacije u
svim stepenima pipeline-a moraju da se kompletiraju u toku trajanja jedne periode signala
takta. Pored toga svaki stepen pipeline-a mora da ima svoj registar u kome e biti sve ono to
je neophodno za izvravanje odgovarajue faze u njemu, kao i za izvravanje preostalih faza
date instrukcije u sledeim stepenima pipeline-a. Uvoenjem tih registara, koji e se nazivati
pipeline registri, u procesor sa slike 2, dolazi se do organizacije procesora sa slike 4. Ovi
registri su oznaeni imenima stepena koje povezuju, pa je sa IF/ID oznaen registar izmenu
stepena IF i stepena ID, koji dri sve informacije neophodne za realizaciju faze ID. Isto vai i
za registre ID/EX, EX/MEM i MEM/WB i faze i stepene EX, MEM i WB, respektivno.
Registar PC se, takoe, moe tretirati kao pipeline registar jer on dri informacije potrebne za
fazu i stepen IF. Treba imati u vidu i injenicu da se u nekom pipeline registru ne nalaze samo
informacije potrebne za stepen kome on pripada, ve i za preostale stepene. Stoga e po isteku
perioda takta ne samo rezultat faze ID biti upisan u registar ID/EX, ve i neke informacije iz
registra IF/ID.
Slika 4. Pipeline organizacija procesora
-
7-5
7.4 Hazardi u pipeline-u
Prilikom pipeline izvravanja instrukcija u pipeline-u mogu da se stvore takve situacije
da za neku instrukciju ne moe da se izvri faza predviena stepenom pipeline-a u kome se
ona nalazi. Ove situacije se nazivaju hazardima. Postoje tri vrste hazarda:
- strukturalni hazardi,
- hazardi podataka i
- upravljaki hazardi.
Strukturalni hazardi nastaju zbog potrebe da se istovremeno pristupi istom resursu od
strane instrukcija koje se nalaze u razliitim stepenima pipeline-a. Hazardi podataka nastaju
kada je pristup nekom podatku od strane neke instrukcije u nekom stepenu pipeline-a
uslovljeno prethodnim pristupom tom istom podatku od strane neke prethodne instrukcije iz
nekog drugog stepena pipeline-a. Upravljaki hazardi nastaju zbog skokova i drugih
instrukcija koje menjaju vrednost programskog brojaa PC.
U sluaju hazarda, instrukcija se zaustavlja u nekom stepenu pipeline-a onoliko perioda
signala takta koliko je potrebno da se uzrok hazarda otkloni. Zaustavljanje neke instrukcije u
nekom stepenu pipeline-a zaustavlja i instrukcije koje su iza nje u pipeline-u. Time se
zaustavlja i ubacivanje novih instrukcija u pipeline. Instrukcijama koje su ispred nje u
pipeline-u moe se dozvoliti da produe sa izvravanjem. Zbog toga je direktna posledica
pojavljivanja hazarda to da je ubrzavanje izvravanja programa u pipeline procesoru loije od
onog koje bi teoretski moglo da se postigne.
7.4.1 Strukturalni hazardi
Strukturalni hazard u pipeline procesoru nastaje kada dve instrukcije koje se nalaze u
razliitim stepenima pipeline-a treba da pristupe istom resursu. Tipian primer za ovo je
sistem u kome se koristi ista memorija i za instrukcije i za podatke. Ovaj hazard bi mogao da
se javi u sluaju razmatranog procesora ukoliko ne bi postojale posebne memorije za
instrukcije i podatke. Hazard bi se desio kada bi load ili store instrukcija dola u stepen MEM
u kome bi se itao ili upisivao podatak u memoriju (slika 5). Tada oitavanje nove instrukcije
i ubacivanje u stepen IF ne bi moglo da se realizuje i bilo bi odloeno za jednu periodu
signala takta to je na slici 5 oznaeno sa stall. Sve ostale instrukcije bi se normalno
izvravale.
Nain za kompletno eliminisanje ovog strukturalnog hazarda je podela memorije na
posebne memorije za instrukcije i podatke, to je i uraeno za razmatrani procesor sa slike 4.
Mogu se javiti strukturalni hazardi i kod pristupa drugim resursima. Tako, na primer, procesor
-
7-6
koji se razmatra je dosta jednostavan, jer se ne razmatra aritmetika u pokretnom zarezu, kao ni
mnoenje i deljenje celobrojnih veliina. Zbog toga je stepen EX jednostavan i u njemu se za
svaku instrukciju faza EX izvrava u jednom taktu. U sluaju pomenutih operacija treba vie
taktova. Da to ne bi koilo pipeline stepen EX moe da se realizuje kao paralelna veza vie
funkcionalnih jedinica (slika 6). Kada neka instrukcija doe do svoje faze EX alje se u
odgovarajuu EX funkcionalnu jedinicu u kojoj se izvrava u onoliko taktova koliko joj je
potrebno. Sada je mogue u ritmu takta, bez zadrke u pipeline-u, instrukcije iz stepena ID
slati u razliite EX funkcionalne jedinice radi izvravanja faze EX. im se faza EX neke od
instrukcija zavri u nekoj od funkcionalnih jedinica instrukcija ide kroz stepene MEM i WB
radi kompletiranja izvravanja.
Slika 5. Situacija u pipeline-u kao posledica strukturalnog hazarda
Slika 6. Stepen EX realizovan kao paralelna veza vie funkcionalnih jedinica
7.4.2 Hazardi podataka
Hazard podataka se javlja kod procesora sa pipeline organizacijom zbog izmenjenog
redosleda pristupa podacima u odnosu na redosled pristupa podacima kod procesora bez
-
7-7
pipeline organizacije. Ovo je posledica injenice da se kod pipeline procesora preklapa
izvravanje razliitih faza vie instrukcija. Kod procesora koji nemaju pipeline organizaciju
instrukcije se izvravaju sekvencijalno, pa se tek po izvravanju svih faza jedne instrukcije
kree sa izvravanjem faze prve sledee. Kao ilustracija hazarda podataka koji moe da
nastane kod pipeline izvravanja instrukcija moe se uzeti sledei primer:
add R1, R2, R3
sub R4, R5, R1
and R6, R1, R7
or R8, R1, R9
xor R10, R1, R11
Sve instrukcije posle instrukcije add koriste rezultat instrukcije add koji se nalazi u
registru R1. Situacija u stepenima pipeline-a prilikom izvravanja pet instrukcija prikazana je
na slici 7. Vidi se da instrukcija add upisuje podatak u R1 u stepenu WB, dok instrukcija sub
ita podatak u stepenu ID. Instrukcija add zavrava upis tek posle tri periode signala takta u
odnosu na trenutak kad instrukcija sub poinje itanje. Ovakva situacija se naziva hazard
podataka. Ukoliko se neto ne preduzme da se ovakva situacija izbegne, instrukcija sub e
oitati pogrenu vrednost i koristie je. Ova vrednost ak i ne mora da bude uvek postavljena
od iste instrukcije. Nekada to moe da bude neka od instrukcija pre instrukcije add. Ukoliko,
pak, stigne prekid izmenu instrukcija add i sub, a obrada prekida je tako realizovana da se
skae na prekidnu rutinu po kompletiranju instrukcije add, u R1 e biti vrednost koju je
postavila instrukcija add.
Legenda:
*add upisuje u R1 **sub, and, or itaju pogrenu vrednost iz R1 ***xor ita korektnu vrednost iz R1
Slika 7. Situacija u pipeline-u sa prisutnim hazardom podataka
Instrukcija and je takoe pogoena hazardom podataka. Sa slike 7 se vidi da instrukcija
add tek na kraju perioda 5 signala takta kompletira upis u registar R1. Zbog toga instrukcija
and koja ita registar R1 u periodi 4 signala takta dobija pogrenu vrednost. Slina je situacija
i sa instrukcijom or. Ova instrukcija ita registar R1 za vreme periode 5 signala takta. S
-
7-8
obzirom da instrukcija add tek na kraju periode 5 signala takta kompletira upis u registar R1, i
instrukcija or dobija pogrenu vrednost registra R1.
Tek instrukcija xor dobija korektnu vrednost registra R1, jer instrukcija add u toku
periode 5 signala takta upisuje u registar R1, a instrukcija xor ga ita u periodi 6 signala takta.
Korektno izvravanje instrukcija zaustavljanjem pipeline-a
Najjednostavniji nain da se hazard podataka prisutan u primeru sa slike 7 rei je
zaustavljanje instrukcije sub u pipeline-u za tri periode signala takta, da bi se instrukcija add
normalno izvravala (slika 8). Time bi se instrukciji sub omoguilo da pree u stepen ID u
kome ita podatak iz registra R1 tek poto instrukcija add zavri fazu WB u kojoj upisuje
podatak u registar R1. Instrukcije and, or i xor bi, takoe, itale korektnu vrednost registra
R1 pri prolasku kroz stepen ID pipeline-a.
Slika 8. Situacija u pipeline-u kao posledica hazarda podataka
Korektno izvravanje instrukcija bez zaustavljanja pipeline-a prosleivanjem
Hazardi podataka se mogu hardverski eliminisati tehnikom prosleivanja (forwarding,
bypassing, short-circuiting). Rezultat sa izlaza jedinice ALU stepena EX se zajedno sa jo
nekim informacijama iz pipeline registra ID/EX stepena EX na signal takta alje u pipeline
registar EX/MEM stepena MEM. Izlaz registra EX/MEM.ALUOUT se vodi ne samo na ulaze
pipeline registra MEM/WB.ALUOUT stepena WB ve se vodi i na ulaze ALU. Ukoliko
hardver za prosleivanje otkrije da instrukcija koja je trenutno u stepenu MEM treba da svoj
rezultat upie u registar koji je izvorini za instrukciju koja se nalazi u stepenu EX, on
selektuje kao operand za ALU ne vrednost oitanu iz registarskog fajla Registers i koja se
nalazi u registru ID/EX.A, ve vrednost prosleenu od prethodne instrukcije preko registra
EX/MEM.ALUOUT.
Situacija kada jedinica Data memory treba da prosledi rezultat sa svog izlaza na svoj
ulaz se moe ilustrovati sledeom sekvencom instrukcija (ovde i nadalje, lw je load, a sw je
store):
add R1, R2, R3
lw R4, 0(R1)
-
7-9
sw 12(R1), R4
Ovde bi bez prosleivanja, a da bi se izbegao hazard podataka, moglo da doe do
zaustavljanja pipeline-a iz dva razloga. Prvi je da je rezultat ALU jedinice iz stepena EX, koji
nastaje kao rezultat izvravanja instrukcije add i koji treba da se upie u registar R1, potreban
istoj toj jedinici u instrukcijama lw i sw koje slede za njom. Drugi je da je rezultat jedinice
Data Memory iz stepena MEM, koji nastaje kao rezultat izvravanja instrukcije lw i koji treba
da se upie u registar R4, potreban istoj toj jedinici u instrukciji sw koja sledi za njom radi
upisa u Data memory. Na slici 9 su prikazana potrebna prosleivanja da bi se radi
eliminisanja hazarda podataka izbeglo zaustavljanje pipeline-a. Ovde je potrebno na ulaze
jedinice ALU zbog instrukcija lw i sw i registra R1 vraati sadraje registara
EX/MEM.ALUOUT i MEM/WB.ALUOUT, respektivno, a na ulaz jedinice Data Memory
zbog instrukcije sw i registra R4 vraati sadraj registra MEM/WB.LMD i koristiti umesto
EX/MEM.B.
Slika 9. Situacija u pipeline-u pri korienju hardvera za prosleivanje rezultata jedinice
Data memory iz registara MEM/WB.LMD (sw) na ulaz jedinice Data memory
Zaustavljanje pipeline-a kao jedini nain obezbeivanja korektnog izvravanja
instrukcija (pipeline stall, pipeline interlocks)
Postoje neke situacije hazarda podataka kada je jedini nain da se obezbedi korektno
izvravanje instrukcija u pipeline-u zaustavljanje pipeline-a. Posmatra se sledea sekvenca
instrukcija:
lw R1, 32(R6)
add R4, R1, R7
sub R5, R1, R8
and R6, R1, R7
Vrednost koja se ita iz memorije instrukcijom lw i upisuje u registar R1 koristi se u sve
tri instrukcije iza instrukcije lw. Situacija u stepenima pipeline-a za sluaj ovog programa bez
zaustavljanja pipeline-a prikazana je na slici 10.
-
7-10
Slika 10. Situacija u pipeline-u sa prisutnim hazardom podataka pri itanju iz memorije
Instrukcija lw ima podatak u registru MEM/WB.LMD tek na kraju svoje faze MEM.
Ova faza se izvrava u istoj periodi signala takta kao i faza EX instrukcije add. Meutim,
instrukciji add je podatak od instrukcije lw potreban na poetku faze EX. Vidi se da ne
postoji nain da on stigne za instrukciju add makar se koristila tehnika prosleivanja sadraja
registra MEM/WB.LMD na ulaze jedinice ALU. Tek za instrukciju sub podatak od
instrukcije lw se moe iz registra MEM/WB.LMD proslediti na ulaz jedinice ALU.
Instrukcija and ga dobija preko registarskog fajla Registers, jer ga instrukcija lw upisuje u
registar R1 u prvoj polovini faze WB, a instrukcija and ita u drugoj polovini faze ID.
Jedini nain da se obezbedi korektno izvravanje programa je zaustavljanje pipeline-a
(pipeline interlock, pipeline stall). Izgled pipeline-a pri zaustavljanju pipeline-a je dat na slici
11. Sve instrukcije poev od instrukcije add su zakanjene za jednu periodu signala takta.
Sada se rezultat instrukcije lw iz registra MEM/WB.LMD stepena WB direktno prosleuje
instrukciji add na ulazu jedinice ALU u stepenu EX. Instrukcija lw u prvoj polovini stepena
WB upisuje u R1, a instrukcija sub ita u drugoj polovini stepena ID.
Slika 11. Zaustavljanje pipeline-a radi izbegavanja hazarda podataka pri itanju vrednosti iz
memorije koja je potrebna jedinici ALU
Zakanjeno punjenje (delayed load)
Ima vie situacija kada je jedini nain da se eliminie hazard podataka zaustavljanje
pipeline-a. Jedan od tipinih primera za to je izvravanje instrukcija generisanih na uobiajeni
nain za izraz A = B + C. Ovde se zahteva zaustavljanje pipeline-a zbog druge instrukcije lw,
koja sadraj C puni u registar R2 (slika 12). Iako je obezbeeno prosleivanje rezultata
izvravanja druge instrukcije lw iz registra MEM/WB.LMD stepena WB na ulaz jedinice
ALU stepena EX, instrukcije add i sw se moraju zaustaviti za jednu periodu signala takta u
pipeline-u. Instrukcija sw ne treba da se zaustavlja, jer se vrednost koju instrukcija add treba
-
7-11
da upie u registar R3, a koja je potrebna za instrukciju sw, prosleuje iz registra
MEM/WB.ALUOUT stepena WB na ulaz jedinice Data memory stepena MEM gde se koristi
za upis u jedinicu Data Memory umesto sadraja registra EX/MEM.B.
Slika 12. Tipian izgled pipeline-a pri izraunavanju izraza A B C
Jedan od naina da se ova vrsta hazarda podataka izbegne bez zaustavljanja pipeline-a je
da prevodilac preuredi generisane instrukcije na takav nain da se izbegne da iza instrukcije
lw bude odmah instrukcija koja kao izvorite ima registar koji je odredite za instrukciju
lw. Jedna ovako generisana sekvenca instrukcija za sraunavanje izraza
A = B + C; D = E + F;
je:
lw Rb, b
lw Rc, c
Re,e
Ra,Rb,Rc
lw
addove dve instrukcije su zamenile mesta
Rf,f
a,Ra
lw
sw ove dve instrukcije su zamenile mesta
add Rd, Re, Rf
sw d, Rd
Dve mogue situacije zaustavljanja pipeline-a zbog instrukcije lw i to:
lw Rc, c i add Ra, Rb, Rc i
lw Rf, f i add Rd, Re, Rf
su izbegnute. U prvom sluaju je izmeu instrukcija lw Rc, c i add Ra, Rb, Rc ubaena
instrukcija lw Re, e iz drugog izraza, a u drugom sluaju je izmeu instrukcija lw Rf, f i
add Rd, Re, Rf ubaena instrukcija sw a, Ra iz prvog izraza. Pretpostavlja se da se
rezultati stepena MEM za instrukcije lw Rc, c i lw Rf, f prosleuju na ulaze stepena EX za
instrukcije add Ra, Rb, Rc i add Rd, Re, Rf, respektivno, kao i da se rezultat stepena EX
za instrukciju add Rd, Re, Rf prosleuje u stepen MEM za instrukciju sw d, Rd i da zbog
toga nema zaustavljanja pipeline-a.
Mehanizam kojim se, softverskim putem izbegavanjem stavljanja iza instrukcije lw
koja koristi kao izvorini registar odredini registar instrukcije lw, spreava zaustavljanje
pipeline-a pri izvravanju instrukcije lw se naziva zakanjeno punjenje (delayed load). Ova
-
7-12
tehnika je sasvim dobra, tako da neki procesori, umesto hardverski, softverski se tite od
ovog hazarda podataka. Ako ne moe da se nae nijedna druga instrukcija, onda se kod
takvih procesora radi spreavanja ovog hazarda podataka stavlja instrukcija nop.
7.4.3 Upravljaki hazardi
Upravljaki hazardi predstavljaju situacije koje se javljaju u pipeline procesorima
prilikom izvravanja instrukcija uslovnog skoka, kada treba zaustaviti pipeline odreen broj
signala takta dok se ne odlui da li e biti skok ili ne i time se dobije vrednost PC-ja sa koje
treba oitati sledeu instrukciju. Broj perioda signala takta koji se mora saekati da bi se
utvrdila nova vrednost PC-ja se naziva branch delay.
U sluaju usvojenog procesora pipeline organizacije tek kada branch instrukcija stigne
u stepen MEM se zna da li e biti skoka ili ne i koju vrednost signalom takta na kraju faze
MEM treba upisati u registar PC. To je ili sraunata adresa instrukcije na koju se skae, koja
se nalazi u registru EX/MEM.ALUOUT, ili adresa prve sledee instrukcije iza instrukcije
skoka, koja se nalazi u registru EX/MEM.NPC. Selekcija jedne od ove dve vrednosti se vri
signalom EX/MEM.cond (slika 4). U optem sluaju za svaku branch instrukciju treba
saekati njeno kompletiranje faze MEM, pa tek onda krenuti sa ubacivanjem novih instrukcija
u stepen pipeline-a. To znai zaustavljanje pipeline-a za tri takta. Zbog toga kada branch
instrukcija stigne u stepen MEM, u stepenima EX, ID i IF nema instrukcija. Signalom takta na
kraju faze MEM branch instrukcije u registar PC se upisuje korektna adresa instrukcije sa
kojom treba produiti izvravanje instrukcija posle branch instrukcije, pa se tek tada u stepen
IF pipeline ubacuje nova instrukcija. Slika 13 prikazuje zaustavljanje pipeline-a za tri signala
takta zbog upravljakog hazarda.
U zavisnosti od toga da li se kao rezultat izvravanja branch instrukcije u registar PC
upisuje adresa instrukcije na koju se skae ili adresa prve sledee instrukcije posle branch
instrukcije, kae se da je ili branch taken (skok napravljen) ili branch not taken (skok nije
napravljen), respektivno.
Slika 13. Situacija u pipeline-u kao posledica upravljakog hazarda
-
7-13
Slika 14. Situacija u pipeline-u kao posledica upravljakog hazarda za sluaj da je branch
taken
Slika 15. Situacija u pipeline-u kao posledica upravljakog hazarda za sluaj da je branch
not taken
7.5 Optimizacija koda i Gross-Hennessy algoritam
Postoje dva osnovna pristupa optimizaciji koda sa ciljem eliminacije navedenih tipova
hazarda u procesorima sa softverskim spreavanjem hazarda pre-pass pristup, u kom se
optimizacija radi pre alokacije registara, i post-pass pristup, u kom se optimizacija radi nakon
alokacije registara. U prvom sluaju se postiu bolje performanse, a u drugom su algoritmi
jednostavniji. Gross-Hennessy algoritam spada u post-pass algoritme.
Adresa t+ je adresa sa koje se uzima sledea naredba, ukoliko je uslov skoka zadovoljen,
a t- adresa sa koje se uzima sledea naredba ako uslov skoka nije zadovoljen.
Naredbe skoka se mogu klasifikovati na bazi znanja o t+ i t
- u vreme prevoenja. Tako
se dobijaju etiri grupe naredbi:
1) t+ je poznato u vreme prevoenja, dok t- nema smisla, jer su u pitanju bezuslovni
skokovi. Ovde spadaju branch, jump to subroutine i jump direct.
2) I t+ i t- su poznati u vreme prevoenja, jer su u pitanju uslovni skokovi. Ovde
spada branch on condition.
3) t+ nije poznato u vreme prevoenja, dok t- jeste, jer su u pitanju razni tipovi
povezivanja sistemskih rutina u koje spadaju trap i supervisor call.
4) t+ nije poznato u vreme prevoenja, dok t- nema smisla, jer se u ovoj grupi nalaze
povratak iz potprograma i indirektan skok (return from subroutine i jump
indirect).
-
7-14
Algoritam koji izbacuje NOP-ove iz koda radi optimizacije se zove Gross-Hennessy i
ima tri eme relokacije koda. Svaka od njih tedi ili prostor ili vreme ili oba istovremeno, i to
je nekad bezuslovno, a nekad uslovno. Svaka od njih pretpostavlja da je generator koda ve
ubacio potreban broj NOP-ova iza naredbi skoka. Gross-Hennessy spada u algoritme za
lokalnu optimizaciju, jer se radi na bazi bazinog bloka.
Na slikama dvostruko rafiran blok predstavlja prostor u koji je generator koda ubacio
nop naredbe. BB0 je bazini blok koji se optimizuje. Jednostruko rafiran blok oznaava
poetnu poziciju koda koji se premeta/duplicira. Linije sa strelicom i jednom crtom
oznaavaju mogui smer skoka, pre optimizacije koda (puna linija), i eventualno posle
optimizacije koda (isprekidana linija). Linija sa strelicom i dve crte oznaava nain
premetanja/dupliciranja koda.
ema 1 (slika 16): Ova ema radi optimizaciju u blizini bazinog bloka. Kako se definie
bazini blok? Prva naredba bloka je ENTRY, a poslednja BRANCH (ustvari, prva naredba
moe biti prva iza direktive MAIN (BEGIN) ili iza naredbe koja ima labelu zato to imamo 3
naina da zavrimo: prvi nain kada je to prva naredba ispred direktive END. Drugi nain je
skok, a trei nain je naredba koja je ispred naredbe koja ima labelu). Posle generacije koda,
stavljeni su NOP-ovi iza BRANCH-a (deo koda dvostruko rafiran). Posle optimizacije koda
(primene GH algoritma) te NOP-ove eliminiemo naredbama ispred BRANCH-a, a koje
nemaju konflikt sa BRANCH-om (deo koda jednostruko rafiran). Odnosno, radi se
premetanje n naredbi iz bazinog bloka koji se zavrava naredbom skoka, na mesto n nop
naredbi koje se nalaze odmah iza iste naredbe skoka. Linije sa FORWARD i BACKWARD
nazivima predstavljaju mogu smer skoka. Ova ema tedi i prostor i vreme, jer briemo NOP
instrukcije i ubacujemo korisne instrukcije koje treba da se izvre (tedimo prostor), a vreme
tedimo jer smo utedeli vreme potrebno da se svi ti NOP-ovi izvre. Ona je uvek mogua,
ako ni uslov ni adresa skoka ne zavise od naredbi koje se premetaju.
Slika 16. ema 1 Gross-Hennessy algoritma
-
7-15
Ako ema 1 ostavi neto nepopunjeno, tj. neke NOP-ove, imamo jo dve eme. One
rade bez obzira da li radimo skok napred ili nazad. ema 2 tedi vreme, ali ne i prostor, a
ema 3 tedi samo prostor, a ne i vreme. Postavlja se pitanje koju emo od te dve da
primenimo prvu posle eme 1. Ako nam je bitno da utedimo vreme, primenjujemo emu 2, a
ako je bitan prostor, emu 3. Ni jedna od ove dve ne tedi bezuslovno.
ema 2 (slika 17): Ovde se kod duplicira. Prvih n naredbi poev od adrese t+ se ostave tamo
gde su, a jedna njihova kopija se postavi na mesto n nop naredbi koje se nalaze odmah nakon
skoka koji se optimizira. Takoe, adresa skoka se modifikuje tako to se skae na t+ + n,
umesto na t+. Ovako se mogu optimizirati samo skokovi kod kojih je t
+ poznato u vreme
prevoenja. Vreme se tedi samo pod uslovom da doe do skoka. Ako se naredba skoka izvri
k puta, a ne izvri l puta, ova ema utedi n . k ciklusa i nula memorijskih lokacija. Dvostruko
rafiran deo se optimizacijom ispuni delom koda prikazan jednostrukom arom.
Slika 17. ema 2 Gross-Hennessy algoritma
Najpogodnija je za optimizaciju repeat-until i do-loop.
ema 3 (slika 18): Premetanje n naredbi koda, iz prostora odmah nakon n nop naredbi, na
mesto n nop naredbi koje se nalaze odmah nakon skoka koji se optimizira. Ovako se mogu
optimizirati samo skokovi kod kojih je t- poznato u vreme prevoenja. tedi se prostor ako do
skoka ne doe. Nije dupliciranje koda nego premetanje. Najpogodnija za optimizaciju do-
while.
-
7-16
Slika 18. ema 3 Gross-Hennessy algoritma
Da li se ema 2 ili 3 primenjuje posle eme 1 znamo na osnovu konstrukcije iz vieg
programskog jezika. Ako nemamo uvid u vii programski jezik, onda se gleda da li je skok
unapred ili unazad (ako je skok unazad onda je vea verovatnoa da e doi do skoka, jer je
to deo petlje, a ako je skok unapred onda je verovatnoa oko 50%).
Jo jednom, ema 1 je uvek najpogodnija jer tedi vreme i prostor. ema 2 tedi vreme
samo kada do skoka doe, i zato je pogodnija za optimizaciju skokova unazad, kod kojih je
vea verovatnoa da doe do skoka. ema 3 tedi vreme samo kada do skoka ne doe, i zato
je najpogodnija za optimizaciju skokova unapred, kod kojih je otprilike uvek ista verovatnoa
da do skoka doe ili ne doe, ali zato uvek tedi prostor. Uteda u prostoru nije samo uteda u
ceni memorije, ve i uteda u vremenu izvravanja programa, u sistemima koji imaju ke
memoriju.
Algoritam Gross-Hennessy kombinuje ove tri eme:
1. Prvo se primeni ema 1. Ako je broj istisnutih nop naredbi (k) jednak n,
optimizacija je zavrena. Ako je k < n, optimizacija se nastavlja.
2. Odredi se prioritet za optimizaciju vreme ili prostor, i u skladu sa tim se
primeni prvo ema 2 ili ema 3, a za njom i ema koja do tad nije bila iskoriena
(ako moe).
Ako ni posle primene sve tri eme nisu eliminisane sve nop naredbe, optimizacija se
zavrava, i neeliminisane nop naredbe ostaju u kodu.
top related