16
7-1 7. TOK IZVRŠAVANJA INSTRUKCIJA I INSTRUKCIJSKI PARALELIZAM Faza izvršavanja instrukcija se može podeliti na sledeće celine: - Dohvatanje instrukcije (Instruction Fetch), - Dekodovanje instrukcije i pristup registrima (Instruction decode and register fetch), - Izvršavanje instrukcije i računanje 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 izvršavanja operacija po kojoj se preklapa izvršavanje više operacija. Izvršavanje operacije se može razbiti na više logičkih celina koje će se nazivati fazama (čitanje instrukcije, formiranje adresa operanada, čitanje operanada, izvršavanje operacije, itd…). Za izvršavanje neke faze postoji poseban deo koji će se nazivati stepen S (slika 1). Stepen se sastoji od kombinacione mreže K i prihvatnog registra R. Kombinaciona mreža izvršava aritmetičke i logičke operacije. Prihvatni registar sadrži informacije potrebne za izvršavanje faze u datom stepenu i preostalih faza u stepenima koji slede. Faza 1 se izvršava u stepenu S 1 , faza 2 u stepenu S 2 , itd. Istovremeno se može naći k operacija u k različitih faza izvršavanja. Prihvatni registar uz stepen i sadrži informacije potrebne za izvršavanje faze u stepenu S i , ali i u svim preostalim stepenima. Slika 1. Pipeline organizacija

7 - Tok Izvrsavanja Instrukcija i Instrukcijski Paralelizam

Embed Size (px)

DESCRIPTION

k

Citation preview

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