seminarski aor

28
UNIVERZITET U BIHAĆU TEHNIČKI FAKULTET BIHAĆ ELEKTRO-TEHNIČKI ODSJEK SMIJER: INFORMATIKA S E M I N A R S K I R A D ARHITEKTURA I ORGANIZACIJA RAČUNARA HAZARDI

Transcript of seminarski aor

Page 1: seminarski aor

UNIVERZITET U BIHAĆUTEHNIČKI FAKULTET BIHAĆELEKTRO-TEHNIČKI ODSJEKSMIJER: INFORMATIKA

S E M I N A R S K I R A D

ARHITEKTURA I ORGANIZACIJA RAČUNARA

HAZARDI

Dr. Vlatko Maček Kurić Džemal 62/IDipl.ing.el. Džanić Amel Mulić Emir 31/I

Page 2: seminarski aor

1. Hazardi Istodobno izvođenje više instrukcija u protočnoj strukturi može dovesti do situ-

acija koje ometaju i onemogućuju jednoliki protok instrukcija. Situacije koje se nazivaju

hazardi (engl. Hazard) sprječavaju da sljedeća instrukcija u nizu instrukcija bude izvedena u za nju predviđenoj periodi taktnog signala. {Naime, njezino izvođenje dovelo bi do rizika i pogibelji pravilnog izvođenja programa.)

Postoje tri razreda hazarda:

• strukturni hazard• podatkovni hazard (engl. Data hazard)• upravljački hazard (engl. Control hazard).

U protočnoj izvedbi stroja zahtijeva se protočna izvedba njegovih funkcijskih

jedinica i uvišestruČenje resursa da bi se dopustile sve moguće kombinacije

izvođenja instrukcija u protočnoj strukturi. Ako se neka kombinacija instrukcija

ne može izvesti zbog sukobljavanja oko sredstava, kaže se da se javlja strukturni

hazard. Dakle, sukobljavanje oko sredstava ili tzv. resursni konflikti predstavljaju izvor ove vrste hazarda.

Sukobljavanje oko sredstava nastupa kad dvije (ili više) instrukcija zahtijevaju

isto sredstvo (npr. funkcijsku jedinicu, protočni segment ili sklop unutar

protočnog segmenta). U tom slučaju jedna od instrukcija (u određenoj fazi

obrade) mora biti privremeno „zamrznuta“ i Čekati jednu periodu ili više

perioda taktnog signala.

Zamrzavanjem jedne instrukcije kasne sve instrukcije koje joj slijede u protočnoj

strukturi. Takvo kašnjenje zorno se predočava „protočnim mjehurićem“ u protočnoj strukturi.

Ako se instrukcija pribavlja svake periode taktnog signala, memorija je stalno zauzeta. Procesor pristupa memoriji i u fazi IZVRŠI, i to instrukcijama load i store. Očito je da će takvo pristupanje memoriji imati kao posljedicu sukobljavanje oko sredstava (sl. 1).

Page 3: seminarski aor

SI. 1. Primjeri sukobljavanja oko sredstava.

Instrukcija h (load) tijekom aktivnosti segmenta EX i instrukcija U tijekom aktivnosti segmenta IF se sukobljavaju pristupanjem memoriji (perioda #4). Pribavljanje instrukcije U mora biti odgođeno.

Budući da su instrukcije load i store zastupljene približno 30 % u odnosu na sve druge instrukcije u programu, zbog sukobljavanja oko sredstava ove vrste cjelokupna performansa procesora umanjuje se za više od 10 % (prema N“. Margulis, 1990). Kon-flikti ove vrste u arhitekturi RISC rješavaju se višepristupnim memorijskim modulima (engl. Multiple ports memorv), upotrebom priručne memorije podataka i izdvojene instrukcijske priručne memorije ili pak upotrebom koncepata harvardske arhitekture u kojoj su izdvojeno ostvarene memorija podataka i memorija u kojoj se pohranjuju instrukcije (npr. procesor arhitekture RISC MC 88100, tvrtka Motorola).

Drugi primjer sukobljavanja oko sredstva jest istodobni pristup skupu registara. Taj se konflikt rješava upotrebom višepristupnog skupa registara (engl. Multiple ports register file).

Drugi razred hazarda jest onaj koji nastupa zbog međuovisnosti podataka i naziva se podatkovni hazard. On nastaje kad dvije ili više instrukcija, koje se nalaze u izvođenju u protočnoj strukturi, pristupaju istom podatku ili modificiraju isti podatak (smješten u registru, na. memorijskoj lokaciji ili predstavlja zastavicu u statusnom registru). Općenito, postoje tri vrste takva hazarda:

RAW {Read - After - VVrite) - čitanje poslije upisa• WAR (VVrite -After - Read) - pisanje poslije čitanja• WAW (VVrite - After - VVrite) - pisanje poslije upisivanja.

P. Kogge je ove vrste hazarda ilustrirao slijedom instrukcija (P. Kogge, 1981.) (sl. 2). (Napomena: Ova se ilustracija odnosi općenito na model procesora koji nema sve značajke procesora arhitekture RISC.)

Page 4: seminarski aor

SI. 2. Hazardi u slijedu instrukcija

Pretpostavimo da su instrukcije store X i add x (operacija čitanja poslije operacije upisa) dostatno blizu i da su istodobno u protočnoj strukturi. Postoji potencijalna opasnost da instrukcija add x prije dohvati operand s lokacije x negoli instrukcija store x upiše novu vrijednost na lokaciji x (podsjetimo se: Obje se instrukcije izvode istodobno - protočna struktura!). To je vrsta hazarda RAVV koja nastupa zbog čitanja poslije upisa.

Vrstu hazarda VVAR (operacija upisa slijedi operaciji čitanja) možemo ilustrirati situacijom kad, u slijedu instrukcija, instrukcija ; (npr. store x, sl. 2) koja logički slijedi instrukciji i (npr. add x, sl. 2) želi promijeniti podatak (na lokaciji x) koji Čita instrukcija i. Ako instrukcija; prije modificira podatak negoli ga instrukcija i pročita, instrukcija i će dohvatiti pogrešan podatak. Slijed instrukcija add x i store x ilustrira takvu situaciju (sl. 2).

Procesori arhitekture RISC, podsjetimo se, nemaju u svom skupu instrukcija složene instrukcije vrste add x (gdje je x memorijska lokacija) u kojima je jedan od operanada u memoriji, a drugi u registru.

Hazard nastaje i kad obje instrukcije i \j žele obnoviti vrijednost istog podatka i kad se instrukcija/ izvede prije negoli instrukcija i. To je hazard tipa WAW. Dvije slijedne instrukcije store x i store x ilustriraju takvu situaciju (sl. 2). Naime, ako se druga instrukcija store x izvede poslije treće instrukcije store x (u slijedu instrukcija na sl. 2), vrijednost na lokaciji x neće biti ona „prava“.

Procesori protočne strukture moraju imati ugrađene postupke za detekciju i rješavanje hazardnih, odnosno potencijalno hazardnih situacija. Sklopovno ostvareni postupci i tehnike zovu se tehnike isključenja (engl. Interlock, Pipcline interlock).

Osnsnovna zamisao funkcioniranja sklopovlja za isključenje sastoji se u tomu da spriječi (ili isključi) izvođenje instrukcije u slijedu instrukcija sve dok instrukciji nije na raspolaganju upravo potrebna vrijednost. Očito je da ostvarenje isključenja zahtijeva dodatno i složeno sklopovlje. Jedan od načina rješavanja hazarda jest i upotreba programskih tehnika umjesto sklopovlja. Hazardi mogu biti detektiran! i eliminirani tijekom prevođenja programa, i to preuređivanjem slijeda instrukcija i umetanjem instrukcija nop (no operation). Dakle, postupci detekcije i uklanjanja hazardnih situacija mogu biti ugrađeni u prevodilac (još jedna ilustracija dualizma

Page 5: seminarski aor

programske i sklo-povne opreme!)- Procesor arhitekture RISC Stanford MIPS razvijen u razdoblju 1981. do 1983.godine upravo koristi opisani programski pristup. Akronim MIPS označava Microprocessor vvithout intcrlocked Pipeline Stages - mikroprocesor bez sklopovno ostvarenih postupaka isključenja.

Značajke arhitekture procesora RISC su takve da je za hazard, koji nastupa zbog međuzavisnosti podataka, kritičan hazard vrste RAVV. U sljedećem odjeljku podrobnije ćemo opisati načine rješavanja ove vrste hazarda.

1.2. Zakasnjele instrukcije LOADHazard vrste RAW nazočan je u arhitekturi RISC tijekom izvođenja instrukcije load. Pretpostavimo, na primjer, ovakav slijed instrukcija:

loadrl,A ; rl <=M[A]load rl, B ; rl <= M[S]add r3, rl, rl ; r3 <= (rl) + (rl)

u protočnoj strukturi. Slika 3. prikazuje slijed izvođenja programskog odsječka.

SI. 3. Slijed izvođenja programskog odsječka

Obratimo pozornost na sljedeće: Instrukcija add r3, rl, rl se u protočnom segmentu ID dekodira. Istovremeno s dekodiranjem dohvaćaju se operandi koji su smješteni u registrima procesora. U segmentu EX izvršava se operacija zbrajanja raspoloživih operanada. Međutim, instrukcija load rl, B tek u protočnom segmentu VV upisuje „pravi“ sadržaj u registar rl. (Instrukcija vrste load zahtijeva dodatno vrijeme za računanje efektivne adrese operanda koji se nalazi u memoriji, vrijeme za dohvat operanda te konačno vrijeme za upis operanda u odredišni registar - tablica 1). Takva situacija vodi hazardu RAVV. Naime, pri čitanju operanda tijekom instrukcije add r3, rl, rl u registru rl neće još biti raspoloživa „prava“ vrijednost operanda (sadržaj memorijske lokacije B) (sl. 3). Aktivnost protočnog segmenta ID za instrukciju add, zbog protočnosti i istovremenog izvođenja instrukcija, prethodi aktivnosti protočnog segmenta W prethodne instrukcije load.

Da bi se osigurao logički ispravan slijed instrukcija, potrebno je usporiti protok u protočnoj strukturi umetanjem „protočnog mjehurića“. Dakle, prisutni hazard vrste RAW imat će za posljedicu kašnjenje protoka. Protočni mjehurić osigurat će pravilno izvođenje programskog odsječka (sl. 4). Kašnjenjem instrukcije add za jednu periodu, podatak s memorijske lokacije B bit će pri kraju aktivnosti segmenta ID u registru rT. i na taj način će instrukcija add generirati „pravi“ rezultat.

Umetanje „protočnog mjehurića“ utječe nepovoljno na performansu procesora, odnosno povećava srednji broj perioda taktnog signala po instrukciji.

Page 6: seminarski aor

Procesori arhitekture RISC upotrebljavaju posebne tehnike isključenja kojima rješavaju problem hazarda, ali i umanjuju ili u potpunosti uklanjaju nepovoljni utjecaj protočnih mjehurića na performansu procesora.

Uobičajena tehnika u većini procesora arhitekture RISC, jest zakasnjela load instrukcija (engl. Delaved load). Njezina osnovna zamisao sastoji se u sljedećem: Prevodilac tijekom prevođenja programa preuređuje slijed instrukcija neposredno nakon instrukcije load umeće instrukciju čije izvođenje ne ovisi o podatku koji se dobavlja instrukcijom load. Mjesto instrukcije u slijedu instrukcija neposredno poslije instrukcije load zove se obično priključak load kašnjenja {engl. Load-de-lay slot). Umetanjem instrukcije u priključak load kašnjenja, koja ne koristi podatak iz instrukcije load (koja joj neposredno prethodi), postiže se jednoličnost i glatkoća protoka kroz protočnu strukturu i eliminiraju se protočni mjehurići.

Page 7: seminarski aor

Prikažimo tehniku zakasnjele load instrukcije na jednostavnom primjeru. Programski odsječak, koji u višem programskom jeziku možemo napisati kao C :- A + B, fi := D, izgleda u zbirnom jeziku ovako:

load rl, Aload rl, B

Page 8: seminarski aor

add r3, rl, rl load r4, D .

??? Hazard RAW

Page 9: seminarski aor

Vidimo da je instrukcija add u priključku load kašnjenja. Međutim, ona upotrebljava podatak koji se dohvaća neposrednom prethodnom instrukcijom load (podatak s lo-kacije B, koji bi trebao biti smješten u registar r2). Takav izvorni slijed instrukcija vodi hazardu vrste RAW.

SI. 5. U priključak Load kašnjenja smjesta se instrukcija nop

Prevodilac mora detektirati takvu situaciju i instrukciju add premjestiti iz priključka. Najjednostavniji način na koji to prevodilac može načiniti jest umetanje instrukcije nop (no operation) u priključak.

Instrukcija nop ima za posljedicu samo kašnjenje izvođenja slijeda instrukcija za jednu periodu. Inače, kao što sam naziv instrukcije kaže, ona ne čini ništa. Takvo rješenje povećava veličinu operacijskog koda. Slika 5. prikazuje slijed izvođenja programskog odsječka s umetnutom instrukcijom nop.

Pravo, djelotvorno rješenje sastoji se u tome da se u priključak umetne „korisna“ instrukcija. Optimirajući prevodioci preuredit će slijed instrukcija na sljedeći način:

load rl, Aload rl, Bload r4, D '4= priključak load kašnjenjaadd r3, rl, rl.

Preuređenjem slijeda instrukcija, odnosno umetanjem korisne instrukcije load j4, D, koja ne zavisi od prethodne load instrukcije, postignuta je jednoličnost i glatkoća protoka instrukcija kroz protočnu strukturu i ostvareni su uvjeti izvođenja instrukcije u jednoj periodi taktnog signala.

1.3. Zakasnjele instrukcije grananjaTreća vrsta hazarda nastaje u ovisnosti o upravljanju (engl. Control depend- ency). Instrukcije koje prenose upravljanje s jednog programa (ili programskog odsječka) na drugi, tj. instrukcije pozivanja potprograma, instrukcije uvjetnog i bezuvjetnog grananja prouzročuju poremećaje u protoku instrukcija kroz protočnu strukturu.

Page 10: seminarski aor

Promotrimo slijed instrukcija u protočnoj strukturi (sl, 6.) i pretpostavimo da je instrukcija I2 instrukcija grananja.

Sl. 6 Tijek izvođenja instrukcija programskog odsječka (instrukcija I2 je instrukcija grananja)

Budući da se tek u protočnom segmentu EX tijekom instrukcije grananja (I2) računa adresa sljedeće instrukcije, a tijekom aktivnosti segmenta W tek se adresa sljedeće instrukcije upisuje u programsko brojilo PC, to znači da je adresa sljedeće instrukcije raspoloživa za protočni segment IF (tijekom instrukcije I3) tek nakon tri periode takta. To znači: želimo li očuvati ispravan slijed izvođenja programa nužno, moramo umetnuti tri protočna mjehurića (sl 7).

SI. 7. Tri protočna mjehurića u protočnoj strukturi zbog instrukcije grananja

Tri protočna mjehurića, kojim se rješava hazard ove vrste, vrlo nepovoljno utječu na performansu procesora. Smanjenje kašnjenja može se postići tako da se računanje ciljne adrese grananja i upis te adrese u programsko brojilo izvede ranije (umjesto u protočnom segmentu W ili EX - u protočnom segmentu ID!!!).

Računanje ciljne adrese grananja tijekom aktivnosti protočnog segmenta ID zahtijeva i preinake operacija u tom protočnom segmentu. Segmentu ID sada treba pridodati posebno zbrajalo za računanje ciljne adrese te sklop za ispitivanje uvjeta grananja.

CAG

CAG - Ciljna adresa grananja

Poznavanjem ciljne adrese grananja tijekom aktivnosti segmenta ID i njenim upisom u programsko brojilo postiže se kašnjenje od samo jedne periode takt-nog signala.

Procesori arhitekture RISC (primjerice, i860 ili R 2000) su upravo tako i oblikovani - već u drugom protočnom segmentu poznata je ciljna adresa grananja. U tom slučaju pojavljuje se samo jedan protočni mjehurić u protočnoj strukturi.

Page 11: seminarski aor

Pretpostavimo da je ciljna adresa raspoloživa nakon aktivnosti segmenta ID tijekom instrukcije grananja. (U tom slučaju potreban je samo jedan protočni mjehurić.) Slično kao i kod instrukcije load, za instrukciju koja neposredno slijedi instrukciji grananja kažemo da se nalazi u priključku branch kašnjenja (engl. Branch delay slot). U najjednostavnijoj izvedbi prevodilac umeće u priključak instrukciju nop. Na primjer, slijed instrukcija:

move r4, r3 move r\, r2

jal x ; bezuvjetno grananjeC: add r5, r5, 1

prevodilac će preinačiti u

move r4, r3 move r\, r2 jal x nop C: add rS, r5, 1

Umjesto kašnjenja, zahvaljujući zakasnjeloj instrukciji grananja, optimirajući prevodilac će u priključak branch kašnjenja umetnuti instrukciju koja se u svakom slučaju (uvijek) izvodi - bez obzira na grananje. Na taj se način ostvaruje jednoličnost i glatkoća protoka. Prevodilac će optimirajući slijed :

move r4, r3 move r\, r2

jal x ; bezuvjetno grananjeC: add r5, r5,1

preobličiti u:

H,r3 jalx

move r\, rT. C: add r5, rS, 1 .

Korisna instrukcija move r\, r2 popunila je priključak i ona će se uvijek izvesti. Logički slijed instrukcija u programskom odsječku neće biti narušen (si. 8).

SI. 8. Adresa grananja poznata je tijekom aktivnosti segmenta EX - umeću se dva

protočna mjehurića

Zakasnjelo grananje ima kao posljedicu promjenu slijeda izvođenja instrukcija, i on se stoga razlikuje od onog koji je specificiran u programu napisanom u zbirnom jeziku. Na primjer, slijed u zbirnom jeziku:

instrukcija 1instrukcija 2instrukcija 3

zakasnjela_instrukcija_grananja x

instrukcija 4instrukcija 5instrukcija 6

Page 12: seminarski aor

x: instrukcija 7 instrukcija 8

izvest će se ovim slijedom:instrukcija 1 instrukcija 2 instrukcija 3 instrukcija 4 instrukcija 7 instrukcija 8 .

Napomenimo da se i u slučaju kad bi se ciljna adresa određivala tijekom instrukcije grananja u protočnom segmentu EX (a upisivala u PC tijekom aktivnosti segmenta W) možemo koristiti koncept priključka zakasnjele instrukcije grananja, ali s tom razlikom da sada (u skladu s našim modelom procesora) korisnim instrukcijama trebamo popuniti Čak tri priključka.

SI. 8. Slijed instrukcija s instrukcijom move r\, r2 u priključku

Arhitekturnim zahvatima na putu podataka moguće je postići upis ciljne adrese u PC tijekom aktivnosti segmenta EX i smanjiti broj protočnih mjehurića na dva (si. 8).

U arhitekturi RISC procesora, u pravilu, instrukcije bezuvjetnog grananja i instrukcije pozivanja potprograma su ostvarene kao zakasnjele instrukcije.

Instrukcije uvjetnog grananja mogu se realizirati dvojako:

• kao zakasnjele instrukcije, odnosno instrukcije s priključkom branch ka šnjenja koji će prevodilac popuniti korisnom instrukcijom

• kao nezakasnjele instrukcije kod kojih se umeću jedan ili dva protočnamjehurića i to samo ako je uvjet grananja ispunjen. Upotreba dvojakihinstrukcija uvjetnog grananja ima svoje opravdanje. One dopuštaju op-timirajućem prevodiocu upotrebu jedne ili druge vrste instrukcija u ovisnosti od vjerojatnosti hoće li uvjet grananja biti ispunjen, odnosno hoćeli se grananje ostvariti.

Procesor i860 ima u skupu instrukcija instrukcije bc i bnc koje su ostvarene bez pri-ključka branch kašnjenja. Ako je uvjet grananja ispunjen {CC - Condition Code, posta-vljen CC = 1 za instrukciju bc ili CC - 0 za instrukciju bnc), grananje se izvodi i umeće se jedan protočni mjehurić. Dodatni mjehurić će se pojaviti ako instrukcija bc ili bnc slijedi neposredno nakon nekih instrukcija (npr. adas, addu, subs, subu, pfeg). Ako uvjet grananja nije ispunjen, nema kašnjenja u protočnoj strukturi. Djelovanje instrukcije bc može se opisati na sljedeći način:

IF(COl)

THENNastavi izvođenje na ciljnoj adresi

Page 13: seminarski aor

ELSENastavi izvođenje na sljedećoj adresiFI.

Instrukcije bc.t i bnc.t su instrukcije uvjetnog grananja i imaju priključak branch ka-šnjenja. Na primjer, instrukcija bc.t grana na ciljnu adresu ako je CC = 1, ali tek nakon što je izvedena instrukcija koja instrukciji grananja neposredno slijedi, tj. ona u pri-ključku. Ta instrukcija ima još jednu posebnost: Ako uvjet grananja nije ispunjen, sljedeća instrukcija u nizu se preskače i umeće se jedan protočni mjehurić. Djelovanje instrukcije bc.t (Branch on CC, Taken) može se opisati ovako:

IF {CC = 1) THENIzvedi još jednu instrukciju Nastavi izvođenje na ciljnoj adresi

ELSE Preskoči sljedeću instrukciju u nizu

Fi.

Instrukcije bezuvjetnog grananja i instrukcije pozivanja potprograma (call) imaju priključak branch kašnjenja tako da procesor uvijek izvodi i slijedeću instrukciju u ni-

Tehnika zakasnjelog grananja, kao što smo već rekli, značajka je prve generacije procesora arhitekturo RISC.

Druga generacija procesora arhitekture RISC upotrebljava posebne tehnike za smanjenje kašnjenja u protočnoj strukturi koje nastaje zbog grananja. Te se tehnike obično zovu dinamičke sheme za predviđanje grananja (engl. Dvnamic braneh-prediction seheme). One se temelje na uporabi sklopovlja za dinamičko predviđanje ishoda grananja. Pod pojmom „dinamičko predviđanje“ razumijeva se predviđanje ciljne adrese tijekom izvođenja programa.

Takva najjednostavnija dinamička shema upotrebljava spremnik za predviđanje grananja (engl. Braneh-prediction buffer). Spremnik je zapravo mala memorija kojoj se pristupa na temelju manje značajnog dijela adrese instrukcije grananja. Ta memorija pohranjuje bit (bit predviđanja), koji govori o tomu je li posljednje grananje bilo izvedeno ili ne. Zapravo, na temelju samo tog bita ne zna se točno je li predviđanje ispravno. Naime, može se dogoditi da čak i neko drugo grananje ima jednak, manje značajan dio adrese. Međutim, to nije tako važno. Ako je pretpostavka ispravna, započinje pribavljanje u predviđenom smjeru. Ako se pak pokaže da je predviđanje bilo pogrešno bit predviđanja se invertira.

U praksi se umjesto te jednostavne sheme predviđanja upotrebljava preinačena shema s dva bita predviđanja pomoću kojih se određuju četiri stanja i kod koje se mora dogoditi dvostruko pogrešno predviđanje da bi se promijenilo stanje bitova predviđanja.

Page 14: seminarski aor

Sklopovna struktura koja podržava dinamičku shemu predviđanja grananja može biti oblikovana i na nešto složeniji način. Da bi se povećala propusnost protočne strukture (tj. da bi se

uklonio i onaj protočni mjehurić koji nastaje zbog uvjetnog grananja), potrebno je znati, na kraju aktivnosti segmenta IF, s koje će se adrese pribaviti sljedeća instrukcija. Je li to moguće i u slučaju

instrukcije grananja? Naime, na kraju aktivnosti segmenta IF procesor bi trebao znati je li pri-bavljena, još nedekodirana instrukcija, instrukcija grananja. I ne samo to. Procesor bi trebao

znati i sadržaj programskog brojila - ciljnu adresu grananja. Ako se zna, da je sljedeća instrukcija grananja na kraju faze IF i, ako se zna sljedeći sadržaj PC-a (ciljna adresa grananja),

tada nema nikakva kašnjenja u protočnoj strukturi (ostvaruje se grananje bez gubitka periode; engl. Zero-cvcle branch). Posebna priručna memorija (vidi pogl.7), koja pohranjuje ciljne adrese instrukcija grananja, zove se spremnik ciljnih adresa {engl.

Branch-target buffer). Slika 10. prikazuje organizaciju spremnika ciljne adrese grananja.

Kad započne pribavljanje instrukcije, sadržaj se programskog brojila uspoređuje sa skupom adresa instrukcija koje su pohranjene u prvom stupcu spremnika ciljne adrese grananja. Adrese u prvom stupcu spremnika predstavljaju adrese (poznatih) instrukcija grananja. Ako se podudaranje postigne (sadržaj PC-a se podudara s nekom od adresa), tada se instrukcija, Čije je pribavljanje u tijeku, tumači kao instrukcija grananja. Treba obratiti pozornost na to da se nalazimo u tijeku aktivnosti protočnog segmenta 1F i da instrukcija još nije dekodirana! U slučaju podudaranja, iz drugog se stupca dohvaća pridruženo polje koje sadrži ciljnu adresu grananja, odnosno predviđanje adrese sljedeće instrukcije. Pribavljanje instrukcije započinje s te adrese. Treći stupac, dvobitno polje, sadrži trag o tomu je li predviđeno grananje bilo ostvareno ili nije (bitovi predviđanja).

SI. 6.10. Organizacija spremnika ciljne adrese grananja

Page 15: seminarski aor

SI. 11. Dijagram tijeka postupka predviđanja grananja upotrebom spremnika ciljne adrese gra-nanja

Slika 11. prikazuje dijagram toka cijelog postupka predviđanja grananja upotrebom spremnika ciljne adrese grananja. Iz njega vidimo sljedeće:

• nema kašnjenja u protočnoj strukturi ako je postignuto podudaranje iako se pokaže da je predviđena ciljna adresa ispravna te ako su uvjetigrananja ispunjeni (ovo posljednje se utvrđuje tijekom aktivnosti protočnog segmenta ID).• kad grananje nije pravilno predviđeno, plaća se kazna od dva protočnamjehurića, jer tada treba ukloniti (pogrešno) pribavljenu instrukciju izprotočne strukture i ponovno pokrenuti pribavljanje instrukcije s ciljneadrese koja je poznata na završetku aktivnosti protočnog segmenta ID,te obnoviti sadržaj spremnika ciljne adrese grananja.

U sustavu RS/6000 upotrebljava se nešto drukčija tehnika za rješavanje problema grananja. Umjesto zakasnjelih instrukcija grananja, upotrebljava se traženje instrukcije grananja (engl. Branch scanning). Tom se tehnikom u mnoštvu slučajeva grananja postiže grananje bez dodatnih kašnjenja u protočnoj strukturi, odnosno tzv. grananje bez gubitka periode (engl. Zero-cycle branch). U sljedećem primjeru podrobnije ćemo opisati osnovne značajke tehnike traženja instrukcije grananja za sustav RS/6000.

Sustav RISC RS/6000 (tvrtka IBM, 1986. god.) obično se svrstava u sustave RISC druge generacije. On, uz osnovne značajke arhitekture RISC, upotrebljava i mnoge

Page 16: seminarski aor

značajke arhitekture CISC. Bitne okolnosti okruženja (godine 1986. kad je započeo projekt), koje su utjecale na njegove arhitekturne značajke, jesu :

• rasprostranjenost i prihvaćanje operacijskog sustava UNIX kao-podloge za komercijalna i znanstvena područja primjene računala• pojavljivanje arhitekture RISC i brojne izvedbe procesora s tim značajkama• raspoloživost 1-um CMOS VLSI tehnologije koja dopušta izvedbu sklopova razine složenosti od 300 000 do miljun komponenti i brzine rada koja odgovarafrekvenciji taktnog signala od 25 MHz do 30 MHz• znatan napredak u oblikovanju prevodioca, arhitekture i organizacije procesorai iskustva dobivena u IBM-u na srodnim projektima 801 i RT.

Cilj arhitekata koji su radili na RS/6000 bio je razvoj druge generacije arhitekture RISC koja će biti temelj novoj porodici IBM-ovih računalnih sustava. Rezultat je POVVER (Performance Optimized With Enhanced RISC) arhitektura i proizvod RS/6000. Želja za povećanjem performanse procesora ogleda se i u IBM preinačenoj kratici RISC - Reduced Instruction Set Cydes.

Arhitektura sustava RISC RS/6000 temelji se na procesoru koji se sastoji od triju ne-zavisnih funkcijskih jedinica: jedinice priručne instrukcijske memorije ICU (Instruction Cache Unit), cjelobrojne jedinice FXU (Fixed Point Unit) i jedinice za operacije brojevima s pomičnim zarezom FPU (Floating Point Unit). Svaka od tih jedinica ostvarena je na posebnom Čipu. Slika 12 . prikazuje blok-dijagram sustava RS/6000.

Page 17: seminarski aor

SI. 12. Blok-dijagram sustava RS/6000

Osnovna je zamisao arhitekture sustava RS/6000 istodobni rad funkcijskih jedinica uz što je moguće manje kućanskih poslova potrebnih za njihovo međudjelovanje i sinkronizaciju, jedinica ICU se zapravo sastoji od instrukcijske priručne memorije i jedinice grananja (engl. Branch Processing Unit). Jedinica ICU pribavlja instrukcije (u jednom mahu iz instrukcijske priručne memorije, koja je njezin sastavni dio, pri-bavljaju se četiri instrukcije), izvodi instrukcije grananja i instrukcije koje se odnose na registre stanja (LCR - Condition Register Logic instruetion). jedinica ICU, također, upućuje, odnosno odašilje, po dvije instrukcije u svakoj periodi taktnog signala cjelobrojnoj jedinici i jedinici za operacije brojevima s pomičnim zarezom (odašilje ukupno do četiri instrukcije). Ona također obrađuje prekide i sadrži sve glavne prekiđne upravljačke registre (MSR -Machine State Register, SRRO i SRR1 - Save and Re-Store Registers).

Cjelobrojna jedinica FXU dekodira i obavlja cjelobrojne aritmetičke i logičke operacije, te load i store instrukcije koje se odnose na jedinicu za operacije brojevima s pomičnim zarezom. Jedinica FXU ima i jedinice za cjelobrojno množenje (traje od 3 do 5 perioda) i cjelobrojno dijeljenje (traje od 19 do 20 perioda). Jedinica FXU ima logiku i translacijski spremnik potrebne za generiranje adresa i adresnu translaciju . Također, uz to, FXU ima svu potrebnu logiku za rukovanje i upravljanje pristupom priručnoj memoriji podataka. Sama jedinica FXU sastavljena je od nekoliko izvršnih jedinica: zbrajala, jedinice za obavljanje logičkih operacija, jedinice za množenje i dijeljenje.

Page 18: seminarski aor

Jedinica VPU, razvijena u skladu sa standardom IEEE 754, istodobno može obavljati aritmetičke operacije brojevima s pomičnim zarezom i tzv. floating-point load i store instrukcije. Floating-point load i store instrukcije omogućuju dohvat i pohranjivanje optjranada i rezultata u jednostrukom ili dvostrukom formatu (u skladu sa standardom IEEE 754).

Važno je napomenuti da su jedinice FXU i FPU jednakog prioriteta i da djeluju isto-dobno.

Jedinica ICU, odnosno jedinica grananja, ima iznimno važan zadatak: ona mora smanjiti ili čak potpuno ukloniti kašnjenja u protočnoj strukturi koja nastaju zbog iz-vođenja instrukcija grananja. Naime, analize programa napisanih u višim program-skim jezicima pokazale su (pogl. 0) da su više od 30 % svih instrukcija u programima upravo instrukcije grananja. Istraživanja u sklopu IBM-ova projekta 801 također su pokazala da je od toga oko trećinu instrukcija grananja bezuvjetno grananje i programske petlje. Takva se vrsta grananja obično zove predvidljivo grananje. Arhitekti su u IBM-u realizacijom jedinice grananja željeli postići izvođenje instrukcija predvidljivih grananja bez kašnjenja u protočnoj strukturi, a preostala uvjetna grananja ostvariti sa Što je moguće manjim kašnjenjem. Jedinica 1CU oblikovana je tako da instrukcije iz instrukcijske priručne memorije upućuje kao „neinterpretirane“ instrukcije prema jedinicama FXU i FPU. Također, ona vodi brigu i o neprekinutom i glatkom“ toku instrukcija upućenom objema jedinicama. Zahvaljujući „nein-terpretiranim“ instrukcijama mnoge instrukcije grananja su „nevidljive“ za te jedinice. Takva vrsta grananja ostvaruje se bez kašnjenja u protočnoj strukturi i izvorno se naziva grananje bez gubitka periode (engl. Zero-cycle branch). Da bi se to postiglo, jedinica grananja upotrebljava sljedeću strategiju koja se često naziva i traženje instrukcije grananja (engl. Branch scanning). Ona se može protumačiti:

• Ciljna adresa grananja generira se kad se prvi put pojavi instrukcija grananja između pet instrukcija smještenih na vrhu instrukcijskog spremnika. (To vrijediako nije u tijeku upravo izvođenje neke druge instrukcije grananja ili ako nekadruga instrukcija grananja ne čeka na izvođenje.)• Instrukcija uvjetnog grananja, za koju je zastavica postavljena, odnosno uvjetgrananja zadovoljen dovoljno prije u odnosu na samu instrukciju grananja,često neće zahtijevati kašnjenje u protočnoj strukturi. Kad se prvi put pojavi instrukcija uvjetnog grananja (između pet instrukcija u instrukcijskom spremni

Page 19: seminarski aor

ku), sklopovlje procesora utvrđuje hoće li se grananje izvesti ili neće ili pak daodluka o tomu još ne može biti donesena.U ovom posljednjem slučaju ciljna se instrukcija pribavlja, ali se uz to pretpostavlja da se grananje ipak neće izvesti (!!!}. Sljedne se instrukcije (one neposredno iza instrukcije grananja) upućuju izvršnim jedinicama na izvođenje (pazite, uvjetno izvođenje). Kad izvršna jedinica konačno postavi odgovarajuću zastavicu, jedinica grananja određuje definitivno hoće li se grananje izvesti ili ne, Ako se ono izvodi - poba-cuju se uvjetno izvođene sljedne instrukcije, a pretpribavljene instrukcije s ciljne adrese grananja upućuju se izvršnim jedinicama.

Ako uvjet grananja nije zadovoljen (jasno, grananje se ne izvodi), izvode se sljedne instrukcije, a briše se sadržaj spremnika u kojem su bile smještene ciljne instrukcije grananja.

Kad optimirajući prevodilac ne može instrukciju (o kojoj ovisi uvjetno grananje)pomaknuti dovoljno ranije u slijedu instrukcija, tada će to prouzrokovati kašnjenje u protočnoj strukturi. Ako se grananje ne izvodi (uvjet grananja nije zadovoljen), neće biti kašnjenja u protočnoj strukturi.

Prikažimo tri tipična slučaja izvođenja instrukcije grananja.

Slučaj 1: Bezuvjetno grananjeNeka programski odsječak ima sljedeći oblik

Instrukcije se izvode u četiri protočna segmenta: pribavi (F), odašilji (DP - Dispatch), dekođiraj (1D) i izvrši (E). Obrada u svakom od protočnih segmenata traje jednu periodu takta. Prvi protočni segment F pribavlja četiri instrukcije iz instrukcijske pri ručne memorije. Tijekom druge periode dvije se instrukcije upućuju cjelobrojnoj jedinici i-ili jedinici za operacije brojevima s pomičnim zarezom. Tijekom druge periode generira se i adresa ciljne instrukcije grananja i obavljaju logičke operacije koje se odnose na registar stanja.

Page 20: seminarski aor

SI. 13. Tijek izvođenja programskog odsječka u kojem se nalazi instrukcija bezuvjetnog grananja

U protočnom segmentu ID, tijekom treće periode takta, cjelobrojna jedinica dekodira instrukciju. U četvrtoj periodi obavlja se operacija u protočnom segmentu E. Slika 13. prikazuje tijek izvođenja programskog odsječka u kojem se nalazi instrukcija bezuvjetnog grananja.

Iz navedenog primjera vidimo da bezuvjetno grananje ne unosi dodatno kašnjenje u protočnoj strukturi. Bezuvjetno grananje, zahvaljujući tehnici traženja instrukcije gra-nanja, koja je primijenjena u jedinici za grananje, izvodi se bez kašnjenja. Pretraživa-njem instrukcijskih spremnika nađena je instrukcija bezuvjetnog grananja, te je prije njezina izvođenja određena adresa ciljne instrukcije i pretpribavljcn slijed instrukcija (TI, 72, 73,...}.

Slučaj 2: Uvjetno grananje koje se neće izvesti (uvjet grananja nije ispunjen) Programski odsječak neka ima sljedeći oblik:

Slika 14. prikazuje tijek izvođenja programskog odsječka u kojem se nalazi in-strukcija uvjetnog grananja (uvjet grananja nije ispunjen).

Page 21: seminarski aor

I u ovom slučaju instrukcija uvjetnog grananja neće prouzročiti dodatna kašnjenja u protočnoj strukturi.

SI. 14. Tijek izvođenja instrukcije grananja (uvjet grananja nije ispunjen)

Slučaj 3: Uvjetno grananje koje će se obaviti (uvjet grananja je ispunjen)

Programski odsječak ima sljedeći oblik:

Slika 15. prikazuje stanje protočne strukture u slučaju da je uvjet grananja ispunjen i da se stoga grananje obavlja.

U ovom slučaju instrukcija uvjetnog grananja prouzročit će kašnjenje u protočnoj strukturi od najviše tri periode taktnog signala. Ako optimirajući prevodilac uspije instrukciju uspoređivanja © pomaknuti tako da se ona prijašnja izvede, tada će ka-šnjenje u protočnoj strukturi zbog grananja biti 3 - i periode, gdje je i (i< 3) broj in-strukcija cjelobrojne jedinice između instrukcija C i BRC.

U primjeru 6.11. upoznali smo tehniku traženja instrukcije grananja koja se upotre-bljava u sustavu RISC RS/6000. Za razliku od zakasnjelog grananja, ovdje se upotre-bljava pretraživanje instrukcijskog spremnika i ako se pronađe instrukcija grananja sklopovlje procesora generira ciljnu adresu prije negoli je ona stvarno potrebna. Na taj se način, $ pripremljenom ciljnom adresom, ostvaruju uvjeti za grananje bez kašnjenja.

Page 22: seminarski aor