-
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.