Download as pdf or txt
Download as pdf or txt
You are on page 1of 133

Sadraj

SADRAJ
1. PROJEKTOVANJE PROCESORA ..................................................................................................4 1.1. Projektovanje ISP-a ...................................................................................................................4 1.2. Arhitektura, implementacija i realizacija...................................................................................5 1.2.1. ISA.....................................................................................................................................5 1.2.2. Dinamiko-statiki interfejs...............................................................................................6 1.3. Performanse procesora - gvozdeni zakon ..................................................................................7 1.3.1. Optimizacija performansi procesora..................................................................................7 1.4. Paralelno procesiranje na nivou - instrukcije.............................................................................8 2. PROJEKTOVANJE PROTONOG PROCESORA.........................................................................9 2.1. Balansiranje rada protonih stepeni...........................................................................................9 2.1.1. Kvantizacija stepena ........................................................................................................10 2.1.2. Hardverski zahtevi ...........................................................................................................12 2.2. Unificiranje tipova instrukcija .................................................................................................15 2.2.1. Klasifikacija tipova istrukcija ..........................................................................................15 2.2.2. Spajanje zahteva za korienjem resursa.........................................................................17 2.2.3. Implementacija protone obrade......................................................................................19 2.3. Minimiziranje protonih zastoja ..............................................................................................21 2.3.1. Programske zavisnosti i protoni hazardi ........................................................................21 2.3.2. Identifikacija protonih hazarda ......................................................................................23 2.3.3. Reavanje protonih hazarda ...........................................................................................26 2.3.4. Smanjenje cene uvodjenjem puteva premoavanja........................................................28 2.3.5. Implementacija protonog deblokiranja ..........................................................................30 2.4. Procesori sa dubljom protonou ...........................................................................................37 3. ORGANIZACIJA SUPERSKALARNIH PROCESORA...............................................................40 3.1. Ogranienja skalarnih protonih procesora .............................................................................40 3.1.1. Neefikasna unifikacija u jedinstveni protoni sistem ......................................................41 3.1.2. Gubitak perfomansi zbog stroge protonosti ...................................................................41 3.2. Od skalarnih ka superskalarnim protonim sistemima ...........................................................42 3.2.1. Paralelna protonost.........................................................................................................43 3.2.2. Raznovrsne protone obrade............................................................................................46 3.2.3. Dinamika protona obrada .............................................................................................47 3.3. Pregled principa rada superskalarnih protonih maina ..........................................................52 3.3.1. Pribavljanje instrukcija ....................................................................................................52 3.3.2. Dekodiranje instrukcija....................................................................................................54 3.3.3. Dispeovanje instrukcija..................................................................................................58 3.3.4. Izvrenje instrukcija.........................................................................................................61 3.3.5. Kompletiranje i izvlaenje instrukcija .............................................................................64 4. SUPERSKALARNE TEHNIKE .....................................................................................................67 4.1. Tehnike za poveanje protoka instrukcija ...............................................................................67 4.1.1. Upravljanje tokom programa i kontrolne zavisnosti .......................................................67 4.1.2. Degradacija performansi zbog grananja ..........................................................................68 4.1.3. Tehnike za predikciju grananja........................................................................................71 4.1.4. Oporavljanje nakon pogrene predikcije kod grananja ...................................................75 4.1.5. Napredne tehnike za predikciju grananja ........................................................................78 4.1.6. Druge tehnike za upravljanje tokom programa ...............................................................82 4.2. Tehnike za registarski-protok-podataka ..................................................................................84 4.2.1. Ponovno korienje registara i lanih zavisnosti po podacima .......................................84

Sadraj 4.2.2. Tehnike za preimenovanje registara ................................................................................85 4.2.3. Prave zavisnosti po podacima i ogranienja u protoku podataka ....................................89 4.2.4. Klasini Tomasulo algoritam...........................................................................................91 4.2.5. Dinamiko Execution jezgro............................................................................................98 4.2.6. Rezervacione stanice i bafer preuredjenja .....................................................................101 4.2.7. Dinamiki planer instrukcija..........................................................................................105 4.2.8. Druge tehnike za regulisanje toka podataka prema registrima ......................................106 4.3. Tehnike za ubrzanje toka podataka prema memoriji.............................................................108 4.3.1. Instrukcije za pristup memoriji ......................................................................................108 4.3.2. Hijerarhijska organizacija memorije..............................................................................111 4.3.3. Uredjenje memorijskih pristupa ....................................................................................121 4.3.4. Premoavanje i prosledjivanje kod instrukcije Load ...................................................123 4.3.5. Druge tehnike za memorijski protok .............................................................................128

Projektovanje procesora

1.

PROJEKTOVANJE PROCESORA

Procesori koji su u stanju da izvravaju unapred definisani skup instrukcija ( Instruction Set Processors - ISPs) nazivaju se mikroprocesori. Funkcionalnost mikroprocesora karakterie se skupom instrukcija koje je on u stanju da izvri. Svi programi koji se izvravaju na tom mikroprocesoru kodirani su pomou tog skupa instrukcija. Unapred definisani skup instrukcija naziva se skup instrukcija te arhitekture (Instruction Set Architecture-ISA). ISA se koristi kao interfejs izmedju softvera i hardvera, ili izmedju programa i procesora. Sa aspekta metodologije projektovanja ISA se odnosi na specifikaciju dizajna, dok mikroprocesor ili ISP predstavlja implementaciju dizajna.

1.1.

Projektovanje ISP-a

Svaki inenjerski dizajn poinje sa specifikacijom cilja koga treba ostvariti. Specifikacija se pre svega odnosi na opis ponaanja onoga to elimo da ostvarimo i predstavlja odgovor na pitanje ''ta taj dizajn radi ''. Sa druge strane, implementacija se tie strukturnog opisa rezultujueg dizajna i daje odgovor na pitanje "kako je taj dizajn konstruisan". Obino proces projektovanja ine dva fundamentalna zadatka: sinteza i analiza. Sinteza pokuava da pronadje implementaciju koja se zasniva na specifikaciji. Analiza ispituje implementaciju kako bi odredila da li i kako ona ispunjava specifikaciju. Sinteza je kreativniji zadatak jer pretrauje mogua reenja i pravi razliite kompromise u optimizaciji dizajna kako bi se stiglo do najboljeg reenja. Sutina anlize je u odredjivanju korektnosti i efikasnosti dizajna, ona koristi simulatore da bi procenila performanse i validirala dizajn. Jedan tipian proces projektovanja koji, da bi se stiglo do konanog cilja, zahteva viestruki prolaz kroz ciklus analiza-sinteza je prikazan na slici 1.1.
Specifikacija

Sinteza

Analiza

Implementacija

Slika 1.1 Inenjerski dizajn Proces projektovanja mikroprocesora je veoma kompleksan i ne tako direktan kao na slici 1.1 Specifikacija dizajna mikroprocesora predstavlja ISA koja specificira skup instrukcija koje taj mikroprocesor mora da bude u stanju da izvri. Implementacija je aktuelni hardverski dizajn koji se opisuje pomou HDL-a. Proces projektovanja savremenih visoko-performansnih mikroprocesora ine sledea dva koraka: a) mikroarhitekturni dizajn odnosi se na razvoj i definiciju kljunih tehnika, radi postizanja ciljnih performansi. Krajnji rezultat mikroarhitekturnog dizajna predstavlja opis organizacije mikroprocesora na visokom nivou. Opis obino koristi RTL (Register Transfer Language) da bi specificirao sve glavne module u organizaciji maine, kao i interakciju izmedju ovih modula. 4

Projektovanje procesora b) logiki dizajn RTL opis se detaljno razradjuje inkorporiranjem implementacionih detalja, kako bi se dobio HDL opis aktuelnog hardvera

1.2.

Arhitektura, implementacija i realizacija

Kada se govori o arhitekturi raunara definiu se tri osnovna i razliita nivoa apstrakcije: 1) arhitekturni specificira funkcionalno ponaanje procesora, 2) implementacioni odnosi se na logiku strukturu ili organizaciju koja vai za tu arhitekturu, i 3) realizacioni predstavlja fiziku strukturu u koju se ugradjuje ta implementacija. Arhitektura se esto naziva ISA. Ona speificira skup instrukcija koji karakteriu funkcionalno ponaanje ISP-a. Sav softver se mora preslikati ili kodirati u ovaj skup instrukacija kako bi mogao da se izvrava od strane procesora. Svaki program se kompajlira u sekvencu instrukcija koje pripadaju tom skupu. Tipini primeri arhitektura su IBM 360, DEC VAX, Motorola 68k, Power PC, IA 32, i dr. Atributi koji prate arhitekturu su asemblerski jezik, format instrukcija, adresni nain rada, i programski model. Implementacija predstavlja specifini dizajn arhitekture koja se naziva mikroarhitektura. U toku ivota, jedna ISA arhitektura moe da ima vei broj implementacija, pri emu sve implementacije izvravaju programe za tu ISA. Primeri implementacija poznatih arhitektura su IBM 360/91, VAX 11/780, Motorola 68040, PowerPC 604, Intel P6. Atributi koji su tipini za implementaciju su protoni dizajn, ke memorija, i prediktori granjanja. Implementacija se ostvaruje na nivou hardvera i nevidljiva je softveru. Realizacija implementacije se odnosi na fiziko ugradjivanje dizajna. Kada se govori o mikroprocesorima tu se pre svega misli na to da li je to fiziko ugradjivanje sprovedeno na ipu ili multiipu. Za datu implementaciju postoji vei broj relizacija. Te realizacije se mogu razlikovati u odnosu na taktnu frekvenciju, kapacitet memorije, interfejs magistrale, pakovanje i dr. Atributi koji prate realizaciju su povrina ipa, disipacija, hladjenje, pouzdanost, i dr. 1.2.1. ISA ISA se koristi kao specifikacija za projektante procesora. Projektovanje mikroprocesora poinje sa ISA, a kao rezultat se dobija mikroarhitektura koja zadovoljava specifikacije. Svaka nova mikroarhitektura mora da se validira u odnodu na ISA kako bi se osigurali da li ona ispunjava funkcionalne zahteve specificirane od strane ISA. Ovo je od izuzetne vanosti ako elimo dokazati da e se postojei softver korektno izvravati na novoj mikroarhitekturi. Do danas je razvijen, i koristi se, veliki broj ISA. One se razlikuju u odnosu na to kako se specificiraju operacije i operandi. Obino ISA definie skup instrukcija nazvan asemblerske instrukcije. Svaka instrukcija specificira operaciju i jedan ili vei broj operanada. Svaka ISA na jedinstven nain definie asemblerski jezik. Program na asemblerskom jeziku ini sekvenca asemblerskih instrukcija. Uglavnom ISA se medjusobno razlikuju po tome koliki se broj operanada specificira instrukcijom. Tako na primer, postoje 3-, 2-, 1-, i 0-adresne maine. Za razvoj efikasnih kompajlera i operativnih sistema potreban je period od desetak godina. Ovo znai da je inercija ISA u odnosu na razvoj softvera dosta velika. U principu to je ivotni vek ISA vei to je softverska baza za tu ISA vea, pa je takvu ISA tee zameniti. Nasuprot sporom napretku na polju ISA inovacija, nove mikroarhitekture se razvijaju na svakih 3 do 5 godina. 5

Projektovanje procesora

1.2.2. Dinamiko-statiki interfejs Do sada smo ukazali na sledee dve kljune uloge koje ima ISA: 1. ostvarivanje sprege izmedju hardvera i softvera to obezbedjuje nezavisni razvoj programa i maina, i 2. specifikaciju dizajna mikroprocesora, sve implementacije moraju da ispune zahteve i podre funkcionalnost specificiranu od strane ISA No pored ove uloge postoji i trea kojom se definie dinamiko-statiki interfejs (DSI), tj. ta se od strane ISA obavlja statiki u toku kompajliranja programa, a ta dinamiki u toku izvrenja programa. Mesto i uloga DSI-a prikazana je na slici 1.2.
program (softver) kompleksnost kompajlera arhitektura kompleksnost hardvera maina (hardver) skriveno u hardveru vidljivo u softveru ''statiki'' (DSI) ''dinamiki''

Slika 1.2 Dinamiko-statiki interfejs U dosadanjem razvoju ISA dizajna, predloen je vei broj razliitih razmetaja DSI-a ( vidi sliku 1.3). Tako na primer, Mike Flynn je predloio postavljanje DSI-a veoma visoko, pri emu se sve aktivnosti obavljaju ispod DSI-a, tj. programi su napisani na HLL-u i mogu se izvravati od strane maine direktno (directly executable language machine). CISC ISA smetaju DSI na tradicionalnom asemblerskom jeziku, ili makrokd, nivou. Nasuprot tome RISC ISA sputaju DSI i oekuju da se najvei broj optimizacija obavi od strane kompajlera. Svrha trenda sputanja DSI-a ka niim nivoima je smanjenje kompleksnosti hardvera i realizacija maina koje bre izvravaju programe.
DEL ~CISC ~VLIW ~RISC HLL program DSI-1 DSI-2 DSI-3 hardver

Slika 1.3 Konceptualni prikaz moguih razmetaja DSI-a kod ISA dizajna

Projektovanje procesora

1.3.

Performanse procesora - gvozdeni zakon

Performanse procesora se definiu na osnovu gvozdenog zakona (iron low) koji glasi:

1 vreme instrukcije ciklusi vreme = = ..................(1.1) performanse program program instrukcije ciklusi U principu performanse se mere u zavisnosti od toga koliko dugo je vremena potrebno da se neki program izvri na toj maini. Krae vreme ukazuje na bolje performanse. Analizom jednaine (1.1) moemo da zakljuimo sledee: a) Prvi lan (instrukcija/program) ukazuje na ukupan broj dinamikih instrukcija koji je potreban da se izvri od strane programa, ovaj lan se naziva broj instrukcija (instruction count). b) Drugi lan se odnosi na uproseavanje, tj. koliko je mainskih ciklusa potrebno za izvrenje svake instrukcije. Ovaj lan se izraava u ciklusima-po-instrukciji, CPI, (Cycles Per Instruction). c) Trei lan ukazuje na vremensko trajanje svakog mainskog ciklusa, tj. ciklusa maine (machine cycle) Performanse procesora se mogu poveati smanjenjem vrednosti svakog od tri lana u jednaini (1.1). No sva tri lana nisu nezavisna, naime, izmedju njih postoji sloena interakcija. Smanjenje jednog lana moe da dovede do poveanja ostala dva. Zbog ovoga, poboljanje performansi predstavlja jedan izazov koji se sastoji u nalaenju dobrog kompromisa (balansa) izmedju svih faktora koji su od uticaja.
1.3.1. Optimizacija performansi procesora Kao to smo ve ukazali tehnike za optimizaciju performansi imaju za cilj da u jednaini (1.1) redukuju vrednost jednog ili veeg broja lanova. Neke od tehnika mogu redukovati samo jedan lan ostavljajui ostala dva nepromenjena. Tako na primer, kompajler obavlja optimizaciju putem eliminisanja redudantnih i beskorisnih instrukcija u objektnom kdu, to znai da se moe smanjiti broj instrukcija u programu (uticaj prvog lana u jednaini (1)), a da se pri tome ne promene CPI i vreme ciklusa (drugi i trei lan). Jedan drugi primer bi bio sledei. Ugradnjom brih kola skrauje se vreme propagacije signala kroz gejtove, a to znai da se potencijalno skrauje trajanje mainskog ciklusa, a da se pri tome ne promeni broj instrukcija i CPI. Ovakve tehnike za optimizaciju performansi su uvek poeljne i treba da se koriste samo kada cena koja treba da se plati zbog njihovog uvodjenja nije tako visoka. Postoje i druge tehnike koje redukuju jedan od lanova u jednaini (1), ali istovremeno poveavaju drugi ili ostala dva. Kod ovih tehnika, dobitak u performansama se postie samo tada kada efekat redukcije jednog lana premauje poveanje koje nastaje usled uticaja ostala dva. Analizirajmo sada poznate tehnike za redukciju lanova, tj. optimizaciju performansi. Postoji vei broj pristupa za redukciju broja instrukcija. Skup instrukcija moe da sadri sloenije instrukcije koje obavljaju vei obim posla po instrukciji. Na ovaj nain ukupan broj instrukcija potreban za izvrenje programa se smanjuje. Tako na primer, za izvrenje jednog programa na maini tipa RISC ISA je potrebno dva ili vei broj puta dinamikih instrukcija u odnosu na mainu tipa CISC ISA. No smanjenje broja dinamikih instrukcija esto rezultira poveanju sloenosti izvrne jedinice, a indirektno i poveanju vremena ciklusa. elja za smanjenjem CPI-a je inspirisala razvoj veeg broja arhitekturnih i mikroarhitekturnih tehnika. Jedna od kljunih motivacija kod RISC-ova odnosi se na smanjenje sloenosti svake instrukcije sa ciljem da se redukuje broj mainskih ciklusa potreban za procesiranje svake instrukcije. 7

Projektovanje procesora Drugo reenje za smanjenje CPI-a zasniva se na uvodjenju protonosti. Tree reenje se bazira na ugradnji ke memorije, ime se u znaajnoj meri skrauje proseno vreme pristipa memoriji. Kljuna mikroarhitekturna tehnika za redukciju vremena ciklusa je protonost. Protonost efektivno deli zadatak procesiranja instrukcije na vei broj stepeni. U tom slu~aju latencija u funkciji propagacije signala kroz proto~ni stepen odredjuje vreme trajanja mainskog ciklusa.

1.4.

Paralelno procesiranje na nivou - instrukcije

Paralelno procesiranje na nivouinstrukcije (instruction-level parallel processing) moe se formalno definisati kao konkurentno procesiranje veeg broja instrukcija. Tradicionalno, sekvencijalni (CISC) procesori u datom trenutku izvravaju po jednu instrukciju, i u proseku za procesiranje jedne instrukcije troe 10 mainskih ciklusa, to znai da je CPI = 10 . Kod protonih (RISC) procesora, i pored toga to je za kompletiranje izvrenja svake instrukcije potreban vei broj ciklusa, zahvaljujui preklapanju u izvrenju izmedju veeg broja instrukcija, CPI se redukuje na vrednost bliskoj jedinici. Kod superskalarnih procesora koji pribavljaju i iniciraju izvrenje veeg broja instrukcija po mainskom ciklusu CPI < 1 . (Veoma esto kod ovih procesora performanse se izraavaju preko broja instrukcija (Instruction Count, tj. kao IPC = 1 CPI ). Jednainu (1) moemo zapisati i u sledeem obliku:
Performanse = 1 instrucija 1 = broj instrukcija ciklusi vreme ciklusa

IPC frekvencija .............................................(1.2) broj instrukcija

Analizom jednaine (1.2) moemo zakljuiti da se performanse mogu pove}ati poveanjem IPC-a, poveanjem frekvencije, ili smanjenjem broja instrukcija.

Projektovanje protonog procesora

2.

PROJEKTOVANJE PROTONOG PROCESORA

Tri primarna izazova koje treba ostvariti u toku projektovanja protonog sistema su: 1. uniformno izraunavanje balansiran rad protonih stepena 2. identino izraunavanje unificiranje tipova instrukcija 3. nezavisna izraunavanja minimiziranje zastoja u protonoj obradi

2.1.

Balansiranje rada protonih stepeni

Jedan tipian ciklus instrukcije se moe funkcionalno podeliti na sledee pet aktivnosti (izraunavanja): 1. pribavljanje instrukcije (instruction fetch, IF) 2. dekodiranje instrukcije (instruction decode, ID) 3. pribavljanje operan(a)da (operand(s) fetch, OF) 4. izvrenje instrukcije (instruction execution, EX) 5. smetaj operanda (operand store, OS)

IF

ID

OF

EX

OS

Slika 2.1 Peto-stepeni GENERIC protoni sistem

Projektovanje protonog procesora

2.1.1. Kvantizacija stepena Sa ciljem da se postigne dobar balans u izraunavanju vei broj stepeni, ija je latencija kraa, mo`e se grupisati u nova izraunavanja. Tako na primer, imajui u vidu da ISA koristi instrukcije fiksnog formata, jednostavne adresne naine rada, i ortogonalna polja u instrukcionom formatu, izraunavanja u stepenima IF i ID, koja su relativno jednostavnija u odnosu na ostala tri sa slike 2.1, mogu se grupisati u jedinstveno ( vidi sliku 2.2.)
IF ID

OF

EX

OS

Slika 2.2 etvorostepeni protoni sistem Ovakav pristup rezultira mainom sa grubo-zrnastim mainskim ciklusom, a shodno tome i niim stepenom protonosti . Umesto da se kombinuju (spajaju) izraunavanja sa kraim latencijama, veoma esto, da bi se izbalansirao rad protonih stepeni, usvaja se suprotan pristup. Naime, izraunavanje sa dugom latencijom se moe podeliti na izraunavanja sa kraim latencijama. Na ovaj nain se dobija maina sa sitno-zrnastim mainskim ciklusom i visokim stepenom protonosti. Na slici 2.3 prikazan je protono organizovan sistem koga ine 11 stepena.

10

Projektovanje protonog procesora

IF1 IF IF2

ID

ID1

OF1

OF

OF2

OF3

EX1 EX EX2

OS1

OS

OS2

10

OS3

11

Slika 2.3 11-stepeni protoni sistem

11

Projektovanje protonog procesora Zadatak Kao to smo ukazali kvantizacija stepena se moe ostvariti: a) spajanjem veeg broja izraunavanja u jedinstveno (slika 2.2), ili b) razbijanjem izraunavanja na vei broj manjih izraunavanja (slika 2.3) Neka ukupna latencija 5-stepenog sistema sa slike 2.1 iznosi 280 ns, a rezultujua vremena mainskog ciklusa za 4-stepeni (slika 2.2) i 11-stepeni sistem (slika 2.3) iznose 80 ns i 30 ns, respektivno. Za 4-stepeni i 11-stepeni protoni sistem odrediti: a) ukupnu latenciju, b) internu fragmentaciju, c) propusnost. Odgovor a) Latencije 4- i 11-stepenih protonih sistema iznose

T4 L = 4 80 ns = 320 ns T11L = 11 30 ns = 330 ns b) razlika izmedju nove ukupne latentnosti i poetno zadate ukupne latentnosti od 280 ns predstavlja interna fragmentacija T4 IF = 320 280 = 40 ns T11IF = 330 280 = 50 ns -za 4-stepeni sistem -za 11-stepeni sistem

c) Propusnost 4-stepenog sistema 280 ns B4 = = 3,5 puta u odnosu na neprotoni dizajn, dok je propusnost 11-stepenog sistema 80 ns 280 ns B11 = = 9,3 puta u odnosu na neprotoni dizajn 30 ns
2.1.2. Hardverski zahtevi Kod najveeg broja realistinih dizajn reenja cilj nije samo da se ostvare najbolje mogue performanse nego i da se postigne najbolji odnos performanse/cena. To znai da pored maksimiziranja propusnosti (poveanja performansi) protonog sistema, moramo voditi ra~una i o hardverskim zahtevima (cena). Zahtevi koji se odnose na realizaciju hardvera, a tiu se rada protonog sistema, moemo svrstati u sledee tri kategorije: 1. neophodna logika za upravljanje i manipulaciju podacima u svakom od stepena, 2. portovi RF polja koji su neophodni radi konkurentnog pristupa registrima od strane veeg broja stepeni, 3. memorijski portovi koji podravaju konkurentni pristup memoriji od strane veeg broja stepeni. Analizirajmo sada rad 4-stepenog protonog sistema sa slike 2.1. Usvojimo da je to Load /Store arhitektura kod koje: 12

Projektovanje protonog procesora jedna tipina instrukcija tipa registar-registar treba da ita dva registarska operanda u prvom stepenu, a smeta rezultat u registar u etvrtom stepenu Load instrukcija treba da ita iz memorije u drugom atepenu, dok Store instrukcija treba da upisuje u memoriju u etvrtom stepenu Prvi stepen treba u svakom ciklusu da ita (pribavlja) iz memorije po jednu instrukciju Kombinovanjem zahteva od strane sva etiri stepena za pristup memoriji, i usvajui da se koristi unificirana memorija (jedinstvena memorija za instrukcije i podaci) zakljuujemo da memorija u svakom mainskom ciklusu mora da podri dva pristupa radi itanja i jedan radi upisa. Takodje u svakom mainskom ciklusu postoji zahtev da se dvaput pristupa registarskom (RF) polju radi itanja, a jedanput radi upisa. Slina analiza koja se odnosi na hardverske zahteve moe se sprovesti i za 11-stepeni protoni sistem sa slike 2.3.

Da bi se usaglasio rad sa sporom memorijom izraunavanje u okviru IF stepena se deli i preslikava na dva protona stepena,tj. na IF1 i IF2. Pri tome pribavljanje instrukcije se inicira u IF1, a zavrava u IF2. To znai da u toku svakog mainskog ciklusa memorija za instrukcije mora biti u stnju da podri dva konkurentna pristupa (jedan od strane IF1, a drugi od IF2). Na slian nain razbijanje stepena OF i OS na po tri stepena (OF1, OF2 i OF3, kao i OS1, OS2 i OS3) ukazuje da u datom trenutku u protonom sistemu mogu da se nalaze do est instrukcija koje pristupaju memoriji za podatke. To znai da memorija za podatke mora biti u stanju da podri do est nezavisnih konkurentnih pristupa, a da pri tome ne dodje do konflikta u svakom mainskom ciklusu, tj. zahteva se ugradnja 6-to portne memorije za podatke. U principu multiportne memorije su izuzetno skupe za implementaciju. Neto jevtinija reenja su ona koja se baziraju na interleaved memoriji sa veim brojem banaka. Ove memorije simuliraju funkcionalnost pravih multiportnih memorija, ali ne garantuju uvek konkurentni pristup bez konflikta.

Na osnovu dosadanje analize mogli bi da zakljuimo sledee: sa poveanjem dubine protonosti iznos hardverskih resursa koji je neophodan da se podri ovakva protonost se takodje poveava. najznaajnije poveanje hardverskih resursa predstavljaju dodatni portovi za pristup RF polju i memorijskim jedinicama. Ovi portovi treba da podre poveani iznos konkurentnih pristupa memorijskim jedinicama. da bi se uskladio rad sporog pristupa memoriji (duga latentnost) sa brzim radom protonog stepena (kratka latentnost) aktivnosti koje se odnose na pristup memoriji treba uprotoiti. Na alost, fiziko uprotoavanje memorijskih pristupa za vie od dva mainska ciklusa postaje veoma sloeno, pa je veoma teko reiti probleme koji se odnose na konkurentne pristupe bez konflikta.

13

Projektovanje protonog procesora Primer U skladu sa prethodnom diskusijom sagledajmo hardversku sloenost 5-stepenog protono organizovanog mikroprocesora MIPS R2000 / R3000 prikazan na slici 2.4. MIPS je Load / Store arhitektura, kod koje su izraunavanja IF i ID (sa slike 2.1) ujedinjena u jedinstveno. Stepen IF (slika 4), u svakom mainskom ciklusu, izdaje po jedan zahtev za pristup memoriji za instrukcije (I-keu). OF izraunavanje (sa slike 1) u konkretnom sluaju (slika 2.1) se obavlja u stepenima RD i MEM. ALU instrukcije manipuliu sa registarskim operandima. Pristup ovim operandima se vri u stepenu RD, kada se i itaju sadraji oba dva registra. Kod Load instrukcije, za pribavljanje operanda potreban je jedan pristup memoriji (D-keu), a ovaj pristup se izvodi u stepenu MEM (jedini stepen protonog sistema koji moe da pristupi D-keu). OS izraunavanje (slika 2.1) u konkretnom sluaju (slika 2.1) se izvodi u stepenima MEM i WB. Instrukcija Store pristupa D-keu u stepenu MEM. Instrukcije tipa ALU i Load upisuje rezultat u RF polju u stepenu WB (slika 2.1).

IF ID OF

IF

RD

EX

ALU

MEM OS WB

Slika 2.4 5-stepeni protoni sistem MIPS R2000 / R3000 Tekui trend koji se odnosi na projektovanje protonih procesora usmeren je ka realizaciji procesora koji koriste duboku protonost. Za prvu generaciju RISC protonih procesora karakteristina je bila 4- ili 5-stepena obrada, dok je za dananje procesore svojstvena 10-stepena ili dublja obrada.

14

Projektovanje protonog procesora

2.2.

Unificiranje tipova instrukcija

Drugi aspekt protonog idealizma polazi od injenice da protoni sistem repetitivno obavlja jedno isto izraunavanje. Ali, u najveem broju sluajeva ova pretpostavka ne vai. U sutini i pored toga to protoni sistem repetitivno izvrava instrukcije ipak se one medjusobno razlikuju. Naime razliiti tipovi instrukcija imaju zahteve za korienjem razliitih resursa, a takodje i ne zahtevaju istu sekvencu izraunavanja. Svaka instrukcija u toku obrade ne zahteva upotrebu svih protonih stepeni, tako da neki od njih postaju pasivni. Ovaj tip neefikasnosti u radu naziva se eksterna fragmentacija. Kljuni izazov projektantu je da minimizira eksternu fragmentaciju za sve tipove instrukcija. 2.2.1. Klasifikacija tipova istrukcija Da bi obavio izraunavanja, raunar mora biti u stanju da obavlja sledea tri osnovna zadatka: 1. aritmetiko-logike operacije, 2. kopiranje (premetanje) podataka, 3. sekvenciranje instrukcije Na koji nain e se ova tri osnovna zadatka dodeliti razliitim instrukcijama ISA predstavlja kljunu komponentu projektovanja skupa instrukcija. Primera radi kod CISC arhitektura postoje sloene instrukcije tako da jedna instrukcija obavlja po dva ili sva tri zadatka. Sa druge strane kod RISC-ova svaka instrukcija izvrava samo jedan od tri osnovna zadatka. U zavisnosti od prethodno pomenutih osnovnih zadataka, sve instrukcije se mogu klasifikovati u sledee tipove: 1. ALU instrukcije obavljaju sve aritmetike i logike operacije, 2. Load/Store instrukcije premetaju podatke izmedju registara i memorijskih lokacija, 3. Branch instrukcije kontroliu sekvenciranje instrukcija ALU instrukcije obavljaju aritmetike i logike operacije, i to striktno nad registarskim operandima. Samo instrukcije Load i Store mogu pristupiti podacima u memoriji. Instrukcije tipa Load, Store i Branch koriste relativno jednostavne adresne naine rada. Tipino se podrava registarsko-indirektni nain rada sa ofsetom. Standardno Branch instrukcije podravaju PC-relativni adresni nain rada. Kod sva tri tipa instrukcija pristup instrukcijama vri se preko I-kea, a podacima preko D-kea. Semantike ALU, Load-Store i Branch instrukcija, kojim se specificiraju sekvence izraunavanja definisane tim tipovima instrukcija, prikazanih na slikama 2.5, 2.6 i 2.7, respektivno. Izvorno izraunavanje IF ID OF EX OS Tip ALU instrukcije Integer instrukcija FP instrukcija pribavljanje instrukcije pribavljanje instrukcije (pristup I-keu) (pristup I-keu) dekodiranje instrukcije dekodirane instrukcije pristup registru RF polja pristup registru FP polja obavlja se FP operacije obavlja se ALU operacija upis rezultata u registar FP polja upis rezultata u registar RF polja Slika 2.5 Specifikacija instrukcije tipa ALU

15

Projektovanje protonog procesora Izvorno izrauna vanje IF ID Instrukcije tipa Load / Store Instrukcija Load pribavljanje instrukcije (pristup I-keu) dekodirane instrukcije pristup registru RF polja (bazna adresa) generisanje efektivne adrese (baza + ofset) pristup radi itanja memorijske lokacije (pristup D-keu) - upis rezultata u registar RF polja Instrukcija Store pribavljanje instrukcije (pristup I-keu) dekodiranje instrukcije

OF

pristup registru RF polja (registarski operand i bazna adresa)

EX OS

-generisanje efektivne adrese (baza + ofset) pristup radi upisa u memorijsku lokaciju (pristup D-keu)

Slika 2.6 Specifikacija instrukcija tipa Load / Store Izvorno izrauna vanje IF ID OF EX OS Instrukcije tipa Branch Jump (bezuslovna) instrukcija pribavljanje instrukcije (pristup I-keu) dekodirane instrukcije pristup registru RF polja (bazna adresa) generisanje efektivne adrese (baza + ofset) -auriranje vrednosti PC-a sa ciljnom adresom Uslovna Branch instrukcija pribavljanje instrukcije (pristup I-keu) dekodiranje instrukcije pristup registru RF polja (bazna adresa) generisanje efektivne adrese (baza + ofset) procena uslova grananja ako je uslov istinit, aurira se vrednost PC-a sa ciljnom adresom

Slika 2.7 Specifikacija instrukcije tipa Branch Analizirajui specifikacije za sva tri tipa instrukcija (slika 2.5, 2.6 i 2.7) vidimo da su inicijalna (izvorna) izraunavanja identina (aktivnosti u okviru stepena IF i ID), dok su ostale specifinosti sledee: ALU instrukcije ne pristupaju memoriji za podatke, tj. ne generiu memorijske adrese . Load/Store i Branch instrukcije imaju iste zahteve u pogledu izraunavanja efektivne adrese. Load/Store instrukcije mora da pristupaju memoriji za podatke, dok instrkcija Branch mora da generie adresu ciljne instrukcije grananja. Kod uslovnih instrukcija grananja (Conditionl Branch), pored zahteva za generisanjem efektivne adrese, mora da se obavi procena uslova grananja. Ova procena se obavlja proverom stanja statusnog bita koji je postavljen od strane prethodne instrukcije. 16

Projektovanje protonog procesora Konano bi mogli da zakljuimo sledee: I pored toga to sva tri tipa instrukcija obavljaju identine aktivnosti u stepenima IF i ID, izraunavanja u ostalim stepenima (OF, EX i OS) se razlikuju, a to dovodi do razlike u zahtevima za korienjem resursa. 2.2.2. Spajanje zahteva za korienjem resursa Izazov da se unificiraju razliiti tipovi instrukcija podrazumeva efikasno spajanje razliitih zahteva za korienjem tih resursa u jedinstveni instrukcioni protoni sistem koji moe da se prilagodi svim tipovima instrukcija. Cilj je da se minimizira ukupan broj resursa, a maksimizira korienje tih resursa. Procedura za unificiranje razliitih tipova instrukcija neformalno se sastoji od sledeih koraka: 1. Analiziranje sekvence izraunavanja za svaki tip instrukcije, i identifikacija odgovarajuih zahteva za korienjem resursa, 2. Pronalaenje sve to je zajedniko izmedju tipova instrukcija, i spajanje zajednikih izraunavanja sa ciljem da dele isti protoni sistem 3. Ako postoji fleksibilnost, bez da se narui semantika instrukcija, treba pomeriti redosled izraunavanja kako bi se olakalo dalje spajanje. Shodno slikama 2.5, 2.6 i 2.7 na slici 2.8 za jedan 6-stepeni prtotoni sistem prikazane su sumarne specifikacije za instrukcije tipa ALU, Load, Store i Branch. Analizirajui sliku 2.5 mogli bi da zakljuimo sledee: a) sva etiri tipa instrukcija obvljaju ista izraunavanja u stepenima IF i ID tako da ovi stepeni mogu biti zajedniki. b) sve etiri instrukcije itaju iz RF polja (odnosi se na OF stepen sa slike 1). ALU instrukcije pristupaju RF polju radi pribavljanja po dva registarska operanda. Load i Branch instrukcije pristupaju registru da bi dobavili baznu adresu. Store instrukcija pristupa jednom registru RF polja da bi dobavila registarski operand, a drugom registru radi bazne adrese. U sva etiri sluajeva ita se sadraj jednog ili dva registra. Shodno ovim sagledavanjima sva ova slina izraunavanja se mogu spojiti u trei protoni stepen koga emo nazvati RD (vidi sliku 2.5). RF polje mora biti u stanje da svakog mainskog ciklusa podri dve nezavisne konkurentne operacije itanja.

17

Projektovanje protonog procesora


ALU LOAD STORE BRANCH

IF:

IF

ID:

dekodiranje

dekodiranje

dekodiranje

dekodiranje

ID

OF:

itanje registra

itanje registra

itanje registra

itanje registra

RD

generisanje adrese itanje memorije

ALU

EX: OS:

ALU operacija

MEM
generisanje adrese generisanje adrese

upis u registar

upis u registar

WB
upis u memoriju auriranje PC-a

Slika 2.8 Unificiranje instrukcije tipa ALU, Load, Store i Branch kod 6-stepenog protonog sistema skraeno nazvan TYP c) ALU instrukcije zahtevaju ALU funkcionalnu jedinicu koja obavlja neophodne aritmetike i logike operacije. Za potrebe instrukcija Load, Store i Branch funkcionalna jedinica ALU se koristi za generisanje efektivne adrese radi pristupa memoriji. To znai da se sva ova izraunavanja mogu spojiti u etvrti protoni stepen nazvan ALU (vidi sliku 2.8). d) Instrukcije Load i Store treba da pristupaju memoriji za podatke, to znai da se jedan protoni stepen, nazvan MEM (vidi sliku 2.8), mora dodeliti za ove aktivnosti e) Instrukcije tipa ALU i Load moraju, u toku zadnjeg koraka izraunavanja, da upiu rezultat u odredini registar RF polja. Load instrukcija puni odredini registar podatkom koji se pribavlja iz memorije za podatke u stepenu MEM. Sa druge strane instrukcija tipa ALU je ve generisala rezultat u stepenu ALU (vidi sliku 2.8), ali radi unificiranja sa instrukcijom Load upis rezultata u odredini registar RF polja se vri u stepenu WB. To znai da se rezultat instrukcije ALU samo prenosi kroz stepen MEM, tj. kasni za jedan mainski ciklus, i tek nakon toga u stepenu WB upisuje u RF polje. Naime za instrukciju tipa ALU stepen MEM unosi jedan pasivan mainski ciklus. f) Kod uslovnih instrukcija grananja, pre auriranja stanja PC-a neophodno je odrediti uslov grananja. S obzirom da se ALU funkcionalna jedinica koristi za izraunavaje efektivne adrese ona se ne moe koristiti i za procenu uslova grananja. Za sluaj da se uslov grananja odnosi samo na proveru da li je vrednost nekog registra nula, pozitivna ili negativna, tada je dovoljno ugraditi samo jedan jednostavni komparator. Kao gradivni blok, komparator se moe ugraditi to je mogue pre u protonom lancu obrade, a to je stepen ALU, koji sledi nakon itanja sadraja referentnog registra koje se obavlja u stepenu RD. To znai da najkrai stepen u kome se sdraj PC-a moe aurirati na vrednost ciljne adrese grananja (izraunata je ciljna adresa grananja i procenjen uslov grananja) predstavlja stepen MEM (vidi sliku 2.8).

18

Projektovanje protonog procesora Analizirajui sliku 2.8 zakljuujemo da je 6-stepeni protoni sistem nazvan TYP veoma efikasan, jedino instrukcija Load aktivno koristi sva est stepena, dok ostale tri instrukcije aktivno koriste po pet od est stepeni. U datom trenutku sistem TYP moe istovremeno da izvrava do est razliitih instrukcija, pri emu se svaka instrukcija procesira od strane jednog od protonih stepeni u svakom mainskom ciklusu RF polje mora da podri do dve operacije itanja (od strane instrukcije u RD stepenu) i jednu operaciju upis ( od strane instrukcije koja se nalazi u stepenu WB). I-ke, u svakom mainskom ciklusu, mora da podri jednu operaciju itanja. Osim kod grananja, IF stepen mora kontinualno da inkrementira PC i pribavlja narednu sekvencijalnu instrukciju iz I-kea. D-ke, u svakom mainskom ciklusu, mora da podri jednu operaciju itanja memorije ili upis u memoriju. Samo stepen MEM moe da pristupa D-keu to znai da samo jedna instrukcija u protonom sistemu moe da pristupa memoriji za podatke. 2.2.3. Implementacija protone obrade Fizika organizacija 6-stepenog protonog sistema TYP prikazana je na slici 2.9. Kao to se vidi sa slike 2.9 postoje dva jedno-portna kea, D-ke i I-ke. IF stepen pristupa I-keu, a MEM stepen D-keu (za detalje vidi sliku 2.7). U svakom mainskom ciklusu I-ke podrava pribavljanje po jedne instrukcije. Kod stepena MEM, instrukcija Load(Store) ita (upisuje) iz (u) D-ke. Usvojeno je da su latencije D-kea i I-kea po jedan mainski ciklus.
a d r e s a p o d a c i

IF

I-ke

ID

RD
a d r e s a p o d a c i

memorija

ALU

MEM

D-ke

WB

Slika 2.9 Interfejs prema memorijskom sistemu kod 6-stepenog protonog sistema TYP

19

Projektovanje protonog procesora

D-ke MEM I-ke podaci adresa

adresa

IF

podaci ID WB

auriranje PC-a

dekodiranje instrukcija RD

RF polje

ALU

A L U

Slika 2.10 Fizika organizacija protonog sistema TYP Interfejs ka multi-portnom RF polju prikazan je na slici 2.10. Samo stepeni RD i WB pristupaju RF polju. U svakom mainskom ciklusu RF polje mora potencijalno da podri do dva itanja registara od strane stepena RD, i jedan upis u registar od strane stepena WB. To znai da multi-portno RF polje ima dva izlazna porta za podatke i jedan ulazni port, takodje za podatke.

20

Projektovanje protonog procesora

IF

ID D RD S1 S2
WAdr

Wpodaci

W/R

RAdr 1 RF

polje

ALU

RAdr 2 RPodaci 1 RPodaci 2

MEM

WB

Slika 2.11 Interfejs ka multi-portnom RF polju kod 6 stepenog protonog sistema TYP Kao to se vidi sa slike 2.11 postoje dodatna tri baferska stepena (oseneni blokovi) povezani na registarskom adresnom portu za upis. Baferski stepeni obezbedjuju da adresa odredinog registra, u kome se vri upis, pristigne na ulaz porta, u istom trenutku, kao i podatak koga treba upisati (izlaz stepena WB koji se preko baferskog stepena (oseneni blok) dovodi na ulaz W_podaci RF polja).

2.3.

Minimiziranje protonih zastoja

Trei aspekt idealizma u protonoj obradi bazira se na injenici da su sva izraunavanja koja se obavljaju od strane protonog sistema nezavisna. Kod k -stepene protone obrade postoji k razliitih izraunavanja koja se istovremeno obavljaju. No izmedju instrukcija postoje zavisnosti koje uzrokuju zastoje u radu protonog sistema. U daljem tekstu identifikovaemo tipove zastoja i ukazaemo na naine njihovog reavanja. 2.3.1. Programske zavisnosti i protoni hazardi Na ISA abstraktnom nivou, program se specificira kao sekvenca asemblersko jezikih instrukcija. Jedna tipina instrukcija se specificira kao funkcija: i : T S1 op S 2 gde je: D(i ) = {S1 , S 2 } - domen instrukcije i ; R (i ) = {T } predstavlja opseg instrukcije i ; a preslikavanje iz domena u opseg je definisano operacijom op. Neka su date dve instrukcije i i j , pri emu u leksikom redosledu obeju instrukcija, j sledi i . Izmedju instrukcija i i j kaemo da postoji zavisnost-po-podacima (data dependencies), koju oznaavamo sa i j , ako vai jedan od sledea tri uslova: R (i ) D ( j ) 0 (1) R ( j ) D (i ) 0 (2) R (i ) R ( j ) 0 (3) 21

Projektovanje protonog procesora


Prvi uslov ukazuje da instrukcija j zahteva operand koji se nalazi u opsegu instrukcija i. Ovo se naziva read-after-write (RAW) ili prava (true) zavisnost po podacima, i oznaava se sa i d j . Implikacija prave zavisnosti po podacima je takva da instrukcija j ne moe da pone sa izvrenjem sve dok instrukcija i ne zavri. Drugi uslov ukazuje da se operand koji koristi instrukcija i nalazi u opsegu instrukcija j, ili da instrukcija j modifikuje promenljivu koja predstavlja operand instrukcije i. Ova zavisnost se naziva write-after-read (WAR) ili anti zavisnost po podacima, i oznaava se sa i a j . Egzistencija anti zavisnosti iziskuje da instrukcija j ne zavri pre instrukcije i, inae e instrukcija i pribaviti pogrean operand. Trei uslov ukazuje da obe instrukcije i i j dele u svom opsegu zajedniku promenljivu, to znai da obe modifikuju tu promenljivu. Ova se naziva write-after-write (WAW) ili izlazna zavisnost po podacima, a oznaava se kao i o j . Postojanje izlazne zavisnosti iziskuje da prvo zavri instrukcija i, a tek nakon toga instrukcija j, inae e instrukcije koje slede nakon instrukcije j koristiti pogrean operand. Treba naglasiti da postoji i zavisnost tipa read-after-read, to znai da obe instrukcije i i j pristupaju istom operandu radi itanja. S obzirom da operacija itanja nije destruktivnog tipa, (za razliku od operacije upis, operacija itanja ne menja sadraj operanda), za ovaj tip zavisnosti kaemo da nije opasan. Naime nije bitan relativni redosled itanja jednog operanda od strane instrukcija i ili j, tj. da li se operand prvo ita od strane instrukcije i, a zatim od j, i obratno. Na slici 2.12 prikazane su RAW, WAR i WAW registarske zavisnosti po podacima prava zavisnost

R 3 R 1 op R 2 R 5 R 3 op R 4
anti zavisnost RAW zavisnost

R 3 R 1 op R 2
R 1 R 4 op R 5
izlazna zavisnost WAR zavisnost

R 3 R 1 op R 2
R 5 R 4 op R 6

R 3 R 7 op R 8

WAW zavisnost

Slika 2.12 RAW, WAR i WAW registarske zavisnosti Imajui u vidu da u asemblerskom jeziku domeni i opsezi instrukcija mogu biti promenljive koje se nalaze u registrima ili memorijskim lokacijama, zavisnosti koje mogu da se jave mogu biti memorijske zavisnosti ili registarske zavisnosti. 22

Projektovanje protonog procesora Pored zavisnosti po podacima izmedju dve instrukcije mogu da postoje i kontrolne zavisnosti, ili tzv. upravljake zavisnosti. Neka su date dve instrukcije i i j, pri emu instrukcija j sledi nakon instrukcije i. Tada za instrukciju j kaemo da je upravljaki zavisna od instrukcije i, to se oznaava sa i c j .Uslovne instrukcije grananja uzrokuju neodredjenost u sekvenciranju instrukcija. Naime instrukcije koje slede nakon uslovnog grananja mogu biti zavisne po upravljanju od instrukcije Branch. Program na asemblerskom jeziku ini sekvenca instrukcija. Korektnost semantike ovog programa zavisna je od sekvencijalnog izvrenja instrukcija. Sekvencijalni listing instrukcija ukazuje na sekvencijalno prethodjenje izmedju susednih instrukcija, tj. na redosled u izvr{enju instrukcija. Ako u programskom listingu iza instrukcije i sledi instrukcija i+1, tada se implicitno podrazumeva da prvo treba da se izvri instrukcija i , a nakon toga da sledi izvrenje instrukcije i+1. Ako se ostvari ovakvo sekvencijalno izvrenje, tada za semantiku korektnost programa kaemo da je ouvana (zagarantovana). Ili neto preciznije, poto ciklus instrukcija ini vei broj izraunavanja (aktivnosti), implicitno se podrazumeva da e se sve aktivnosti instrukcije i obaviti pre nego to bilo koje izraunavanje instrukcije i+1 moe da pone. Ovaj nain rada nazivamo totalno sekvencijalno izvavanje, tj. sva izraunavanja predvidjena sekvencom instrukcija se izvode sekvencijalno. Kod k-stepenog protonog sistema postoji preklapanje u procesiranju izmedju k instrukcija. Naime, odmah nakon to je instrukcija i zavrila svoje prvo izraunavanje i pone sa drugim, instrukcija i+1 poinje svoje prvo izraunavanje. U datom trenutku, kod k-stepenog protonog sistema istovremeno se obavljaju k izraunavanja. To znai da reim rada totalno sekvencijalno izrenje ne vai. Dok totalno sekvencijalno izvrenje predstavlja dovoljan uslov da se ouva semantika korektnost programa, on ne predstavlja i potreban uslov (zahtev) za ouvanje semantike korektnosti. Totalno sekvencijalno izvrenje uslovljeno sekvencijalnim listingom instrukcija predstavlja dodatnu specifikaciju programa. Sutinski zahtev koga treba ispuniti je da se semantika programa ne narui, a to se moe ostvariti ako se ne narue zavisnosti izmedju instrukcija. Drugim reima, ako izmedju instrukcija i i j postoji zavisnost, pri emu u programskom listingu instrukcija j sledi nakon instrukcije i, tada operacija itanje/upis zajednike (deljive) promenljive za instrukciju i i j mora da se ostvari kako je to definisano u izvornom (originalnom) sekvencijalnom redosledu. Kod protonih procesora, ako se o ovome ne vodi rauna, postoji potencijalna opasnost da se narue programske zavisnosti. Potencijalna naruavanja programskih zavisnosti se nazivaju protoni hazardi. Svi protoni hazardi moraju biti detektovani i razreeni, ako se eli ostvariti korektno izvrenje programa. 2.3.2. Identifikacija protonih hazarda Protoni hazard predstavlja potencijalni prekraj zavisnosti u programu. Da bi se u protonom sistemu javio hazard treba da postoje najmanje dva stepena koja sadre dve instrukcije koje istovremeno pristupaju zajednikoj (istoj) promenljivoj. Na slici 2.13 ilustrovani su neophodni uslovi koji u protono organizovanom sistemu dovode do pojave WAW, WAR i RAW hazarda. Uzrok pojave hazarda mogu biti memorijske i registarske zavisnosti po podacima. Na slici 2.13 ilustrovane su samo registarske zavisnosti. Napomenimo da i memorijske zavisnosti po podacima mogu biti tipa RAW, WAR i WAW.

23

Projektovanje protonog procesora

j : Rk

IF

j : Rk

IF

i o j

i a j

i : Rk

ID

i:

Rk

ID

a) WAW hazard

b) WAR hazard

j:

Rk

IF

i d j

i : Rk

ID

c) RAW hazard Slika 2.13 Neophodni uslovi da se u protonom sistemu jave WAW, WAR i RAW hazardi Analizirajmo sada pod kojim uslovima kod 6-stepenog protonog sistema TYP dolazi do pojave memorijskih i registarskih zavisnosti po podacima, kao i kontrolnih zavisnosti. Memorijske zavisnosti po podacima se javljaju ako postoji zajednika promenljiva koja se uva u memoriji, a pristupa joj se (bilo radi itanja ili upisa) od strane dve instrukcije. Za datu Load/Store arhitekturu, memorijska zavisnost po podacima moe da postoji samo izmedju instrukcija Load/Store. Da bi odredili da li protoni hazardi mogu da se jave zbog memorijske zavisnosti po podacima neophodno je da se ispita procesiranje instrukcija Load/Store od strane protonog sistema. Ako usvojimo da je ke podeljen na I-ke i D-ke, tada samo stepen MEM moe da pristupa D-keu. Imajui u vidu da se svi pristupi memorijskim lokacijama od strane Load/Store instrukcija obavljaju od strane stepena MEM, tada realno postoji samo jedan stepen u protono organizovanom sistemu koji moe da upisuje i ita u/iz D-kea. U saglasnosti sa prezentacijom na slici 2.13 do hazarda usled memorijske zavisnosti po podacima kod procesora TYP ne moe da dodje. U sutini, svi pristupi D-keu (memoriji za podatke) se obavljaju sekvencijalno, tako da je i procesiranje Load/Store instrukcija u potpunosti sekvencijalno. Na osnovu prethodne diskusije zakljuujemo da kod TYP protono organizovanog sistema ne postoje protoni hazardi zbog memorijske zavisnosti po podacima. 24

Projektovanje protonog procesora Razmotriemo sada egzistenciju registarske zavisnosti. Da bi odredili protone hazarde koji se mogu javiti zbog registarske zavisnosti po podacima, moramo prvo da identifikujemo sve protone stepene koji pristupaju registarskom polju (RF polju). Kod procesora TYP, sve operacije itanja registra obavljaju se u stepenu RD, a sve operacije upis u registar egzistiraju u stepenu WB. Izlazna zavisnost (WAW), oznaena kao i o j ukazuje da instrukcija i kao i naredna instrukcija j dele isti odredini registar. Izlazna zavisnost postoji zbog toga to instrukcija i mora prvo da upie rezultat izraunavanja u odredini registar, a nakon toga instrukcija j mora da obavi upis u isti registar. Kod protonog sistema TYP, samo stepen WB moe da obavi upis u RF poplje . Shodno prethodnoj diskusiji, svi upisi u registar se obavljaju u sekvencijalnom redosledu od strane stepenaWB. Saglasno neophodnom uslovu sa slike 2.13 a), kod sistema TYP, hazardi usled izlazne zavisnosti ne mogu da se jave. Anti-zavisnost (WAR), koja se oznaava kao i a j , ukazuje da instrukcija i ita iz registra koji za narednu instrukciju j predstavlja odredini registar. Da ne bi dolo do hazarda moramo obezbediti uslove da instrukcija i ita registar pre nego to instrukcija j upisuje u taj registar. Jedini nain da antizavisnost uzrokuje protoni hazard je kada naredna instrukcija j obavi upis u registar pre nego to instrukcija i proita sadraj tog registra. Ovakav scenario kod procesora TYP nije mogu jer sve operacije itanja registra se obavljaju u stepenu RD, koji se u protonoj organizaciji nalazi ispred stepena WB (WB je jedini stepen koji moe da vri upis u registar). Ova diskusija ukazuje da neophodni uslov sa slike 2.13 b) ne postoji kod procesora TYP. Shodno prethodnom, protoni hazardi zbog anti-zavisnosti ne mogu da se jave kod procesora TYP. Jedini tip registarske zavisnosti po podacima koji kod procesora TYP moe da dovede do pojave protonih hazarda predstavlja prava zavisnost po podacima. Neophodni uslov, prikazan na slici 2.13 c), egzistira kod procesora TYP jer protoni stepen RD, koji obavlja itanje registra, u proto~nom lancu obrade, je pozicioniran ispred stepena WB, koji vri upis u registar. Prava zavisnost po podacima, koja se oznaava kao i d j , podrazumeva da instrukcija i upisuje u registar dok instrukcija j koja sledi ita iz istog registra. Ako instrukcija j neposredno sledi instrukciju i, tada kada j dodje do stepena RD, instrukcija i e biti u stepenu ALU. Zbog ovoga , instrukcija i ne moe proitati registarski operand koji je rezultat instrukcije i sve dok instrukcija i ne prodje kroz stepen WB. Da bi otklonili ovu zavisnost po podacima , instrukciji j mora da se zabrani ulaz u stepen RD sve dok instrukcija i ne zavri procesiranje u stepenu WB. Na osnovu prethodne diskusije zakljuujemo da se hazardi zbog prave zavisnosti, kod procesora TYP, mogu javiti iz razloga to naredna instrukcija moe da stigne do protonog stepena gde se vri itanje registra, pre nego to prva instrukcija u protono organizovanom sistemu ne kompletira sa upisom u taj registar. Konano razmatraemo kontrolne zavisnosti. Ovaj tip zavisnosti javlja se zbog uslovnih instrukcija grananja. Ishod uslovne instrukcije grananja odredjuje da li narednu instrukciju koju treba pribaviti predstavlja sledeu sekvencijalnu (po redosledu) instrukciju, ili je to ciljna instrukcija grananja. U sutini mogu da postoje dve kandidat instrukcije koje slede nakon instrukcije uslovnog grananja. Kod protono organizovanog sistema, pod normalnim uslovima rada, IF stepen koristi sadraj PC-a da bi pribavio narednu instrukciju, a zatim inkremetira PC da bi pokazao na narednu sekvencijalnu instrukciju, sve sa ciljem da se protoni lanac celo vreme odrava popunjen. Ovaj zadatak se ponavlja u toku svakog mainskog ciklusa. No kada se pribavi uslovna instrukcija grananja, moe da dodje do potencijalnog naruavanja sekvencijalnoig toka. Ako do grananja ne dodje, tada ve pribavljene instrukcije od strane stepena IF su korektne (nalaze se na pravom putu sekvenciranja). Ali za sluaj kada do grananja dolazi, tada ve pribavljene instrukcije od strane stepena IF nisu korektne (ne nalaze se na putu sekvenciranja). U sutini problem neodredjenosti se ne moe uspeno reiti sve dok se ne odredi ishod koji ukazuje na uslov grananja. Kontrolna zavisnost se moe posmatrati kao da predstavlja odredjeni oblik RAW zavisnosti, iz razloga {to manipulie sa sadrajem PC-a. Naime, uslovna instrukcija grananja upisuje u PC, dok se 25

Projektovanje protonog procesora pribavljanje naredne instrukcije sprovodi itanjem sadraja PC-a. Kada do grananja dodje, uslovna instrukcija grananja aurira sadraj PC-a na adresu ciljne instrukcije. Inae PC se aurira na adresu naredne sekvencijalne instrukcije. Kod procesora TYP, auriranje PC-a na adresu ciljne instrukcije se obavlja u stepenu MEM, dok stepen IF koristi sadraj PC-a da bi pribavio narednu instrukciju. Shodno prethodnom, IF stepen ita PC, dok stepen MEM, koji u protonom lancu sledi kasnije, upisuje u PC. Redosled stepena IF i MEM u protonom lancu, u saglasnosti sa slikom 2.13 c), zadovljava neophodan uslov da se pojave RAW hazardi, zbog manipulacije sa sadrajem registra PC. Na osnovu svega izloenog zakljuujemo da kod protonog sistema TYP kontrolna zavisnost postoji, i da se ova moe posmatrati kao odredjeni oblik RAW hazarda koji podrazumeva manipulisanje sa sadrajem registra PC. 2.3.3. Reavanje protonih hazarda Kako smo ve konstatovali kod protonog sistema TYP jedini protoni hazardi tipa zavisnostpo-podacima koji se mogu javiti su RAW hazardi.Pored toga mogu se javiti i hazardi zbog kontrolne zavisnosti. Svi ovi hazardi uzrokuju da vodea instrukcija i upisuje u registar (ili PC), a instrukcija j koja sledi za njom ita taj registar. Da bi se uspeno reili probleme koji prate hazarde, moraju se preuzeti odgovarajue akcije. Pri ovome, efekti preuzetih akcija ne smeju da narue odgovarajue zavisnosti. Sa take gledita svakog RAW hazarda moramo obezbediti uslove da se operacija itanja javi nakon operacije upis u hazardni registar. Da bi uspeno reili RAW hazard narednoj instrukciji j mora da se zabrani da udje u protoni sistem u kome se ita sadraj hazardnog registra od strane instrukcije j, sve dok vodea instrukcija i ne prodje protoni stepen u kome se u hazardni registar vri upis od strane instrukcije i. Ovo se ostvaruje zaustavljanjem rada ranijih stepena protone obrade, tj. svih stepena koji prethode stepenu u kome se vri itanje registra. Time se instrukciji j brani da udje u stepen u kome se obavlja itanje kritinog (hazardnog) registra. Broj mainskih ciklusa za koji se koi procesiranje instrukcije j, u najgorem sluaju, jednako je rastojanju izmedju oba kritina stepena u protonom sistemu, tj. stepena koji obavljaju itanje i upis u hazardni registar, respektivno. Kada se govori o procesoru TYP, ako je vodea instrukcija i tipa ALU ili Load, tada se upis u kritini registar vri u stepenu WB, a itanje kritinog registra se obavlja u stepenu RD. Razlika izmedju ova dva stepena je tri, to znai da bi , u najgorem sluaju, zastoj trajao tri mainska ciklusa (vidi sliku 2.14). Najgori sluaj se javlja kada instrukcija j neposredno sledi instrukciju i, to znai da je j = i + 1 . U ovom sluaju, na ulaz u stepen RD instrukcija j se mora zaustaviti u trajanju od tri mainska ciklusa, a dozvolie joj se da pone sa procesiranjem u stepenu RD kada instrukcija i napusti stepen WB. Ako naredna instrukcija j ne sledi odmah iza instrukcije i , tj. ako izmedju instrukcije i i j postoje druge instrukcije, tada cena koja mora da se plati zbog zastoja je manja od tri ciklusa, pod uslovom da instrukicije izmedju i i j ne zavise od instrukcije i. Stvarna cena, izraena u broju ciklusa zastoja, koja mora da se plati , jednaka je 3-s, gde je s broj instrukcija izmedju i i j. Tako na primer, ako je s = 3, tada cena koja treba da se plati je nula, to znai da j ulazi u stepen RD onog trenutka kada i naputa stepen WB, pa shodno tome, nije potrebno ubaciti zastoj da bi se zadovoljila cena RAW zavisnosti.

26

Projektovanje protonog procesora vodea instrukcija tip (i) pratea instrukcija tipa (j) hazardni registar WRITE u registar u stepenu (i) READ registra u stepenu (j) RAW rastojanje ili cena koja se mora platiti ALU ALU, L/S,Br Int. register (Ri) WB (stepen 6) RD (stepen 3) 3 ciklusa Load ALU, L/S,Br Int. register (Ri) WB (stepen 6) RD (stepen 3) 3 ciklusa Branch ALU, L/S,Br PC MEM (stepen 5) IF (stepen 1) 4 ciklusa

Slika 2.14 Cena koja se u najgorem sluaju plaa zbog RAW hazarda kod protonog procesora TYP Kod upravljakih hazarda, vodea instrukcija i je instrukcija tipa Branch, koja aurira PC u stepenu MEM. Pribavljanje pratee instrukcije j zahteva itanje PC-a u stepenu IF. Razlika izmedju stepena MEM i IF je etiri, to znai da, u najgorem sluaju, cena koja mora da se plati iznosi etiri ciklusa. Kada se izvrava instrukcija uslovnog grananja, sva prethodna pribavljanja instrukcija se moraju stopirati zaustavljanjem rada stepena IF, sve dok se procesiranje uslovne instrukcije grananja ne kompletira u stepenu MEM, nakon ega se sadraj PC-a aurira na ciljnu adresu grananja. Ovo zahteva da se procesiranje u stepenu IF zaustavi za etiri ciklusa. Daljom analizom dolazimo do zakljuka da je ovaj zastoj opravdan samo kada se uslovno grananje obavi. Kada do grananja ne dodje, tada stepen IF treba da produi sa pribavljanjem instrukcija koje u programskom redosledu slede kao naredne. Ova osobina se moe ugraditi u protoni dizajn, tako da nakon instrukcije uslovnog grananja, dalje pribavljanje instrukcije se ne zaustavlja. To znai da protoni sistem usvaja da do grananja ne dolazi. U sluaju kada do-grananja-dodje, PC se aurira na ciljnu adresu grananja u stepenu MEM, a zatim sve instrukcije koje se nalaze u protonim stepenima koji prethode (kakvi su ALU, RD, ID i IF) se ponitavaju, a naredna instrukcija se pribavlja sa ciljne adrese grananja. Kod ovakvog reenja, cena od etiri ciklusa zastoja se plaa samo kada, kod uslovne instrukcije grananja, do-grananja-dodje, a u slu~aju kada do-grananja-ne-dodje tada ne dolazi ni do pojave umetanja zastoja. Slino RAW hazardima koji se javljaju zbog zavisnostipo-podacima, i cena zastoja od etiri ciklusa koja se ploa kod kontrolnih hazarda moe da se sagleda kao najgori sluaj RAW hazarda. No ako izmedju instrukcije i i instrukcije j mogu da se ubace instrukcije koje nisu kontrolno zavisne od instrukcije i, tada stvarni broj ciklusa zastoja koji se mora platiti moe se smanjiti za broj umetnutih instrukcija. Ovaj koncept se naziva zakanjena grananja (delayed branches). U sutini ciklusi zastoja se popunjavaju korisnim instrukcijama koje moraju da se izvre nezavisno od ishoda grananja, tj. da li do grananja dolazi ili ne dolazi. Cena koja mora da se plati zbog zastoja iznosi 4-s, gde je s broj kontrolnonezavisnih instrukcija koje se mogu umetnuti izmedju instrukcija i i j. Zakanjeno grananje, ili popunavanje ciklusa kod grananja, unosi dodatne tekoe u implementaciji ranije pomenute tehnike, koja se bazira na injenici da do grananja nee doi, koja dozvoljava stepenu IF da pribavi sve instrukcije koje u sekvencijalnom programskom redosledu slede nakon instrukcije grananja. Razlog je taj da se moraju obezbediti mehanizmi koji e biti u stanju da prave razliku izmedju umetnutih instrukcija i instrukcija koje pripadaju normalnom sekvencijalnom redosledu. U sluaju kada do-grananja-dodje umetnute instrukcije ne treba izbacivati, ali treba ponititi (eliminisati efekat) onih instrukcija koje se nalaze na normalnom sekvencijalnom putu, iz razloga {to one ne bi trebalo da se izve.

27

Projektovanje protonog procesora

2.3.4. Smanjenje cene uvodjenjem puteva premoavanja U dosadanjoj analizi doli smo do zakljuka da jedini mehanizam koji moe da izadje na kraj sa hazardima predstavlja zaustavljanje napredovanja pratee instrukcije kroz protoni sistem. Zaustavljanjem se garantuje da e se operacije upis i itanje u hazardni registar ostvariti u normalni sekvencijalni redosled. No esto kod protono organizovanih sistema za uspeno reavanje problema hazarda koristi se jedna daleko agresivnija tehnika nazvana premoavanje puteva (forwarding paths). Na slici 2.15 prikazano je procesiranje vodee instrukcije i za sluaj kada je i instrukcija tipa ALU ili Load. Ako je vodea instrukcija i instrukcija tipa ALU, tada rezultat koji je potreban instrukciji j, a generie od strane stepena ALU, postaje dostupan kada instrukcija i kompletira svoje izvrenje u stepenu ALU. Drugim reima, operand koji je potreban instrukciji j u sutini je dostupan na izlazu ALU stepena u trenutku kada instrukcija i napusti stepen ALU, tako da j ne treba da eka dva ciklusa da bi i napustila stepen WB. Ako se izlaz ALU stepena moe uiniti dostupan ulazu ALU stepena preko fizikih puteva za prosledjivanje (premoavanje), odmah nakon {to je on izra~unat, tada e prateoj instrukciji j biti dozvoljeno da udje u stepen ALU, onog trenutka kada vodea instrukcija i napusti stepen ALU. Kod ovakve situacije, instrukcija j ne treba u stepenu RD da pristupa RF polju, kako bi dobavila (proitala) zavisni operand. Umesto toga ona dobavlja zavisni operand sa izlaza ALU stepena. Ugradnjom puta za premoavanje zajedno sa odgovaraju}om prate}om upravljakom logikom, u najgorem sluaju, smanjujemo cenu, u broju zastoja, koja mora da se plati. Naime, cena sada iznosi nula ciklusa, za sluaj da je vodea instrukcija ALU tipa. ta vie, i kada je pratea instrukcija instrukcija i+1 nema potrebe za uvodjenjem zastoja, jer instrukcija i+1 moe da udje u stepen ALU onog trenutka kada instrukcija i napusti stepen ALU, to odgovara situaciji normalne protone obrade.

IF

ID

RD

4 ciklusa

0 ciklusa 1 ciklus

ALU

ALU MEM Load WB Branch

Slika 2.15 Ugradnja puteva za premoavanje kako bi se kod procesora TYP smanjila cena zbog ALU i Load instrukcije

28

Projektovanje protonog procesora Za sluaj kada je vodea instrukcija tipa Load, a ne ALU, izvodi se slino premoavanje. Naime kod instrukcije Load sadraj memorijske lokacije koji se puni u registar postaje dostupan na izlazu stepena MEM, tj., kada instrukcija Load kompletira svoje izvrenje u ovom stepenu. Ponovo, put za premoavanje se moe ugraditi sa izlaza stepena MEM ka ulazu u stepen ALU, sa ciljem da podri zahtev koji potie od pratee instrukcije. To znai da pratea instrukcija moe da udje u stepen ALU onog trenutka kada vodea instrukcija kompletira svoje izvrenje u stepenu MEM. U ovoj situaciji, zbog vodee instrukcije Load, cena zastoja od tri ciklusa (najgori sluaj) se redukuje na jedan ciklus. U najgorem sluaju, zavisna instrukcija moe biti instrukcija i+1, tj. j=i+1. Tada u normalnoj procesnoj obradi, kada se instrukcija i nadje u stepenu ALU tada instrukcija i+1 bie u stepenu RD. Kada instrukcija i advansira ka stepenu MEM, instrukcija i+1 mora i dalje da se zadri u stepenu RD zaustavljajui dalje napredovanje i onih instrukcija koje su ve ule u stepenima ID i IF. No u narednom ciklusu, kada instrukcija i napusti stepen MEM, zahvaljujui putu premoavanja sa izlaza stepena MEM na ulaz stepena ALU, instrukciji i+1 bie dozvoljeno da udje u stepen ALU. U sutini, procesiranje instrukcija i+1 se zaustavlja za jedan ciklus u stepenu RD. Cena koja se plaa zbog RAW hazarda kod TYP procesora sa izvedenim premoavanjem za razliite tipove instrukcija prikazana je na slici 2.16. vodea instrukcija tipa: (i) pratea instrukcija tipa:(j) hazardni registar READ registra u stepenu (j) premoavanje sa izlaza premoavanje ka ulazu cena koja se plaa u ciklusima zastoja ALU ALU, L/S,Br Int. register (Ri) RD (stepen 3) ALU, MEM, WB ALU 0 ciklusa Load ALU, L/S,Br Int. register (Ri) RD (stepen 3) MEM, WB ALU 1 ciklus Branch ALU, L/S,Br PC IF (stepen 1) MEM IF 4 ciklusa

Slika 2.16 Cena koja se u najgorem sluaju plaa zbog RAW hazarda kod procesora TYP kada se koriste putevi za premoavanje Cena koja se plaa zbog hazarda kada je ALU instrukcija videa naziva se ALU cena (ALU penalty). Na slian nain cena koja se plaa kada je Load instrukcija vodea naziva se Load cena (Load penalty). Odredite puta premoavanja (za ALU i Load instrukcije) predstavlja ulaz ALU. Put premoavanja sa take (mesta) kada je rezultat najranije dostupan ka krajnjoj taki gde je taj rezultat zavisnoj instrukciji potreban niziva se kritini-put-premoavanja (critical forwarding path), i on predstavlja najbolje re{enje sa ta~ke gledi{ta redukcije, koje se zbog postojanja hazarda pla}a za taj tip instrukcije. Pored kritinog-puta-premoavanja, neophodno je uvesti i dodatne puteve za premoavanje. Tako na primer, neophodno je uvesti puteve premoavanja sa izlaza stepena MEM i WB do ulaza u stepen ALU. Ova dva dodatna puta za premoavanje su potrebna jer zavisna instrukcija j moe potencijalno biti instrukcija i+2 ili instrukcija i+3. Ako je j=i+2 tada kada je instrukcija j spremna da udje u stepen ALU, instrukcija i bie na izlazu stepena MEM. Shodno tome, rezultat instrukcije i, koji jo nije upisan u odredini registar i potreban je instrukciji j, a dostupan je na izlazu MEM moe se proslediti ka ulazu ALU stepena, ime se obezbedjuje uslov da instrukcija j, u narednom ciklusu, udje u stepen ALU. Na slian nain, ako je j=i+3, rezultat instrukcije i se moe proslediti sa izlaza stepena 29

Projektovanje protonog procesora WB na ulaz stepena ALU. To odgovara situaciji kada je instrukcija i kompletirala upis u odredini registar (stepen WB), a instrukcija j je prola kroz stepen RD, i spremna je da udje u stepen ALU. U sluaju kada je j=i+4, RAW zavisnost je lako zadovoljiti jer instrukcija j obavlja normalno itanje sadraja odredinog registra RF polja, tj. nema potrebe za uvodjenjem puteva premoavanja (u tom trenutku instrukcija j ulazi u stepen RD, a instrukcija i je ve zavrila procesiranje u stepenu WB). Kada je vodea insrukcija tipa Load, najranije mesto gde je rezultat instrukcije i dostupan predstavlja izlaz stepena MEM, a krajnje mesto gde je taj rezultat potreban predstavlja ulaz ALU stepena. Shodno tome kritini-put-premoavanja kod instrukcije Load predstavlja put od izlaza stepena MEM do ulaza u stepen ALU. Ovim premoavanjem cena koja treba da se plati je jedan ciklus. Ponovo, jo jedanput premoavanje je potrebno sa izlaza stepena WB na ulaz u stepen ALU, to odgovara situaciji kada je pratea instrukcija j spremna da udje u stepen ALU, a vodea instrukcija i izlazi iz stepena WB. Analizirajui sliku 2.16 uoavamo da se ne koristi put premoavanja kada treba da se plati cena zastoja zbog instrukcije Branch. Ako je vodea instrukcija i tipa Branch, tada za raspoloivi nain adresiranja, najranije mesto gde je taj rezultat dostupan predstavlja izlaz stepena MEM. Kod instrukcije Branch, odredjivanje ciljne adrese grananja kao i generisanje uslova grananja se vri u stepenu ALU. Provera uslova grananja kao i punjenje ciljne adrese grananja u PC vri se u stepenu MEM. To znai da je nakon stepena MEM mogue koristiti vrednost PC-a sa ciljem da se pribavi instrukcija sa ciljne adrese grananja. Sa druge strane, PC mora biti dostupan na poetku stepena IF kako bi se obezbedilo pribavljanje naredne instrukcije. Na osnovu ovog zaklju~ujemo da krajnje mesto gde je taj rezultat potreban predstavlja poetak stepena IF. Kao rezultat kritini put premoavanja, je onaj koji odgovara ceni koja mora da se plati za auriranje vrednosti PC-a na vrednost ciljne adrese grananja u stepenu MEM i poetak pribavljanja ciljne adrese grananja u narednom ciklusu za sluaj da do grananja dolazi. 2.3.5. Implementacija protonog deblokiranja Reavanje protonih hazarda uvodjenjem hardverskih mehanizama naziva se protonodeblokiranje (pipeline interlock). Hardver protonog deblokiranja mora da detektuje sve protone hazarde i obezbedi uslove kako bi zadovoljio sve zavisnosti. Uvodjenjem puteva za premoavanje, skalarni protoni sistem ne moe se vie smatrati kao jednostavni linearno organizovan niz protonih stepeni kod koga se podaci prenose od jednog stepena ka drugom. Putevi premoavanja predstavljaju sada potencijalne povratne veze sa izlaza kasnijih stepena na ulaze stepena koji im prethode. Tako na primer, sva tri puta premoavanja koja su neophodna da podre ALU instrukciju u otklanjanju protonog hazarda su prikazana na slici 2.17. Ove puteve nazivamo ALU putevi premoavanja (ALU forwarding paths). Ispod slike 2.17 prikazano je kako je vei broj zavisnih prateih instrukcija mogue zadovoljiti u toku naredna tri redosledna mainska ciklusa. U toku ciklusa t1, instrukcija i prosledjujesvoj rezultat zavisnoj instrukciji i+1 preko puta za premoavanje oznaen kao ''a''. U toku narednog ciklusa, t2, instrukcija i prosledjuje svoj rezultat zavisnoj instrukciji i+2 preko puta za premoavanje ''b''. Ako instrukcija i+2 zahteva rezultat od instrukcije i+1, ovaj rezultat se moe takodje proslediti preko puta za premoavanje '' a'' u toku ciklusa t2. U toku ciklusa t3, instrukcija i mo`e da prosledi svoj rezultat instrukciji i+3 preko puta za premoavanje ''c''. Takodje, putevi ''a'' i ''b'' se mogu aktivirati u toku ciklusa t3 ako instrukcija i+3 zahteva rezultat instrukcija i+2 i i+1, respektivno.

30

Projektovanje protonog procesora

IF

ID

RD c b a

ALU

ALU-ovi putevi premoavanja

MEM

WB

i+1:

R1

i+2: i+1:

R1 R1

i+3:

R1

i : R1

i : R1
(i i + 1) (i i + 2)

i + 2 : R1 i+1: i : R1 (i i + 3) upisuje u R1 pre nego to i + 3 ita R1

premoavanje preko puta a

premoavanje preko puta b

Slika 2.17 Putevi premoavanja koji podravaju protone hazarde kada je vodea instrukcija tipa ALU Fiziki, implementacija logikog dijagrama sa slike 2.17 je prikazana na slici 2.18. Uoimo da se RAW hazardi detektuju koristei komparatore koji uporedjuju specifikatore (adrese) registara uzastopnih instrukcija. Ako procesor TYP u RF polju ima ugradjeno 32 registra tada se ugradjuju etiri 5-bitna komparatora (vidi sliku 2.18). Ako se pratea instrukcija j tekue nalazi u stepenu RD, tj. pokuava da proita svoja dva registarska operanda, tada prva dva komparatora (na levoj strani slike) proveravaju da li postoje mogue RAW zavisnosti izmedju instrukcije j i j-1, koja se tekue procesira u stepenu ALU. Ova dva komparatora uporedjuju oba specifikatora izvornih registara instrukcije j sa specifikatorom odredinog registra instrukcije j-1. Istovremeno ostala dva komparatora (na desnoj strani) proveravaju da li postoje mogue RAW zavisnosti izmedju instrukcije j i instrukcije j-2 koja se sada nalazi u stepenu MEM. Ova dva komparatora uporedjuju specifikatore oba izvorina registra instrukcije j sa specifikatorom odredinog registra instrukcije j-2. Izlazi sva etiri komparatora, u narednom ciklusu, se koriste kao upravljaki signali radi aktiviranja odgovarajuih puteva za premoavanje u sluaju kada se zavisnosti detektuju. Put premoavanja ''a'' se aktivira od strane prvog para komparatora kada se detektuje(u) RAW zavisnost(i) izmedju instrukcije j i j-1. Na slian nain, put premoavanja ''b'' se aktivira od strane izlaza drugog para komparatora kada se detektuje(u) zavisnost(i) izmedju instrukcija j i j-2. Oba puta za premoavanje se mogu istovremeno aktivirati ako je instrukcija j zavisna od obe prethodne instrukcije, j-1 i j-2.

31

Projektovanje protonog procesora

RF polje

Komp

Komp

Komp

Komp

ALU

Slika 2.18 Implementacija protonog deblokiranja kod RAW hazarda kada je vodea instrukcija tipa ALU

32

Projektovanje protonog procesora

IF

ID

RD e d
Load-ovi putevi premoavanja

ALU

MEM

WB

i : R1 MEM [

i+1:

R1

i+1:

R1

i+2:

R1

i : R1 MEM [
(i i + 2)

i+1:

R1

(i i + 1)
zastoj i + 1

premoavanje preko puta d

i : R1 MEM [ ] (i i + 3) i upisuje u R1 pre nego to i + 2 ita R1

Slika 2.19 Putevi premoavanja koji podravaju protone hazarde kada je vodea instrukcija tipa Load Put prosledjivanja ''c'' sa slike 2.17 nije prikazan na slici 21, a razlog je taj to ovaj put moe biti nepotreban ako se preduzmu odgovarajue akcije u toku projektovanja multi-portnog RF polja. Naime, ako se fiziki dizajn tro-portnog RF polja (dva itanja i jedan upis) ostvari tako da se u svakom ciklusu prvo obavi operacija upis, a nakon toga dve operacije itanja, tada nema potrebe za treim (''c'') putem premoavanja. U sutini instrukcija j proitae novu, korektnu, vrednost iz zavisnog registra u trenutku kada prolazi kroz stepen RD. To znai da se premoavanje obavlja interno u okviru RF polja, pa shodno tome ne postoji potreba za ekanjem od jednog ili dva ciklusa, kako bi se proitao sadraj zavisnog registra ili da se njegova vrednost prosledi sa izlaza stepena WB na ulaz stepena ALU.

33

Projektovanje protonog procesora Da bi se redukovala cena koja se plaa zbog hazarda kada je vodea instrukcija tipa Load neophodno je ugraditi dodatni skup puteva premoavanja. Na slici 22 prikazana su dva puta premoavanja koje je neophodno uvesti ako je vodea instrukcija kod protonog hazarda tipa Load. Ove puteve nazivamo puteve premoavanja tipa Load (Load forwarding paths). Put ''d'' premoava izlaz stepena MEM sa ulazom stepena ALU. Kada vodea instrukcija pristigne do stepena ALU, ako je instrukcija i+1 zavisna od instrukcije i tada ona mora da se zaustavi u stepenu RD u trajanju od jednog ciklusa. U narednom ciklusu kada instrukcija i naputa stepen MEM, njen rezultat se prosledjuje stepenu ALU preko puta ''d'' kako bi se obezbedili uslovi da instrukcija i+1 udje u stepen ALU. Za sluaj kada i instrukcija i+2 zavisi od instrukcije i, tada se isti rezultat prosledjuje i u narednom ciklusu preko puta ''e'' od stepena WB ka stepenu ALU, ime se obezbedjuje procesiranje instrukcije i+2 u stepenu ALU bez umetanja drugog ciklusa zastoja. Ponovo, ako se u multi-portno RF polje prvo obavlja operacija upis, a nakon toga operacija itanje, tada nema potrebe za uvodjenjem puta premoavanja ''e''. Tako na primer, u istom ciklusu obavie se prvo upis u registar RF polja u stepenu WB od strane instrukcije i, a zatim itanje rezultata instrukcije i od strane instrukcije i+2 koja se tekue procesira u stepenu RD. Fizika implementacija svih puteva premoavanja koji podravaju protone hazarde kako od strane instrukcije tipa ALU tako i instrukcije Load prikazana je na slici 23. Put premoavanje ''e'' nije prikazan jer je usvojeno da je RF polje tako projektovano da se prvo obavlja operacija upis, a zatim u istom ciklusu slede dve operacije itanja. Uoimo da su ALU put prosedjivanja ''b'' kao i Load put prosledjivanja "d"(prikazani na slikama 2.13 i 2.14, respektivno, kao putevi koji prolaze sa izlaza stepena MEM a dolaze na ulaz stepena ALU) prikazani kao razliiti fiziki putevi (vidi sliku 23). Ova dva puta pobudjuju prvi par multipleksera, tako da se samo jedan od njih moe selektovati, sve u zavisnosti od toga da li je vodea instrukcija u MEM stepenu tipa ALU ili Load. Put premoavanja ''b'' polazi od bafera u stepenu MEM u kome se uva izlaz ALU operacije od prethodnog mainskog ciklusa. Put premoavanja ''d'' polazi od bafera u stepenu MEM u kome se uva podatak koji je dobavljen iz D-kea. Ista dva para komparatora se koriste za detekciju registarskih zavisnosti, nezavisno od toga da li je vodea instrukcija tipa ALU ili Load. Dva para komparatora su neophodna jer hardver za deblokiranje mora da detektuje mogue zavisnosti izmedju instrukcija i i i+1, kao i izmedju instrukcija i i i+2. Ako je RF polje projektovano tako da se u svakom ciklusu prvo obavi operaciju upis, a zatim operacija itanje, tada zavisnost izmedju instrukcija i i i+3 je automatski ispunjena kada instrukcija i prolazi kroz stepen WB, a instrukcija i+3 kroz stepen RD. Izlaz prvog para komparatora zajedno sa signalom iz stepena ID se koristi da ukae da je vodea instrukcija tipa Load. Na ovaj nain generie se kontrolni signal kojim se zaustavlja rad prva tri stepena protonog sistema (IF, ID, RD) u trajanju od jednog ciklusa pod uslovom da je detektovana zavisnost izmedju instrukcija i i i+1, i da je instrukcija i tipa Load.

34

Projektovanje protonog procesora

Adresa

RF polje

D-ke
Komp Komp Komp Komp

put d

Load

1 put b

ALU

Load

Zastoj IF, ID, RD

Slika 2.20 Implementacija protonog deblokiranja kod RAW hazarda kada su vodee instrukcije tipa ALU i Load

Podaci

35

Projektovanje protonog procesora


I-ke

Adresa

Podaci

IR

uslov 0 1

ALU

+4

ciljna adresa grananja

nevalidni IF, ID, RD, ALU

Slika 2.21 Implementacija protonog deblokiranja kod hazarda koji se javljaju usled instrukcije Branch Hardver za deblokiranje kod procesora TYP mora takodje uspeno da reava i probleme koji nastaju kod protonih hazarda iniciranih od strane upravljakih zavisnosti. Implementacija mehanizma za deblokiranje koji podrava upravljake hazarde, a bazira se na injenici da je vodea instrukcija tipa Branch prikazan je na slici 24. Normalno, u svakom ciklusu IF stepen pristupa I-keu kako bi pribavio narednu instrukciju a istovremeno inkrementira PC da bi se pripremio za pribavljanje neredne sekvencijalne instrukcije. Kada se instrukcija tipa Branch pribavi od strane stepena IF, a zatim dekodira od strane stepena ID, rad IF stepena se moe zaustaviti sve dok instrukcija Branch ne prodje kroz stepen ALU, u kome se generie ciljna adresa grananja i izraunava uslov grananja. U narednom ciklusu, koji odgovara stepenu MEM instrukcije Branch, uslov grananja se koristi da napuni ciljnu adresu grananja u PC preko desne strane PC multipleksera, pod uslovom da do-grananja-dodje. Ovo rezultira cenom od etiri ciklusa zastoja, tj., cena koja mora da se plati kada se javi instrukcija grananja. Alternativno, moe se usvojiti pristup da do grananja nikad ne dolazi, tako da IF stepen produava da pribavlja naredne instrukcije sa sekvencijalnog programskog puta. U sluaju kada do-grananja-dolazi, PC se aurira na ciljnu adresu u stepenu MEM dok instrukcije koje se nalaze u stepenima IF, ID, RD i ALU se invalidiraju i izbacuju iz protonog sistema. U ovom sluaju, dolazi do zastoja od etiri ciklusa samo kada do-grananja-dolazi. Za sluaj da do-grananja-ne-dolazi cena zastoja iznosi nula ciklusa, tj. ne postoji zastoj u protonoj obradi.

36

Projektovanje protonog procesora

2.4.

Procesori sa dubljom protonou

Dubljom protonou poveava se broj protonih stepeni, ali se u svakom stepenu smanjuje broj nivoa ugradjenih logikih kola. Dobra strana dublje protonosti je mogunost smanjenja vreme-trajanja mainskog ciklusa, a shodno tome i poveanje taktne frekvencije. Tokom 80' godina prolog veka protoni procesori su imali od 4 do 6 protona stepena. Kod savremenih visoko-performansnih mikrorprocesora taktna frekvencija iznosi nekoliko GHz, dok je dubina protone obrade vea od 2.17. Protoni procesori su postali ne samo dublji nego i iri, kakvi su superskalarni. No postoji i negativna strana dublje protone obrade. Kako protonost postaje dublja cena koja treba da se plati zbog postojanja protonih hazarda postaje sve vea. Na slici 2.21 prikazano je ta se deava sa cenom koja se plaa kod izvrenja ALU, Load i Branch instrukcija kada protoni sistem postaje iri i dublji. Uporedjivanjem plitke i duboke protonosti vidimo da cena koja se plaa kod izvrenja ALU instrukcija iznosi jedan ciklus, kod instrukcija Load poveava se sa jedan na etiri ciklusa, a kod instrukcija tipa Branch poveava se sa tri na 11 ciklusa. U principu, kako se cena koja treba da se plati raste tako se poveava i proseni CPI. Ipak da bi se zbog uvodjenja duboke protone obrade ukupne performanse poveale neophodno je da uticaj (efekat) poveanja taktne frekvencije premai poveanje CPI-a.
pribavljanje (Fetch) dekodiranje (Decode) rasporedjivanje (Dispatch) izvrenje (Execute) memorija (Memory) poravnanje (Retire) pribavljanje Branch cena

dekodiranje

rasporedjivanje ALU cena izvrenje memorija poravnanje Load cena

Slika 2.21 Uticaj cene koja plaa kod izvrenja instrukcija ALU, Load i Branch zbog poveanja dubine protone obrade Postoje dva pristupa, koja se kod sistema sa dubljom protonou, standardno koriste za umanjenje negativnog efekta poveanja cene usled instrukcuje Branch (vidi sliku 2.22). Od svih poveanja cene, poveanje usled Branch-a je najvee jer ono zahvata (ima uticaj) na sve poetne stepene u protonoj obradi. Kad je predikcija grananja loa sve instrukcije koje se nalaze u poetnim stepenima moraju da se isprazne (anulira njihov efekat). Prvi pristup da se smanji cena zbog grananja je da se smanji broj protonih stepeni na poetku obrade (u lancu obrade). Tako na primer, CISC arhitekturi koja koristi format instrukcija sa promenljivom duinom potrebna je veoma sloena logika za dekodiranje instrukcija, a to indirektno zahteva ugradnju veeg broja protonih stepeni. Korienjem RISC arhitektura dekodiranje instrukcija postaje jednostavnije, a to rezultira manjem broju protonih stepena koji se nalaze na poetku lanca. Jedno alternativno reenje se sastoji u korienju logike za predekodiranje koja se ugradjuje pre punjenja instrukcije u I-ke. Pre-dekodiranim instrukcijama koje se pribavljaju iz I-kea poptrebno je daleko manje logike za dekodiranje pa otuda i manji broj dekoderskih protonih stepeni.

37

Projektovanje protonog procesora


Fetch Fetch

Front-end
kontrakcija Decode Dispatch Execute Branch cena

Decode Branch cena

Dispatch Memory Execute

Back-end
Memory Retire optimizacija

Retire Optimize

Slika 2.22 Ublaavanje Branch cene kod duboke protonosti Drugi pristup se sastoji u premetanju front-end kompleksnosti sa poetka protonog lanca na njegovom kraju (back-end). Kao rezultat dobijamo plie front-end procesiranje, a shodno tome i manju Branch cenu. Postoji jo jedan interesantan aspekt koga treba razmotriti, a on se odnosi na to od kakvog je uticaja dubina protonosti na CPI. U sutini tu treba da se pronadje kompromis izmedju poveanja taktne frekvencije i poveanja CPI-a. Na osnovu ''gvozdenog zakona'' performanse se odredjuju kao proizvod frekvencije i prosenog IPC-a, tj. odnosa frekvencija CPI . Kako protoni sistem postaje dublji, frekvencija se poveava, ali se takodje poveava i CPI. Poveanje dubine protone obrade je opravdano sve dok imamo poveanje performansi. No postoji vrednost iznad koje dublja protonost nema efekta. Pitanje koje se sada postavlja je sledee: Koja je ta vrednost, tj. kolika duboka protonost bi trebalo da bude ? Projektant Intel-a Edward Grochowski je vrio analizu koja se odnosi na skaliranje performansi sa poveanjem dubine protonosti. Rezultati tih ispitivanja prikazani su na slici 2.23.
25 20 15 10 5 0
frekvencija performanse CPI

Relativno skaliranje

13

19

25

31

37

43

49

55

61

67

73

79

85

91

97

Dubina protone obrade


Slika 2.23 Skaliranje performansi sa poveanjem dubine protone obrade 38

Projektovanje protonog procesora Kao to se vidi sa slike 2.23, performanse (izraunate kao frekvencija CPI ) imaju veoma brzi porast na poetku, a zatim relativno mali porast kako se dubina protonosti poveava. Na ekstremnom kraju krive sa poveanjem dubine protone obrade evidentan je pad performansi. Analiza pokazuje da se poboljanje performansi postie sve dok je dubina protone obrade manja od 57 stepeni, iznad te vrednosti performanse opadaju.

39

Organizacija superskalarnih procesora

3. ORGANIZACIJA SUPERSKALARNIH PROCESORA


3.1. Ogranienja skalarnih protonih procesora

Skalarni protoni sistemi se karakteriu jedinstvenim k-to stepenim protono organizovanim sistemom za procesiranje instrukcija. Sve instrukcije nezavisno od tipa prolaze kroz isti skup protonih stepena, ili kroz sve. Najvie po jedna instrukcija u datom trenutku moe se nai u svakom protonom stepenu, a instrukcije napreduju kroz protone stepene jedna za drugom. Sa izuzetkom protonih stepena koji su blokirani svaka instrukcija se procesira od strane protonog stepena za tano jedan ciklus i predaje se narednom stepenu u narednom ciklusu. Ovako stroga skalarna protonost ima sledea tri osnovna ogranienja o kojima emo u daljem tekstu detaljnije govoriti: 1. maksimalna propusnost skalarnog propusnog sistema iznosi (ograniena je) jednom instrukcijom po ciklusu 2. unifikacija svih tipova instrukcija u jedinstveni tip protone obrade rezultira neefikasnom dizajnu 3. zaustavljanje rada protonih stepeni dovodi do ubacivanja mehurova (bublles) u radu sistema. Kao to smo ve naglasili (vidi gvozdeni zakon) performanse procesora se mogu poveati poveanjem IPC-a i/ili frekvencije, ili smanjenjem ukupnog broja instrukcija.

Performance =
gde su:

1 Instructions 1 IPC Frequency ......... 3.1 = Instruction Count Cycle Cycle Time Instruction Count

Performance - Performanse; Instruction Count - Broj instrukcija;

Instructions Instrukcije Cycle Ciklus


1 - Frekvencija Cycle Time

Frekvencija se moe poveati korienjem dublje protonosti. Dublja protonost dovodi do manjeg broja nivoa logikih gejtova u svakom protonom stepenu (krae vreme procesiranja po stepenu), a indirektno i do kraeg vremena ciklusa (taktnog perioda) ili vee pobudne frekvencije. Realno postoji kritina taka u poveanju dubine protonosti. Naime kod dublje protonosti cena koja treba da se plati (broj izgubljenih ciklusa) jako zavisi od zavisnosti izmedju instrukcija. Sa druge strane smanjenje vreme ciklusa moe da ima negativni efekat na CPI. Nezavisno od dubine protonosti, skalarni protoni sistem moe da inicira procesiranje jedne instrukcije svakog mainskog ciklusa. U sutini, IPC kod skalarnog protonog sistema je ogranien na jedan. Da bi se ostvarila vea propusnost, posebno ako dublja protonost ne predstavlja neko ogranienje, sa aspekta cene, da bi se ostvarile bolje performanse, neophodno je inicirati vie od jedne instrukcije u svakom mainskom ciklusu. Ovo zahteva da se povea irina protonog sistema (obim rei koje se istovremeno procesiraju) kako bi se obezbedilo da se vie od jedna instrukcija u datom

40

Organizacija superskalarnih procesora trenutku procesira od strane svakog protonog stepena. Ovaj tip protonog sistema nazvaemo paralelni protoni sistem ( parallel pipeline). 3.1.1. Neefikasna unifikacija u jedinstveni protoni sistem Naglasimo da druga idealizovana pretpostavka o radu protonog sistema svodi na to da se sva repetitivna izraunavanja procesiraju od strane protonog sistema na jedinstveni nain. Kod protonog procesiranja instrukcije ovakva pretpostavka ne vai. Naime, postoje razliiti tipovi instrukcija od kojih se svaka karakterie svojim skupom izraunavanja. Unificiranje razliitih zahteva u jedinstvenu protonu obradu rezultira tekoama i/ili neefikasnosti u radu sistema. Analizirajui rad protonog sistema TYP zakljuili smo da kod prvih stepena u protonom lancu obrade (IF, ID i RD) postoji znaajna uniformnost u radu ali na alost, kod izvrnih stepeni (ALU i MEM) postoji izrazito neslaganje. U sutini, kod procesora TYP, ignorisali smo instrukcije tipa FP-floating point (ove instrukcije se vie karakteriu kao CISC tipa jer znaajno naruavaju koncept rada RISC procesora) kao i druge sloene instrukcije za manipulisanje sa brojevima u fiksnom zarezu (kakve su mnoenje i deljenje) jer je za njihovo izvrenje potreban vei broj EX-ciklusa (ciklusa izvrenja). Instrukcije koje zahtevaju due procesiranje i imaju promenljivu latentnost teko se unificiraju u poredjenju sa jednostavnim instrukcijama koje imaju kanjenje od samo jednog latentnog ciklusa. Sa druge strane kako se disparitet u brzini rada izmedju CPU-a i memorije poveava, latentnost (kao broj mainskih ciklusa) kod memorijskih instrukcija se permanentno poveava. Zbog razlika u latentnost hardverski resursi koji su neophodni da podre izvrenje ovakvih razliitih tipova instrukcija su takodje razliiti. Konstantna presija da se realizuje to bri hardver rezultira realizacijom specijalizovanih izvrnih jedinica a to sa druge strane dovodi do znaajne razlike u EX-stepenima kod protonih sistema. Shodno tome forsirana tenja za unificiranjem svih tipova instrukcija u jedinstvenu protonu obradu, kod svih visoko-performansnih procesora, postaje takorei nemogua ili ekstremno neefikasna. Kod paralelnih protonih sistema postoji stroga motivacija ne za unificiranjem izvrnog hardvera nego za implementacijom veeg broja razliitih izvrnih jedinica (EX-units). Ovaj tip protone obrade naziva se raznolika protona obrada (diversified pipelines). 3.1.2. Gubitak perfomansi zbog stroge protonosti Skalarni procesori su rigidni u smislu da se advansiranje instrukcija kroz protone stepene vri jedna za drugom. Instrukcije ulaze u skalarni protoni sistem kako je to definisano redosledom u programu tj. in order. Kada ne postoje zastoji u radu protonog sistema, sve instrukcije u protonim stepenima advansiraju sinhrono tako da za programski redosled kaemo da je ouvan. Kada se neka od instrukcija zaustavi u neki protoni stepen zbog zavisnosti izmedju nje i neke instrukcije koja joj prethodi, tada se ta instrukcija zadrava u tom protonom stepenu sve dok instrukcija koja joj prethodi ne zavri procesiranje u stepenu gde je to potrebno da se obavi, tj. da se dobije rezultat. Zbog rigidne prirode u radu protonog sistema, ako se zavisna instrukcija zaustavi u protonom stepenu i, tada svi stepeni koji prethode (stepeni 1,2,....., i-1) zadravaju napredovanje narednih instrukcija. Svih i stepena u protonom stepenu se zaustavlja sve dok instrukcija u stepenu i ne premosti unazad (preda) svoj zavisni operand. Nakon to je inter-instrukcijska zavisnost otklonjena, sve ostale i instrukcije mogu ponovo sinhrono da napreduju u protonom sistemu. Kod rigidne skalarne protonosti, zaustavljeni stepen na sredeni protonog lanca, ima uticaj na sve stepene koje mu prethode, u sutini zaustavljanje stepena i se propagira prema nazad ka svim stepenima koji mu u protonom lancu prethode.

41

Organizacija superskalarnih procesora

Premoavanje zaustavljene instrukcije nije dozvoljeno

Zaustavljena instrukcija

Propagacija zastoja unazad

Slika 3.1. Propagacija zastoja unazad Propagacija zastoja unazad od stepena koji je zaustavljen (stalled) (kod skalarnog protonog sistema) uzrokuje pojavu mehurova (bubbles) u protonoj obradi, ili tzv. zastoja u radu protonog sistema. U toku rada skalarnog sistema moe da se desi sledei scenario. Neka od instrukcija se zaustavlja u stepenu i zbog zavisnosti koja postoji izmedju nje i instrukcije koja joj prethodi (recimo izmedju instrukcija i i i-2). No naglasimo pri tome da postoji i druga instrukcija, kakva je, u konkretnom sluaju, i-1, koja se takodje zaustavlja, a da pri tome zavisnosti izmedju instrukcije i i instrukcija i-1 ne postoji. Saglasno programskoj semantici instrukcije i-1 ne bi trebalo da se zaustavi. Ako je ovoj instrukciji ipak dozvoljeno premoavanje i dalje napredovanje, zastoj u radu protonog sitema se moe efektivno redukovati tj. cena koja treba da se plati iznosi jedan ciklus (vidi sliku 3.1). Ako je veem broju instrukcija dozvoljeno da premoste instrukciju koja uzrokuje zastoj tada viestruka cena koja se plaa zbog zastoja moe se eliminisati u tom smislu to se pasivni protoni stepeni koriste za procesiranje korisnih instrukcija. Omoguavanje premoavanja vodeih instrukcija koje uzrokuju zastoj od strane prateih instrukcija naziva se van-redosledno-izvrenje (out-of-order-execution) instrukcija. Rigidni skalarni protoni sistem ne dozvoljava van-redosledno-izvrenje pa shodno tome uzrokuje pojavu zastoja u radu koji se javljaju zbog zavisnosti izmedju instrukcija. Paralelni protoni sistemi koji podravaju van-redosledno-izvrenje nazivaju se dinamiki protoni sistemi (dynamic pipelines) .

3.2.

Od skalarnih ka superskalarnim protonim sistemima

Superskalarni protoni sistemi se mogu smatrati prirodnim naslednicima skalarnih protonih sistema i predstavljaju poboljanje u odnosu na skalarne sa take gledita sledeih triju ogranienja: 1. Nasuprot skalarnim, superskalarni sistemi su paralelni protoni sistemi koji su u stanju da u svakom mainskom ciklusu procesiraju vei broj instrukcija. 2. Kod superskalarnih maina stepen EX se zasniva na korienju veeg broja heterogenih funkcionalnih jedinica (Floating Unit)-FU (jedna FU za integer sabiranje, druga za mnoenje, trea FU za FP sabiranje, itd.) dok kod skalarnih maina EX-stepen se zasniva na jedinstvenoj funkcionalnoj jedinici (recimo integer-ALU). 3. Sa ciljem da se ostvare najbolje mogue performanse, a da se pri tome ne zahteva preuredjenje redosleda instrukcija od strane kompilatora (to je karakteristika WLIV maina), superskalarni sistemi se mogu implementirati kao dinamiki protoni sistemi.

42

Organizacija superskalarnih procesora

a)

b)

c)

d) Slika 3.2 Paralelizam u radu maine:a) ne postoji paralelizam (nema protonosti); b) vremenski paralelizam (protonost); c) prostorni paralelizam (vei broj funkcionalnih jedinica); d) kombinovani vremenski i prostorni paralelizam 3.2.1. Paralelna protonost Stepen paralelizma maine se moe meriti kao maksimalan broj instrukcija koje u datom trenutku mogu konkurentno da se izvravaju. Kod k-to stepenog skalarnog protonog sistema do k instrukcija moe konkurentno biti rezidentno u maini, pa je zbog toga njihovo potencijalno ubrzanje u odnosu na ne protonu mainu k puta. Alternativno, isti iznos ubrzanja se moe postii korienjem k kopija ne protone maine radi paralelnog procesiranja k instrukcija. Ove dve forme mainskog paralelizma su prikazane na slikama 3.2 b) i c), i one se mogu nazvati kao vremensko-mainski-paralelizam (temporal machine parallelism) i prostorno-mainski-paralelizam (spatial machine parallelism), respektivno. Vremenski i prostorni paralelizam istog stepena rezultiraju takorei istom faktoru potencijalnog 43

Organizacija superskalarnih procesora ubzanja. No vremenski paralelizam koji se ostvaruje protonom obradom zahteva ugradnju manjeg hardvera u odnosu na prostorni paralelizam, koji se bazira na principu repliciranja celokupne procesne jedinice. Paralelni protoni sistemi se mogu posmatrati kao sistemi koji koriste kako prostorni tako i vremenski paralelizam (vidi sliku 3.2 d)), pa shodno tome postiu veu protonost u procesiranju instrukcija. Ubrzanje skalarnog protonog sistema se meri u odnosu na ne-protoni dizajn i prvenstveno je odredjeno od strane dubine skalarnog sistema. Kod paralelnih protonih sistema, ili superskalarnih protonih sistema, ubrzanje se obino meri u odnosu na skalarni protoni sistem i prvenstveno je odredjeno obimom paralelne protone obrade (width of the parallel pipeline). Paralelni protoni sistem obima s moe, u svakom od svojih protonih stepeni, konkurentno da procesira do s instrukcija, to potencijalno predstavlja ubzanje od s u odnosu na skalarni sistem. Na slici 3.3 prikazan je paralelni protoni sistem obima s = 3 .

IF

ID

RD

ALU

MEM

WB

Slika 3.3 Paralelni protoni sistem obima s = 3 . Za implementaciju paralelnog protonog sistema neophodna je ugradnja znaajnih hardverskih resursa. Svaki protoni sistem moe potencijalno da procesira i advansira, u svakom mainskom ciklusu, do s instrukcija. Shodno prethodnom logika kompleksnost svakog protonog stepena se poveava za faktor s . U najgorem sluaju, kola za medjustepeno povezivanje se mogu poveati za faktor s 2 , u sluaju da se koristi krozbar (crosbar) komutator obima s s koji je u stanju da povee svih s instrukcijskih bafera jednog stepena sa svim s instrukcijskim baferima narednog stepena. Sa ciljem da se podri konkurentni pristup registrima RF polja od strane s instrukcija, broj portova za itanje i upis u RF polju mora da se povea za faktor s . Na slian nain, moraju se ugraditi i dodatni portovi kako za pristup I-keu tako i za pristup D-keu. 44

Organizacija superskalarnih procesora Kao to smo prethodno, u Poglavlju 2, naglasili mikroprocesor Intel i486 je u sutini bio petostepeni skalarni protoni sistem. Naredni mikroprocesor iz familije Intel je bio Pentium. Mikroprocesor Pentium je superskalarna maina koja implementira paralelnu protonost obima s = 2 . U sutini Pentium implementira dve i486 maine vidi sliku 3.4. Vei broj instrukcija, u svakom mainskom ciklusu, se mogu pribavljati i dekodirati od strane prva dva paralelna protona stepena. U svakom ciklusu, mogue je u EX-stepenima potencijalno inicirati izvrenje po dve instrukcije EX stepene nazivamo U i V . Cilj je pri ovome da se ostvari iniciranje izvrenja od dve instrukcije po ciklusu.
IF IF D1 D1 D1 IF

D2

D2

D2

EX

EX

EX

WB

WB

WB

U pipe

V pipe

a)

b)

Slika 3.4 a) 5-stepeni skalarni protoni sistem i486; b) 5-stepeni paralelni protoni sistem Pentium obima s=2 U odnosu na skalarni protoni sistem i486, kod Pentium paralelnog protonog sistema neophodno je ugraditi znaajno vei broj hardverskih resursa. Kao prvo, 5-stepeni protoni sistem treba da se duplira po obimu. Oba protona EX-stepena, mogu u svakom od svoja tri stepena da prihvataju po dve instrukcije. EX-stepen moe da obavlja ALU operaciju ili da pristupa D-keu. Shodno prethodnom neophodno je obezbediti dodatne portove kod RF polja kako bi se ostvarilo konkurentno izvrenje od dve operacije po ciklusu. Ako su obe instrukcije koje se izvravaju u stepenu EX tipa Load/Store tada i D-ke mora da obezbedi dva pristupa. Pravi D-ke tipa dual-port je skup za implementaciju. Umesto toga D-ke kod Pentium-a se implementira kao single-port D-ke sa 8-strukim interleaving-om. Na ovaj nain, podrava se simultani pristup dvema razliitim bankama od strane Load/Store instrukcija koje se procesiraju u U i V stepenima. Ako postoji konflikt kod pristupa banci, tj. obe Load/Store instrukcije mora da pristupe istoj banci, tada se oba pristupa D-keu moraju serijalizovati.

45

Organizacija superskalarnih procesora

3.2.2. Raznovrsne protone obrade Hardverski resursi koji su potrebni za podrku radu izvrenja razliitih tipova instrukcija mogu znaajno da se razlikuju. Kod skalarnih procesora svi raznovrsni zahtevi koji se odnose na izvrenje svih tipova instrukcija moraju biti ujedinjeni (unificirani) u jedinstveni protoni sistem. Zbog toga protona obrada moe da bude veoma neefikasna, iz razloga to svaki tip instrukcije zahteva samo podskup izvrnih stepeni, ali ta instrukcija mora da prodje kroz sve izvrne stepene. Zbog toga svaka instrukcija je neaktivna kada prolazi kroz nepotrebne stepene i uzronik je znaajne dinamike spoljne fregmentacije. Latencija izvrenja svih tipova instrukcija je ista i jednaka je ukupnom broju izvrnih stepeni. Ovakav princip rada dovodi do nepotrebnih zastoja prateih instrukcija i/ili zahteva uvodjenje dodatnih puteva za premoavanje. Neefikasnost zbog unifikacije u jedinstveni protoni sistem kod paralelnih protonih sistema se reava korienjem razliitih funkcionalnih jedinica u EX stepenu(ima). Umesto da se imlementiraju s identinih protonih stepena od kojih je svaki istog obima EX deo protonog sistema se implementira pomou razrnorodnih protonih stepeni (vidi sliku 3.5). Kod ovog primera implementirana su 4 izvrna protona stepena, ili funkcionalne jedinice, razliitih protonih dubina. Stepen RD, u zavisnosti od tipa instrukcije, rasporedjuje (dodeljuje) instrukcije svim izvrnim protonim stepenima.

IF

ID

RD

EX

ALU

MEM1

FP1

BR

MEM2

FP2

FP3

WB

Slika 3.5 Raznolika paralelna protona maina sa etiri execution stanja

46

Organizacija superskalarnih procesora Kod projektovanja raznovrsnog paralelnog protonog sistema potrebno je obratiti posebnu panju. Jedan vaan aspekt se odnosi na to koliki broj i kakav tip funkcionalnih jedinica treba ugraditi. U idealnom sluaju broj funkcionalnih jedinica treba da bude uskladjen sa ILP-om programa, a tipovi funkcionalnih jedinica mora da su uskladjeni sa raznorodnim tipovima instrukcija koje postoje u programu. Kod prvih generacija superskalarnih procesora ugradjivala se druga funkcionalna jedinica koja se koristila sa manipulisanje brojevima u pokretnom zarezu tipa floating point, dok je prva bila namenjena sa manipulisanje brojevima tipa integer. Evolucija dizajna superskalarnih procesora kasnije je rezultirala two-issue i four- issue mainama (maine koje su u stanju da inicirajui zvrenje od dve i etiri instrukcije, respektivno). Kod ovih maina implementiraju se po etiri funkcionalne jedinice od kojih se jedna koristi za manipulisanje sa integer vrednostima, druga sa floating-point brojevima, trea sa Load/Store instrukcijama, a etvra sa Branch instrukcijama. Neka novija reenja inkorporiraju vei broj integer jedinica koje su namenjene za izvrenje integer operacija due latentnosti kakve su operacije tipa mnoenje, deljenje, add-multiply ili drugih specifinih operacija koje se esto koriste u signal procesiranju, raunarskoj grafici itd. 3.2.3. Dinamika protona obrada Kod svakog protonog sistema ili dizajna neophodno je ugraditi bafere izmedju protonih stepena. Kod strogo skalarnog protonog sistema, kako je prikazano na slici 3.8 izmedju dva uzastopna protona stepena (stepeni i i i+1) postavlja se bafer dubine jedan (u smislu instrukcija i ini ga jedan nto bitni registar). U ovom baferu se uvaju svi esencijalni upravljaki bitovi instrukcije koja se tekue procesira od strane stepena i , zatim upravljaki bitovi te instrukcije koja e u narednom mainskom ciklusu da se procesira u stepenu i+1, itd. Baferom dubine jedan (single entry buffer-SEB) je relativno lako upravljati. Svakog mainskog ciklusa tekui sadraj bafera se koristi kao ulaz u naredni protoni stepen i+1, a na kraju ciklusa bafer leuje podatke generisane od strane prethodnog stepena i. To znai da se bafer taktuje svakog mainskog ciklusa. Izuzetak se javlja kada instrukcija u baferu mora da se zaustavi i zabrani njen prolaz ka stepenu i+1. U tom sluaju, taktovanje bafera nije dozvoljeno i napredovanje instrukcija se zaustavlja u baferu. To znai da ako se neki od bafera u strogo protonom skalarnom procesoru zaustavi, tada svi stepeni koji prethode stepenu i moraju takodje da se zaustave. Za sluaj kada ne postoje zastoji tada se svaka instrukcija zadrava u svakom baferu samo po jedan mainski ciklus, a zatim napreduje prema narednom baferu. To znai da sve instrukcije ulaze i naputaju bafer u istom redosledu kao to je to specificirano u sekvencijalnom programu.

Stage i 1 Buffer (1) 1 Stage i+1

Stage i

...
n (in order)

Buffer (n)

...
n (in order)

Stage i+1

...

a)

b)

47

Organizacija superskalarnih procesora

Stage i

...
(in order)

Buffer ( n) (out of order) Stage i+1

...

c) Slika 3.6 Baferi locirani izmedju protonih stepena: a) bafer dubine jedan (SEB); b) vie-ulazni bafer (MEB); c) vie-ulazni bafer sa preuredjenjem Kod paralelnog protonog sistema, kako je to prikazano na slici 3.6 b), izmedju dva uzastopna protona stepena ugradjuju se baferi sa veim brojem ulaza (multientry buffer-MEB). Ovi baferi se mogu posmatrati kao prosto proirenje bafera sa jednostrukim ulazom. Svakog mainskog ciklusa u svakom od MEB moe se leovati vei broj instrukcija. U narednom ciklusu ove instrukcije mogu da prolaze kroz naredni protoni stepen. Ako sve instrukcije u MEB-u treba da advansiraju simultano (napreduju frontalno tj. da jedna ne ide ispred druge) tada upravljanje radom sa MEB je slino kao ono koje se odnosi na SEB. Naime MEB se taktuje ili zaustavlja u svakom mainskom ciklusu isto kao SEB. Ipak, kod paralelnog protoog sistema, u toku rada, moe da se desi sledei scenario: Bilo koja od instrukcija moe da dovede do nepotrebnog zastoja neke ili svih od instrukcija kod MEB-a. Zbog toga, radi ostvarivanja efikasnijeg rada paralelnog protonog sistema sofisticiranija reenja MEB-a su neophodna. Svaki ulaz jednostavnog MEB-a sa slike 3.6 d) je direktno povezan na jedan write port i read port, pri emu ne postoji interakcija izmedju ulaza bafera. Jedno poboljanje u odnosu na jednostavni bafer sastoji se u uvodjenju medju-povezivanja izmedju ulaza sa ciljem da se olaka premetanje podataka izmedju ulaza. Na primer ulazi se mogu povezati u linearni lanac kakav je pomeraki registar i da funkcioniu na principu reda ekanja tipa FIFO. Jednim drugim poboljanjem obezbedjuje se mehanizam za nezavisni pristup svakom ulazu bafera. Ovakvo reenje iziskuje da postoji mogunost eksplicitnog adresiranja svakog individualnog ulaza u bafer, kao i ne zavisno upravljanje operacijama Read/Write nad svakim od ulaza. Ako je svakom ulazno/izlaznom portu bafera obezbedjena mogunost da pripada bilo kom ulazu bafera, tada e se jedan takav vieulazni bafer (MEB) ponaati kao multiportni RAM malog kapaciteta. Sa jednim takvim baferom instrukcija se moe zadrati na ulaz u bafer za vei broj mainskih ciklusa, i moe se aurirati ili modifikovati ako je rezidentna u tom baferu. Dalja poboljanja mogu da se ostvare inkorporiranjem asocijativnog pristupa koji se odnosi na ulaze bafera. Umesto da se koristi konvencionalno adresiranje radi indeksiranja ulaza u bafer, sadraj bilo kog ulaza se moe koristiti kao asocijativni marker (tag) radi indeksiranja tog ulaza. Sa ovakvim mehanizmom pristupa, vieulazni bafer (MEB) se ponaa kao asocijativna ke memorija malog kapaciteta. Superskalarni protoni sistemi razlikuju se u odnosu na (rigidno) skalarne protone sisteme po jednom kljunom aspektu koji se odnosi na korienje sloenih vieulaznih bafera radi baferovanja instrukcija koje se '' u letu '' izvravaju. Sa ciljem da se minimiziraju nepotrebni zastoji instrukcija kroz paralelni protoni sistem, prateim instrukcijama mora da se dozvoli da premoste vodee instrukcije ije je napredovanje zaustavljeno. Ovakvo premoavanje moe da promeni redosled izvrenja instrukcija u odnosu na prvobitni sekvencijalni redosled definisan statikim kdom. Kod van48

Organizacija superskalarnih procesora redoslednog (out-of-order) izvrenja instrukcija postoji potencijal da se pribliimo granici propusnosti koji se odnosi na tok prenosa podataka, a vai za izvrenje instrukcija, tj. instrukcije poinju sa izvrenjem odmah nakon dostupnosti njihovog operanda. Paralelni protoni sistem koji podrava vanredosledno izvrenje instrukcija naziva se dinamiki protoni sistem (dynamic pipeline). Dinamiki protoni sistem ostvaruje van-redosledno izvrenje zahvaljujui korienju sloenih vieulaznih bafera koja omoguavaju da instrukcije ulaze i naputaju bafere u razliitim redosledima. Ovakav jedan vieulazni bafer koji ima mogunost da ostvari preuredjenje redosleda prikazan je na slici 3.6 c). Slika 3.7 prikazuje jedan paralelni raznovrsni protoni sitem iji je stepen superskalrnosti s = 3 i koji je organizovan kao dinamiki protoni sistem.

IF

ID

RD (in order) po redosledu (Dispatch buffer) Dispe bafer (out of order) vanredosledno

EX

ALU

MEM1

FP1

BR

MEM2

FP2

FP3

(Reorder buffer) Bafer preuredjenja

(out of order) vanredosledno (in order) po redosledu

WB

Slika 3.7. Dinamiki protoni sistem stepena superskalarnosti s = 3 Izvrni deo (EX) protonog sistema se sastoji od 4-protono organizovane funkcionalne jedinice, pri emu je stepen EX ogradjen od strane dva vieulazna bafera koji omoguavaju da se ostavari preuredjenje redosleda instrukcija. Prvi bafer koji se naziva dispeer bafer (dispatch buffer) se puni dekodiranim instrukcijama u saglasnosti sa programskim redosledom, a zatim rasporedjuje instrukcije ka funkcionalnim jedinicama u redosledu koji je razliit od programskog redosleda. Saglasno tome instrukcije mogu da napuste dispeer bafer u razliitom redosledu u odnosu na redosled 49

Organizacija superskalarnih procesora kojim su one ule u dispeer bafer. Ovaj protoni sistem takodje implementira skup raznovrsnih funkcinalnih jedinica od kojih svaka ima razliitu latenciju. Mogunost da se u funkcionalnim jedinicama inicira (issuing) van-redosledno izvrenje instrukcija, pri emu mogu da imaju promenljivu latentnost ukazuje na to da instrukcije mogu da zavravaju van-redosleda. Da bi obezbedili mehanizam koji garantuje da e izuzeci biti obradjeni u saglasnosti sa originalnim programskim redosledom, instrukcije moraju biti kompletirane (completed), tj. da auriraju mainsko stanje u programskom redosledu. Sa van-redoslednim zavretkom instrukcija, ostvarivanje redoslednog zavretka (completion), postie se ugradnjom drugog vieulaznog bafera koji je lociran na back-end-u izvrnog dela (EX) protonog sistema. Ovaj bafer se naziva completion buffer (vidi sliku 3.10). i koristi se za baferovanje instrukcija koje mogu da zavre van-redosledno, a izvlae (retires) se iz njega u programskom redosledu nakon ega se upisuju u konani WriteBack stepen. Ovako dinamiko organizovani protoni sistem olakava van-redosledno izvrenje instrukcije sa ciljem da postigne najkrae mogue vreme izvrenja, a to je takodje vano da obezbedi preciznu obradu izuzetaka izvlaenjem instrukcija iz completion buffer-a i auriranjem stanja maine u saglasnosti sa programskim redosledom.

50

Organizacija superskalarnih procesora

Fetch

(Instruction buffer) Instrukcioni bafer

Decode

(Dispatch buffer) Dispe bafer

Dispatch (Issuing buffer) Bafer iniciranja izvrenja instrukcija Execute

(Completion buffer) Bafer kompletiranja

Complete

(Store buffer) Store bafer

Retire

Slika 3.8 estostepeni TEMPLATE (TEM) superskalarni protoni sistem

51

Organizacija superskalarnih procesora

3.3.

Pregled principa rada superskalarnih protonih maina

Ukazaemo sada na kljune stavke koje se odnose na projektovanje superskalarnih protonih maina (SSPM). Nau panju usmeriemo, pre svega, ka opisu organizacije, ili strukturnom dizajnu SSPM-a. Tehnike i metode rada koje se odnose na dinamiku interakciju organizacije maine, semantiku instrukcija, kao i optimizaciju performansi maina bie date u narednom poglavlju. Na slian nain kao i sa estostepenim TYP protonim sistemom (objanjen u poglavlju 2 koji se odnosi na skalarni protoni dizajn) u ovom sluaju koristiemo estostepeni TEM superskalarni protoni sistem prikazan na slici 3.8 kao ablon za dalju diskusiju u vezi organizacije SSPM-a. U odnosu na skalarne protone sisteme postoje znaajne razlike u implementaciji. Naglasimo da TEM SSPM ne treba da se posmatra kao neka aktuelna implementacija neke tipine ili reprezentativne SSPM. est stepena kod TEM SSPM-a treba gledati kao jedan logiki protoni sistem koji moe, ali ne mora, da odgovara nekom estostepenom fizikom sistemu. No sva est stepena kod TEM SSPM-a pruaju jedan solidan okvir za diskusiju glavnih gradivnih blokova kod najveeg broja SSPM-a. est stepeni kod SSPM-a su: Fetch, Decode, Dispatch, Execute, Complete i Retire. Stepen Execute moe da sadri vei broj (protono organizovanih) funkcionalnih jedinica razliitih tipova i razliite izvrne latentnosti. Ovo iziskuje da stepen Dispatch distribuira instrukcije razliitih tipova ka odgovarajuim funkcionalnim jedinicama. Kod van-redoslednog izvrenja instrukcija u stepenu Execute, stepen Complete treba da obavi preuredjenje redosleda instrukcija i obezbedi (ostvari) redosledno auriranje stanja maine. Ukaimo takodje da postoje vieulazni baferi (MEB) koji se koriste za razdvajanje ovih est stepeni. Sloenost ovih bafera moe da varira u zavisnosti od njihove funkcionalnosti i lokacije u SSPM-u. Sagledaemo sada ulogu svakog od ovih est stepena. 3.3.1. Pribavljanje instrukcija Nasuprot skalarnoj protonoj maini (SPM) za SSPM kaemo da je paralelna maina koja je u stanju da svakog mainskog ciklusa iz I-kea pribavlja vie od jedne instrukcije. Za datu SSPM dubine s protoni stepen Fetch treba svakog mainskog ciklusa da pribavi s instrukcija iz I-kea. To znai da fizika organizacija I-kea mora biti dovoljno iroka i da svaka vrsta I-kea pamti s instrukcija, a da se svakoj vrsti pristupa jednovremeno. U daljoj diskusiji usvojiemo da je latencija pristupa I-kea kao i broj pribavljenih instrukcija jednak obimu vrste. Obino kod ovakve ke organizacije ke linija odgovara fizikoj vrsti u ke polju, ali takodje je mogui sluaj da se ke linija bude raspodeljena u nekoliko fizikih vsta ke polja, kako je to prikazano na slici 3.9.
Address Cache line Row decoder Address Cache line

Tag Tag Row decoder

Tag

. . .
Tag Tag

. . .

. . .
Tag

. . .

a) b) Slika 3.9 Organizacija I-kea: (a) jedna ke linija jednaka jednoj fizikoj vrsti; (b) jedna ke linija odgovara dvema fizikim vrstama 52

Organizacija superskalarnih procesora


Napomena:: gde su: Adrress- adresa; Cache line ke linija; Row decoder- Dekoder vrsta; Tag- tag (adresni marker)

Primarni cilj stepena Fetch je da maksimizira propusnost kod pribavljanja instrukcija. Ostvarena propusnost koja se postie od strane stepena Fetch ima uticaj na ukupnu propusnost SSPM-a jer propusnost svih narednih stepeni zavisi od nje i ne moe da nadmai propusnost stepena Fetch. Dva glavna faktora koja utiu na postizanje maksimalne propusnosti od s instrukcija po ciklusu su: 1. nepodeenost (neporavnjanost) s instrukcija koje se pribavljaju, a nazivaju se fetch grupa, u odnosu na organizaciju vrste I-kea (sluaj kada jedna fetch grupa pripada dvema vrstama) 2. egzistencija neke sekvence upravljanja kod pribavljanja instrukcija koje pribadaju fetch grupi (ako se pribavljaju instrukcije iz razliitih vrsti tada je potrebno generisati vei broj adresa pristupa kao i upravljake signale za itanje) Kod svakog mainskog ciklusa Fetch stepen koristi PC da indeksira I-ke u cilju pribavljanja svih s instrukcija. Ako je cela fetch grupa memorisana u istoj vrsti kea, tada se svih s instrukcija pribavljaju odjedanput. Sa druge strane, ako fetch grupa prelazi granice vrste tada se svih s instrukcija ne mogu pribaviti u jednom ciklusu (usvajamo da se samo jednoj vrsti I-kea moe pristupiti svakog ciklusa). To znai da se samo instrukcije prve vrste mogu pribaviti, dok ostale instrukcije zahtevaju drugi ciklus za pribavljanje. U tom sluaju propusnost pribavljanja efektivno se smanjuje na pola jer se zahteva dva ciklusa za pribavljanje s instrukcija. Ovo je posledica nepodeenosti fetch grupa, kod I-kea, u odnosu na granice vrste (vidi sliku 3.10). Ovakva nepodeenost redukuje efektivnu propusnost pribavljanja. U sluaju kada svaka ke linija odgovara fizikoj vrsti, kako je to prikazano na slici 3.9 a) tada prelazak granice vrste takodje odgovara prelasku granice ke linije to ne uzrokuje dodatne probleme. Ako se fetch grupa prostire u dve ke linije tada moe da se javi promaaj kod I-kea za sluaj kada se pristupa drugoj liniji, a da je pri tome prva linija rezidentna u keu. ak i u sluaju da su ove linije rezidentne u keu fiziki pristup veem broju ke linija u jednom ciklusu je problematian.

PC = XX00001 00 01 10 11

000 001
Row decoder

. . .

. . .

111

Fetch group Row group

Slika 3.10 Neporavnjanost fetch grupe u odnosu na granice vrste ke polja


Napomena:: Row decoder- Dekoder vrsta; Row group- grupa vrste; Fetch group- Fetch grupa

53

Organizacija superskalarnih procesora Postoje dva mogua reenja koja se odnose na problem nepodeenosti. Prvo reenje se zasniva na statikoj tehnici koja se koristi u vreme kompilacije. Kompilatoru se dostavlja informacija o organizaciji I-kea, tj. njegovoj emi indeksiranja i obimu vrste. Na osnovu ove informacije instrukcije se mogu na adekvatan nain smestiti u memorijske lokacije i postii podeavanje fetch grupa u odnosu na fizike vrste. Na primer, svaka instrukcija koja je cilj grananja se moe smestiti u memoriju na lokaciju koja odgovara prvoj instrukciji u vrsti. Ovakav pristup poveava verovatnou pribavljanja s instrukcija od poetka vrste. Ovakve tehnike su implementirane kod velikog broja procesora i veoma su efikasne. Problem koji se javlja u ovom sluaju je taj to se objektni kd prilagodjava pojedinoj I-ke organizaciji, pa moe da se desi da on ne bude korektno poravnat za druge I-ke organizacije. Drugi problem koji se javlja da statiki kd zauzima vei adresni prostor, a to potencijalno predstavlja opasnost za poveanje promaaja kod obraanja I-keu. Drugo reenje koje se odnosi na nepodeenost bazira se na korienju usluge hardvera u toku izvrenja programa. Hardver poravnanja se moe implementirati sa ciljem da obezbedi pribavljanje od s instrukcija svakog ciklusa ak i u sluaju kada fetch grupa predje granicu vrste (ali ne i granice ke linije). Ovakav hardver poravnanja je ugradjen kod procesora IBM RS/6000. 3.3.2. Dekodiranje instrukcija Dekodiranje instrukcije ukljuuje identifikaciju individualnih instrukcija, odredjivanje tipova instrukcija, i detekciju medju-instrukcijske zavisnosti izmedju grupa instrukcija koje su pribavljene, ali nisu jo dispeovane (rasporedjene). Kompleksnost zadatka dekodiranja instrukcija jako zavisi od sledea dva faktora: a) ISA, i b) od obima paralelnog protonog sistema. RISC procesori imaju instrukcije fiksne duine koje su jednostavnog formata, to ima za posledicu da proces dekodiranja bude pojednostavljen. To znai da nije potrebno initi dodatne napore kao bi se odredio poetak i kraj svake instrukcije. Relativno mali broj razliitih instrukcionih formata i adresnih naina rada ini proces raspoznavanja tipova instrukcija veoma lakim. Jednostavnim dekodiranjem dela instrukcije koji je dodeljen op-kdu, kao i ostala polja koja specificiraju operande ini proces dekodiranja veoma brzim. Kod RISC SPM-ova, dekodiranje instrukcije je trivijalno. Najee stepen Decode se koristi za pristup registarskim operandima i ukljuuje aktivnost kojom se obavlja itanje sadraja registra RF polja. Ipak kod RISC paralelnog protonog sistema koje simultano dekodiraju vei broj instrukcija, stepen Decode mora da identifikuje zavisnosti izmedju instrukcija i odredi nezavisne instrukcije koje se mogu paralelno dispeovati. ta vie da bi podrao efikasno pribavljanje instrukcija stepen Decode mora brzo da identifikuje promene toka upravljanja zbog Branch instrukcije i instrukcije koje se dekodiraju sa ciljem da obezbedi brzi povratni odziv prema stepenu Fetch. Ova dva zadatka, u saglasnosti sa istovremenim pristupom veem broju operanada, mogu da uine logiku stepena Decode kod paralelnih protonih stepena veoma sloenom. Da bi se odredile registarske zavisnosti izmedju instrukcija neophodno je ugraditi vei broj komparatora. Registarska polja moraju da budu tipa multiport i da budu u stanju da podre vei broj simultanih pristupa. Vei broj magistrala je takodje potreban za rutiranje operanada ka odgovarajuim odredinim baferima. Moe da se desi da stepen Decode postane kritini stepen SSPM-a. Kod CISC protonih paralelnih sistema zadatak dekodiranja instrukcija moe biti veoma kompleksan, a esto i da zahteva vei broj protonih stepena. Kod ovakvih paralelnih protonh sistema, identifikacija individualnih instrukcija i njihovih tipova nije vie trivijalna. Kod oba, Intel Pentium i AMD K5, se koriste dva protona stepena za dekodiranje instrukcija IA32. Kod Intel PentiumPro, koga karakterie dublja protonost, neophodna su ukupno pet mainska ciklusa za pristup I-keu i dekodiranje instrukcija IA32. Korienje instrukcija promenljive duine dovodi do nepoeljne serijelizacije u procesu dekodiranja instrukcija. To znai da se vodea (prvo pribavljena) instrukcija mora dekodirati, i odredi njena duina, pre nego to pone identifikacija naredne instrukcije. Saglasno tome simultano paralelno dekodiranje veeg broja instrukcija postaje veliki projektantski izazov. U najgorem sluaju mora se usvojiti da nova instrukcija moe da pone bilo gde u okviru fetch grupe, a 54

Organizacija superskalarnih procesora vei broj dekodera moe se koristiti za simultano i "spekulativno" dekodiranje instrukcija, poev od granice na nivou bajta. Ovo je ekstremno sloen zadatak i moe da bude veoma neefikasan. Postoji dodatna potekoa kod realizacije dekodera instrukcija kod CISC paralelnih protonih sistema. Dekoder mora da prevede instrukcije u interne operacije niskog nivoa koje se mogu direktno izvravati od strane hardvera. Ove interne operacije podseaju na RISC instrukcije i mogu se posmatrati kao vertikalne mikroinstrukcije. Kod AMD K5 mikroprocesora ove operacije se nazivaju RISC operations ili ROP . Kod Intela ove interne operacije se identifikuju kao mikrooperacije ili ops. Svaka IA32 instrukcija se prevodi u jednu ili vei broj ROP-ova ili ops-ova. Kako to Intel-ovi projektanti naglaavaju u proseku svaka IA32 instrukcija se prevodi u 1.5 do 2.0 ops-ova. Kod ovih paralelnih CISC protonih maina izmedju stepena Decode i stepena Complete sve instrukcije koje se unose u mainu dekomponuju se na ove interne RISC operacije.
Macroinstruction bytes from IFU To next address calculation

Instruction buffer

16 bytes

ROM

Decoder 0

Decoder 1

Decoder 2

4 op
op

1 op queue (6)

1 op

Branch address calculation

Slika 3.11 Fetch/Decode jedinica kod superskalarnog protonog sistema Intel P6


Napomena: Macroinstruction bytes from IFU- bajtovi mikroinstrukcije od instrukcione Fetch jedinice; Instruction bufferinstrukcioni bafer; 16 bytes- 16 bajtova; Decoder-dekoder; ROM-mikroprogramski ROM; op queue- red ekanja mikroprogramskih operacija; Branch adrress calculation- izraunavanje adrese grananja; To next adrress calculation- ka izraunavanju naredne adrese

Dekoder instrukcija procesora Intel Pentium Pro predstavlja jedan ilustrativni primer realizacije dekodiranja instrukcija kod CISC paralelnih maina. Dijagram Fech/Decode jedinice P6 procesora je prikazan na slici 3.11. U svakom mainskom ciklusu I-ke moe da preda redu ekanja instrukcije do 16 poravnjanih bajtova. Tri paralelna dekodera simultano dekodiraju bajtove instrukcije iz reda ekanja instrukcija (instruction queue). Prvi dekoder koji se nalazi na poetku reda ekanja sposoban je da dekodira sve IA32 instrukcije, dok druga dva dekodera imaju ogranienije mogunosti i mogu da dekodiraju jednostavne IA32 instrukcije kao to su instrukcije tipa registar-u-registar. Dekoderi prevode IA32 instrukcije iz dvo-adresnog formata u interne tro-adresne ops formate, pri emu ops koriste Load/Store model. Svaka IA32 instrukcija koja koristi sloene adresne naine rada se prevodi u vei broj ops-ova. Prvi (generalizovani) dekoder moe da generie do 4 ops po ciklusu kao odziv na proces dekodiranja IA32 instrukcija. Svaki od ostala dva (sa izvedenim restrikcijama) dekodera moe da generie samo jednu ops po ciklusu kao odziv na dekodirane 55

Organizacija superskalarnih procesora jednostavne IA32 instrukcije. U svakom mainskom ciklusu najmanje jedna IA32 instrukcija se dekodira od strane generalizovanog dekodera, to dovodi do generisanja jedne ili vei broj ops-ova. Cilj je da se postigne bolji rezultat i da se iskoriste mogunosti ostala dva dekodera ime se broj ops povea. U idealnom, sluaju tri paralelna dekodera mogu da generiu ukupno 6 ops u jednom mainskom ciklusu. Za one kompeksne IA32 instrukcije koje zahtevaju vie od 4 ops-ova za prevodjenje, u trenutku kada naidju na poetak (front) reda ekanja, generalizovani dekoder poziva ops sekvencer da bi emitovao mikrokd, to u sutini predstavlja jednostavnu unapred programiranu sekvencu standardnih ops. Za ove ops potrebna su dva ili vie mainska ciklusa. Sve ops generisane od strane triju paralelnih dekodera se pune u bafer preuredjenja (reorder-buffer, ROB), koji inae za 10 ulaza za uvanje do 40 ops, koje ekaju na dispeovanje (alternativno nazvano rasporedjivanje ili dodeljivanje) ka funkcionalnim jedinicama. Kod velikog broja SSPM-a, posebno kod onih koje implementiraju CISC paralelni protoni sistem ireg obima, hardver za dekodiranje instrukcija moe da bude izuzetno sloen i da se zahteva njegova parcijalizacija na vei broj protonih sistema. Kada se broj dekoderskih stepena povea, cena koja se plaa zbog instrukcije Branch, izraena u broju mainskih ciklusa, se takodje poveava. Zbog toga nije poeljno da se samo povea dubina Decode dela kod paralelne protone maine. Da bi se izalo na kraj sa sloenou ovog problema, esto se predlae i implementira tehnika nazvana predekodiranje (predecoding). Predodiranje prebacuje deo zadatka dekodiranja na drugu stranu, tj. na ulaznu stranu I-kea. Kada se javi I-ke promaaj dobavlja se nova linija iz memorije, a instrukcije u toj ke liniji parcijalno se dekodiraju od strane hardvera za dekodiranje koji se nalazi izmedju memorije i I-kea. Instrukcije kao i neke dodatno dekodirane informacije se zatim smetaju u I-ke. Dekodirana informacija, u formi predekodiranih bitova, pojednostavljuje zadatak dekodiranja instrukcija kada se instrukcije pribavljaju iz I-kea. Saglasno tome deo procesa dekodiranja se obavlja samo jedanput kada se instrukcije pune u I-ke, umesto svaki put kada se instrukcije pribavljaju iz I-ke. Sa ovakvim hardverom za dekodiranje koji je prebaen na ulaznu stranu I-kea, kompeksnost dekodiranja istrukcija kod paralelnog protonog sistema se pojednostavljuje. AMD K5 je tipian predstavnik CISC SSPM-ova koji koriste agresivno predekodiranje IA32 instrukcije kada se one pribavljaju iz memorije, ali pre nego to se smeste u I-ke. U jednoj transakciji po magistrali pribavljaju se iz memorije 8 instrukcionih bajtova. Ovi bajtovi se predekodiraju i dodatnih 5 bitova se generie od strane predekodera za svaki instrukcioni bajt. Ova 5 predekodirana bita sadre informaciju o lokaciji poetka i kraja IA32 instrukcije, broju ops (ili ROP-ova) koji je potreban da se prevede ta IA32 instrukcija, kao i lokaciju op-kd-ova i prefiksa. Ovi dodatni predekodirani bitovi se smetaju u I-ke zajedno sa originalnim instrukcijskim bajtovima. Saglasno tome obim originalne I-ke linije od 128 bitova (16 bajtova) se poveava za dodatnih 80 bitova (vidi sliku 3.12).

56

Organizacija superskalarnih procesora


Iz memorije 8 instrukcionih bajtova
64

Byte 1

Byte 2

...
5 bitova

Byte 8

5 bitova

Logika predekodiranja

8 instrukcionih bajtova + predekodirani bitovi I-ke

64 + 40

Byte 1

Byte 2

...

Byte 8

16 instrukcionih bajtova + predekodirani bitovi

128 + 80

Dekodiranje, prevodjenje i dispeovanje

do 4 ROP-ova

ROP1

ROP2

ROP3

ROP4

Slika 3.12 Mehanizam predekodiranja kod AMD K5 Kod svakog I-ke pristupa zajedno sa 80 predekodiranih bitova pribavljaju se i 16 instrukcionih bajtova. Predekodirani bitovi u znaajno meri pojednostavljaju dekodiranje instrukcije i obezbedjuju simultano dekodiranje veeg broja IA 32 instrukcije pomou 4 identina dekodera/translatora koji mogu da generiu do 4 ops svakog ciklusa. Postoje dve forme prekoraenja (overhead-dodatno reijsko vreme) koja prate predekodiranje. Cena koja se plaa kod I-ke promaaja moe da se povea zbog potrebe predekodiranja instrukcijskih bajtova koji se pribavljaju iz memorije. Ovo i nije neki ozbiljan problem ako je stopa promaaja mala. Drugo prekoraenje se odnosi na pamenje predekodiranih bitova u I-keu, a saglasno tome poveanju obima I-kea. Kod K5 obim I-kea se poveava za oko 50%. Na osnovu ovoga jasno je da mora da postoji kompromis izmedju agresivnosti predekodiranja i poveanja obima I-kea. Predekodiranje nije samo ogranieno na otklanjanju sekvencijalnog uskog grla kod paralelnog dekodiranja veeg broja CISC instrukcija od strane CISC paralelnih protonih sistema. Ono se takodje moe koristiti za podrku rada RISC paralelnih protonih sistema. RISC instrukcije se mogu predekodirati kada se one napune u I-ke. Predekodirani bitovi se mogu koristiti za identifikaciju promene toka upravljanja kod Branch instrukcija u okviru fetch grupe i za eksplicitnu identifikaciju podgrupa nezavisnih instrukcija u okviru fetch grupe. Na primer, PowerPC 620 koristi 7 predekodiranih bitova za svaku re instrukcije u I-keu. UltraSPARC, MIPS R10000 i HP PA-8000 takodje koriste 5 ili 4 predekodiranih bitova za svaku instrukciju. Kako SSPM postaje iri, a broj instrukcija koje se mogu simultano dekodirati poveava zadatak, dekodiranja instrukcije predstavlja sve vie usko grlo pa zbog toga agresivnije korienje predekodiranja postaje neminovnost. Predekoder parcijalno dekodira instrukcije, i efikasno transformie originalne nedekodirane instrukcije u format koji ini zadatak konanog dekodiranja lakim. U sutini predekoder se moe posmatrati kao translator instrukcija koje se pribavljaju iz memorije u neki drugi razliiti oblik instrukcija koje se pune u I-ke. Da bi proirili ove poglede mogunost poboljanja predekodera koji e u toku izvrenja programa obaviti transliranje objektnog kda izmedju ISA-ova moe da bude veoma interesantan izazov za projektante. 57

5 bitova

Organizacija superskalarnih procesora

3.3.3. Dispeovanje instrukcija Dispeovanje intrukcija je neophodno da se obavi kod SSPM-ova. Kod SPM-a sve instrukcije nezavisno od tipa prolaze kroz jedinstveni protoni sistem. SSPM-ovi su raznorodni sa aspekta protonosti po tome to koriste vei broj heterogenih funkcionalnih jedinica u njihovom Execution stepenu. Razliite funkcionalne jedinice izvravaju razliiti tipove instrukcija. Nakon to je tip instrukcije identifikovan od strane stepena Decode, ona mora da se uputi ka odgovarajuoj funkcionalanoj jedinici radi izvrenja. Ovaj zadatak se naziva dipseovanje instrukcija. Mada su SSPM-ovi paralelne protone maine, zadaci koji se odnose na pribavljanje instrukcije kao i njihovo dekodiranje izvode se na jedan centralizovan nain; tj. progres svih instrukcija se nadgleda od strane jednog kontrolera. Mada se vei broj instrukcija pribavlja u jednom ciklusu, sve instrukcije moraju da se pribave iz istog I-kea. To znai da se svim instrukcijama iz fetch grupe koje se nalaze u I-keu pristupa istovremeno, a zatim se sve one smetaju u isti bafer. Dekodiranje instrukcija se izvodi na centralizovani nain jer u sluaju CISC instrukcija, svi bajtovi u fetch grupi moraju biti dekodirani kolektivno od strane centralizovanog dekodera kako bi se identifikovale individualne instrukcije. ak i kod RISC instrukcija, dekoder mora da identifikuje zavisnosti izmedju instrukcija, pa je zbog toga neophodno centralizovano dekodiranje instrukcija. Sa druge strane kod raznorodnih protonih sistema sve funkcionalne jedinice mogu da rade nezavisno na jedan distribuirani nain u toku izvrenja razliitih tipova instrukcija nakon to su zavisnosti izmedju instrukcija razreene. Saglasno tome, prelazak sa procesa dekodiranja instrukcija na proces izvrenja instrukcija ukljuuje promenu sa centralizovanog procesiranja instrukcija na distribuirano procesiranje instrukcija. Ova promena se izvodi od strane stepena za dispeovanje instrukcije koji je, kao to se vidi na slici 3.13, sastavni gradivni blok SSPM-a.

Pribavljanje instrukcija

Dekodiranje instrukcija

...
Dispeovanje instrukcija

FU 1

FU 2

FU 3

...

FU n

Izvrenje instrukcija

Slika 3.13 Potreba za dispeovanje kod superskalarnog protonog sistema

58

Organizacija superskalarnih procesora Jedan drugi mehanizam koji je neophodan da postoji izmedju dekodiranja instrukcija i izvrenja instrukcija se odnosi na privremeno baferovanje instrukcija. Pre izvrenja, instrukcija mora da ima spremne sve svoje operande. U toku dekodiranja registarski operandi se pribavljaju iz RF polja. Kod SSPM-a mogue je da neki od ovih operanada nisu jo spremni jer prethodne instrukcije koje auriraju ove registre nisu zavrile svoje izvrenje. Kada dodje do ovakve situacije, jedno od reenja je da se zaustavi Decode stepen sve dok svi registarski operandi ne budu spremni. Ovo reenje ozbiljno ograniava propusnost kod dekodiranja i kao takvo nije poeljno. Bolje reenje je da se pribave oni registarski operandi koji su spremni, a da se ostale instrukcije koje e ekati na svoje registarske operande, koji jo nisu spremni, smeste u posebne bafere. Kada su svi registarski operandi spremni, te instrukcije naputaju bafer i one se predaju radi izvrenja funkcionalnim jedinicama. Koristei terminologiju Tomasulo-ovog algoritma koji se koristio kod IBM 360/91, nazvaemo ovaj privremeni bafer za instrukcije imenom rezervaciona stanica (reservation station). Korienjem rezervacine stanice vri se razdvajanje procesa dekodiranja od procesa izvrenja instrukcija, i obezbedjuje baferu da formira strukturu tipa magacin izmedju stepena Decode i Execute. Na ovaj nain se ostvaruje ublaavanje vremenskih varijacija u iznosu propusnosti izmedju stepena Decode i Execute. Drugim reima eliminiu se zastoji u stepenu Decode i nepotrebna blokiranja u stepenu Execute. U zavisnosti od toga gde je locirana rezervaciona stanica, relativno u odnosu na dispeovanje instrukcija, postoje dva tipa implementacije rezervacione stanice. Ako se koristi jedinstveni bafer na izvornoj strani dispeovanja, tada kaemo da postoji centralizovana rezervaciona stanica. Kada se koristi vei broj bafera na izvornoj strani dispeovanja, tada kaemo da postoje distribuirane rezervacione stanice. Na slici 3.14 i 3.15 prikazana su oba naina implementacije rezervacionih stanica.

Dispatch (issue)

Centralna rezervaciona stanica (dispe bafer)

Execute

Completion bafer

Slika 3.14 Centralizovana rezervaciona stanica

59

Organizacija superskalarnih procesora

Dispatch

(Dispatch buffer) Dispe bafer

Distribuirane rezervacione stanice Issue

Execute

Finish (Completion bafer) Bafer kompletiranja Complete

Slika 3.15 Distribuirane rezervacione stanice Intel Pentium Pro ima implementiranu centralizovanu rezervacionu stanicu. Kod ove implementacije jedna rezervaciona stanica sa veim brojem ulaza predaje podatke svim funkcionalnim jedinicama. Instrukcije se direktno rasposedjuju od ove centralizovane rezervacione stanice ka svim funkcionalnim jedinicama da bi poele sa izvrnjem. Sa druge strane Power PC 620 koristi distribuirane rezervacione stanice. Kod ove implementacije, svaka funkcionalna jedinica ima sopstvenu rezervacionu stanicu koja je povezana na ulaznoj strani te jedinice. Instrukcije se rasporedjuju individualnim rezervacionim stanicama na osnovu tipa instrukcija. Ove instrukcije ostaju u rezervacionim stanicama sve dok ne postanu spremne za iniciranje njihovog izvrenja u funkcionalnoj jedinici. Naravno ova dva tipa implementacije rezervacionih stanica prestavljaju dve ekstremne alternative. Hibridna reenja koja se nalaze izmedju ova dva reenja su mogua. Na primer, MIPS R10000 koristi jednu takvu hibridnu implementaciju. Ovakve hibridne implementacije nazivaju se cluster rezervacine stanice. Kod cluster rezervacionih stanica, instrukcije se rasporedjuju veem broju rezervacionih stanica, pri emu svaka rezervaciona stanica moe da predaje i da bude deljiva za vei broj funkcionalnih jedinica. Obino rezervacione stanice i funkcionalne jedinice kaemo da se clusteruju na osnovu tipa instrukcija ili tipa podataka. Kod projektovanja rezervacionih stanica neophodno je uiniti odredjeni broj kompromisa. Centralizovana rezervaciona stanica omoguava svim tipovima instrukcija da dele istu rezervacionu stanicu i verovatno postiu najbolju ukupnu iskorienost ulaza u odnosu na sve rezervacione stanice. Ipak centralizovana implementacija rezultira najveom hardverskom kompleksnou. Ona zahteva centralizovano upravljanje i multiportni bafer koji obezbedjuje vei broj konkurentnih pristupa. Kod distribuiranih rezervacionih stanica potrebno je ugradjivati jednoportne bafere, sa relativno malim brojem ulaza. Ipak svaki ulaz rezervacione stanice u kome se nalazi podatak koji eka na izvrenje ne moe se usmeriti za izvrenje ka drugim funkcionalnim jedinicama. To znai da je ukupna iskorienost svih ulaza rezervacionih stanica mala. Takodje moe da se desi da se jedna rezervaciona stanica zasiti, u sluaju kada svi ulazi budi zauzeti, to dovodi do zastoja u rasporedjivanju instrukcija. 60

Organizacija superskalarnih procesora Imajui u vidu razliite alternative koje se odnose na implementaciju rezervacionih stanica pre nego to detaljnije shvatimo sutinu rada, neophodno je da razjasnimo korienje odredjenih termina. U ovom tekstu termin rasporedjivanje (dispatching) ukazuje na to kako se vri pridruivanje razliitih tipova instrukcija, radi izvrenja, odgovarajuim tipovima funkcionalnih jedinica, nakon to je obavljen proces dekodiranja. Sa druge strane termin iniciranje izvrenja (issuing) uvek se odnosi na iniciranje izvrenja u funkcionalnim jedinicama. Kod distribuirane rezervacione stanice, ova dva dogadja egzistiraju izdvojeno. Instrukcije se prvo rasporedjuju iz centralizovanog bafera za decode/dispatch ka individualnim stanicama, a kada su svi njihovi operandi dostupni, one se zatim iniciraju radi izvrenja u individualnim funkcionalnim jedinicama. Kod centralizovane rezervacione stanice, do rasporedjivanja instrukcija iz centralizovane rezervacione stanice ne dolazi sve dok operandi ne budu spremni. To znai da se sve instrukcije, nezavisno od tipa, uvaju u centralizovanoj rezervacionoj stanici dok one ne budu spremne za izvrenje, pa se nakon tog trenutka instrukcije direktno rasporedjuju u individualne funkcionalne jedinice sa ciljem da bi poele sa izvrenjem. Shodno tome, kod maina sa centralizovanom rezervacionom stanicom, pridruivanje instrukcija individualnim funkcionalnim jedinicama javlja se u istom trenutku kao i poetak njihovog izvrenja. Zbog toga kod centralizovane rezervacione stanice, rasporedjivanje (dispatching) instrukcije i iniciranje (issuing) izvrenja javlja se istovremeno, tako da ova dva termina imaju isto znaenje. Ovo je prikazano na slici 3.14. 3.3.4. Izvrenje instrukcija Stepen za izvrenje instrukcija predstavlja kljuni deo superskalarne maine. Tekui trend kod SSPM-a je usmeren ka ostvarivanju veeg paralelizma i vee raznovrsnosti u protonoj obradi. Ovo znai da postoji vei broj funkcionalnih jedinica i da su te funkcionalne jedinice specijalizovane. Ako ove jedinice specijaliziramo radi obavljanja specifinih tipova instrukcija, tada e one biti efikasnije sa aspekta performansi. Prvi SPM-ovi imali su samo jednu funkcionalnu jedinicu . Svi tipovi instrukcija (iskljuujui floating-point instrukcije koje su bile izvravane od strane posebnog FP koprocesorskog ipa) izvravale su se od strane iste funkcionalne jedinice. Tako na primer, kod protonog sistema TYP, ovu funkcionalnu jedinicu su inila dva protona stepena nazvana ALU i MEM. Najvei broj SSPMova prve generacije su protone maine kod kojih ima ugradjeno dve raznorodne funkcionalne jedinice, jedna koja izvrava integer instrukcije, a druga floating-point instrukcije. To znai da su prvi SSPM-ovi imali integrisano FP izvrenje u okviru iste protone obrade instrukcija, a nisu koristile izdvojenu koprocesorsku jedinicu. Dananji SSPM-ovi koriste vei broj integer jedinica, a neke i imaju vei broj floting-point jedinica. One u sutini predstavljaju dva osnovna tipa funkcionalnih jedinica. Neke od ovih jedinica su postale veoma mone i u stanju su da izvre vie od jedne operacije pribavljajui po dva izvorna operanda u svakom ciklusu. Na slici 3.16 a) prikazana je integer izvrna jedinica procesora TI Super SPARC koja ima kaskadnu ALU konfiguraciju. Tri ALU jedinice sastavni su deo jedne dvostepene protone jedinice, i po dve integer operacije se mogu u jednom ciklusu inicirati radi izvrenja u ovoj jedinici. Ako su one nezavisne, tada se obe operacije izvravaju u prvom stepenu koristei ALU 0 i ALU 2. Ako druga operacija zavisi od prve, tada se prva izvrava u ALU 2 koji pripada prvom stepenu, dok se druga izvrava u ALU C koji pripada drugom stepenu. Implementacija ovakve funkcionalne jedinice omoguava simultano iniciranje radi izvrenja dve instrukcije. FP jedinica kod IBM RS/6000 je implementirana kao dvostepena protona MAF( mulplyaddfused) jedinica koja ima tri ulaza (A,B,C) i obavlja ( A B ) + C . Ovo je prikazano na slici 3.19 b) . Opravdanost ugradnje MAF jedinice pre svega treba traiti u veoma estom korienju operacije FP mnoenje koja se izvodi za izvrenje skalarne ili dot-product operacije D = ( A B ) + C . Ako je kompajler u stanju da objedini vei broj parova instrukcija tipa mnoenje sabiranje u jedinstvene MAF instrukcije, a MAF jedinica moe da podri iniciranje izvrenja od jedne MAF instrukcije svakog 61

Organizacija superskalarnih procesora taktnog ciklusa, tada se korienjem jedne MAF jedinice moe ostvariti efektivna propusnost od dve FP instrukcije po ciklusu. Normalne FP instrukcije mnoenja se u sutini izvravaju od strane MAF jedinice kao ( A B ) + 0 , dok se FP instrukcija sabiranja obavlja od strane MAF jedinice kao ( A 1) + C . Sobzirom da je MAF jedinica protono organizovana ona moe da postigne brzinu izvrenja od jedne FP instrukcije po ciklusu.

Shift

ALU 2

ALU 0

AxB

(A x B) + C

ALU C

Round / Normalize

(a)

(b)

Slika 3.16 (a) Integer funkcionalna jedinica kod TI SuperSPARC; (b) Floating-point jedinica kod IBM RS/6000
Napomena:: Shift- pomeranje; Round/Normalize-zaokruivanje/normalizaciju

Pored izvrenja integer ALU instrukcija, integer jedinica se moe koristiti za generisanje memorijskih adresa kao i izvrenje Branch i Load/Store instrukcija. Ipak kod novijih reenja ugradjene su posebne jedinice za Branch i Load/Store. Branch jedinica je odgovorna za auriranje PC-a, dok je Load/Store jedinica direktno povezana na D-ke. Postoji druge specijalizovane jedinice koje se uglavnom koriste za podrku rada kod procesiranja u grafikim i aplikacijama obrade slike. Na primer, kod Motorola 88110 postoji nameska funkcionalna jedinica za manipulisanje sa bitovima i dve funkcionalne jedinice za procesiranje pixel-a (osnovni element slike). Kod velikog broja aplikacija tipa signal procesiranje i medija uobiajeno se manipulie sa podacima tipa bajt. Najee se 4 bajta pakovana u 32-bitnu re, u cilju poveanja propusnosti, simultano procesiraju od strane specijalizovanih 32-bitnih funkcionalnih jedinica. Kod TriMedia VLIW procesora koji je namenjen za ovakve aplikacije, koriste se ove funkcionalne jedinice. Na primer, TriMedia 1 procesor moe da izvri quadavg instrukciju u jednom ciklusu. Quadavg instrukcija sumira etiri srednje vrednosti zaokruene na celobrojnu vrednost navie, i veoma je korisna kod MPEG dekodiranja za dekompresiju komprimovanih video slika, a izvodi se na sledei nain:

quadavg =

( a +e+1 )+ ( b+ f
2

+1 )

( c+ g +1 )+ ( d + h+1 )
2 2

Osam promenljivih ukazuju na osam operanada od kojih su a, b, c i d memorisane kao jedna 32-bitna vrednost, dok su e, f, g i h memorisane kao druga 32-bitna vrednost. Funkcionalna jedinica prihvata kao ulaz ova dva 32-bitna operanda i generie quadavg rezultat u jednom ciklusu. Ova jedno62

Organizacija superskalarnih procesora ciklusna operacija zamenjuje brojne instrukcije sabiranja i deljenja koje treba da se izvre ako se individualno manipulie sa operandima tipa bajt. iroko korienje multimedijalnih aplikacija dovelo je do jo masovnijeg korienja ovakvih funkcionalnih jedinica. Koji je najbolji izbor funkcionalnih jedinica kod SSPM-a ? predstavlja interesantno pitanje. Odgovor je da to zavisi od specifikacija. Ako koristimo statistike iz poglavlja 2 koje se odnose na tipine programe moemo uoiti da ALU instrukcije ine 40%, Branch 20%, a Load/Store 40%, to odgovara pravilu 4-2-4. To znai da na svake etiri AL jedinice, treba da imamo dve Branch jedinice i etiri Load/Store jedinice. Veliki broj dananjih SSPM-ova imaju po etiri i vie funkcionalne jedinice tipa ALU ( ubrajajui kako integer tako i floating-point ). Najvei broj njih ima samo jednu Branch jedinicu, ali u stanju su da spekulativno izvravaju i vie od jedne Branch instrukcije. Ipak najvei broj od ovih procesora ima samo jednu Load/Store jedinicu, ali su neke u stanju da procesiraju dve Load/Store instrukcije svakog mainskog ciklusa uz odredjena ogranienja. Po svemu izgleda postoji debalans koji se ogleda u tome da postoji relativno mali broj Load/Store jedinica. Razlog za ovo je da implementacija veeg broja Load/Store jedinica koje na paralelni nain pristupaju istom D-keu predstavlja teak projektantski zadatak. On iziskuje da D-ke bude multiportni. Multiportni memorijski moduli sadre veoma sloena kola koja mogu znaajno da uspore brzinu rada memorije. Kod velikog broja reenja koristi se vei broj memorijskih banaka koje u odredjenom smislu na pravi nain simuliraju rad miultiportnih memorija. Kod ovakvih reenja memorija se deli na vei broj banaka. Svaka banka moe da obavi operaciju tipa read/write u jednom mainskom ciklusu. Ako se desi da se efektivne adrese dve Load/Store instrukcije nalaze u razliitim bankama, tada obe instrukcije mogu istovremeno da se izvre na dve razliite banke. Ipak, ako postoji konflikt u pristupu bankama, tada obe instrukcije moraju da se serijalizuju. Za simulaciju multiportnih D-keova obino se koriste miltibankovni D-keevi. Na primer, Intelov Pentium procesor koristi D-ke od 8 banaka koji simulira rad dvoportnog D-kea. Prava multiportna memorija garantuje simultane pristupe bez konflikta. Obino je potreban vei broj portova za itanje u odnosu na upis. Vei broj portova za itanje se moe implementirati pomou veeg broja kopija memorije. Svi memorijski upisi se predaju ka svim kopijama, pri emu sve kopije imaju identini sadraj. Svaka kopija moe da obezbedi relativno mali broj portova za itanje pri emu je ukupan broj portova za itanje jednak zbiru svih portova za itanje od svih kopija. Na primer, memorija sa etiri porta za itanje i dva porta za upis se moe implementirati kao dve kopije jednostavnih memorijskih modula, pri emu svaka ima samo dva porta za upis i dva porta za itanje. Implementacija veeg broja (posebno vie ode dve) Load/Store jedinica koje rade paralelno moe da predstavlja izazov kod projektovanja SSPM-ova. Iznos paralelizma na nivou resursa koji se odnosi na izvrenje instrukcija odredjuje se kombinacijom prostornog i vremenskog paralelizma. Egzistencija veeg broja funkcionalnih jedinica predstavlja jednu formu prostornog paralelizma. Alternativno, paralelizam se moe ostvariti korienjem protone obrade u radu ovih funkcionalnih jedinica, to predstavlja odredjeni oblik vremenskog paralelizma. Tako na primer, umesto da implementiramo dual-portni D-ke, kod tekuih reenja D-ke je uprotoen u dva protona stepena tako da se po dve Load/Store instrukcije mogu opsluivati od strane D-kea. Tekue, postoji opti trend ka implementaciji dublje protonosti sve sa ciljem da se redukuje vreme ciklusa i povea taktna frekvencija rada. Ovaj prostorni paralelizam takodje zahteva ugradnju na silicijumu sloenijeg hardvera. Vremenski paralelizam efikasnije koristi hardver, ali dovodi do poveanja latencije kod procesiranja instrukcija i do pojave zastoja u protonom radu maine zbog zavisnosti izmedju instrukcija. Kod realnih SSPM-ova, uoavamo da ukupan broj funkcionalnih jedinica nadmauje stvarni obim paralelne protone maine. Obino irina SSPM-a odredjena je brojem instrukcija koje se mogu pribaviti, dekodirati, ili kompletirati u svakom mainskom ciklusu. Ipak, zbog dinamike u varijaciji mix-a instrukcija kao i rezultantne neuniformne distribucije mix-a instrukcija u toku izvrenja programa na pricipu ciklus-po-ciklus, postoji potencijalno dinamika neuparenost instrukcijsko mix-a sa jedne strane i mix-a funkcionalnih jedinica sa druge strane. Prvi mix varira u vremenu, dok drugi ostaje fiksan. Zbog specijalizovanosti i heterogenosti funkcionalnih jedinica ukupan broj funkcionalnih 63

Organizacija superskalarnih procesora jedinica mora da premai obim SSPM-a kako bi se izbeglo da EX deo protonog sistema postane usko grlo zbog izrazito velike strukturne zavisnosti izmedju instrukcija koje se pre svega odnose na nedostupnosti korienja odgovarajuih tipova funkcionalnih jedinica. Neki od agresivnijih kompajlera tee da ublae dinamiku varijaciju instrukcionog mix-a i da obezbede bolju uparanost sa mix-om funkcionalnih jedinica. Naravno razliiti aplikacioni programi mogu da imaju razliite tipove mix-ova instrukcija. Sa veim brojem funkcionalnih jedinica imamo dodatnu hardversku kompleksnost u odnosu na same FU. Rezultati sa izlaza FU trebaju da se premoste (proslede) ka ulazima drugih FU. Za ovo je potreban vei broj magistrala, a potencijalno i sloenija logika za upravljanje arbitraom na magistrali. Obino potpuna crosbar sprena mrea je suvie skupa i ne uvak u potpunosti opravdana. Mehanizam za rutiranje ili usmeravanje operanada izmedju FU unosi dodatni oblik strukturne zavisnosti. Spreni mehanizam takodje poveava latenciju EX stepena protonog sistema. Sa ciljem da se podri prosledjivanje ili premoavanje podataka rezervacione stanice mora da nadgledaju protok na magistrali sa ciljem da ostvare tag uparivanja, to ukazuje na dostupnost neophodnih operanada, a nakon toga leovanje operanada kada oni postanu dostupni na magistrali. Potencijalno kompleksnost EX stepena se poveava sa n 2 gde je n - ukupan broj funkcionalnih jedinica. 3.3.5. Kompletiranje i izvlaenje instrukcija Funkciju smatramo kompletiranom (completed) kada ona zavri sa izvrenjem i aurira stanje maine. Kada instrukcija zavri sa svojim izvrenjem ona naputa funkcionalnu jedinicu i ulazi u bafer kompletiranja. Trenutak kada instrukcija naputa bafer kompletiranja kaemo da je postala kompletirana. Kada instrukcija zavri sa izvrenjem, njen rezultat se moe nai u nearhitekturnim baferima. Ali kada se ona kompletira njen rezultat se upisuje u arhitekturni registar. Kod instrukcija koje auriraju memorijske lokacije postoji vremenski period izmedju trenutka kada su one arhtekturno kompletirane i trenutka kada se memorijske lokacije auriraju. Na primer, instrukcija Store moe biti arhitekturno kompletirana kada ona napusti bafer kompletiranja i udje u bafer memorisanja sa ciljem da saeka za dostupnost na ciklus magistrale kako bi bila upisana u D-keu. Instrukcija Store se smatra izvuena (retired) kada ona napusti bafer memorisanja i aurira D-ke. Shodno tome u daljem tekstu pojam kompletiranja instrukcija (instruction completion) ukljuuje auriranje stanje maine, dok pojam izvlaenja instrukcije (instruction retiring) podrazumeva auriranje stanja memorije. Kod instrukcija koje ne auriraju memoriju, izvlaenje i kompletiranje se deavaju istovremeno. Tako na primer, kod maine sa distribuiranom rezervacionom stanicom, instrukcija moe da prodje kroz sledee faze: fetch, decode, dispatch, issue, execute, finish, complete, i retire. A pri ovome faze issue i finish se odnose na poetak execute i zavretak execute, respektivno. Neki od proizvodjaa SSPM-ova koriste ove termine na neto razliit nain. Najee dispatch i issue se koriste sa istim znaenjem, a slino i complete i retire. Ponekad complete se koristi da oznai kraj execute dok retire se koristi da ukae na auriranje arhitekturnog stanja maine. U sutini ne postoji standardizovani nain korienja ovih termina. U toku izvrenja programa, mogu se javiti prekidi i izuzeci koji prekidaju izvrenje toka programa. SSPM-ovi koriste dinamiku protonost koja olakava van-redosledno izvrenje pa zbog toga moraju biti u stanju da uspeno izadju na kraj sa prekidima u izvrenju programa. Prekidi (interrupts) se obino iniciraju od strane spoljnjeg okruenja kakvi su ulazno/izlazni uredjaji ili operativni sistem. Ovi dogadjaji se javljaju asinhrono u odnosu na tekue programsko izvrenje. Kada se javi prekid, izvrenje programa mora da se suspenduje kako bi se dozvolilo operativnom sistemu da opslui prekid. Jedan od naina da se uradi ovo sastoji se u stopiranju pribavljanja novih instrukcija i dozvoljavanju instrukcijama koje se ve nalaze u protonom sistemu da zavre sa izvrenjem, pri emu tekue stanje maine mora da se zapamti. Nakon to operativni sistem opslui prekid, obnavlja se zapameno stanje maine, a prekinuti program nastavlja sa izvrenjem. 64

Organizacija superskalarnih procesora Izuzeci (exceptions) su dogadjaji iniciranji izvrenjem instrukcije uprogramu. Instrukcija moe da inicira izuzetak kod izvrenja aritmetikih operacija, kakve su deljenje sa nulom, i podbaaj (underflow) ili premaaj (overflow) kod manipulisanja sa brojevima u pokretnom zarezu. Kada se ovakav izuzetak javi, rezultati izraunavanja postaju nevalidni, pa operativni sistem mora da intervenie kako bi markirao ovakve izuzetke. Izuzeci se mogu takodje javiti zbog pojave greke kod stranienja kod stranino organizovanog virtuelnog memorijskog sistema. Ovi izuzeci se javljaju u toku obraanja memoriji. Kada se javi ovaj izuzetak novu stranicu treba dobaviti iz sekundarne memorije, a to obino zahteva nekoliko hiljada mainskih ciklusa. Saglasno tome, izvrenje programa koje je uzrokovalo greku stranienja se obino suspenduje, a izvrenje novog programa u multiprogramskom reimu rada se inicira. Nakon to je greka u stranienju opsluena originalni program nastavlja sa izvrenjem. Vano je napomenuti da arhitekturno stanje maine, koje je vaee u trenutku kada se oekivana instrukcija izvrava, bude zapameno tako da program moe nastaviti sa izvrenjem nakon to se izuzetak opslui. Za maine koje su u stanju da podre ovu suspenziju i nastavak izvrenja programa na nivou granularnosti induividualne instrukcije kaemo da imaju precizni izuzetak (precise exception). Precizni izuzetak podrazumeva da se markira stanje maine pre izvrenja instrukcije za obradu izuzetka, a nakon toga da se nastavi sa izvrenjem, obnavljanjem markiranog stanja, i restartovanjem izvrenja od oekivane instrukcije. Sa ciljem da se podri rad preciznog izuzetka, SSPM-ovi moraju da odravaju arhitekturno stanje i da evoluiraju ovo mainsko stanje na nain kao da se programske instrukcije izvravaju u vremenu u originalnom programskom redosledu (a ne vanredosledno). Razlog za ovo je sledei: kada se javi izuzetak, stanje maine u tom trenutku mora da odraava uslov koji se odnosi na to da sve instrukcije koje prethode pojavi instrukcije koja je generisala izuzetak moraju da se kompletiraju, a sve ostale instrukcije koje slede nakon instrukcije koja je inicirala izuzetak, ne treba da se kompletiraju. Precizni izuzetak kod dinamikog protonog sistema nalae da se ouva sekvencijalno auriranje arhitekturnog stanja i pored toga to se instrukcije izvravaju vanredosledno. Kod dinamike protone obrade instrukcije se pribavljaju i dekodiraju u programskom redosledu, ali se izvravaju van programskog redosleda. U sutini instrukcije(a) ulaze(i) u rezervacione(u) stanice(u) u programskom redosledu, ali naputaju(a) ih van redosleda. One takodje zavravaju sa izvrenjem van redosleda. Da bi podrao rad preciznog izuzetka, kompletiranje instrukcije mora da bude u programskom redosledu tako da se auriranje arhitekturnog stanja maine obavlja u programskom redosledu. Sa ciljem da se prilagodi van-redosledni zavretak faze execute sa redoslednim zavretkom faze completion instrukcije, neophodno je kod paralelnog protonog sistema ugraditi bafer-preuredjenja (reorder buffer) u stepenu completion. Kako instrukcije zavravaju sa izvrenjem one van-redosledno ulaze u bafer preuredjenja, ali izlaze iz njega u programskom redosledu. Nakon to izadju iz bafera preuredjenja, za njih smatramo da su arhitekturno kompletirane. Ovo je prikazano na slici 3.17, gde rezervacione stanice i bafer preuredjenja predstavljaju gornju i donju granicu van-redoslednog regiona protonog sistema, tj. dela Execute protonog sistema. Termini koji se koriste u ovom tekstu, a odnose se na razliite faze procesiranja instrukcije prikazani su na slici 3.17.

65

Organizacija superskalarnih procesora


Fetch (Decode buffer) Bafer dekodiranja (In order) Po redosledu Decode (Dispatch buffer) Bafer dispeovanja Dispatch

Issue (Out of order) Van-redosledno Branch Execution

Rezervacione stanice

Finish

(Reorder/Completion buffer) Bafer preuredjenja/kompletiranja Complete (Store buffer) Store bafer Retire

(In order) Po redosledu

Slika 3.17 Precizni izuzetak se obradjuje od strane stepena za kompletiranje instrukcija uz pomo bafera za preuredjenje. Kada se javi izuzetak instrukcija koja je inicirala izuzetak se markira u beferu za preuredjenje. Stepen za kompletiranje instrukcija (completion) pre nego to kompletira svaku od instrukcija proverava. Kada se markirana (targged) instrukcija detektuje, njoj se ne dozvoljava kompletiranje. Svim sekvencijalnim instrukcijama, koje se u programskom redosledu nalaze pre markirane instrukcije, je dozvoljeno kompletiranje. Stanje maine se zatim proverava ili pamti. Stanje maine ukljuuje sve arhitekturne registre kao i programski broja PC. Ostale instrukcije u protonom sistemu, od kojih su neke ve zavrile sa izvrenjem moraju biti anulirane. Nakon opsluivanja izuzetka markirano stanje maine se obavlja, a izvrenje nastavlja sa pribavljanjem instrukcije koja je izazvala izuzetak.

66

Superskalarne tehnike

4. SUPERSKALARNE TEHNIKE
Bolje performanse kod superskalarnih procesora se mogu postii efikasnijom propusnou u toku procesiranja instrukcija. Procesiranje instrukcija treba sagledati kroz sledea tri protoka: protok instrukcija (instruction flow): procesiranje Branch instrukcije protok registarskih podataka (register data flow): procesiranje ALU instrukcije protok memorijskih podataka (memory data flow): procesiranje Load/Store instrukcije Sva tri protoka, u grubim crtama, odgovaraju procesiranju triju glavnih tipova instrukcija, ALU, Branch i Load/Store. Shodno prethodnom, maksimiziranje performansi sva tri protoka svodi se na minimiziranju cene koja se plaa usled procesiranja instrukcija tipa Branch, ALU i Load/Store.

4.1.

Tehnike za poveanje protoka instrukcija

Efikasniji protok u procesiranju instrukcija, kod superskalarne protone obrade, moe se postii boljom organizacijom protonih stepeni Fetch i Decode. Propusnost u radu ovih stepeni odredjuje gornju granicu propusnosti narednih stepeni u lancu protone obrade. To znai da primarni cilj kod poveanja protoka instrukcija treba da je usmeren ka tome da se ostvari pravovremeno snabdevanje protonog sistema instrukcijama. 4.1.1. Upravljanje tokom programa i kontrolne zavisnosti Semantika upravljanja tokom programa specificira se u formi koja odgovara grafu-tokaupravljanja (control flow graph-CFG). Kod CFG-a vorovi predstavljaju osnovne blokove, a potezi odgovaraju prenosu toka upravljanja izmedju osnovnih blokova. Na Slici 4.1 prikazan je CFG koga ine etiri osnovna bloka (pravougaonici uokvireni isprekidanim linijama), pri emu se svaki blok sastoji od po nekoliko instrukcija (ovali). Usmereni potezi odgovaraju toku upravljanja izmedju osnovnih blokova, i ukazuju na egzistenciju uslovnih instrukcija grananja (rombovi). Izvrenje programa podrazumeva dinamiki prolaz kroz vorove i potege CFG-a. Startni prolazak du nekog puta diktiran je instrukcijama tipa Branch kao i uslovima grananja (branch condition) koji su zavisni od trenutnog stanja podataka u toku izvrenja programa.

a)

b)

Slika 4.1 Upravljanje tokom programa: (a) graf toka upravljanja (CFG); (b) mapiranje (preslikavanje) CFG-a u sekvencijalne memorijske lokacije 67

Superskalarne tehnike Osnovni blokovi CFG-a (koji se sastoje od odgovarajuih pripadajuih instrukcija) moraju u programskoj memoriji biti smeteni u sekvencijalnim lokacijama. To znai da se parcijalni redosled osnovnih blokova CFG-a mora u programskoj memoriji urediti u formi koja je adekvantna potpunom (total) redosledu. U fazi preslikavanja CFG-a u linearne uzastopne memorijske lokacije, neophodno je, kako je to prikazano na slici 4.1, dodatno umetnuti bezuslovne instrukcije grananja (unconditional Branch). Preslikavanje (mapiranje) CFG-a u linearnu programsku memoriju u toku izvrenja programa odslikava posredno uredjen sekvencijalni tok upravljanja du sekvencijalnih memorijskih lokacija. Ipak egzistencija uslovnih i bezuslovnih instrukcija grananja ukazuju na naruavanje sekvencijalnog toka izvrenja programa, a saglasno tome i odstupanje od sekvencijalnog naina pribavljanja instrukcija. Ova odstupanja uzrokuju zastoje u radu protonog stepena za pribavljanje instrukcija i redukuju ukupnu propusnost. Instrukcije za poziv potprograma i povratak (Callsubroutine i Return) uzrokuju sline zastoje u sekvencijalnom pribavljanju instrukcija. 4.1.2. Degradacija performansi zbog grananja Protono organizovana maina ostvaruje maksimalnu propusnost ako radi u streaming reimu (modu) rada. Za stepen Fetch ovakav reim rada se odnosi na pribavljanje instrukcija sa sekvencijalnih lokacija u programskoj memoriji. Kad god tok upravljanja programom odstupa od sekvencijalnog puta, dolazi do potencijalnog naruavanja streaming moda. Kod bezuslovnih instrukcija grananja, sve dok se ne odredi ciljna adresa grananja ne mogu se pribavljati naredne instrukcije. Kod uslovnih instrukcija grananja mora prvo da se saeka trenutak dok se ne razrei dilema oko ispunjenja uslova grananja, a zatim ako do grananja dodje, mora da se eka sve dok ciljna adresa grananja ne postane dostupna. Na slici 4.2 prikazano je kako se vri naruavanje streaming moda od strane instrukcija tipa Branch i pokazano da se ovaj tip instrukcija izvrava od strane funkcionalne jedinice Branch. Kod uslovnih instrukcija grananja stepen Fetch moe korektno da pribavlja nove instrukcije prvo kada se razrei dilema oko uslova grananja, a zatim kada se izrauna (odredi) ciljna adresa grananja. Kanjenje u procesiranju uslovnih instrukcija grananja uzrokuju poveanje cene od tri ciklusa kod pribavljanja naredne instrukcije, a to odgovara prolasku instrukcije uslovno grananje kroz stepene Decode, Dispatch i Execute. Stvarnu cenu koju treba platiti, a ogleda se u gubitku od tri ciklusa, u sutini ne iznosi tri prazna slota instrukcija, kakav je to sluaj kod skalarnih procesora, nego se taj broj mora pomnoiti sa obimom maine, tj. stepenom superskalarnosti. Tako na primer ako je stepen superskalarnosti n = 4 (u jednom ciklusu se pribavljaju po etiri instrukcije) tada ukupna cena koja se plaa iznosi 12 mehurova. Ovakvi zastoji u radu u znaajnoj meri smanjuju stvarne performanse koje se mogu ostvariti.

68

Superskalarne tehnike

Fetch

Decode buffer

Decode

Dispatch buffer

Dispatch

Issue Branch Execution

Reservation stations

Finish

Complete

Completion buffer

Retire

Slika 4.2 Naruavanje sekvencijalnog toka upravljanja od strane instrukcije tipa Branch Kod uslovnih instrukcija grananja, stvarni broj zastoja, ili cena koja se plaa u zastojima, diktirana je od strane generisanja ciljne adrese grananja ili razreavanja dileme u vezi grananja. Stvarni broj ciklusa zastoja odredjen je od strane adresnih naina rada koje koriste instrukcije tipa Branch. Kod PC-relativnog adresnog naina rada, ciljna adresa grananja se moe generisati u stepenu Fetch, to rezultira ceni zastoja od jednog ciklusa. Ako se koristi registarsko indirektni adresni nain rada, tada instrukcija Branch mora da prodje stepen Decode kako bi se pristupilo registru. U ovom sluaju cena koja se plaa zbog zastoja iznosi dva ciklusa. Kada se koristi registarsko indirektno adresiranje sa ofsetom, ofset se mora dodati nakon pristupa registru tako da ukupni broj zastoja iznosi tri ciklusa. Na slici 4.3 prikazan je potencijalni broj ciklusa zastoja koji se javljaju zbog generisanja ciljne adrese grananja.

69

Superskalarne tehnike

Fetch

PCrelativno Registarsko indirektno Decode

Decode buffer

Registarsko indirektno sa ofsetom

Dispatch buffer

Dispatch

Reservation stations Issue Branch Execution

Finish

Completion buffer

Complete

Store buffer

Retire

Slika 4.3 Cena koja se plaa zbog generisanja ciljne adrese instrukcije tipa Branch Razliite metode kojima se razreavaju dileme vezane za uslov grananja rezultiraju razliitim cenama, izraene u broju zastoja, koje se moraju platiti. Za sluaj da se koriste CCR-ovi (Condition Code Registers) i ako usvojimo da se relevantnom CCR-u pristupa u stepenu Dispatch, tada cena zastoja iznosi dva ciklusa. Ako ISA, da bi generisala uslov grananja, generisanje uslova ostvaruje uporedjivanjem sadraja dva registra opte namene, tada je neophodan jo jedan ciklus kako bi se obavila ALU operacija nad sadrajem oba registra. To e rezultirati ceni zastoja od tri ciklusa. Kod uslovne instrukcije grananja, u zavisnosti od adresnog naina rada i pristupa u razreavanju dileme grananja, jedan od oba pomenuta uzronika je kritian. Tako na primer, ak i da se koristi PC-relativni adresni nain rada, uslovna instrukcija grananja mora da pristupi CCR-u, a to kod izraunavanja ciljne adrese grananja rezultuje ceni zastoja od dva, a ne jednog ciklusa. Maksimiziranje iznosa duine puta koji se odnosi na instrukcioni-tok direktno odgovara maksimiziranoj propusnosti kod pribavljanja instrukcija. Naglasimo da je : ukupna cena gubitaka srazmerna proizvodu broja ciklusa zastoja i irine (stepena sup erskalarnosti ) maine Kod maine iji je stepen superskalarnosti n svaki ciklus zastoja ekvivalentan je pribavljanju (ubacivanju) n operacije tipa Nop. Glavni cilj tehnike za poveanje protoka instrukcija je da minimizira 70

Superskalarne tehnike broj ciklusa zastoja, i/ili da u toku tih ciklusa obezbedi uslove da se potencijalno obavi neki koristan posao. Tekue dominantni pristup da se ostvari ovaj cilj predstavlja pristup koji se bazira na tehnici predikcije (predvidjanja) grananja (branch prediction). 4.1.3. Tehnike za predikciju grananja Do sada sprovedena ispitivanja vezana za osobine kod izvravanja programa pokazuju da se ponaanje instrukcija tipa Branch moe dosta dobro i pouzdano predvideti. Kljuni pristup u minimiziranju cene koja se mora platiti zbog grananja, a shodno tome maksimiziranju protoka instrukcija, bazira se na spekulativnom manipulisanju, prvo one koja se odnosi na izraunavanja vrednosti ciljne adrese grananja, a drugo one koja se tie procene uslova grananja. Kada se jedna statika instrukcija repetitivno izvrava u vremenu, tada se njeno dinamiko ponaanje moe pratiti. Na osnovu njenog ponaanja u prolosti, mogue je efikasno predvideti njeno ponaanje u budunosti. Dve osnovne komponente predikcije grananja su: 1. spekulacija sa ciljnom adresom grananja (branch target speculation) 2. spekulacija u vezi uslova grananja (branch condition speculation) Svaku spekulativnu tehniku prati odgovarajui mehanizam koji se odnosi na validaciju predikcije, ali i mehanizam za bezbedno oporavljanje u sluaju kada je predikcija pogrena. Spekulacija sa ciljnom adresom grananja podrazumeva korienje bafera ciljne adrese grananja (Branch Target Buffer-BTB) u kome se uvaju prethodne ciljne adrese grananja. BTB predstavlja malu ke memoriju kojoj se pristupa u toku stepena za pribavljanje instrukcija koristei tekuu vrednost PCa. Svaki ulaz (vrsta) BTB-a sadri dva polja: 1. adresa instrukcije grananja (branch instruction address-BIA) i 2. ciljna adresa grananja (branch target address-BTA). Kad se statika Branch instrukcija izvrava po prvi put, dodeljuje joj se ulaz i BTB. Adresa Branch instrukcije se smeta u BIA polje, a ciljna adresa grananja u BTA polje. Ako usvojimo da je BTB potpuno asocijativni ke, tada se BIA polje koristi za asocijativni pristup BTB-u. U sutini BTB-u se pristupa konkurentno sa pristupom I-keu. Kada se tekua vrednost PC-a upari sa BIA kao ulaz u BTB, kaemo da dolazi do pogotka kod BTB-a. To znai da je tekua instrukcija koja se pribavlja iz I-kea prethodno ve bila izvrena i da je to instrukcija tipa Branch. Kada dodje do pogodtka, pristupa se BTA polju koje je pridrueno ulazu za koji postoji pogodak, pa se adresa koja se proita sa tog polja koristi kao adresa za pribavljanje naredne instrukcije, naravno pod uslovom da je predikcija bila tipa dogrananja-dolazi ( vidi sliku 4.5).

71

Superskalarne tehnike
Bafer ciljne adrese grananja (BTB) pristup I- keu pristup BTB Polje adrese instrukcije Branch (BIA) BIA Polje ciljne adrese Branch (BTA) BTA

PC (adresa pribavljanja instrukcije)

Koristi se kao nova vrednost PC-a ako je predikcija tipa do-grananja-

Spekulacija ciljne adrese

dolazi

Slika 4.5 Spekulacija kod ciljne adrese grananja koristei BTB Pristupanjem tabeli BTB koristei adresu instrukcije grananja i izbavljanjem ciljne adrese grananja iz BTB-a, u toku stepena Fetch, spekulativna ciljna adresa grananja postae spremna za korienje u narednom mainskom ciklusu, i to kao adresa sa koje se pribavlja nova instrukcija pod uslovom da dogrananja-dolazi. Ako je predikcija bila tipa da do-grananja-dolazi i ustanovi se kasnije da je ona bila korektna, tada se instrukcija Branch efektivno izvrava u stepenu Fetch, to rezultira da ne postoje zastoji, tj. ne treba platiti cenu zbog zastoja. No nespekulativno izvrenje instrukcije Branch se i dalje obavlja sa ciljem da se validira (potvrdi) spekulativno izvrenje. Instrukcija Branch se pribavlja iz Ikea i izvrava. Ciljna adresa grananja kao i uslov grananja se proveravaju u odnosu na spekulativnu verziju. Ako postoji slaganje, tada za predikciju kaemo da je bila korektna, u ostalom sluaju, predikcija je bila pogrena tako da je neophodno inicirati akciju oporavljanja. Rezultat nespekulativnog izvrenja se takodje koristi za auriranje sadraja, tj. BTA polja u okviru BTB-a. Postoje brojni naini koji se koriste za spekulativnu predikciju grananja. Kod najjednostavnijeg reenja Fetch hardver se projektuje tako da do-grananja-ne-dolazi, tj. predikcija je grananje-se-nepreduzima. Kada se u toku izvrenja naidje na instrukciju Branch, pre nego to se dilema oko grananja razree, stepen Fetch produava bez zastoja da pribavlja one instrukcije koje u sekvencijalnom programskom redosledu neposredno slede nakon instrukcije Branch. Ovaj oblik minimalne predikcije grananja je lak za implementaciju, ali nije efikasan. Tako na primer, veliki broj instrukcija grananja se koristi kao zadnja instrukcija u petlji, a kod ovakvih situacija u najveem broju sluajeva do grananja dolazi, osim u zadnjoj iteraciji kada se izlazi iz petlje. Jedno drugo reenje predikcije se bazira na korienju softverske podrke, ali zahteva promene u ISA. Na primer, ekstra bit koji se postavlja od strane kompilatora se moe pridruiti formatu instrukcija Branch. Na osnovu vrednosti na koju je postavljen ovaj bit hardver koristi predikciju do grananja-ne-dolazi ili do-grananja-dolazi. Kompajler (moe da) koristi instrukciju tipa Branch i profilie informaciju sa ciljem da odredi vrednost koja najvie odgovara ovom bitu. Ovakvim pristupom se obezbedjuje da svaka instrukcija Branch ima svoju specificiranu predikciju. Ipak, ova predikcija je statika, u smislu to se za sva dinamika izvrenja instrukcije tipa Branch, koristi isto predvidjanje. Ovakav tip statike softverske predikcije se koristi kod procesora Motorola M 88 110. Kod treeg reenja, koristi se agresivna i dinamika forma predikcije koja sve bazira na korienju ofseta ciljne adrese grananja. Kod ove forme predikcije prvo se odredjuje relativni ofset izmedju adrese instrukcije Branch i adrese ciljne instrukcije. Pozitivni ofset trigeruje hardver da primeni predikciju do72

Superskalarne tehnike grananja-ne-dolazi, dok negativni ofset, u najveem broju sluajeva odgovara zadnjoj instrukciji tipa Branch u petlji, trigerovae hardver da obavi predikciju do-grananja-dolazi. Ova tehnika, bazirana na Branch ofsetu koristi se kod procesora IBM RS/6000, a prihvaena je kao dobro reenje i kod drugih maina. Kod savremenih superskalarnih maina najee koriena tehnika koja se odnosi na spekulaciju uslova grananja je ona koja se bazira na istoriji prethodnih izvrenja grananja. Na osnovu prethodnih opservacija o smeru grananja, tehnika za predikciju-grananja-baziranana-istoriji (history based branch prediction) donosi odluke o smeru grananja u formi grananje postoji (taken -T ) ili ne-postoji ( not taken-N). Pretpostavka se zasniva na tome da informaciji o istoriji smera grananja u toku prethodne iteracije moe biti od velike koristi kod odredjivanja uslova grananja u narednoj iteraciji. Projektantske odluke kod ovakvog tipa predikcije grananja uzimaju u obzir koliko dugo (misli se na broj iteracija) se vodi evidencija o istoriji, i u toku observiranog istorijskog perioda kakav je bio ishod predikcije (koliko puta je bio pogodak, a koliko promaaj). Specifini algoritam koji se odnosi na predikciji smera grananja zasnovan (baziran) na istoriji se moe opisati (vidi sliku 4.6) koristei princip rada konanog automata (Finite State Machine-FSM). Na osnovu n promenljivih stanja kodiraju se smerovi grananja uzimajui u obzir zadnjih n izvrenja tog grananja. To znai da se svako stanje odnosi na pojedinu istorijsku formu koja zavisi od toga da li je do grananja dolo ili nije dolo. Izlazna logika generie predikciju na osnovu tekueg stanja FSM-a. U sutini, predikcija se formira na osnovu ishoda prethodnih n-izvrenja tog grananja. Kada se prediktovano grananje konano obavi, stvarni ishod se koristi kao ulaz u FSM radi trigerovanja prelaska iz jednog stanja u drugo. Logika naredno-stanje je trivijalna, ona jednostavno uleava (smeta) u pomeraki registar promenljive stanja, ime zapisuje (vodi evidenciju) o smeru grananja instrukcije Branch za njena prethodna n izvrenja.
S1 S2 Sn-1 Sn Aktuelni smer razreene Branch

. . . . . .

Prediktovani smer pribavljene Branch

Izlazna logika: Generie predikciju na osnovu tekueg stanja

Slika 4.6 FSM model prediktora smera grananja zasnovan-na-istoriji Na Slici 4.7 prikazan je FSM dijagram jednog tipinog 2-bitnog Branch prediktora koji koristi dva-bita istorije kako bi pratio ishod prethodna dva izvrenja instrukcije Branch. Dva bita istorije predstavljaju promenljive stanja FSM-a. Prediktor se moe nai u jedno od etiri stanja: NN, NT, TT i TN, to odgovara preduzetim smerovima grananja u toku prethodna dva izvrenja instrukcije Branch. Inicijalno se dodeljuje stanje NN. Izlazna vrednost T ili N se dodeljuje svakom od etiri stanja, a to odgovara preduzetom predvidjaju kada se prediktor nadje u to stanje. Kada se obavlja grananje, aktuelno preduzeti smer grananja se koristi kao ulaz u FSM, a samim prelaskom iz jednog stanja u drugo se aurira vrednost istorije grananja koja se koristi u toku donoenja odluke kod narednog predvidjanja. Implementirani algoritam prediktora sa slike 4.7 orijentisan je ka predikciji grananja kojom se uvek predvidja da do-grananja-dolazi; uoimo da se kod tri od etiri stanja predvidja da e dogrananja-doi. On polazi od toga da e se dugo ponavljati smer grananja N(T) ako je FSM u stanju NN 73

Superskalarne tehnike ( TT). Za sluaj da je u toku jednog od prethodna dva izvrenja dolo do grananja prediktovani smer je da do grananja dolazi. Predikcija komutirae kada do grananja ne dolazi ako se zaredom jave dva N-a. Algoritam sa slike 4.7 a) predstavlja samo jedan od brojnih algoritama.
T TT/T T

NT/T

N N T T

Inicijalno stanje TN/T Istorija NN/N N Prediktovani smer N Aktuelni smer

Branch-a

a)
I-ke Polje adrese instrukcije Branch (BIA) BTB BIA Polje ciljne adrese Branch-a (BTA) BTA Istorija

Branch-a

PC

Spekulacija ciljne adrese grananja Predvidjanje do-grananja-dolazi ili do-grananja-ne-dolazi

FSM

b) Slika 4.7 Predikcija grananja zasnovana na istoriji; a) Algoritam 2-bitnog Branch prediktora; b) BTB sa dodatnim poljem za memorisanje bitova o istoriji Branch-a Da bi se podrao rad prediktora smera grananja zasnovan na istoriji, svaki ulaz BTB-a treba proiriti poljem istorije. Obim, broj bitova, ovog polja odredjen je brojem bitova istorije koje treba 74

Superskalarne tehnike pratiti. Kada se PC adresa dovede na ulaz BTB-a, pored spekulativne ciljne adrese grananja, iz tabele se itaju i bitovi istorije. Bitovi istorije se dovode na ulaz logike koja kod FSM Branch prediktora implementira funkcije naredno-stanje i izlaz. Bitovi istorije koje smo dobavili iz tabele koriste se kao promenljive stanja (ulazne promenljive) FSM-a. Na osnovu bitova istorije izlazna logika generie 1bitni izlaz koji ukazuje na predvidjeni smer grananja. Ako se predikcija odnosi na sluaj kada dogrananja-dolazi, tada se izlaz koristi da usmeri spekulativnu ciljnu adresu grananja ka PC-u kako bi se u narednom ciklusu pribavila nova instrukcija. Za sluaj da je predikcija grananja bila korektna, tada se instrukcija Branch efektivno izvrava u stepenu Fetch, a cena koja se plaa zbog zastoja je nula mainskih ciklusa. Godine 1984. Lee i Smith napravili su eksperimente koji se odnose na predikciju grananja. Na tri razliite maine, IBM 370, DEC PDP-11 i CDC 6400, izvravali su 26 programa koji su pripadali 6 razliitim radnim optereenjima. U proseku kod sva est benmarka (benchmark) u 67 ,6 % sluajeva do grananja je dolazilo, a u 32 ,4 % nije dolazilo, tj. odnos smerova grananja je bio dva na prema jedan. Sa statikom predikcijom grananja zasnovano na op-kd-tipu, za sva est radna optereenja tanost predvidjanja je bila u granicama od 55 % do 85 % . Korienjem samo jednog bita istorije, kod dinamike predikcije grananja postignuta je tanost predvidjanja u opsegu od 79 ,7 % do 96 ,5 % . Kod prediktora za dva bita istorije tanost predvidjanja je bila u granicama od 83 ,4 % do 97 ,5 % . Poveanjem broja bitova istorije raste i stopa pogodaka, ali treba naglasiti da su za broj bitova istorije vei od 4 dodatni inkrementi u tanosti predvidjanja manja. 4.1.4. Oporavljanje nakon pogrene predikcije kod grananja Predikcija grananja predstavlja spekulativnu tehniku. To drugim reima znai da su joj, kao bilo kojoj spekulativnoj tehnici, potrebni mehanizmi za validaciju spekulacije. Shodno ovoj konstataciji dinamiku predikciju grananja moemo posmatrati kao proces koji se izvrava od strane dve interaktivne maine (vodea i pratea) . Vodea maina obavlja spekulaciju na front-end stepenima kod protone obrade, dok pratea maina obavlja validaciju kod kasnijih stepena u protonoj obradi. U sluaju pogrene predikcije kod grananja kasniji stepeni su ti koji su zadueni da ostvare oporavljanje. Ova dva aspekta predikcije grananja prikazana su na slici 4.9.

NT

(Tag 1)
NT T

NT

(Tag 2 )
NT T NT T NT T NT T

(Tag 3)

75

Superskalarne tehnike

NT

NT

NT

(Tag 2 )
NT T NT T NT T NT T

(Tag 3)

(Tag 1)

Slika 4.9 Dva aspekta predikcije Branch-a: a) spekulacija kod Branch-a; b) validacija/oporavljanje kod Branch-a Spekulacija grananja (branch speculation) se sastoji od predikcije smera grananja nakon ega sledi pribavljanje instrukcija sa prediktovanog puta toka upravljanja. U toku pribavljanja instrukcija sa prediktovanog puta, mogue je da se ponovo naidje na instrukcije grananja. Predikcija (ovih) dodatnih grananja moe se na slian nain obaviti kao i predikcija prve, a to rezultira spekulativnom prolazu veeg broja uslovnih instrukcija grananja, pri emu dileme oko prve spekulacije jo nisu razreene. Na slici 4.9 a) prikazana su tri spekulativna prolaza instrukcija grananja pri emu je prvo i tree grananje prediktovano kao do-grananja-dolazi (branch taken T), a drugo kao do-grananja-ne-dolazi (branch not taken NT). Kada dodje do ovakve situacije, instrukcije iz sva tri spekulativna bloka su rezidentne (nalaze se) u maini i moraju biti identifikovane (oznaene) na odgovarajui nain. Pri ovome, instrukcijama koje pripadaju jednom spekulativnom bloku se dodeljuje isti (jedinstveni) identifikujui marker (tag). Tako na primer, kako je to prikazano na slici 4.9 a), za identifikaciju instrukcija koje pripadaju trima razliitim spekulativnim osnovnim blokovima dodeljuju se tri razliita markera (tagova). Pri ovome, oznaena (tagged) instrukcija ukazuje da je to spekulativna instrukcija, dok vrednost markera identifikuje kom osnovnom bloku ta instrukcija pripada. Kako spekulativna instrukcija avansuje du protonih stepeni, sa njom se prenosi i marker. Kod spekulacije, adrese instrukcija svih spekulativnih instrukcija grananja (ili narednih sekvencijalnih instrukcija) moramo baferovati (zapamtiti), za sluaj da je potrebno sprovesti postupak oporavljanja. Validacija grananja (branch validation) se javlja u toku izvrenja grananja kao i razreavanja dileme oko aktuelnog smera grananja. To znai da je mogue odrediti korektnost ranije predikcije. Ako se za predikciju pokae da je bila korektna, marker spekulacije se brie (dealocira) i svim instrukcijama kojima je taj marker pridruen dozvoljeno je kompletiranje. U sluaju kada se detektuje pogrena predikcija preduzimaju se dve akcije. Prvo, zatvara se (zaustavlja se) nekorektni put, a drugo, inicira se pribavljanje instrukcija sa novog korektnog puta. Da bi se inicirao novi put, neophodno je aurirati vrednost PC-a na adresu nove instrukcije. Za sluaj da je nekorektna predikcija bila T (branch taken) tada se PC aurira na adresu sekvencijalne instrukcije, koja se odredjuje na osnovu adrese prethodno baferovane instrukcije kada je grananje bilo prediktovano kao T. Nakon auriranja PC-a, nastavlja se pribavljanje instrukcija sa novog puta, a predikcija grananja poinje iznova. Za zatvaranje nekorektnog puta, koriste se markeri spekulacije. Svi markeri koji prate (pridrueni su) pogreno prediktovano grananje koriste se za identifikaciju instrukcija koje moraju biti eliminisane. Sve te instrukcije koje se nalaze u baferima za dekodiranje i rasporedjivanje (dispatch) kao i one koje se nalaze u ulazima rezervacionih stanica neophodno je invalidirati. Ulazi bafera preuredjenja (reorder buffer) koji su zauzeti (koji se pamte) od strane ovih instrukcija moraju se dealocirati (osloboditi). Na slici 4.9 b) prikazan je proces validacija/oporavljanje za sluaj kada je druga od tri predikcije bila pogrena. Prvo grananje je bilo korektno prediktovano, pa zbog toga, instrukcije kojima je pridruen Tag1 postaju nespekulativne i dozvoljava im se kompletiranje. Druga predikcija je bila nekorektna, tako da sve 76

Superskalarne tehnike instrukcije kojima su pridrueni markeri Tag2 i Tag3 moraju biti invalidirane, a njihovi ulazi u bafer preuredjenja moraju se dealocirati (anulirati). Nakon pribavljanja informacije o novom putu, predikcija grananja moe da pone iznova, pri emu se Tag1 moe ponovo koristiti da ukae na instrukcije koje pripadaju prvom spekulativnom osnovnom bloku. U toku validacije grananja, odgovarajui (pridrueni) BTB ulaz se takodje aurira. Sada emo koristiti Power PC 604 superskalarni mikroprocesor da bi ilustrovali implementaciju dinamike predikcije grananja kod jednog realnog superskalarnog procesora. Power PC je superskalarni procesor obima 4 koji je u stanju da pribavlja, dekodira i dispeuje do etiri instrukcije svakog mainskog ciklusa. Umesto jedinstvenog BTB-a, Power PC 604 koristi dva izdvojena bafera koji podravaju predikciju grananja, naime adresni ke ciljnog grananja (branch targget address casheBTAC) i tabela istorije grananja (branch history table-BHT) vidi sliku 4.10. BTAC je potpuno asocijativni ke sa 64 ulaza u kome se pamte ciljne adrese grananja, dok BHT je direktno-preslikana tabela sa 512 ulaza u kojoj se uvaju bitovi o istoriji grananja. Razlog ovom razdvajanju bie kratko objanjen.

FA-mux +4
BHT predikcija BTAC predikcija

FA FA FA
Branch target address cache (BTAC)

Slika 4.10 Predikcija grananja kod Power PC 604 superskalarnog mikroprocesora


Napomena:: Branch history table (BHT)- Tabela istorije instrukcije Branch; Branch target adrress cache(BTAC)- Ke ciljne adrese grananja instrukcije Branch.

FAR
Branch history table (BHT) BTAC BHT auriranje auriranje BRN SFX

I-ke

Decode buffer

Decode

Dispatch buffer

Dispatch

CFX

CFX

FPU

LS

Issue Branch Execute

Rezervacione stanice

Finish

Completion buffer

77

Superskalarne tehnike Obema tabelama, BTAC i BHT, se pristupa u toku stepena Fetch koristei tekuu adresu za pribavljanje instrukcija koja se uva u PC. BTAC se odaziva nakon jednog ciklusa, dok BHT-u su potrebna dva ciklusa za kompletiranje pristupa. Ako se javi pogodak u BTAC-u, koji ukazuje na prisustvo instrukcije grananja u tekuoj grupi za pribavljanje predikcija koja se odnosi na do-grananjadolazi se javlja, a ciljna adresa grananja koja se izbavlja iz BTAC-a se koristi u narednom ciklusu pribavljanja. Poto Power PC 604 pribavlja 4 instrukcije u ciklusu Fetch, mogue je da postoji vei broj grananja u grupi koja se pribavi. Zbog toga BTAC ulaz koji se indeksira od strane adrese za pribavljanje sadri ciljnu adresu grananja prve Branch instrukcije u grupi koja se pribavlja, a koja je prediktovana kao do-grananja-dolazi. U drugom ciklusu, ili u toku stepena Decode, bitovi istorije koji se izbavljaju iz BHT-a koriste se za generisanje predikcije bazirane na istoriji, a odnose se na istu instrukciju Branch. Ako dodje do slaganja obeju predikcija za prvu predikciju kaemo da je vaea (BTAC). Sa druge strane, ako se BHT predikcija ne slae sa BATC predikcijom, BTAC predikcija se anulira (ponitava), a pribavljanje se ostvaruje sa drugog puta, to odgovara predikciji do-grananja-ne-dolazi. U sutini BHT predikcija je veeg prioriteta od BTAC predikcije. Kao to je zaoekivati, kod najveeg broja sluajeva dolazi do slaganja obeju predikcija. U nekim sluajevima, BHT koriguje pogrenu predikciju koju je uinio BTAC. Ipak je mogue da BHT pogreno promeni korektnu predikciju BTACa, ali do ovakve situacije dolazi veoma retko. Kada se problem grananja razrei, BHT se aurira, a na osnovu auriranog sadraja BHT-a aurira se i BTAC. Power PC 604 ima 4 ulaza u rezervacionu stanicu koji se dovode na ulaz Branch Execution Unit (BEU) zbog toga ovaj mikroprocesor moe da spekulie do 4 Branch instrukcija tj. istovremeno maksimalno postoje do 4 spekulativne Branch instrukcije u maini. Da bi oznaili 4 spekulativna osnovna bloka, koristi se dvobitni marker radi identifikacije svih spekulativnuh instrukcija. Nakon to se grananje rei, vri se validacija grananja pri emu se sve spekulativne instrukcije mogu uiniti nespekulativnim ili se invalidiraju pomou dvobitnog markera. Ulazi bafera preuredjenja koji se zauzimaju od strane pogreno spekulisane instrukcije se dealociraju. Ponovo, ovo se obavlja pomou dvobitnog markera. 4.1.5. Napredne tehnike za predikciju grananja eme za dinamiku predikciju grananja o kojima smo prethodno diskutovali imaju vei broj ogranienja. Predikcija o grananju se donosi na osnovu ograniene istorije samo o toj statikoj Branch instrukciji. Algoritam o aktuelnoj predikciji ne vodi rauna o dinamikom kontekstu u okviru koga se inatrukcija Branch izvrava. Tako na primer, algoritam ne koristi informaciju o pojedinom toku upravljanja kada naidje na tu instrukciju. ta vie isti fiksni algoritam se koristi za predikciju grananja nezavisno od dinamikih uslova. Eksperimentalnom analizom je ustanovljeno da ponaanje odredjenih grananja strogo zavise od ponaanja drugih grananja koje mu u toku izvrenja prethode. Saglasno tome, moe se ostvariti tanije predvidjanje pomou algoritama koje vode rauna o istoriji grananja drugih korelisanih (srodnih) grananja, a da pri tome prilagode algoritam predikcije dinamikom kontekstu grananja. Yeh i Patt 1982. godine predloili su dvo-nivovsku adaptivnu tehniku za predikciju grananja koja moe potencijalno da postigne taniju predikciju grananja od 95% na osnovu veoma fleksibilnog algoritma za predikciju koji se prilagodjava promenama konteksta. Kod prethodnih ema, koristi se jedinstvena tabela o istoriji grananja koja se indeksira od strane Branch adrese. Za svaku Branch adresu postoji samo jedan relevantni ulaz u BHT-u. Kod dvo-nivovske adaptivne eme koristi se skup tabela istorije. One se identifikuju kao PHT-ovi (Pattern History Table) vidi sliku 4.11. Svaka Branch adresa indeksira skup relevantnih ulaza; jedan od ovih ulaza se zatim selektuje na osnovu konteksta dinamikog grananja. Kontekst se odredjuje na osnovu specifinog oblika najskorije izvrenih grananja koji se uva u BHSR-u (Branch History Shift Register) vidi sliku 4.11. Sadraj BHSR-a se koristi za indeksiranje PHT-a radi selekcije jednog od relevantnih ulaza. Sadraj ovog ulaza se nakon toga koristi kao stanje FSM-ovog algoritma za predikciju radi generisanja predikcije. Kada se grananje razrei, rezultat grananja se koristi za auriranje kako BHSR-a tako i selektovanog ulaza u PHT-u. 78

Superskalarne tehnike
Pattern history table (PHT) Adresa Branch instrukcije 0000 Branch history shift register (BHSR) (Pomeranje ulevo kada se aurira) 1 0 1 1 1 1 1 1 0 0 stari novi 1110 Index 1 0 1 1 0 1111 FSM logika Predikcija 0001 0010

PHT bitovi

Branch rezultat

Slika 4.11 Dvo-nivovska adaptivna Branch predikcija po Yeh i Patt-u


Napomena:: Pattern history table (PHT)- Oblik tabele istorije; Branch history shift register(BHSR)- Pomeraki registar o istoriji instrukcije Branch

Dvo-nivovska adaptivna tehnika za predikciju grananja predstavlja okvir u okviru koga se moe implementirati vei broj dizajna. Postoje dve opcije za implementaciju BHSR-a: globalna-(G) i individualna(P). Globalna implementacija koristi jedinstveni BHSR sa k ulaza koji prate smerove grananja zadnjih k dinamikih Branch instrukcija u programskom izvrenju. To moe biti bilo koji broj (1 do k)-statikih Branch instrukcija. Individualne (po Yeh i Patt-u nazvane per-branch) implementacije koriste skup k-bitnih BHSR-ova (vidi sliku 4.11), pri emu se selektuje ona koja je bazirana na adresi grananja. U sutini globalna BHSR je deljiva od strane svih statikih grananja, dok kod individualnih BHSR-ova svaki BHSR se dodeljuje po jednoj statikoj Branch instrukciji, ili podskupu statikih Branch-ova ako postoji adresna alijaza (preklapanje adresa) kod indeksiranja skupa BHSR-ova koristei adresu Branch. Postoje tri opcije za implementaciju PHT-a: globalna-(g), individualna-(p), ili deljiva-(s). Globalni PHT koristi jedinstvenu tabelu da bi podrao predikciju svih statikih grananja. Alternativno, mogue je koristiti i individualne PHT-ove pri emu je svaki PHT namenjen po jednom statikom grananju (p) ili manjem podskupu statikih grananja (s), ako postoje adresne alijaze kada se vri indeksiranje u skupu PHT-ova koristei Branch adrese. Trea dimenzija, da bi se obavilo projektovanje, ukljuuje implementaciju algoritma aktuelne predikcije. Kada se istorijsko zasnovani FSM koristi radi implementacije algoritma o predikciji, Yeh i Patt su identifikovali ove eme kao adaptivne (A). Sve mogue implementacije dvo-nivovske adaptivne Branch predikcije se mogu klasifikovati na osnovu tro-dimenzionalnih dizajn parametra. Data implementacija se oznaava koristei tro-slovnu notaciju, tj. GAs predstavlja dizajn koji koristi jedinstvenu globalnu BHSR, adaptivni algoritam za predikciju, i skup PHT-ova od kojih je svaka zajednika za vei broj statikih grananja. Yeh i Patt su prezentovali tri specifine implemenmtacije koje za skup Benchmark-ova postiu tanost predikcije od 97%. To su sledee implementacije: 79

Superskalarne tehnike GAg:(1) BHSR obima 18 bitova; (1) PHT obima 2 18 2 bita PAg: (512 4 ) BHSR-ova obima: 12 bitova; (1) PHT obima 2 12 2 bitova PAs: (512 4 ) BHSR-ova obima: 12 bitova; (512) PHT obima 2 6 2 bitova Sve tri implementacije koriste adaptivni (A) prediktor koji je dvo-bitna FSM. Prva implementacija koristi globalnu BHSR (G) sa 18 bitova i globalnu PHT (g) sa 2 18 ulaza koji se indeksiraju od strane BHSR bitova. Druga implementacija koristi 512 skupova (4-struki skupnoasocijativni) sa 12-to bitnim BHSR-ovima (P) i globalni PHT (g) sa 2 12 ulaza. Trea implementacija takodje koristi 512 skupova 4-struko skupno asocijativne BHSR-ove (P) ali svaki obima 6 bitova. Ona takodje koristi 512 PHT-ova (s) od kojih svaki ima 2 6 ulaza indeksiranih od strane BHSR bitova. Oba 512 skupova BHSR-ova i 512 PHT-ova se indeksiraju pomou 9 bitova Branch adrese. Dodatni bitovi Branch adrese se koriste za skupno-asocijativni pristup BHSR-ovima. PHT tabele sa 512 ulaza su direktno preslikani, pa zbog toga moe da postoji alijaza tj. vei broj Branch adresa da deli isti PHT. Na osnovu eksperimentalnih podataka, ovakve alijaze imaju minimalni uticaj na degradaciju tanosti predikcije. Postizanje vee tanosti predikcije od 95% od strane dvo-nivovske adaptivne Branch predikcione eme predstavlja zaista impresivni rezultat; najbolje tradicionalne predikcione tehnike mogu da ostvare tanost predikcije od 90%. Dvo-nivovska adaptivna Branch predikcija kao pristup je usvojena od strane veeg broja realnih dizajna, ukljuujui tu Intel Pentium Pro i AMD /NexGen Nx686. Na osnovu originalnog Yeh-ovog i Patt-ovog predloga, McFarling (1993), Young (1995) i Gloy (1996) su poboljali dvo-nivovsku adaptivnu tehniku, koristei tzv. korelisane Branch prediktore. Na slici 4.12 prikazan je korelisani Branch prediktor koji ima globalnu BHSR (G) i deljivu PHT (s). Dvobitni saturacioni broja se koristi kao FSM prediktor. Globalni BHSR prati smerove grananja zadnjih k dinamikih grananja i na osnovu toga dinamiki kontrolie kontekst toka upravljanja. PHT se moe posmatrati kao jedinstvena tabela koju ini dvo-dimenzionalno polje sa 2 j kolona i 2 k vrsta dvobitnih prediktora. Ako Branch adresa ima n bitova, podskup j bitova se koristi za indeksiranje PHT-a radi selekcije jedne od 2 j kolona. S obzirom da je j manje od n, moe doi do odredjenih alijaza pri emu dve razliite Branch adrese mogu da indeksiraju istu kolonu PHT-a. Zbog toga kaemo da se koristi deljivi PHT. Pri tome k bitova BHSR-a se koriste za selekciju jednog od 2 k ulaza selektovane kolone. Dva bita istorije u selektovanom ulazu se koriste za kreiranje predikcije zasnovane na istoriji. Tradicionalna tabela istorije grananja akvivalentna je samo jednoj vrsti PHT-a koja se indeksira pomou j bitova Branch adrese, kako je to prikazano na slici 4.12 u isprekidano uokvirenom pravougaoniku koga ine dvo-bitni prediktori prve vrste PHT-a.

80

Superskalarne tehnike
Adresa grananja

j bitova

Tradicionalni BHT

Globalni Branch history

shift register (BHSR)


Predikcija
PHT od 2 k 2 j 2
j bitova
PHT od 2 k 2 j 2

k bitova

= FSM kao dvo-bitni saturacioni broja

Slika 4.12 Korelisani Branch prediktor sa globalnim BHSR-ovima i deljivim PHT-ovima (GAs)

Adresa grananja

i bitova

Individualni Branch history shift register (BHSR)

2i k

k bitova

Slika 4.13 Korelisani Branch prediktor sa individualnim BHSR-ovima i deljivim PHT-ovima (PAs) Slika 4.13 prikazuje korelisani Branch prediktor sa individualnim ili per-branch BHSR-ovima (P) i istim deljivim PHT (s). Slino kao i GAs ema, PAs ema takodje koristi j bitova Branch adrese 81

Predikcija

Superskalarne tehnike radi selekcije jedne od 2 j kolona PHT-a. Ipak, i bitova adrese Branch, koji se mogu preklapati sa j bitova koji su namenjeni za pristup PHT-u, koriste se za indeksiranje skupa BHSR-ova. U zavisnosti od Branch adrese bira se jedna od 2 i BHSR-ova. Zbog toga svakoj BHSR se pridruuje jedna Branch adresa, ili skup Branch adresa za sluaj da postoje alijaze. U sutini, umesto da se koristi jedinstvena BHSR koja obezbedjuje dinamiko upravljanje kontekstom programa za sva statika grananja, koristi se vei broj BHSR-ova koji obezbedjuju razliite kontekste dinamikog upravljanja tokom programa za razliite podskupove statikih grananja. Ovo omoguava dodatnu fleksibilnost praenja i korienja razliitih korelacija koje postoje medju razliitih instrukcija grananja. Svaki BHSR prati smerove zadnjih k dinamikih grananja koje pripadaju istom podskupu statikih grananja. Kako GAs tako i PAs eme zahtevaju PHT obima 2 k 2 j 2 bita. GAs ema ima jedan k-to bitni BHSR, dok PAs ema zahteva 2 i k-to bitnih BHSR-ova. Veoma efikasni korelisani Branch prediktor nazvan gshare predloen od strane Scott McFarling (1993). Kod ove eme j bitova Branch adrese su hashed pomou po-bitne XOR funkcije sa k bitova iz globalne BHSR (vidi sliku 4.14). Rezultantni max {k , j} bitova koriste se da indeksiranje PHT-a obima 2 max {k , j} bitova radi selekcije jednog od 2 max {k , j} dvo-bitnih Branch prediktora. Kod eme gshare potreban je samo jadan k-to bitni BHSR i vei broj manjih PHT-ova pri emu se ostvaruju komparativne tanosti u predikciji u odnosu na druge korelisane Branch prediktore. Ova ema se koristi kod Dec Alpha 21264 etvoro-strukog superskalarnog mikroprocesora.
Adresa grananja

j bitova

Globalni Branch history shift register (BHSR)

+
k bitova
max { k , j } bitova

PHT

od 2 max

{ k ,j }

Slika 4.14 McFarling-ov gshare korelisani Branch prediktor

4.1.6. Druge tehnike za upravljanje tokom programa Primarni cilj tehnika za upravljanje tokom programa je da dostavi to je mogue vei broj korisnih instrukcija izvrnom jezgru procesora u toku svakog mainskog ciklusa. Dva glavna izazova se odnose na uslovna grananja i sluaj kada do-grananja-dolazi. Superskalarni procesori velikog obima, da bi obezbedili adekvatnu propusnost kod instrukcija uslovnog grananja, moraju da ostvare tanu 82

Predikcija

Superskalarne tehnike predikciju ishoda i cilja grananja za vei broj uslovnih grananja u toku svakog mainskog ciklusa. Na primer, kod fetch grupe sa etiri instrukcije, mogue je da sve etiri instrukcije budu tipa uslovnog grananja. U idealnom sluaju poeljno je da se koriste adrese za sve etiri instrukcije radi indeksiranja etvoro-portnog BTB-a kako bi se izvukli bitovi istorije ciljnih adresa za sva etiri grananja. Jedan kompleksni prediktor moe zatim da uini jednu celovitu predikciju na osnovu svih bitova istorije. Nakon toga moe da sledi spekulativno pribavljanje zasnovano na ovoj predikciji. Tehnike za predikciju kod viestrukih grananja u svakom ciklusu predloene su od strane Conte (1995) i Rotenberg (1996). Veoma je vano da se obezbedi visoka tanost kod ovakvih predikcija. U ovom sluaju koristi se istorija o globalnom grananju zajedno sa per-branch istorijom sa ciljem da se postigne visoka tanost predikcije. Za ona grananja ili sekvencu grananja koja ne poseduju strogo nagleeno Branch ponaanje veoma je teko izvriti tanu predikciju pa se zbog toga koristi dynamic eager execution DEE tehnika predloena od strane Gus Uht (1995). DEE koristi vei broj PC-ova za simultano pribavljanje veeg broja adresa. U sutini stepen Fetch prosledjuje vei broj puteva upravljanja tokom programa sve dok se ishod grananja ne razrei, pa se u tom trenutku na neki od pogrenih puteva invalidiraju instrukcije. Sluaj kada do-grananja-dolazi je druga glavna prepreka za dostavljanje dovoljnog broja korisnih instrukcija EX jezgru. Kod maina velikog obima jedinica Fetch mora biti u stanju da korektno procesira vie od jedne instrukcije kod koje do-grananja-dolazi u jednom ciklusu, to podrazumeva predikciju svakog smera kao i cilja grananja, kao i pribavljanje, poravnanje i kobinovanje instrukcija sa veeg broja ciljnih adresa grananja. Efektivni pristup za reavanje ovog problema zasniva se na koroenju trace cache koji je predloen od strane Rotenberg-a (1996). Nakon ovoga odredjeni oblik trace cache-a je implementiran kod najnovijih verzija Pentium 4 superskalrnog procesora. Trace cache je istorijski zasnovan mehanizam pribavljanja i memorisanja tragova dinamikih instrukcija u keu koji se indeksira od strane fetch adrese i Branch ishoda. Ovi tragovi se dinamiki asembliraju shodno dinamikom ponaanju grananja i mogu da sadre vei broj neredoslednih osnovnih blokova. Kad se javi pogodak kod pribavljanja adresa u trace cache-u, instrukcije se pribavljaju iz trace cache-a, a ne iz instrukcionog kea. S obzirom da dinamika sekvenca instrukcija u trace cache-u moe da sadri vei broj da do-grananja-dolazi, a ipak je memorisana sekvencijalno, ne postoji potreba za pribavljanje veeg broja ciljnih adresa grananja, kao i potreba za multi-portnim instrukcionim keom i logikom kompleksnog meanja i poravnanja u Fetch stepenu. Trace cache se moe posmatrati kao blok koji obavlja dinamiko preuredjenje u saglasnosti sa dominatnim putevima izvrenja u programu. Meanje i poravnjanje se obavlja u stepenu completion, kada se prvo izvravaju neredosledni blokovi, koji se nalaze na dominatnom putu, zatim se asemblira informacija o trasi koja se zatim memorie u jednu liniju trace cache-a. Cilj je da nakon to se trace cache aktivira, najvei broj pribavljenja e dolaziti sa trace cache-a, a ne sa instrukcionog kea. S obzirom da preuredjeni osnovni blokovi u trace cache-u mogu znatno bolje da prate dinamiki redosled izvrenja, postoji manji broj pribavljanja sa neredoslednih lokacija trace cache-a, a shodno tome dolazi do poveanja efektivne propusnosti insrtrukcija kod kojih do-grananja-dolazi.

83

Superskalarne tehnike

4.2.

Tehnike za registarski-protok-podataka

Tehnike za registarski protok podataka odnose se na efektivno izvrenje ALU-ih (ili regisarskoregistarskih) tipova instrukcija u izvrnom delu (jezgru) procesora. U sutini moe se smatrati da ALU instrukcije obavljaju "realni" posao specificiran od strane programa, dok im upravljake i Load/Store instrukcije pruaju ulogu podrke u obezbedjivanju kako neophodnih instrukcija tako i zahtevanih podataka, respektivno. Kod najveeg broja idealnih maina, instrukcije tipa Branch i Load/Store, predstavljaju overhead instrukcije, vreme njihovog procesiranja kroz stepen EX je nula, ali je latencija izraunavanja, odredjena od strane procesiranja instrukcija tipa ALU, najkrae (vreme procesiranja instrukcija kroz EX stepen je najkrae kada se izvrava operacija tipa ALU integer). Efektivno vreme procesiranja ovih instrukcija predstavlja osnovu za postizanje visokih-performansi. Ako je naa arhitektura tipa Load/Store, tada se ALU instrukcijama specificiraju operacije koje se obavljaju nad izvornim operandima koji se uvaju u registrima. Obino ALU instrukcija specificira binarnu operaciju, dva registra iz kojih se izbavljaju operandi, i odredini registar gde se specificira kao Ri Fn (R j , Rk ) za ije je izvrenje potrebno: a) funkcionalna jedinica Fn , b) dva izvorina registra Rj i Rk , c) odredini registar Ri U sluaju da funkcinalna jedinica Fn ne bude dostupna tada kaemo da postoji strukturna zavisnost, a to dovodi do strukturne zavisnosti. Ako jedan ili oba izvorna operanda Rj i Rk nisu dostupna, tada moe da dodje (ili dolazi) do pojave hazarda tipa prave-zavisnosti-po-podacima. Ako odredini registar Ri nije dostupan tada se javlja hazard tipa anti- ili izlaznazavisnost, tj. tipa lanih zavisnosti. 4.2.1. Ponovno korienje registara i lanih zavisnosti po podacima Uzrok pojave lanih zavisnosti predstavlja ponovno korienje registara. Ako se neki od registara ne koristi iznova za potrebe memorisanja operanda, tada kaemo da do pojave lane zavisnosati po podacima i ne dolazi. Ponovno korienje registara se naziva recikliranje registara (register recycling). Postoje dve forme recikliranja registra, statika i dinamika. Statika forma se javlja zbog optimizacije koja se obavlja od strane kompilatora, i nju emo prvo sagledati. Kod tipinog kompajlera, u toku "back-end" procesa kompilacije obavljaju se sledea dva zadatka: generisanje kda (code generation) dodela registara (register allocation) Proces generisanja kda je zaduen za aktuelnu emisiju mainskih instrukcija. Obino generator kda usvaja da ima na raspolaganju neogranien broj simbolikih registara u kojima smeta sve privremene podatke. Svaki simboliki registar se koristi za memorisanje po jedne vrednosti i u njemu se upisuje samo po jedanput, a ovakav kd nazivamo kd jednostruke-dodele ( single-assignement code). Ipak realna ISA ima ogranien broj arhitekturnih (ugradjenih) registara, pa se zbog toga koriste sredstva za dodelu registara koji preslikavaju neogranien broj simbolikih registara u ogranieni i fiksni broj arhitekturnih registara. Registar-alokator (deo kompajlera koji vri dodelu registara) pokuava da zadri (ouva) to je mogue vei broj privremeno promenljivih u registrima i da pri tome izbegne premetanje podataka iz registara u memoriju, a zatim ponovo punjenje u registre ako ti podaci zatrebaju. Ovaj zadatak se obavlja ponovnim korienjem registara. U registar se upisuje nova vrednost kada stara vrednost koja se uva u njemu nije vie potrebna, a to znai da se sadraj svakog registra moe reciklirati kako bi se uvao vei broj vrednocti. Upis u registar se naziva definicija registara, a itanje registara nazivamo korienje. Nakon svake definicije moe da postoji jedan ili vei broj korienja. Vremenski period izmedju definicije i 84

Superskalarne tehnike zadnjeg korienja vrednosti naziva se ivotni-vek (live range) te vrednosti. Nakon zadnjeg korienja u ivotnom-veku, registar se moe koristiti za memorisanje druge vrednosti pri emu poinje novi ivotni-vek. Procedure za alokaciju registara pokuavaju da preslikaju nepreklapajue ivotne vekove u iste arhitekturne registre, a to znai da maksimiziraju viestruko korienje registara. Kod programa koji vri jednostavnu dodelu (single assignmement code) izmedju simbolikih registara i vrednosti postoji korespondencija jedan-na-prema-jedan. Kada se instrukcije izvravaju sekvencijalno, a redefiniciji nije nikad dozvoljeno da se dogodi pre prethodne definicije ili zadnjeg korienja prethodne definicije, tada ivotni-vekovi, koji dele (koriste) isti registar, nee nikad uzrokovati probleme. Efektivno, korespondencija jedan-na-premajedan izmedju vrednosti i registara se moe implicitno ouvati ako se sve instrukcije procesiraju u originalnom programskom redosledu. Ipak kod superskalarnih maina, posebno kada postoji vanredosledno procesiranje instrukcija, operacije itanja i upis u registre se obavlja u redosledu koji je razliit od programskog redosleda. Saglasno tome, korespondencija tipa jedan-na-prema-jedan izmedju vrednosti i registara moe biti naruena. Zbog toga, sa ciljem da se ouva semantika korektnost sve anti- i izlazne-zavisnosti moraju biti detektovane i registrovane. Van-redosledno itanje (upis u) registre se moe dozvoliti sve dok su anti- (izlazne) zavisnosti registrovane. Dinamiki oblik registarskog recikliranja javlja se kada se repetitivno izvravaju instrukcije u petlji. Agresivna superskalarna maina koja je u stanju da "u letu" podri izvrenje veeg broja instrukcija, a pri tome izvrava petlju koja ima relativno malo telo, dozvoljava da se vei broj iteracija petlje mogu istovremeno nai u maini. To znai da vei broj kopija registra, a koje pripadaju instrukcijama iz razliitih operacija, moe istovremeno da bude prisutno u maini, to uzrokuje jednu dinamiku formu registarskog recikliranja. Saglasno prethodnom izmedju dinamikih instrukcija koje pripadaju viestrukim iteracijama u petlji javljaju se anti- i izlazne-zavisnosti, pa se zbog toga one moraju detektovati i zapamtiti kako bi se ouvala semantika korektnost izvrenja programa. Jedan od naina da se izadje na kraj sa anti- i izlaznim-zavisnostima sastoji se u zaustavljanju napredovanja zavisne instrukcije sve dok vodea instrukcija ne zavri sa pristupom koji se odnosi na zavisni registar. Tako na primer, deo izmedju jednog para instrukcija postoji anti (WAR)-zavisnost, tada pratea instrukcija (instrukcija koja aurira registar) mora da se zaustavi sve dok vodea instrukcija ne proita zavisni registar. Sa druge strane, ako izmedju jednog para instrukcija postoji izlazna (WAW)zavisnost, tada pratea instrukcija (instrukcija koja aurira registar) mora da se uzaustavi sve dok prvo vodea instrukcija ne aurira registar. Ovakvo zaustavljanje u napredovanju anti- i izlazno-zavisnih instrukcija moe dovesti do znaajne degradacije performansi i nije neophodno. Naglasimo da su ovakve lane zavisnosti-po-podacima uzrokovane recikliranjem arhitekturnih registara, a nisu uradjene semantikom programa. 4.2.2. Tehnike za preimenovanje registara Znatno agresivniji nain da se izadje na kraj sa lanim (false) zavisnostima-po-podacima, sastoji se u dinamikoj dodeli razliitih imena, putem viestrukih definicija, jednom te istom arhitekturnom registru. Kao rezultat ostvaruje se eliminisanje postojanja lanih zavisnosti. Ovu tehniku nazivamo preimenovanje registra (register renaming). Za sve instrukcije koje se mogu tekue simultano izvravati, ovakav pristup, u toku izvrenja programa, iziskuje ponitavanje efekta registarskog recikliranja stvarajui pri tome odnos jedan-na-prema-jedan tj. jedan registar jedna vrednost izmedju registara i vrednosti. Za svaku od instrukcija koja se izvrava, ova tehnika sprovodi jedinstvenu dodelu. Pri tome treba naglasiti, da izmedju ovih instrukcija, i dalje postoje anti- i izlaznezavisnosti. U sutini ovakvim pristupom se obezbedjuje paralelno izvrenje originalnih instrukcija, i pored toga to izmedju njih i dalje postoje zavisnosti. Standardni nain za implementaciju tehnike preimenovanja registara sastoji se u korienju posebnog (dodatnog) registarskog polja za preimenovanje (Rename Register File- RRF) pored (ve 85

Superskalarne tehnike standardnog) arhitekturnog registarskog polja (Architected Register File-ARF). Jedan standardni pristup za implementaciju RRF-a se sastoji u dupliciranju ARF-a i korienju RRF-a kao ''rezervna'' verzija ARF-a. Ovo omoguava da svaki arhitekturni registar bude preimenovan samo jedanput. Ipak ovo reenje predstavlja efikasan nain za korienje registara RRF-a Vei broj reenja implementira RRF sa manjim brojem ulaza u odnosu na ARF, ali omoguava da se svaki od registara RRF polja fleksibilno koristi kod preimenovanja u tom smislu to se svaki registar RRF polja moe preimenovati u bilo koji drugi registar iz grupe arhitekturnih registara, tj. registar iz ARF polja. Ovaj nain olakava efikasno korienje tehnike preimenovanja registara, ali zahteva ugradnju tabele preslikavanja u kojoj se pamte pokazivai na ulaz u RRF. Princip korienja RRF-a u zajednitvu sa tabelom preslikavanja koja obavlja preimenovanje ARF-a prikazana je na slici 4.15.
ARF Data Map tabela Tag

Busy 1

RRF Data

Valid 1

operand

a)
ARF Data Busy 1 Map tabela Tag Operand 1 Data V (Reorder buffer) Bafer preuredjenja RRF

b) Slika 4.15 Implementacije RRF-a :(a) samostalna ; (b) pridruena baferu preuredjenja
Napomena:: ARF- (architected register file)-arhitekturno registarsko polje; RRF- (rename register file)- registarsko polje za potrebe preimenovanja

Kada se za preimenovanje registra koristi posebno RRF, tada postoje implementacioni izbori koji se razlikuju po tome gde treba smestiti RRF. Jedna opcija kako je to prikazano na slici 4.15 a) se sastoji u implementaciji izdvojene samostalne strukture koja je slina ARF-u a locira se u blizini ARFa. Alternativno reenje ( vidi sliku 4.15 b) se sastoji u inkorporaciji RRF-a kao deo bafera preuredjenja (reorder buffer). Kod obe opcije ARF-u su pridruena dva polja ''busy'' (zauzet) i ''Map table'' (tabela preslikavanja). Ako je ''busy'' bit selektovanog ulaza ARF-a zauzet, to znai da je arhitekturni registar 86

Superskalarne tehnike preimenovan, pa se tada odgovarajuem ulazu u ''Map tabeli'' pristupa da bi se pribavio ''tag'' (adresni marker) ili pokaziva na ulaz u RRF. Kod prve opcije, tag specificira primenovani registar i koristi se kao indeks u RRF, dok kod druge opcije, tag specificira ulaz u bafer preuredjenja i koristi se kao indeks u baferu preuredjenja. Na osnovu dijagrama sa slike 4.15, moe se zakljuiti razlika izmedju pomenute dve opcije moe izgledati vetaka. No ipak treba ukazati da postoje kljune suptilne razlike. Kao prvo, ako se RRF inkorporira kao deo bafera preuredjenja, tada svaki ulaz bafera preuredjenja imae dodatno polje koje funkcionie kao preimenovani registar, pa shodno tome postojae i preimenovani registar koji se dodeljuje svakoj instrukciji koja se tekue izvrava. Ovakav dizajn se bazira na scenariju najgoreg sluaja i moe izgledati ''rasipniki'' ako se ima u vidu da se svakom instrukcijom ne definie registar. Na primer, instrukcije tipa Branch ne auriraju bilo koji arhitekturni registar. Sa druge strane, bafer preuredjenja ve ima ugradjeno portove preko kojih se vri prihvatanje podataka od funkcionalnih jedinica a takodje i auriranje ARF-a, (ove aktivnosti se obavljaju u fazi protone obrade koja se naziva ''completion'' instrukcije). Kada se ugradi posebno (samostalno) RRF, tada RRF polje treba da sadri dodatnu strukturu kojoj su potrebni portovi da bi se prihvatili podaci kako iz funkcionalnih jedinica tako podaci koji se odnose na auriranje ARF-a. Izbor koji se odnosi na osnovu projektantskih kompromisa. U principu, u praksi, sreu se oba reenja. Ukazaemo sada prvo na samostalnu opciju sa ciljem da bi saznali detalje koji se odnose na to kako stvarno funkcionie tehnika o preimenovanju registra. Ativnost koja je u vezi sa preimenovanjem registra ine sledeea tri zadatka: (1) itanje izvorita; (2) dodela odredita; i (3) auriranje registra. Prvi zadatak koji se odnosi na itanje izvorita obino se deava u stepenu Decode (ili po mogunosti u stepenu Dispatch), a odnosi se na pribavljanje registarskih operanada. U trenutku kada se instrukcija dekodira, njeni izvorini registarski specifikatori se koriste za indeksiranje multiportnog ARF-a sa ciljem da se pribave registarrski operandi. Tri mogunosti mogu postojati kod pribavljanja svakog registarskog operanda. Prvo, kada ''Busy'' bit nije postavljen, to znai da ne postoje zahtevi za upis u specificirani registar koji su izdati a nisu uslueni (pending write to the specified register) i da arhitekturni registar sadri specificirani operand, tj. operand se pribavlja iz ARF-a. Alternativno ako je Busy bit postavljen, to znai da je ve izdat zahtev za upis u taj registar i da je sadraj arhitekturnog registra zastareo, pa se pristupa odgovarajuem ulazu ''Map'' tabele sa ciljem da se pribavi vrednost taga kojom se definie preimenovanje. ''Tag''-om za preimenovanje specificira se preimenovani registar na taj nain to se taj ''tag'' koristi kao indeks u RRF. Preostale dve mogunosti se mogu sada javiti prilikom indeksiranja RRF-a. Prvo, (druga mogunost) ako je bit Valid indeksiranog ulaza postavljen, to znai da instrukcija koja aurira registar je ve zavrila sa izvrenjem, ali eka da bude kompletirana. U tom sluaju, izvorni operand je dostupan u preimenovanom registru i izvalai se (retreive) iz indeksiranog RRF ulaza. Kada Valid bit nije postavljen, to znai da instrukcija koja aurira registar nije zavrena i da preimenovani registar ima zahtev za auriranjem koji je aktivan, ali jo nije usluen. U ovom sluaju (trea mogunost) tag, ili specifikator preimenovanog registra, kao izvorni operand se prosledjuje iz ''Map'' tabele ka rezervacionoj stanici. Ovaj tag bie kasnije iskorien od strane rezervacione stanice da bi se dobio operand kada on postane dostupan. Sve tri mogunosti koje se odnose na itanje izvornog operanda prikazane su na slici 4.16.

87

Superskalarne tehnike
Auriranje kod kompletiranja instukcije Auriranje kod zavretka instrukcija ARF Data Busy Map tabela Tag RRF Data Valid Busy

Specifikator registra

Od funkcionalnih jedinica

itanje operanda

Slika 4.16 Zadaci koji se odnose na preimenovanje registara: itanje izvorinog operanda, dodela odredita i auriranje registara Zadatak koji se odnosi na alokaciju odredita se takodje javlja u stepenu Decode (a po mogunosti i u Dispatch), i prate ga sledea tri podzadatka: a) postavljanje bita busy (set busy bit); b) dodela tag-a (assign tag) c) auriranje map tabele (update map table). Kada se instrukcija dekodira, njen odredini registarski specifikator se koristi za indeksiranje ARFa. Selektovani arhitekturni registar prati zahtev za upis koji je izdat a nije usluen (pending write), pa se njegov busy bit mora setovati. Zbog toga specificirani odredini registar mora biti preslikan u preimenovani registar. Pri tome se mora selektovati (na osnovu stanja busy bita) poseban neiskorieni registar koji se preimenjuje. Bit busy selektovanog RRF ulaza mora se postaviti, a indeks selektovanog RRF ulaza da se iskoristi kao tag. Ovaj tag mora biti upisan u odgovarajui ulaz ''map'' tabele, koji e se od strane narednih zavisnih instrukcija koristiti za pribavljanje (njihovih) izvornih operanada. Zadatak auriranja registra se deeva u ''back end'' delu maine i nije deo aktivnosti aktuelnog preimenovanja registra stepena Decode/Dispatch, pa zbog toga nema direktni uticaj na rad RRF-a. Shodno slici 4.16 auriranje registra se javlja u dva izdvojena stepena. Kada instrukcija koja aurira registar zavri Execution njen rezultat se upisuje u ulaz RRF-a na koji ukazuje tag. Kasnije kada je ova instrukcija prela stepen Complete njen rezultat se kopira iz RRF-a u ARF. To znai da auriranje registra ukljuuje prvo auriranje ulaza u RRF a zatim ulaza u ARF. Ova dva koraka se javljaju u jedan-do-drugi (back-to-back) ciklusima u sluaju kada se instrukcija za auriranje-registra nalazi na zaglavlju bafera preuredjenja, ili one mogu biti razdvojene veim brojem ciklusa kada postoje i druge nezavrene instrukcije koje se u baferu preuredjenja nalaze ispred ove instrukcije. Nakon to se preimenoivani registar kopira u odgovarajui arhitekturni registar, njegov ''busy'' bit se resetuje i on se ponovo moe koristiti za preimenovanje drugog arhitekturnog registra. U toku dosadanje analize smo usvojili da implementacija tehnike za preimenovanje registra zahteva korienje dva fizika registarska polja, nazvana ARF i RRF. No ovakvo reenje u sutini nije potrebno. Naime, arhitekturna registre i preimenovane registre moemo zajedniki objediniti i implementirati ih kao jedinstveno fiziko registarsko polje pri emu je broj ulaza jednak sumi ulaza ARF-a i RRF-a. Kod ovakvog objedinjenog registarskog polja, strogo posmatrano, ne pravi se razlika izmedju arhitekturnih registara i registara za preimenovanje. Svaki fiziki registar moe se fleksibilno odrediti da bude arhitekturni registar ili preimenovani registar. Nasuprot izdvojenoj ARF i RRF 88

Superskalarne tehnike implementaciji koja mora nakon faze Completition instrukcije da obavi fiziko kopiranje rezultata iz RRF u ARF, kod objedinjenog registarskog polja neophodno je samo promeniti naznaenost registra od preimenovanog u arhitekturni. Na ovaj nain se tedi na vremenu prenosa potrebnog za prelaz informacije iz RRF-a u ARF. Kljuni nedostatak objedinjenog registarskog polja je njegova hardverska kompleksnost. Drugi nedostatak odnosi se na vreme komutacije konteksta, kada stanje maine mora da se zapamti, podskup registara koji ini arhitekturno stanje maine moraju eksplicitno da se identifikuje pre nego to pone da se pamti stanje. Najvei broj savremenih superskalarnih mikroprocesora implementiraju odredjeni oblik preimenovanja registra sa ciljem da se izbegnu zastoji zbog anti- i izlazno registarskih zavisnosti po podacima prvenstveno uzrokovanih zbog viestrukog korienja registara. Obino preimenovanje registra se javlja u trenutku dekodiranja instrukcija, a implementacija preimenovanja postaje veoma sloena, posebno kod superskalarnih maina veeg stepena skalarnosti kod koje se simultano mora obaviti preimenovanje veeg broja registarskih specifikatora za vei broj instrukcija. Mogue je takodje i da se vei broj redefinicija registra javi u okviru jedne grupe istih pribavljenih instrukcija (fetch group). Implementacija mehanizma preimenovanja kod superskalarnih maina veeg stepena superskalarnosti bez da se pri tome ima uticaj na vreme-trajanja mainskog ciklusa predstavlja realni izazov. Da bi se ostvarile visoke performanse mora da se eliminie serijalizacija ogranienja uslovljena pogrenim registarskim zavisnostima po podacima, a to znai da se izlaz mora potraiti u dinamikom preimenovanju registara. 4.2.3. Prave zavisnosti po podacima i ogranienja u protoku podataka RAW zavisnost izmedju dve instrukcije naziva se prava-zavisnost-po-podacima a posledica je egzistencije odnosa proizvodja-potroa koji egzistira izmedju ove dve instrukcije. Pratea potroainstrukcija ne moe da dobije (pribavi) svoj izvorni operand sve dok vodea proizvodja-instrukcija ne generie rezultat. Prava zavisnost po podacima nalae serijalizaciju ogranienja koji postoje izmedju dve zavisne instrukcije;vodea instrukcija mora da zavri sa izvrenjem pre nego to pratea instrukcija pone sa izvrenjem. Prave zavisnosti po podacima prvenstveno postoje zbog semantike u programu i obino se predstavljaju pomou grafa zavsnosti po podacima (Data Dependece Graph DDG, ili Data Flow Graph DFG). Na slici 4.18 prikazan je programski segment koji se odnosi na FFT implementaciju.
w[i+k].ip = z[i].rp + z[m+i].rp ; w[i+j].rp = e[k+1].rp * (z[i].rp - z[m+1].rp) - e[k+1].ip * (z[i].ip - z[m+i].ip);

a)

89

Superskalarne tehnike
i1: f2 i2: f0 i3: f0
load,4(r2) load,4(r5) fadd,f2,f0

i4: 4(r6) store f0 i5: f14 load,8(r7) i6: f6 load,0(r2) i7: f5 load,0(r3) i8: f5 fsub,f6,f5 i9: f4 fmul,f14,f5 i10: f15 load,12(r7) i11: f7 load,4(r2) i12: f8 load,4(r3) i13: f8 fsub,f7,f8 i14: f8 fmul,f15,f8 i15: f8 fsub,f4,f8 i16: 0(r8) store,f8

b) Slika 4.18 FFT kdna sekvenca: (a) originalni izvorni iskazi; (b) kompajlirane asemblerske instrukcije Kao to se vidi sa slike 4.18 a) dva izvorna iskaza se kompajliraju u 16 aseblerskih instrukcija, ukljuujui Load i Store instrukcije. Polje FP promenljivih se uva u memoriji i mora prvo da se napuni pre nego to obave operacije. Nakon izraunavanja rezultati se ponovo vraaju u memoriju. Integer registri (ri) se koriste za uvanje adrese polja. FP registri (fj) se koriste za uvanje privremenih podataka. DFG koji odgovara operacijama upis i itanje FP registara za svih 16 instrukcija sa slike 4.18 b) je prikazan na slici 4.19.
i5 i6 2 2 i8 2 i9 i1 2 i3 2 i4 2 i15 2 i16 2 i2 2 4 4 i14 i7 2 2 i10 i11 2 i13 2 i12 2

Slika 4.19 DFG za kdni segement sa slike 4.18 b) Svaki vor na slici 4.19 predstavlja po jednu instrukciju na slici 4.18 b). Izmedju dve instrukcije postoji usmereni poteg ako postoji prava zavisnost izmedju te dve instrukcije. Za svaki od potegazavisnosti u DFG-u moe se identifikovati zavisni registar. Svakom od potega-zavisnosti se moe dodeliti latencija. Na slici 4.19, svakom potegu je pridruena latentnost izvrenja instrukcije 90

Superskalarne tehnike ''proizvodja''. U konkretnom sluaju za instrukcije Load, Store, Add, i Sub je usvojeno da imaju dva ciklusa izvrne latentnosti, dok su za instrukcije mnoenja potrebna 4-ciklusa. Latencije pridruene zavisnim-potezima su kumulativne. Najdui zavisni lanac zavisnosti, meri se u funkciji totalne kumulativne latencije, a identifikuje sa kao kritini put DFG-a. ak i da usvojimo egzistenciju neogranienog broja mainskih ciklusa, izvrenje kdnog segmenta bie direktno (ne moe biti bre) a odnosi se na izvrenje programa i predstavlja najbolje performanse koje se ogu postii. Za kdni fragment sa slike 4.19 DFL iznosi 12 ciklusa. DFL je uslovljeno pravim zavisnostima u programu. Tradicionalno model toka izvrenja (data flow execution model) odredjuje da svaka instrukcija u programu pone sa izvrenjem ciklusa koji neposredno sledi od trenutka kada svi njeni operandi postaju dostupni. U sutini, sve postojee registarske tehnike za protok podataka predstavljaju pokuaji da se ree problemi koji prate ogranienja vezana za tok podataka. 4.2.4. Klasini Tomasulo algoritam Projektovanje FP jedinice (Floating Point UnitFPU) kod raunara IBM 360/91, kao i inkorporiranje u tu mainu Tomasulo-vog algoritma, predstavljalo je osnovu za razvoj savremenih superskalarnih procesora. Kljuni atributi za najvei broj savremenih tehnika za protok podataka se mogu nai u Tomasulo algoritmu, pa zbog toga njegovo izraunavanje zasluuje posebnu panju. Imajui ovo u vidu upoznaemo se prvo sa polaznim dizajnom FPU-a kod IBM 360, zatim opisati modifikovani dizajn FPU-a kod IBM 360/91 koja inkorporira Tomasulo-ov algoritam, i na kraju ukazati na njenu efikasnost u procesiranju kdne sekvence. Originalni dizajn FPU-a kod IBM 360 je prikazan na slici 4.20. FPU sadri dve izvrne funkcionalne jedinice: jedna tipa FP-Add, a druga FP-Multiply/Devide. Kod FPU-a sa slike 4.10 postoje tri registarska polja: FP registri (FLR), FP baferi (FLB), i baferi za memorisanje podataka (SDB). Postojr etiri FLR registra; to su arhitekturni FLR registri. FP instrukcije koje koriste adresni naini rada tipa memorija-registar ili memorija-memorija se preprocesiraju. Generisanje adrese i pristup memoriji vri se van FPU-a. Kada se podaci dobavljaju iz memorije, oni se pune u jedan od est FLB-ovih registara. Na slian nain, ako je odredite instrukcije memorijska lokacija, rezultat koji se memorie treba smestiti u jedan od triju SDB-ovih registara, a zatim pomou posebne hardverske jedinice treba pristupiti SDB-u koja e rezultat smestiti u memorijsku lokaciju. Korienje ova dva dodatna registarska polja, FLB i SDB, radi podrke instrukcijama koje koriste memorija-registar i memorija-memorija adresne naine rada, obezbedjuju se uslovi da FPU efikasno funkcionie kao maina tipa registar-registar. Kod IBM 360, instrukciona jedinica (IU) dekodira sve instrukcije i predaje po redosledu (in order) sve FP instrukcije ka operativnom FP magacinu (floating point operation stack FLOS). Kod FPU-a, FP instrukcije se zatim dekodiraju i iz FLOS-a se iniciraju po redosledu radi izvrenja u obe izvrne funkcionalne jedinice (FP_Add i FP_Multiply/Devide). Izvrne funkcionalne jedinice nisu organizovane na protoni nain tako da njihova latentnost iznosi nekoliko ciklusa. Sabirau je potrebno dva ciklusa da izvri instrukcije FADD dok su jedinici za mnoenje/deljenje potrebna tri ciklusa FMUL i 12 ciklusa za FDIV. Sredinom esdesetih godina prolog veka IBM je poeo sa razvojem Modela 91 koja je kao maina pripadala familiji 360. Jedan od ciljeva je bio da se postigne konkurentno izvrenje veeg broja FP instrukcija i da se ostvari propusnost od jedne instrukcije po ciklusu kod protone organizacije u procesiranju instrukcija. Ovakav pristup moe izgledati veoma agresivan imajui u vidu: a) kompleksne naine rada kod ISA 360; i b) latencija od veeg broja ciklusa u toku izvrenja. Kao krajnji rezultat se dobija modifikovana FPU koja kod 360/91 je inorporirala Tomasulo-ov algoritam (vidi sliku 4.21).

91

Superskalarne tehnike
Sorage bus Instruction unit

Floating-point buffers (FLB)

6 5 4 Control 3 2 1

Floatingpoint operand stack (FLOS)

Control

8 4 registers (FLR) 2 0
Floating-point

Floating-point buffer (FLR) bus

Decoder

Floating-point register (FLR) bus

Store

Control

data buffers(SDB)

3 2 1

Sink

Source

Ctrl.

Ctrl.

Sink

Source

To storage

Adder
Result

Multiply/ devide
Result

Result bus

Slika 4.20 Originalni dizajn FPU-a kod IBM 360

92

Superskalarne tehnike
Sorage bus Instruction unit

Floating-point buffers (FLB)

6 5 4 3 2 1

Control

Floatingpoint operand stack (FLOS)

Busy bits

Floating-point

Tags
registers (FLR)

8 4 2 0

Decoder Control Tags 3 2 buffers(SDB) 1


Store data

FLB bus FLR bus CDB


Tag Tag Tag Sink Sink Sink Tag Source Tag Source Tag Source Ctrl. Ctrl. Ctrl. Tag Tag Sink Sink Tag Source Tag Source Ctrl. Ctrl.

Adder
Result

Multiply/ devide
Result

Common data bus (CDB)

Slika 4.21 Modifikovani dizajn FPU-a kod IBM 360/91 koja inkorporira Tomasulo-ov algoritam Tomasulo-ov algoritam se bazira na uvodjenu triju novih mehanizama kod originalnog FPU dizajna, a to su: rezervacione stanice (reservation stations), deljiva magistrala podataka (common data bus), i registarski tag-ovi (register tags). Kod originalne verzije (slika 4.20) svaka izvrna funkcionalana jedinica na stranu ulaza je imala bafer dubine jedan u kome se uvala instrukcija koja se tekue izvrava. Kada je funkcionalna jedinica bila zauzeta, iniciranje izvrenja instrukcija od strane FLOS-a je bilo zaustavljeno sve dok se tekua instrukcija ne zavri. Da bi se premostilo ovo strukturno usko grlo na ulaznoj strani svake funkcionalne jedinice pridruen je vei broj bafera koje nazivamo rezervacione stanice. Jedinica FP_Add ima tri dok FP_Multiply/Devide ima dva bafera. Rezervacione stanice se mogu posmatrati kao virtuelne funkcionalne jedinice. To znai da sve dok postoji slobodna rezervaciona stanica, FLOS moe da inicira izvrenje u toj funkcionalnoj jedinici, ak i kada je ta jedinica tekue zauzeta (busy) izvrenjem druge instrukcije. S obzirom da FLOS inicira izvrenje instrukcija po redusledu, ovakav pristup e ublaiti (otkloniti) nepotreban zastoj zbog kobnog (neravnomernog) rasporeda (uredjenja) razliitih tipova FP instrukcija. Raspoloivost rezervacionih stanica, omoguava da se od strane FLOS-a prema funkcionalnim jedinicama moe inicirati izvrenje instrukcije ak i u sluaju kada operandi te instrukcije nisu dostupni. Ova instrukcije mogu u rezervacionoj stanici da ekaju za svoje operande a poeti sa izvrenjem kada oni postanu dostupni. Magistrala CDB povezuje izlaze obeju funkcionalnih jedinica sa ulazima rezervacionih stanica kao i sa FLR i SDB registrima. Rezultat generisan od strane funkcionalne jedinice emituje se svima (broadcast) preko CDB-a. Sve ove instrukcije, koje se nalaze u rezervacinim stanicama, a potreban im je taj rezultat kao operand, pristupie se leovanju podatka koji je trenutno prisutan na CDB-u. Takodje registri FLR-a i SDB-a koji su odredite rezultata takodje e leovati podatak trenutno prisutan na CDB-u. U sutini CDB obezbedjuje direktno premoavanje 93

Superskalarne tehnike rezultata od instrukcija tipa proizvodja do instrukcija tipa potroa, pri emu ti rezultati ekaju u rezervacionim stancama bez da prodju preko registara ( da se njihove vrednosti dobave iz registara). Auriranje odredinih registara se obavlja simultano zajedno sa premoavanjem (prosledjivanjem) rezultata ka zavisnim instrukcijama. Ako operand dolazi iz memorijske lokacije, on e se nakon izvrenja memorijskih ciklusa napuniti u FLB registar. Shodno tome, FLB moe da postavi svoj izlaz na magistralu CDB, tako da one instrukcije koje ekaju u rezervacionoj stanici mogu da leuju svoj operand. To znai da obe funkcionalne jedinice i FLB mogu da predaju podatke preko CDB, a da rezervacione stanice, FLR i SDB mogu leovati podatke prisutne na magistrali CDB. Kada FLOPS predaje (dispatch) instrukciju ka funkcionalnoj jedinici, ona dodeljuje rezervacinu stanicu i proverava kako bi ustanovila da li su potrebni operandi dostupni. Ako je operand dostupan u FLR-u tada sadraj tog registra se kopira iz FLR-a u rezervacionu stanicu; inae, umesto toga, u rezervacionu stanicu se kopira tag. Tag (marker) ukazuje da postoji operand na koga se eka da pristigne (postane dostupan). Operand koji se oekuje (pending operand) dolazi iz instrukcije proizvodja koja se tekue nalazi u jednoj od pet rezervacionih stanica, ili dolazi sa jednog od est FLB-ovih registara. Da bi se na jedinstven nain identifikovao, jedno od moguih 11 izvorita operanda koga oekujemo potrebno je ugraditi 4-bitni tag. Ako jedno od oba operandska polja u rezervacionoj stanici sadri marker, a ne aktuelni oparand, tada to znai da ta instrukcija oekuje operand. Kada operand koga oekujemo postane dostupan, proizvodja tog operanda preko CDB-a aurira tag, kao i polje u kome se uva aktuelni operand. Instrukcija koja u rezervacionoj stanici eka na raspoloivost svog operanda koristi tag da bi nadgledala aktivnosti (monitorisala) na CDB magistrali. Kada instrukcija detektuje tag uparivanje sa informacijom prisutnom na CDB magistrali, tada ona leuje svoj pridrueni operand. U sutini proizvodja operanada emituje (predaje) tag operanda na magistralu CDB, pri emu svi potroai tog operanda nadgledaju CDB radi pojavljivanja tag-a. Svaka rezervaciona stanica sadri po dva polja za operande, pri emu svako polje mora da ima tag polje jer svaki od oba operanda moe da se oekuje. Sva etiri registra FLR-a kao i tri registra SDB-a moraju imati tag polja. To znai da ukupno postoje 17 polja koje nadgledaju (monitoriu) i prihvataju operande (vidi sliku 4.2.2). Tag polje na strani svakog potencijalnog potroaa koristi princip asocijativnog pretraivanja u cilju monitorisanja radi mogueg uparivanja svog sadraja sa vrednou tag-a koja je emitovana na CDB magistralu. Kada dodje do uparivanja tag vrednosti, potroa leuje emitovani operand.
Prvi operand Rezervaciona stanica Tag ''Sink'' (a) FLR Busy Tag (b) SDB registar Tag Data (c) Data Drugi operand Tag ''Source''

Slika 4.22 Koriene tag polja kod (a) rezervacione stanice, (b) FLR registra, (c) SDB registra Kod IBM 360 FP instrukcije koriste dvo adresni format, to znai da se specificiraju dva izvorna operanda. Prvi specifikator operanda se naziva sink (ponor), a on je istovremeno i odredini. Drugi operand specifikator zove se source (izvorite). Svaka rezervaciona stanica ima dva polja za operande, jedno za sink a drugo za source. Svakom polju operanda pridruuje se tag polje. Ako polje 94

Superskalarne tehnike operanda sadri realni podatak tada se tag polje postavlja na nuli. Inae, njegovo tag polje identifikuje source odakle operand koji se oekuje treba da dodje (da se dobavi), a koristi se za monitorisanja aktivnosti na CDB magistrali radi dostupnosti na operand koji se oekuje. Kadgod se instrukcija od strane FLOS-a dispeuje prema rezervacionoj stanici, podatak koji se uva u FLR registru, a odgovara sink operandu, se izbavlja (izvlai) i kopira u rezervacionu stanicu. Istovremeno postavlja se bit ''busy'' koji se pridruuje FLR registru. Stanje ovog bita ukazuje da predstoji oekivano auriranje FLR registra, i da tag vrednost koja identifikuje pojedinu rezervacionu stanicu, prema kojoj je instrukcija dispeovana, je upisano u tag polje istog FLR registra. Na ovaj nain jasno se identifikuje koja e od rezervacionih stanica biti ta koja e generisati aurirani podatak za ovaj FLR registar. Saglasno tome ako pratea instrukcija specificira ovaj registar kao jedan od njenih izvornih operanada, u trenutku kada se on dispeuje prema rezervacionoj stanici, tada e samo tag polje (nazvano pseudo-operand) biti kopirano u odgovarajue polje rezervacione stanice, a ne i aktuelni podatak. Kada je busy postavljen, tada on ukazuje da podatak koji se uva u FLR registru je zastareo i da vrednost na koju je postavljen tag se odnosi na izvorite odakle realni podatak treba oekivati. Osim rezervacionih stanica kao i FLR registara, takodje i SDB registri mogu biti odredita za operande koje oekujemo (pending operands) pa shodno tome svakom od SDB-ovih registara se pridruuje tag polje (vidi sliku 4.21). Na primeru izvrenja jedne sekvence instrukcija ilustrovaemo rad Tomasulo-ovog algoritma. U cilju jasnijeg objanjenja odstupiemo od opisa kojim se aktuelni IBM 360/91 dizajn razlikuje u nekoliko reenja. Prvo, da bi se izbegla potencijalna konfuzija, umesto dvo-adresnog formata instrukcija (kakav se koristi kod IBM 360/91) koristiemo, tro-adresne instrukcije. Programsku sekvencu koju emo razmotriti sadri samo instrukcije tipa registar-u-registar. Da bi smanjili broj mainskih ciklusa koje treba da pratimo dozvoliemo FLOS-u da dispeuje (u programskom redosledu) da dve instrukcije u svakom ciklusu. Usvojiemo takodje da instrukcija moe da pone sa izvrenjem u istom ciklusu kada je i dispeovana u rezervacionu stanicu. Latencije instrukcija FAdd i FMul su dva i tri ciklusa, respektivno. Dozvoliemo instrukciji da prosledi svoj rezultat zavisnim instrukcijama u toku zadnjeg ciklusa izvrenja, i da zavisna instrukcija moe poeti izvrenje u narednom ciklusu. Tag vrednosti 1, 2 i 3 se koriste za identifikaciju triju rezervacionih stanica funkcionalne jedinice ''Adder'', dok se 4 i 5 koriste za identifikaciju obeju rezervacionih stanica funkcionalne jedinice ''Multply/Divide''. Ove tag vrednosti nazivamo ID-ove rezervacionih stanica. Programsku sekvencu ine sledee etiri instrukcije tipa registar-u-registar. w: R4 R0 + R8 x: R2 R0 * R4 y: R4 R4 * R8 z: R8 R4 * R2 Na slici 4-23 prikazana su prva tri ciklusa izvrenja. U ciklusu # 1 dispeuje se (u redosledu) prema rezervacionim stanicama instrukcije w i x . Odredini registri instrukcija w i x su R4 i R2 (tj. FLR-ovi 4 i 2), respektivno. ''Busy'' bitovi ova dva registra se postavljaju. S obzirom da je instrukcija w dispeovana (upuena) ka rezervacionoj stanici 1, u tag polje za R4 se unosi vrednost 1, a to znai da e instrukcija u rezervacionoj stanici 1 aurirati R4. Na slian nain tag vrednosti 4 se unose u tag polje za R2. S obzirom da su oba izvorna operanda dostupna izvrenje instrukcije w odmah poinje. Instrukciji x, kao drugi (izvorni) operand, potreban je rezultat (R4) koga generie instrukcija w. To znai da kada se instrukcija x dispeuje ka rezervacionoj stanici 4, u tag polje drugog operanda se unosi tag vrednost 1, to ukazuje da e instrukcija u rezervacionoj stanici 1 generisati potreban operand.

95

Superskalarne tehnike
CIKLUS 1 Dispeovanje instrukcije(a) :w , x (in order) RS
Tag Sink Tag Source

RS
Tag Sink Tag Source

FLR
Busy Tag Data

1 2 3

6.0

7.8

4 5

6.0

1 Mult/Div

----

Adder

0 2 4 8

Yes Yes

4 1

6.0 3.5 10.0 7.8

CIKLUS 2

Dispeovanje instrukcije(a) : y , z (in order) RS


Tag Sink Tag Source

RS
Tag Sink Tag Source

FLR
Busy Tag Data

w y

1 2 3

0 1

6.0 . w

0 0 Adder

7.8 7.8

x z

4 5

0 2

6.0 .

1 . 4 . Mult/Div

0 2 4 8

Yes Yes Yes

4 2 5

6.0 3.5 10.0 7.8

CIKLUS 3

Dispeovanje instrukcije(a) : ___________

RS
Tag Sink Tag Source

RS
Tag Sink Tag Source

FLR
Busy Tag Data

1 2 3

13.8 y

0 Adder

7.8

x z

4 5

0 2

6.0 0 13.8 . 4 . Mult/Div x

0 2 4 8

Yes Yes Yes

4 2 5

6.0 3.5 10.0 7.8

Slika 4.23 Ilustracija Tomasulo-ovog algoritma na primeru sekvence instrukcija (prvi deo) U toku ciklusa #2, prema rezervacionim stanicama 2 i 5 dispeuje se (po redosledu) instrukcije y i z, respektivno. S obzirom da je instrukciji y, kao prvi operand, potreban rezultat koga generie instrukcija w, u trenutku kada se ona dispeuje ka rezervacionoj stanici 2, u tag polje prvog operanda se unosi tag vrednost 1. Na slian nain, instrukcija z koja se dispeuje u rezervacionu stanicu 5, dodeljuju se u oba svoja tag polja tag vrednosti 2 i 4, to ukazuje da e rezervacione stanice 2 i 4 generisati oba potrebna operanda. S obzirom da je R4 odredite instrukcije y, tag polje za 4 se aurira na novu tag vrednost 2, to ukazuje da je rezervaciona stanica 2 (tj. instrukcija y) sada odgovara za oekivano auriranje registra R4. Bit ''busy'' koji se odnosi na R4 ostaje postavljen. Kada se instrukcija z dispeuje ka rezervacionoj stanici 5 ''busy'' bit koji se odnosi na R8 se postavlja, a tag polje za R8 se postavlja na 5. Na kraju ciklusa #2 w zavrava izvrenje i emituje (postavlja) svoj ID (rezervaciona stanica 1) kao i svoj rezultat na CDB magistrali. Sva tag polja koja sadre tag vrednost 1 inicirae tag uparivanje i leovae emitovani rezultat prisutan na CDB magistrali. Kod prvog tag polja rezervacione stanice (u kome se uva instrukcia y) kao i kod drugog tag polja rezervacione stanice 4 (u kome se uva instrukcija x) doi e do uparivanja tag-ova. Shodno tome rezultat instrukcije w se prosledjuje zavisnim instrukcijama x i y. U ciklusu #3, u funkcionalnoj jedinici ''Adder'' poinje izvrenje instrukcije y, kao i izvrenje instrukcije x u jedinici Multiply/Divide. Instrukcija y zavrava izvrenje u ciklusu #4 (vidi sliku 4.24) i emituje svoj rezultat na magistrali CDB zajedno sa tag vrednou 2 (ID svoje rezervacione stanice). Kod prvog tag polja u rezervacionoj stanici 5 (u kome se uva instrukcija z) i tag polja za R4 dolazi do tag uparavanja i smetanja (prihvatanja) instrukcije y. Instrukcija x zavrava svoje izvrenje u ciklusu #5 i emituje svoj rezultat na CDB magistrali zajedno sa tag vrednou 4. Kod drugog tag polja u 96

Superskalarne tehnike rezervacionoj stanici 5 (koja uva instrukciju z) kao i tag polja za R2 dolazi do uparivanja i prihvatanja rezultata instrukcije x. U ciklusu #6, instrukcija z poinje svoje izvrenje koje zavrava u ciklusu #8.
CIKLUS 4 Dispeovanje instrukcije(a) :____________ RS
Tag Sink Tag Source

RS
Tag Sink Tag Source

FLR
Busy Tag Data

1 2 3

13.8 y

0 Adder

7.8

x z

4 5

0 2

6.0 0 13.8 . 4 . x Mult/Div

0 2 4 8

Yes Yes Yes

4 2 5

6.0 3.5 10.0 7.8

CIKLUS 5

Dispeovanje instrukcije(a) : ____________ RS


Tag Sink Tag Source

RS
Tag Sink Tag Source

FLR
Busy Tag Data

1 2 3 Adder

x z

4 5

0 0

6.0 21.6

1 13.8 4 . Mult/Div

0 2 4 8

Yes Yes

4 5

6.0 3.5 21.6 7.8

CIKLUS 6

Dispeovanje instrukcije(a) : ___________

RS
Tag Sink Tag Source

RS
Tag Sink Tag Source

FLR
Busy Tag Data

1 2 3 Adder

4 5

21.6 0 82.8 Mult/Div z

0 2 4 8

Yes

6.0 82.8 21.6 7.8

Slika 4.24 Ilustracija Tomasulo-ovog algoritma na primeru sekvence instrukcija (drugi deo) Slika 4.25 prikazuje graf toka upravljanja za gore navedeni primer, a donosi se na sekvencu od etiri potega izvuena debljom linijom odnose se na etiri prave (true) zavisnosti po podacima, dok ostala tri potega se odnose na anti- i izlazne zavisnosti. Instrukcije se dispeuju po programskom redosledu. Anti-zavisnosti se reavaju kopiranjem operanda u rezervacionu stanicu u trenutku dispeovanja. Zbog toga, nije mogue da pratea instrukcija izvri upis u registar pre nego to prethodna instrukcija dobija ansu da proita taj registar. Ako je operand dostupan a nije iskorien (pending), dispeovana instrukcija e primiti tag marker za taj operand. Kada taj operand postane dostupan instrukcija e primiti taj operand putem tag uparivanja u svojoj rezervacionoj tabeli. Nakon to je instrukcija dispeovana, tag polje njenog odredinog registra je upisan sa ID-om rezervacione stanice za tu instrukciju. Kada naredna instrukcija koja koristi isti odredini registar se dispeuje, isto tag polje bie aurirano sa ID-om rezervacione stanice za ovu novu instrukciju. Tag polje registra uvek sadri ID rezervacione stanice zadnje aurirane instrukcije. Za sluaj da postoje vei broj instrukcija koje se izvravaju, a da pri tome one koriste isti odredini registar, samo e zadnjoj instrukciji biti dozvoiljeno da aurira registar. Izlazne zavisnosti se implicitno reavaju inei ne moguim da ranije instrukcije auriraju registar nakon to su instrukcije, koje kasnije u programu slede, aurirale isti registar. Ovo dovodi do problema koji se ogleda u tome da nije mogue podrati precizni izuzetak (exeception) jer registarsko polje nee korektno evoluirati kroz sva sekvencijalna stanja, tj. registar moe potencijalno da izgubi neko medju auriranje. Na primer, na slici 4.23 na kraju ciklusa #2 instrukcija w treba da aurira odredini registar R4. Ipak instrukcija y koja koristi isti odredini registar,
etiri instrukcije.

97

Superskalarne tehnike a dispeovana je ranije u toku ciklusa, tag polje R4 bie promenjeno sa 1 na 2 to ukazuje na auriranje R4 od strane instrukcije y. Na kraju ciklusa #2 kada instrukcija w emituje svoju tag vrednost 1, tag polje R4 nee pratiti tag uparivanja i nee smestiti svoj rezultat koji pripada instruciji w. To znai da e R4 biti auriran od strane instruckije y. Ipak, ako se javi izuzetak generisan od strane instrukcije x precizan izuzetak bie nemogu iz razloga to registarsko polje nije evoluiralo kroz sva svoja sekvencijalna stanja.

(2) waw (3)

w raw x war raw

(2)

(3) y raw raw z (3)

(2)

(3) waw (3)

a) b) Slika 4.25 DFG-ovi za dati primer sekvence instrukcija: (a) prikazane su sve zavisnosti po podacima; (b) prikazane su prave zavisnosti po podacima Tomasulo-ov algoritam reava anti- i izlazne zavisnosti koristei tehniku preimenojvanja registara. Svaka definicija FLR registara inicira preimenovanje tog registra u registar tag. Ovaj tag se zatim uzima iz ID-a rezervacione stanice koji sadri instrukciju koja redefinie taj registar. Na ovaj nain efikasno se eliminiu lane zavisnosti koje mogu dovesti do zastoja u protonoj obradi. Zbog toga tok upravljanja je striktno odredjen od strane prtave zavisnosti po podacima. Na slici 4.25 b) opisan je DFG koji sadriu samo prave zavismosti po podacima. Kao to je prikazano na slici 4.25 a) ako se zahteva da se sve etiri instrukcije izvravaju sekvencijalno sa ciljem da se sauvaju sve zavisnosti po podacima, ukljuujui anti- i izlazne zavisnosti, ukupna latencija potrebna za izvrenje ove sekvence instrukcija bie 10 ciklusa, pri zadatim latencijama od dva i tri ciklusa za instruckije sabiranja i mnoenja, respektivno. Kada se posmatraju samo prave zavisnosti po podacima, analizom slike 4.25 b) zakljuujemo da kritini put trajanja 8 ciklusa, tj. put koga ine instrukcije w, x i z. Shodno tome granina vrednost toka upravljanja za ovu sekvencu od etiri instrukcije je 8 ciklusa. Ova granina vrednost se ostvaruje Tomasulo-im algoritmom koji je prikazan na slikama 4.23 i 4.24. 4.2.5. Dinamiko Execution jezgro Najvei broj savremenih superskalarnih procesora se realizuje pomou out-of-order execute jezgra koje se nalazi izmedju in-order front-end, koji pribavlja i dispeuje instrukcije u programskom redosledu i in-order back-end koje kompletira i izvlai (retire) instrukcije u programskom redosledu. Out-of-order execute jezgro (takodje nazvano dinamiko execution jezgro) podsea na princip rada Tomasulo-ovog algoritma i moe se posmatrati kao maina koja ima ugradjeni (embedded) tok upravljanja, ili micro-data-flow, koja pokuava da suzi granice toka upravljanja u toku izvrenja instrukcije. Rad ovakvog dinamikog execution jezgra se moe opisati u saglasnosti sa triju faza u 98

Superskalarne tehnike protonoj obradi, naime to su faze instruction dispatching, instruction execution i instruction completion (vidi sliku 4.26). Faza dispeovanje instrukcija sastoji se od preimenovanja (renaming) odredinih registara, alokaciji (allocating) rezervacione stanice i ulaza u baferu preuredjenja, i advansiranju instrukcija od dispe bafera ka rezervacionim stanicama. Radi lake prezentacije, u ovom delu usvojiemo da se preimenovanje registara obavlja u stepenu dispe. Sve redefinicije arhitekturnih registara se preimenuju u preimenovane registre. Zadnja korienja ovih redefinicija se dodeljuju ogovarajuim specifikatorima za preimenovanje registara. Na ovaj nain se obezbedjuje da svi odnosi tipa proizvoidja-potroa budu korektno identifikovani i da sve pogrene (lane) registarske zavisnosti budu otklonjene. Instrukcije u dispe baferu, na bazi tipa instrucija, se zatim dispeuju u odgovarajue rezervacine stanice. U ovom sluaju podrazumevamo da se koriste distribucione rezervacione stanice, a da se korienje rezervacione stanice odnosi na (vie-ulazni) instrukcioni bafer koji je pridruen svakoj funkcionalnoj jedinici, a da se ulaz rezervacione stanice odnosi na jedan od ulaza tog bafera. Simultano sa dodelom ulaza rezervacione stanice u cilju dispeovanja instrukcije obavlja se alokacija ulaza u baferu preuredjenja za te instrukcije. Ulazi bafera preuredjenja se alociraju u saglasnosti sa programskim redosledom. Obino, da bi se jedna instrukcija dispeovala mora da bude dostupno registar za preimenovanje, ulaz u rezervacionu stanicu, i ulaz u bafer preuredjenja. Ako bilo koji od ova tri resursa nije dostupan dispeovanje instrukcije e se zaustaviti. Aktuelno dispeovanje instrukcija sa ulaza dispe bafera u ulaze rezervacione stanice se obavlja preko sloene mree za rutiranje. Ako povezljivost mree za rutiranje je manja od povezljivosti potpune krozbar mree (to je najei sluaj kod realnih dizajna), dolazi do zastoja koji se javljaju zbog sudara (contetion) kod korienja sprene mree. Faza Execution sastoji se od iniciranje izvrenja (issuing) spremnih instruckija, izvrenje ( executing) iniciranih instrukcija, i prosledjivanje (forwarding) rezultata. Svaka rezervaciona stanica je odgovorbna za identifikovanje instrukcija koje su psremne za izvrenje i za planiranje (sheduling) njihovih izvrenja. Kada se instrukcija prvo dispeuje ka rezervacionoj stanici, svi njeni izvosrni operandi ne moraju biti dostupni pa zbog toga ona mora da eka u rezervacionoj stanici. Sve instrukcije koje ekaju kontinualno nadgledaju magistrale radi tag uparivanja. Kada dodje do tag uparivanja to ukazuje na dostupnost operanda koji se oekuje, rezultat koji se emituje (broadcasted) se leuje u ulaz rezervacione stanice. Kada instruckija koja se nalazi u ulazu rezervacione stanice ima raspoloive sve operande, ina postaje spremna za izvrenje i njeno izvrenje se moe inicirati u funkcionalnoj jedinici. Ako u datom mainskom ciklusu u rezervacionoj stanici postoji vei broj spremnih instrukcija, koristi se algoritam za planiranje izvrenja (scheduling algoritam) koji u najveem broju sluajeva inicira prvo izvrenje najstarije instrukcije i usmerava je ka funkcionalnoj jedinici. Ako je samo jedna funkcionalna jedinica povezana na rezervacionoj stanici (kakav je sluaj kod distribuiraniih rezervacioih stanica), tada ta rezervaciona stanica moe da inicira izvrenje samo jedne instrukcije po ciklusu.

99

Superskalarne tehnike

Dispatch buffer Dodela ulaza u baferu preuredjenja

Register writeback

Dispatch

Architected RF

Rename RF

Rezervacione stanice Branch Integer Integer Load/ Store Prosledjivanje rezultata rezervacionim stanicama i preimenovanim registrima

Floatingpoint

Completion buffer (reorder buffer)

Complete

Upravlja se kao red ekanja: zadrava sekvencijalni redosled svih instrukcija koje su u toku izvrenja (takeof= dispeovanje, landing= kompletiranje)

Slika 4.26 Tok obrade na makro nivou kod dinamikog izvrenja instrukcija Nakon to je instrukcija inicirana radi izvrenja u funkcionalnoj jedinici, njeno izvrenje poinje. Latentnost funkcionalnih jedinica moe biti promenljiva. Kod nekih FU latentnost je jedan ciklus, a kod drugih postoji fiksna latentnost od veeg broja ciklusa. Odredjenje FU karakterie latentnost tipa promenljivi broj ciklusa, to zavisi od vrednosti operanada i tipa operacije koja se obavlja. Obino, kod FU ija je latentnost nekoliko ciklusa, nakon to instrukcija pone sa izvrenjem (u protono organizovanoj funkcionalnoj jedinici), ne postoji u daljem toku izvrenja zaustavljanje te instrukcije u toku protone obrade jer su sve zavisnosti po podacima ve razreene pre njenog iniciranja izvrenja, a takodje i ne dolazi do sudara zbog korienja resursa. Kada se izvrenje instrukcije zavri ona aurira svoj odredini tag (tj. specifikator preimenovanog registra dodeljen tom odreditu), i aktuelni rezultat se postavlja na magistrali. Sve zavisne instruckije koje ekaju u rezervacionim stanicama inicirae uparivanje tag-a i leovae emitovani rezultat koji je prisutan na magistrali. Ovo je nain kako instruckija prosledjuje svoj rezultat ostalim zavisnim instruckijama bez da se koriste medju koraci koji bi se sastojali u auriranju, a zatim itanju zavisnih registara. Istovremeno sa prosledjivanjem rezultata, RRF koristi tag emitovan svima kao indeks i puni emitavani rezultat u selektovani ulaz RRF-a. Obino ulaz rezervacione stanice se dealocira kada se inicira izvrenje njegove instrukcije kako bi se obezbedilo mesto da se neka od narednih instrukcija dispeuje u njoj. Saturacija rezervacione stanice uzrokuje zastoj u dispeovanju instrukcija. Neke od instrukcija ije izvrenje uzrokuje izuzetak mogu kasnije da zahtevaju ponovno planiranje njihovog izvrenja. Najee, kod ovih instrukcija, ulazi rezervacione stanice se ne dealociraju dok ne zavri sa izvrenjem, a da pri tome ne izazovu bilo koji izuzetak. Na primer, instrukcija Load moe da bude uzrok D-ke promaaja za ije opsluivanje je 100

Superskalarne tehnike potreban vei broj ciklusa. Umesto da se FU zaustavi, Load instrukcija koja je uzrokovala izuzetak se ponovo inicira radi izvrenja iz rezervacione stanice nakon to je promaaj opsluen (Load poinje sa izvrenjem iz poetka, a ne od trenutka kada je bila prekinuta zbog promaaja). Kod jezgra dinamikog izvrenja odnos proizvodja-potroa je zadovoljen bez potrebe da se eka na upis, a zatim itanje zavisnog registra. Zavisni operand se direktno prosledjuje od instrukcije proizvodja ka instrukciji potroa sa ciljem da se minimizira latencija koja se javlja zbog prave zavisnosti po podacima. Usvojimo da se instrukcija moe inicirati radi izvrenja u istom ciklusu kada ona primi zadnji operand preko bus-a za prosledjivanje, i ako ne postoji druga instrukcija koja se takmii da koristi istu FU, tada ova instrukcija treba da je u stanju da pone sa izvrenjem u ciklusu koji neposredno sledi nakon dostupnosti svih njenih operanada. Stoga, ako postoje adekvatni resursi tako da se zastoji zbog strukturne zavisnosti ne jave, tada kd dinamikog izvrenja treba da bude u stanju da se pribliii granici koja je diktirana tokom podataka. 4.2.6. Rezervacione stanice i bafer preuredjenja Osim FU-a, kritine komponenete kod jezgra dinamikog izvrenja su rezervaciona(e) stanica(e) i bafer preuredjenja. Rad ovih bafera diktira funkcionisanje jezgra dinamikog izvrenja. Ukazaemo sada na stavke koje su vane za implementaciju rezervacine stanice i bafera preuredjenja. Analiziraemo njihovu organizaciju i ponaanje, a posebno emo se osvrnuti na punjenje i pranjenje ulaza rezervacione stanice i bafera preuredjenja. Postoje tri zadatka koja su tipina za rad rezervacione stanice, a to su: dispeovanje (dispatching), ekanje (waiting), i iniciranje izvrenja (issuing). Jedna tipina rezervaciona stanica prikazana je na slici 4.27 b), a razliita polja u okviru ulaza rezervacione stanice su prikazana na slici 4.27 a). Svaki ulaz ima busy bit, koji ukazuje da je taj ulaz alociran, i ready bit, koji ukazuje da instrukcija na tom ulazu raspolae sa svim operandima. Dispeovanje podrazumeva punjenje instrukcije iz dispe bafera u ulaz rezervacione stanice. Obino dispeovanje instrukcije ine sledea tri koraka: a) izabiranje slobodnog, tj. not-busy, ulaza rezervacione stanice, b) punjenje operanda i/ili tag-ova u selektovani ulaz, i c) postavljanje busy bita tog ulaza. Selekcija slobodnog ulaza se zasniva na busy bitovima i obavlja se od strane jedinice za alokaciju (dodelu). Alokaciona jedinica ispituje sve busy bitove i selektuje jedan od non-busy ulaza kako bi se polju koje prati non-busy ulaz dodelio operand. Ovo se implementira pomou kodera prioriteta. Nakon to je ulaz alociran operandi/tag-ovi instrukcije se pune u ulaz. Svaki ulaz ima dva polja za operande, pri emu je svakom pridrueno polje valid bit. Ako polje operanda sadri aktuelni operand, tada je valid bit postavljen. Ako polje sadri tag to ukazuje da se na operand eka (pending operand), tada njegov valid bit je resetovan i mora da se saeka da operand bude prosledjen (dobavljen). Nakon to je ulaz alociran, njegov busy bit se postavlja.

101

Superskalarne tehnike
Forwardin g buses Dispatch slots Forwardin g buses

Dispatch slots

...

...

...

...

Busy

Operand 1

Busy

Operand 2

Valid

Ready

...
Tag buses

Tag uparivanje

...
Tag buses

Tag uparivanje

a)
Allocate unit

Dispatching

Issuing unit

Entry to be allocated

Entry to be issued

Busy Issuing

Ready

b) Slika 4.27 Mehanizmi rezervacione stanice: a) ulaz rezervacione stanice; b) dispeovanje i iniciranje izvrenja iz rezervacione stanice. Instrukcija koja eka na dostupnost operanda mora da eka u rezervacionoj stanici. Kada ulaz rezervacione stanice eka na operand (pending operand) on mora kontinualno da nadgleda tag magistralu(e). Kada dodje do uparivanja tag-ova polje operanda leuje prosledjeni rezultat i setuje bit valid. Kada su valid bitovi za oba operanda setovana, setuje se ready bit, to ukazuje da instrukcija ima raspoloive sve izvorne operande i moe da pone njeno iniciranje izvrenja. Ovo se obino naziva ''budjenje '' instrukcije (instruction wake-up). Korak iniciranja izvrenja instrukcije (issuing step) je odgovoran za selekciju spremne instrukcije u rezervacionoj stanici i njenom iniciranju izvrenja u FU-i. Ovo se obino naziva selektovanje instrukcije (instruction select). Sve spremne instrukcije se identifikuju na osnovu toga da li su ready bitovi postavljeni ili ne. Selektovanje spremne instrukcije se obavlja od strane jedinice za iniciranje izvrenja (issuing unit) na osnovu heuristikog pristupa u planiranju izvrenja instrukcija ( vidi sliku 4.27b)). Heuristika moe biti zasnovan na programskom redosledu ili na tome koliko dugo je spremna instrukcija je ekala u rezervacionoj stanici. Obino kada se u FU-i inicira izvrenje instrukcije, njen ulaz rezervacine tabele se dealocira, a odgovarajui busy bit se resetuje. Rezervacione tabele velikog obima mogu biti veoma kompleksne za implementciju. Na svojoj ulaznoj strani, rezervaciona stanica mora da podrava to je mogue vei broj izvorita, ukljuujui sve 102

Superskalarne tehnike dispe slotove i magistrale prosledjivanja (vidi sliku 4.27 a)). Mrea za rutiranje podataka na ulaznoj strani moe biti veoma kompleksna. U toku koraka ekanja (waiting) sva polja operanda rezervacione stanice koja treba da prihvate operande koji se oekuju (pending operand) mora kontinualno da kompariraju odgovarajue tag-ove u odnosu na informaciju koja je prisutna na veem broju tag magistrala. Ovo se ostvaruje pomou asocijativnog pretraivanja kroz sve ulaze rezervacione stanice ukljuujui tu vei broj kljueva (tag magistrala). Ako je broj ulaza mali tada implementacija i nije sloena. Ali, ako se broj ulaza poveava, znaajno se poveava kompleksnost. Ovaj deo hardvera se standardno naziva logika za budjenje (wake up logic). Ako se broj ulaza povea, tada se komplikuje kako jedinica za inciranje izvrenja instrukcija tako i logika za heuristiko planiranje izvrenja instrukcija koja treba da selektuje najspremniju instrukciju ije izvrenje treba da zapone. Ovaj deo hardvera se standardno naziva logika za selekciju (select logic). U nekom proizvoljnom mainskom ciklusu moe da postoji vei broj spremnih instrukcija. Selekciona logika mora da odredi ''najbolju'' instrukciju radi iniciranja izvrenja. Kod SSPM-e rezervaciona stanica moe potencijalno da podri po jednom mainskom ciklusu iniciranje izvrenja veeg broja instrukcija, pri emu logika za selekciju mora da odabere najbolji podskup instrukcija od svih moguih spremnih instrukcija. Bafer preuredjenja sadri sve instrukcije koje su ''u letu'' (in flight), tj. sve instrukcije koje su dispeovane ali jo nisu arhitekturno kompletirane. To su ustvari sve instrukcije koje ekaju u rezervaionim stanicama, izvravaju se u funkcionalnim jedinicama, kao i one koje su zavrile sa izvrenjem ali ekaju radi kompletiranja u programskom redosledu. Status svake instrukcije u baferu preuredjena se moe pratiti pomou nekoliko bitova u svakom od ulaza u baferu preuredjenja. Svaka instrukcija moe da bude u jedno od sledeih stanja, tj. da eka na izvrenje, da se izvrava, i da je zavrila izvrenje. Statusni bitovi se auriraju kako instrukcija prolazi od jednog stanja u narednom. Dodatni bit moe se takodje koristiti da ukae da li je instrukcija spekulativna (na prediktovanom putu) ili nije. Ako spekulacija moe da prodje kroz nekoliko grananja, koriste se dodatni bitovi koji mogu da poslue da identifikuju kojem spekulativnom osnovnom bloku instrukcija pripadaju. Kada je grananje razreeno, spekulativne instrukcije mogu postati nespekulativne (ako je predikcija korektna) ili invalidne (ako predikcija nije korektna). Samo zavrene i nespekulativne instrukcije mogu da se kompletiraju. Instrukcija koja je bila invalidna se ne kompletira kada napusti bafer preuredjenja.Slika 4.28 prikazuje polja koja se tipino sreu kod ulaza u bafer preuredjenja; na ovoj slici polje preimenovanog registra je takodje prikazano. Bafer preuredjenja se upravlja kao kruni red ekanja koristei pokaziva zaglavlje (head) i pokaziva rep (tail) vidi sliku 4.28 b). pokaziva rep se advansira kada se ulazi bafera preuredjenja alociraju u toku dispeovanja instrukcija. Broj ulaza koji se u jednom ciklusu moe alocirati odredejn je propusnou dispeovanja. Instrukcije se kompletiraju sa zaglavlja reda ekanja. Sa zaglavlja reda ekanja sve one instrukcije koje su zavrile sa izvremnjem mogu da se kompletiraju onoliko brzo koliko propusnost completion dozvoljava. Propusnost completion je odredejna kapacitetom druge sprene mree i portova koji su dostupni za writeback u registar. Jedna od kritinih stavki predstavlja broj portova za upis u arhitekturno RF polje koji su potrebni da podre prenos podataka od preimenovanih registara (ili ulaza bafera preuredjenja ako se oni koriste kao registri za preimenovanje) ka arhitekturnim registrima. Kada se instrukcija kompletira, njen preimenovani registar i njen ulaz u bafer preuredjenja se dealociraju.Pokaziva zaglavlja bafera preuredejenja se takodje aurira na adekvatan nain. To znai da se bafer preuredjenja moe posmatrati ako srce ili centralni blok upravljanja jezgra dinamikog izvrenja jer status svih instrukcija ''u letu'' (in-flight, tj. koje se izvravaju) se moe pratiti od strane bafera preuredjenja.

103

Superskalarne tehnike

Busy

Issued

Finished

Instruction address

Rename register

Speculative

Valid

a)

Narednii ulaz koji se dodeljuje (tail pointer)-pokaziva repa

Naredna inistrukcija koja se kompletira (head pointer)-pokaziva zaglavlja

B I F IA RR S V

(Reorder buffer) Bafer preuredjenja

Slika 4.28 a) ulaz bafera preuredjenja; b) organizacija bafera preuredjenja Mogue je kombinovati rezervacionu(e) stanicu(e) i bafer preuredjenja u jedinstvenu strukturu koju nazivamo instrukcioni prozor (instruction window), koji upravlja svim instrukcijama ''u letu''. Poto u trenutku dispeovanja, za svaku instrkciju ulaz u rezervacionu stanicu kao i ulaz u bafer preuredjenja, se moraju alocirati, one se mogu kombinovati kao jedan ulaz u instrukcioni prozor. Stoga instrukcije se prvo dispeuju u instrukcioni prozor, nakon toga ulazi instrukcionog prozora nadgledaju tag magistrale za operande koji se oekuju (pending operands), zatim rezultati se prosledjuju u instrukcioni prozor, posle toga instrukcije se iniciraju radi izvrenja iz instrukcionog prozora u trenutku kada su spremne, i na kraju instrukcije se kompletiraju iz instrukcionog prozora. Obim instrukcionog prozora odredjuje maksimalan broj instrukcija koje se mogu simultano ''u letu'' nai u samoj maini, a shodno tome time je odredjen stepen paralelizma na nivou instrukcija koji se moe ostvariti od strane te maine.

104

Superskalarne tehnike

4.2.7. Dinamiki planer instrukcija Dimaniki planer instrukcija (Dynamic Instruction Scheduler-DIS) predstavlja srce jezgra dinamikog izvrenja. Termin DIS ukljuuje prozor instrukcija kao i odgovarajua wake-up i selekciona logika. Tekue, postoje dva dizajn stila koja se odnose na realizaciju DIS-a. Prvi je sazahvatanjem-podataka (with data capture-WDC), a drugi je bez-zahvatanja-podataka (without data capture-WoDC). Na slici 4.29 prikazan je planer tipa WDC. Kod ovog tipa planera, u trenutku dispeovanja instrukcije, oni operandi koji su psremni se kopiraju iz RF polja (bilo arhitekturnog ili fizikog) u instrukcioni prozor, pa se zbog toga koristi termin zahvaeni-podaci.Za operande koji nisu spremni, tag-ovi se kopiraju u instruckoni prozor i koriste se za leovanje operanada kada se oni prosledjuju od strane FU-ova. Rezultati se prosledjuju instrukcijama koje ekaju na te operande u instrukcionom prozoru. U sutini, rezultat koji se prosledjuje instrukciji koja treba da se aktivira treba da bude u saglasnosti sa Tomasulo-ivim algoritmom. Poseban put za prosledjivanje je potreban za auriranje RF polja tako da naredne zavisne instrukcije mogu da dograbe svoje izvorne operande iz RF poja kada se one dispeuju. Kod novih mikroprocesora koristi se drugaiji dizajn stil koji se ne bazira na zahvatanjupodataka u stepenu za planiranje (vidi sliku 4.29 b)). Kod ovog stila, itanje registra se obavlja nakon planiranja, tj. nakon iniciranja izvrenja instrukcije u FU-i. Dispeovanje instrukcije ne prati kopiranje operanada u instrukcioni prozor; tj. samo se tag-ovi ( ili pokazivai) operanada pune u prozor. Planer i dalje obavlja uparivanje tag-ova kako bi wake-up (probudio) spremen instrukcije. Ipak se samo rezultati sa FU a prosledjuju RF polju. Sve spremne instrukcije koje su inicirane radi izvrenja dobijaju svoje operande direktno iz RF polja pre nego to pone njihovo izvrenje. U sutini, aktivnostri tipa prosledjivanje rezultata kao i ''budjenje'' instrukcije su medjusobno razdvojene. Da bi se instrukcija ''probudila'' neophodno je da se tag prosledi planeru. Kod WoDC planera, obim instrukcionog prozora se moe znaajno redukovati, pa zbog toga znatno obimniji put za prosledjivanje rezultata planeru nije potreban. Postoji vrsta sprega izmedju preimenovanja registara i planiranja izvrenja instrukcija. Kao to smo napomenuli tranije, jedna od svrha da se obavi dinamiko preimenovanje registara sastoji se u eliminisanju lanih zavisnosti koji se javaljaju zbog viestrukog korienja registara. Druga svrha je da se uspostavi odnos proizvodja-potroa izmedju dve zavisne instrukcije. Prava zavisnost po podacima se odredjuje pomou zajednikog specifikatora za preimenovanje registara koji je definisan instrukcijama proizvodja-potroa. Specifikator za preimenovanje registara moe da funkcionie kao tag za prosledjivanje rezultata. Kod planera koji ne-koristi-zahvatanje-podataka (non-data-capturedscheduler) (vidi sliku 4.29 b)), radi izbavljanja izvornih operanada iz RF polja koriste se registarski specifikatori; (odredini) registarski specifikatori se koriste kao tag-ovi za ''probudjivanje'' zavisnih instrukcija u planeru. Za tip planera koji koristi zahvatanje-podataka (data-captured-scheduler) (vidi sliku 4.29 a)), tag-ovi koji se koriste za prosledjivanje i ''probudjivanje'' instrukcije ne treba da predstavljaju aktuelni registarski specifikator. Tag-ovi se uglavnom koriste da identificiraju odnose proizvodja-potroa koji postooji izmedju dve zavisne instrukcije i kojima se moe proizvoljno pristupati. Tomasulo-ov algoritam koristi ID-ove rezervacione stanice kao tag-ove za prosledjivanje rezultata zavisnim instrukcijama kao i za auriranje arhitekturnih registara. Ne postoji eksplicitno preimenovanje registara koje ukljuuje preimenovanje fizikih registara.

105

Superskalarne tehnike

Kopiranje operanda Prozor za planiranje izvrenja zahvaenih instrukcija (rezervaciona stanica)

Funkcionalne jedinice

a)
Prozor planiranja izvrenja nezahvaenih instrukcija

Forwarding and wake-up

Funkcionalne jedinice

b) Slika 4.29 Dinamiko planiranje izvrenja instrukcija: (a) sa zahvaenim podacima; (b) sa nezahvaenim podacima 4.2.8. Druge tehnike za regulisanje toka podataka prema registrima Za dugi vremenski period ogranienje koje postoji zbog toka podataka smatralo se da predstavlja apsolutno teoretsko ogranienje, a dostizanje vrednosti te granice smatra se vrni cilj u postizanju prerformansi. Intenzivna istraivanja na polju data-flow arhitektura kao i data-flow maina vrena su zadnje tri decenije. Ogranienja tipa data-flow (toka-podataka) pretpostavljaju da su prave zavisnosti apsolutne i da se ne mogu prevazii. Ono to je interesantno, kasnih 60-tih i poetkom 70-tih 106

Forwarding

RF polje

Wake-up

Auriranje registara

RF polje

Superskalarne tehnike godina sline pretpostavke su bile usvojene da vae i za upravljake zavisnosti. U optem sluaju se stajalo na stanovitu da su upravljake zavisnosti apsolutne i da kada su u pitanju instrukcije uslovnog grananja ne postoji drugi izbor nego mora da se eka da se uslovno grananje izvri pre nego to se produi s narednom instrukcijom zbog neodredjenosti od stvarnog toka upravljanja. Nakon ovog perioda, uinjeni su ogromni napori koji su pre svega orijentisani ka tehnikama za predikciju grananja. Uslovna grananja kao i pratee upravljake zavisnosti ne predstavljaju vie apsolutne barijere i mogu se veoma esto premostiti spekulisanjem smera ciljne darese instrukcije grananja. Osnova koja ini ovu spekulaciju moguom je da veoma esto ishod instrukcije grananja bude zaista predvidiv. Nakon 1995. godine istraivai su esto puta postavljali pitanja o apsolutnosti prave zavisnosti po podacima. Nekoliko istraivaa 1996. godine predloilo je koncept predikcije vrednosti (value prediction). Prvi od tih lanaka, autora Lipasti i dr., fokusirao se na predikciji load vrednosti bazirajui se na opservaciji da najee vrednosti koje se pune od strane pojedinih statikih Load instrukcija mogu biti veoma predvidljive. Jedan drugi lanak generalizuje ovu istu osnovnu ideju kod predikcije rezultat ALU-ovih instrukcija. Eksperimentalni podaci zasnovani na realnim ulaznim skupovima podataka ukazuju da rezultati generisani od strane velikog broja instrukcija mogu zaista biti predviljivi. Pojam lokalne-vrednost (value locality) ukazuje da odredjene instrukcije tee repetitivno da generiu isti (mali) skup (ponekad jedinstven) rezultantnih vrednosti. Praenjem rezultata generisanih od strane ovog skupa instrukcija, na osnovu istorije prethodno generisanih vrednosti, mogue je prediktovati generisanje buduih vrednosti. Na osnovu ovih radova kasnije je preloen vei broj reenja i projektovan vei broj prediktora vrednosti. Novija istraivanja, koja se odnose na hibridne prediktore vrednosti pokazuju da se moe sotvariti tanost predikcije od 80%, realistika reenja mogu da ostvare IPC poboljanja u opsegu od 8.6 % 23 % za SPEC benmarkove. Kada je rezultat instrukcije korektno prediktovan koristei prediktovanu-vrednost, to se obino obavlja od strane stepena Fetch, naredna zavisna instrukcija moe da pone izvrenje koristei ovu spekulativnu vrednost bez da eka na aktuelno dekodiranje i izvrenje vodee instrukcije. Na ovaj nain efikasno se eliminie serijsko ogranienje koje postoji zbog prave zavisnosti po podacima ozmedju dve instrukcije. Na ovaj nain ogranienja zbog zavisnosti u DFG-u se efikasno eliminiu ako je obavljenja korektna predikcija vrednosti. To znai da predikcija vrdnosti predstavlja jedan potencijal koji premauje granicu klasinog toka podataka. Naravno da je validacija i dalje neophodna kako bi se osigurali da je predikcija korektna, a sad to predstavlja novo ogranienje za postizanje vee propusnosti kod izvrenja instrukcija. Predikcija vrednosti je zaosta efikasna i dovodi do poveanja performansi maine ako je pogrena predikcija retka, a cena koja treba da se plati zbog pogrene predikcije mala ( tj. nula ili jedan ciklus) i ako latencija validacije je manja od prosene latencije izvrenja uinstrukcija. To znai da efikasna implementacija predikcije vrednosti je kljuno za obezbedjenje efikasnog poboljanja performansi. Jedna druga novo predloena ideja se bazira na dinamikom ponovnom korienju instrukcija (dynamic instruction reuse). Slino konceptu lokalna-vrednost (value locality), opservacije realnih programa ukazuju da se veoma esto iste sekvence instrukcija repetitivno izvravaju koristei pri tome isti skup ulaznih podataka. Ovo rezultira redudantnom izraunavanju koje se obavlja od strane maine. Tehnike koje viestruko koriste dinamiko izvrenje instrukcija pokuavaju da prate trag ovih redudantnih izraunavanja, detektuju ih, a prethodne rezultate koriste bez da obave ova redudantna izraunavanja. Ove tehnike su nespekulativne pa zbog toga kod njih nije potrebna validacija. Dok se predikcija vrednosti (value prediction) moe posmatrati kao postupak za validaciju odredjenih potega zavisnosti u DFG-u, tehnike za dinamiko ponovno korienje instrucija pokuavaju da otklone kako vorove tako i potege podgrafa iz DFG-a. Najnovija istraivanja pokazuju da se eliminacijom redudantnih izraunavanja mogu ostvariti znaajna poboljanja kada su programi kreirani na nekom od funkcionalnih jezika. Takodje novija istraivanja ukazuju na sline tendencije koje su prisutne kod realnih programa a odnose se na redudantna izraunavanja. No ipak treba naglasiti da se u skorije vreme oekuju jo znaajniji rezultati na ovom polju. 107

Superskalarne tehnike

4.3.

Tehnike za ubrzanje toka podataka prema memoriji

Instrukcije koje se obraaju memoriji odgovorne su za kopiranje podataka izmedju glavne memorije i RF polja, ali su one esencijalne i sa aspekta podrke rada izvrenja ALU instrukcija. Registarski operandi koji su potrebni ALU instrukcijama moraju se prvo napuniti iz memorije. Sa ogranienim brojem registara nije mogue da se u toku izvrenja programa, svi operandi uvaju u RF polju. Kompajler generie dodatno kd (spill code) kako bi privremeno smestio odredjene operande u glavnu memoriju i ponovo ih pribavio kada su oni potrebni. Ovaj dodatni kd se implementira pomou instrukcije Load i Store. Obino kompilator samo skalarne promenljive dodeljuje dodeljuje u registre. Sloene strukturne podatke, kakva su polja i povezane liste, koje premauju obim RF polja, obino se uvaju u glavnoj memoriji. Da bi se obavile operacije nad ovakvim strukcurama podataka neophodne su instrukcije tipa Load i Store. Efikasno procesiranje instrukcija Load i Store moe znaajno da minimizira potrebno vreme (overhead) koje je potrebno da bi se kopirali podaci izmedju glavne memorije i registarskog polja. Procesiranje instruckija Load/Store kao i rezultujui protok podataka prema memoriji moe postati usko grlo ukupnih performansi maine imajui pre svega u vidu dugu latentnost kod izvrenja memorijskih instrukcija. Duga latentnost kod izvrenja Load/Store instrukcija rezulruje pre svega zbog potrebe da se izraunava memorijska adresa i potrebe da se pristupi memorijskoj lokaciji. Da bi se podrao rad sa virtuelnom memorijom. izraunatu memorijsku adresu (nazvanu virtuelnu adresu) neophodno je, pre nego to se moe pristupiti fizikoj memoriji, prevesti u fiziku adresu. Ke memorije su veoma efikasne kada je u pitanju redukcija efektivne latentnosti kod pristupa glavnoj memoriji. ta vie, razvijene su razliite tehnike za redukciju ukupne latentnosti i poveanje propusnosti kod procesiranja instrukcija tipa Load/Store. 4.3.1. Instrukcije za pristup memoriji Izvrenje instrukcija za prenos podataka ka/iz memorije se odvija i tri koraka: generisanje memorijske adrese, prevodjenje memorijske adrese, i pristup podataka u memoriju. Mi emo prvo analizirati ova tri koraka, a zatim opisati procesiranje Load/Store instrukcija kod SSPM-a. Od strane ISA, RF polje i glavna memorija su odredjene za uvanje podataka. ISA definie memoriju kao skup od 2 n memorijskih lokacija kojima se moe proizvoljno pristupati, tj. svaka memorijska lokacija se identifikuje pomou n-to bitne adrese i moe joj se direktno pristupiti istom latentnou. Upravo kao i arhitekturno RF polje, i glavna memorija predstavlja jednu arhitekturnu celinu koja je vidljiva softverskim instrukcijama. Ipak nasuprot RF polju, adresa koja identifikuje pojedinu memorijsku lokaciju, ne predstavlja eksplicitni deo koji se pamti od strane formata instrukcije. Umesto toga, memorijska adresa se obino generie na sonovu sadraja specificiranog registra i ofseta. To znai da je za generisanje adrese potrebno obaviti pristup specificiranom registru, a zatim nad tim sadrajem dodati ofset vrednosti. Pored generisanja adrese, za sluaj kada je u sistemu implementirana virtuelna memorija, neophodno je obaviti i prevodjenje (translation) adrese. Realno instalirana glavna memorija predstavlja deo virtuelnog adresnog prostora sistema i vidi se od strane svakog programa kao privatni adresni prostor za taj program. Fizika memorija koja je implementirana u mainu odgovara fizikom adresnom prostoru. Fiziki adresni prostor je manji u odnosu na virtuelni i moe da bude deljiv za vei broj programa. Virtuelna memorija je mehanizam koji preslikava virtuelni adresni prostor programa u fiziki adresni prostor maine. Ovakvim adresnim preslikavanjem, virtuelna memorija je u stanju da podri izvrenje programa sa virtuelnim adresnim prostorom koji je vei u odnosu na fiziki adresni prostor, kao i multiprogramsku paradigmu putem preslikavanja veeg broja virtuelno adresnih prostora u isti fiziki adresni prostor. Mehanizam preslikavanja ukljuuje prevodjenje izraunate efektivne 108

Superskalarne tehnike adrese, tj. virtuelne adrese u fiziku adresu koja se moe koristiti za pristup fizikoj memoriji. Ovaj mehanizam obino se implementira koristei tabelu preslikavanja, a proces prevodjenja (transliranje adresa) se vri pomou lookup tabela (tabela pretraivanja). Trei korak kod procesiranja Load/Store instrukcija se odnosi na pristup memoriji. Kod instrukcije Load podaci se itaju iz memorijske lokacije i smetaju u registar, dok se instrukcijom Store sadraj registra smeta u memorijsku lokaciju. Dok se prva dva koraka koja se odnose na generisanje i prevodjenje adrese, (kod Load i Store instrukcije), obavljaju na identian nain, trei korak, kod SSPMa, se izvrava na razliit nain za Load i Store. Na slici 4.30 prikazan je redosled pojavljivanja ova tri koraka u tri protona stepena. Za obe, Load i Store, instrukcije usvajamo da se koristi registarsko adresni nain rada sa ofsetom. Kod Load instrukcije. onog trenutka kada je operand adresnog registra dostupan, isti se predaje protonoj funkcionalnoj jedinici, pa se efektivna adresa generie od strane prvog protonog stepena, Store instrukcija pre nego to se inicira radi izvrenja mora da saeka na dostupnost oba operanda, prvo onaj koji se uva u adresnom registru , a zatim na podatak koji se pamti u nekom od registra.

Dispatch buffer

Register writeback Dispatch Architected RF Rename RF

Reservation stations Branch Integer Integer Floatingpoint Load/ Store


Generisanje adrese Prevodjenje adrese Pristup memoriji

Reorder buffer

Data Memory

Complete

Store buffer

Retire

Slika 4.30 Procesiranje instrukcija Load/Store Nakon to je prvi protoni stepen generisao efektivnu adresu, drugi protoni stepen prevodi ovu virtuelnu adresu u fiziku adresu. Obino se ovo izvodi pristuanjem TLB-u (transtation lookahead buffer) koji je u sutini hardversko-kontrolisana tabela, a ostvaruje preslikavanje virtuelnih u fizike adrese. TLB je u sutini ke tabela stranienja (page table) koja se nalazi u glavnoj memoriji. (U sekciji 4.3.2 dato je vie detalja koji se odnose na tabelu stranienja i TLB). U toku rada moe da se desi da prevedena virtuelna adresa pripadne nekoj stranici za koju u TLB-u ne postoji informacija o 109

Superskalarne tehnike preslikavanju. Ovu situaciju nazivamo TLB promaaj. Ako pojedino preslikavanje egzistira u tabeli stranienja, tada se informacija o preslikavanju moe izbaviti pristupanjem tabeli stranienja u glavnoj mamoriji. Nakon to se informacija o preslikavanju kod promaaja izbavi i napuni u TLB, prevodjenje se zavrava. Mogue je da se desi i sledea situacija: Da informacija o preslikavanju ne bude rezidentna ak i u tabeli stranienja, to znai da pojedina stranica kojoj se obraamo nije preslikana i nije rezidentna u glavnoj memoriji. Ovo e uzrokovati greku stranienja (page fault), a da bi se dobavila stranica koja nedostaje, zahteva se pristup disku. Kao rezultat inicira se programski izuzetak (program exception), to dovodi do suspenzije izvrenja tekueg programa. Nakon uspenog prevodjenja adrese u drugom protonom stepenu, u toku treeg protonog stepena, instrukcija Load pristupa podatku koji se uva u memoriji. Na kraju ovog mainskog ciklusa, podaci se izbavljaju iz memorije za podatke i upisuju u preimenovani registar ili u bafer preuredjenja. U ovom trenutku instrukcija Load zavrava sa izvrenjem. Auriranje arhitekturnog registra se ne obavlja sve dok se onstrukcija Load ne kompletira od strane bafera preuredjenja. Pri ovoj analizi usvajamo da se pristup memoriji za podatke od strane treeg protonog stepena obavlja u jednom mainskom ciklusu. Ovakav scenario je mogu kada se koristi ke-podataka (U sekciji 4.3.2 dato je vie detalja koji se odnose na ke). Kada je instaliran ke-podataka, moe da se desi da podaci koji se pune u memoriju ne budu rezidentni u keu za podatke. Ovo rezultira ke promaajem i zahteva da se ke-podataka napuni iz glavne memorije. Ovakvi tipovi ke promaaja dovode do zastoja Load/Store protone jedinice. Instrukcija Store se procesiraju na neto drugaiji nain u odnosu na instrukciju Load . Nasuprot instrukciji Load, za instrukciju Store smatramo da je zavrila sa svojim izvrenjem na kraju drugog protonog stepena to odgovara aktivnosti uspenog prevodjenja adrese. Registarski podatak koji se smeta u memoriju uva se u baferu preuredjenja. Tek kada se instrukcija Store kompletira, podaci se upisuju u memoriju. Razlog za ovako zakanjeni pristup memoriji predstavlja preuredjeno i potencijalno pogreno auriranje memorije pa zbog toga instrukciju Store treba ponititi (flush), a do toga dolazi ako se javi izuzetak (exception) ili je predikcija instrukcije Branch pogrena (Branch missprediction). S obzirom da se instrukcijom Load vri itanje memorije njeno ponitavanje nee dovesti do nepoeljnih nus efekata (side effects) u stanju memorije. Kod instrukcije Store, umesto da se auriranje memorije vri u fazi completion prvo se obavlja kopiranje (premetanje) podataka u Store baferu. Store bafer je FIFO bafer koji baferuju arhitekturno kompletiranje instrukcije tipa Store. Svaka od ovih instrukcija tipa Store se zatim izvlai (retire), tj. u trenutku kada je memorijska magistrala dostupna aurira se memorija. Svrha bafera Store je da obezbedi izvlaenje podataka koji se odnose na instrukciju Store u trenutku kada je memorijska magistrala slobodna, obezbedjujui pri tome prioritet instrukcijama tipa Load koje treba da pristupe memorijskoj magistrali. Termin kompletiranje (completion), ili dovrenje, se odnosi na auriranje stanja CPU-a, dok termin izvlaenje (retiring) se odnosi na auriranje memorijskog stanja. Kod bafera-Store, instrukcija Store je arhitekturno kompletirana ali njen sadraj jo nije izvuen (upisan) u memoriju. Kada se u toku izvrenja programa javi izuzetak, instrukcije koje u programskom redosledu slede nakon instrukcije ije je izvrenje dovelo do generisanja izuzetka, a koje su u medjuvremenu van-redosledno zavrile sa procesiranjem, moraju da se izbace (anulira njihov efekat) iz bafera preuredjenja. U toku sprovedene analize usvijili smo da se obe aktivnosti, prevodjenje adrese i pristup memoriji, obavljaju za jedan mainski ciklus. Ovakva latentnost obino zahteva korienje TLB-ova i keeva. Jedan kratak pregled implementacija ke memorije i virtuelne memorije je dat u narednoj sekciji. Oni koji su familijarni sa konceptima hijerarhijske organizacije memorije mogu preskoiti ovu sekciju.

110

Superskalarne tehnike

4.3.2. Hijerarhijska organizacija memorije Pre nego to analiziramo neke specifine tehnike za prenos podataka ka/iz memorije neophodno je prvo sa implemenntacione perspektive da se podsetimo osnovnih principa rada ke i virtuelne memorije. Pri ovome posebnu panju abratiemo na sledee etiri teme: mehanizmima za pristup memoriji, implementacijama ke memorije, TLB implementacijama, i interakciji izmedju ke memoriji i TLB-a. Postoje sledea dva osnovna naina za pristup memoiji sa veim brojem ulaza: a) indeksiranjem putem korienja adrese; i b) asocijativnim pretraivanjem preko korienja tag-a (adresnog markera). Indeksirana-memorija koristi adresu da bi indeksirala memoriju sa ciljem da selektuje pojedini ulaz (vidi sliku 4.31a). Za dekodiranje n-to bitne adrese koristi se dekoder. Dekoder dozvoljava rad, radi upisa ili itanja, jednom od 2 n ulaza. Postoji strogo odredjeno preslikavanje izmedju adrese i podataka, to u sutini znai da podatak mora biti upisan u memoriju u fiksan ulaz. Indeksiranamemorija je rigidna sa aspekta preslikavanja, ali nije kompleksna za implementaciju.
Address Key Address Key

Tag

Data

Tag

Data

Dacoder

a)

b)

Dacoder

c)

Slika 4.31 Mehanizmi za pristup memoriji (a) indeksirana memorija; (b) (potpuno) asocijativna memorija; (c) skupno-asocijativna memorija Nasuprot indeksiranoj, asocijativna memorija u fazi pretraivanja memorije koristi klju da bi selektovala pojedini ulaz (vidi sliku 4.31 b). Svakom memorijskom ulazu pridrueni su tag polje i komparator koji uporedjuje sadraj svog tag polja i kljua. Ako dodje do uparivanja selektuje se taj ulaz. Korienje ovog oblika asocijativnog pretraivanja omoguava fleksibilno memorisanje podataka na bilo koju lokaciju u memoriji. Fleksibilnost se ostvaruje po ceni kompleksnije implementacije. Kompromis izmedju indeksirane i asocijativne memorije predstavlja skupno-asocijativna memorija koja koristi kako indeksiranoo tako i asocijativno pretraivanje (vidi sliku 4.31 c). Adresa se koristi za indeksiranje na nivou jadnog od skupova, a pretraivanje veeg broja ulaza na nivou skupa obavlja se kljuem ime se identifikuje pojedini ulaz. Ovaj kompromis obezbedjuje odredjenu fleksibilnost u smetanju podataka bez da se pri tome ovo reenje optereti kompleksnou eme koje je karakteristino za potpuno asocijativnu memoriju. Memorijska hijerarhija se koristi da celokupnom memorijskom podsistemu obezbedi ''iluziju'' o velikom kapacitetu i niskom iznosu latentnosti. Nii nivoi memorije su obino vei, ali sporiji, dok su vii manji, ali bri. Oslanjajui se na latentnost kod obraanja memoriji, sa ovakvom memorijskom 111

Superskalarne tehnike hijerarhijom mogu se ostvariti performanse koje su veoma bliske veoma brzim i velikim memorijama, bez da se pri tome povea cena i kompleksnost. Ke memorija se postavlja izmedju memorije najvieg nivoa i memorije nieg nivoa kakva je glavna memorija. Glavna memorija se obino implementira kao deo velike indeksirane memorije. Sa druge strane, ke memorija se moe implementirati korienjem jedne od tri eme (slika 4.31) koje se odnose na pristup memoriji. Kada je ke memorija implementirana kao indeksna memorija, ona se naziva, vidi sliku 4.32, direktno-preslikani ke (direct-mapped cache). S obzirom da je direktno-preslikani ke memorija manjeg kapaciteta u odnosu na glavnu memoriju, njoj je potreban manji broj adresnih bitova pa njen manji dekoder moe da dekodira podskup adresnih bitova glavne memorije. Saglasno tome, veliki broj adresa, kod direktno-preslikanog kea, se moe preslikati na isti ulaz. Kako bi se obezbedili da selektovani ulaz sadri korektne podatke, ostali, tj. nedekodirani, adresni bitovi moraju se koristiti radi identifikacije selektovanog ulaza. Zbog toga, pored polja podataka svakom ulazu je pridrueno tagpolje koje se koristi za pamenje nedekodiranih bitova. Kada je ulaz kea selektovan, pristupa se njegovom tag polju i uporedjuje se vrednost tag polja sa nedekodiranim bitovima originalne adrese kako bi se osigurali da taj ulaz sadri podatke kojima se pristupa. Na slici 4.32 a prikazan je direktno-preslikani ke kod koga svaki ulaz, ili blok, sadri po jednu re. Sa ciljem da se iskoristi prednost prostorne lokalnosti, blok kea moe da sadri vei broj rei (vidi sliku 4.32 b). Kada blok ine vei broj rei, neki od bitova originalne adrese moraju se iskoristiti za referenciranje pojeine rei u okviru bloka. To znai da se originalna adresa mora sada podeliti na tri dela: indeksni bitovi se koriste za selektovanje ulaza, blok ofset bitovi su namenjenji za selektovanje rei u okviru izabranog bloka, a tag bitovi se koriste za uparivanje sa tag bitovima zapamenim u tag polju selektovanog ulaza. Ke memorija se moe takodje implementirati kao potpuno-asocijativna ili skupno-asocijativna memorija, vidi sliku 4.33 i sliku 4.34, respektivno. Potpuno-asocijativna memorija se karakterie najveom fleksibilnou u odnosu na smetanje podataka u ulazima kea. Osim blok ofset bitova, svi ostali bitovi se koriste kao klju za potpuno-asocijativno pretraivanje svih ostalih ulaza kea. Potpuna asocijativnost obezbedjuje najefikasnije korienje svih ulaza kea, ali uslovljava najveu kompleksnost u implementaciji. Skupno-asocijativni keevi dozvoljavaju fleksibilni razmetaj podataka izmedju svih ulaza skupa. Indeksni bitovi se koriste za selekciju pojedinog skupa, tag bitovi za selekciju ulaza u okviru skupa, a blok ofset bitovi za selekciju rei u okviru izabranog ulaza. Podela originalnih adresnih bitova na tri kategorije rezultat je paljivog kompromisa.
Tag Index

Dakoder

= Tag uparivanja

a) 112

Superskalarne tehnike

Tag

Index

BO

Dakoder

= Multiplekser Tag uparivanja

b) Slika 4-32 Direktno preslikani keevi: a) jedna re po bloku; b) vie rei po bloku
Tag Block offset

= = =

= Asocijativno pretraivanje Multiplekser

Slika 4-33 Potpuno-asocijativni ke

113

Superskalarne tehnike

Tag

Index

Dacoder

= = Asocijativno pretraivanje

Multiplekser

Slika 4.34 Skupno-asocijativni ke


Virtuelna adresa Glavna memorija

Prevodjene adrese

Fizika adresa

Slika 4-35 Prevodjenje virtuelne u fiziku adresu

114

Superskalarne tehnike
Virtuelna adresa

Dekoder

Glavna memorija

Memorija prevodjenja Fizika adresa

Slika 4.36 Prevodjenje virtuelne adrese rei u fiziku adresu rei koristei memorije prevodjena (translacione memorije) Zadatak virtuelne memorije je da obavi preslikavanje virtuelnog adresnog prostora u fiziki adresni prostor. Ovaj zadatak ukljuuje prevodjenje virtuelne adrese u fiziku. Umesto da se direktno pristupa glavnoj memoriji pomou adrese generisane od strane procesora, virtuelnu adresu koju generie procesor prevodimo prvo u fiziku adresu. Fizika adresa, vidi sliku 4.35, koristi se zatim za pristup fizikoj glavnoj memoriji. Prevodjenje adrese obavlja se pomou translacione memorije. Pri ovome, virtuelna adresa se koristi kao indeks u translacionoj memoriji. Podaci koji se izbavljaju sa selektovanog ulaza translacione memorije koriste se kao fizika adresa za indeksiranje glavne memorije. To znai da fizike adrese, koje odgovaraju virtualnim adresama, su zapamene u odgovarajue ulaze translacione memorije. Na slici 4.36 prikazan je nain korienja translacione memorije u procesu prevodjenja adresa rei, tj. preslikavanja virtuelne adrese rei iz virtuelnog adresnog prostora u fiziku adresu rei u fizikoj glavnoj memoriji. Postoje dve slabosti koje se odnose na emu translacione memorije prikazane na slici 4.36. Prvo, za prevodjenje adresa rei neophodna je translaciona memorija koja ima isti broj ulaza kao i glavna memorija. Ovakav pristup dovodi do dupliranja obima fizike glavne memorije. U principu, da bi se ublaio problem, prevodjenje se moe obaviti pomou grublje granularnosti. Vei broj rei (obino stepena dva) u glavnoj memoriji se moe zajedno grupisati u stranicu (page), pa je sada neophodno prevoditi samo adrese svake od stranica. U okviru stranice, selekcija rei se vri pomou LS bitova virtuelne adrese, tj. ofset bitovi stranice se direktno koriste bez potreba za prevodjenjem. Princip rada je prikazan na slici 4.37. Kod sistema koji koristi stranienje, translaciona memorija se naziva tabela stranienja (page table).

Dekoder

115

Superskalarne tehnike
Virtuelna adresa Ofset stranienja

Virtuelni broj stranice Dekoder

Stranice glavne memorije

Dek. Dek.

Memorija prevodjenja (tabela stranienja) Fiziki broj stranice

Dekoder

Slika 4.37 Prevodjenje virtuelne adrese stranice u fiziku adresu stranice korienjem memorije prevodjenja (translacione memorije)
Virtuelna adresa Virtuelni broj stranice Ofset stranienja

Dek.

Tag

Index

Fiziki broj stranice Fizika adresa

Ofset stranienj a

Slika 4.38 Direktno preslikani TLB 116

Superskalarne tehnike Druga slaba taka translacione memorijske eme ogleda se u injenici da su sada svaki put kada se od strane instrukcije obraamo glavnoj memoriji potrebna dva memorijska pristupa. Prvo, mora da se pristupi tabeli stranienja kako bi se dobavio broj fizike stranice, a zatim se pristupa fizikoj glavnoj memoriji koristei broj prevedene fizike stranice zajedno sa ofsetom stranice. Kod aktuelnih implementacija tabela stranienja se obino smeta u glavnu memoriju (obino u delu glavne memorije koji je lociran operativnom sistemu), pa shodno tome za svako referenciranje memorije od strane instrukcije potrebna su po dva sekvencijalna pristupa toj fizikoj glavnoj memoriji. Ovakav nain rada moe postati usko grlo sa aspekta performansi. Reenje se mora nai u implementaciji tabele stranienja koja koristi veoma brzu ke memoriju. TLB ( Translation Lookaside Buffer) je u sutini ke memorija za tabelu stranienja. Kao i svaka druga ke memorija, TLB se moe implementirati korienjem bilo koje od tri eme sa slike 4.31 koje se odnose na pristup memoriji. Direktno preslikani TLB je najmanja (i najbra) verzija tabele stranienja. Virtuelni broj stranice deli se na indeks za TLB i tag (vidi sliku 4.38). Virtuelni broj stranice se prevodi u fiziki broj stranice koji se povezuje sa ofsetom stranice da bi se formirala fizika adresa. Sa ciljem da se ostvari malo fleksibilnije i efikasnije korienje TLB ulaza, TLB-ovoj implemetaciji se dodaje asocijativnost. Na slici 4.39 prikazani su skupno-asocijativni i potpunoasocijativni TLB-ovi. Kod skupno-asocijativnog TLB-a, virtuelni i adresni bitovi se dele na tri polja: indeks, tag, i ofset stranice. Obim (veliina) polja koja se odnosi na ofset stranice diktiran je obimom stranice koji je specificiran od strane arhitekture i operativnog sistema. Ostala polja, tj. indeks i tag, ine broj virtuelne stranice. Kod potpuno-asocijativne TLB, indeks polja ne postoji, dok tag polje sadri broj virtuelne stranice.

117

Superskalarne tehnike
Broj virtuelne stranice Index Tag PO

= =

Broj fizike stranice Fizika adresa Tag PO

Ofset stranienja

Broj virtuelne stranice

PPN

Tag

= = =

Ofset stranienja

= Broj fizike stranice Fizika adresa

Slika 4.39 Asocijativni TLB-ovi: a) skupno-asocijativni TLB; b) potpuno-asocijativni TLB Keiranje dela tabele stranienja u TLB obezbedjuje brzo adresno prevodjenje, ali ipak moe doi do TLB promaaja (TLB misses). Istovremeno u TLB-u ne mogu biti prisutna sva preslikavanja tipa virtuelna stranica u fiziku stranicu. Kada se u toku pristupa iz tabele-stranienja koja se uva u glavnoj memoriji. To moe dovesti do veeg broja ciklusa tipa zastoj u radu protonog sistema. Takodje je mogue da TLB promaaj dovede i do greke-stranienja (page-fault). Do greke-stranienja dolazi kada informacija o preslikavanju virtuelna stranica u fiziku stranicu ne postoji u tabeli stranienja. To znai da pojedina stranica koja se referencira nije rezidentna u glavnoj memoriji pa se zbog toga mora pribaviti iz sekundarne memorije. Opsluivanje greke-stranienja zahteva prizivanje operativnog sistema radi pristupa disk memoriji, a to potencijalno dovodi do pojave desetine hiljada ciklusa zastoja. 118

Superskalarne tehnike S toga, kada se od strane programa inicira greka-stranienja, izvrenje programa se suspenduje sve dok se od strane operativnog sistema ne opslui greka-stranienja. Ke podataka se koristi za keiranje dela glavne memorije, dok se TLB koristi za keiranje dela tabele-stranienja. Interakcija izmedju TLB-a i kea podataka je prikazana na slici 4.40. U odnosu na Load/Store protonu jedinicu sa slike 4.30, n-bitna virtuelna adresa sa slike 4.40 predstavlja efektivnu adresu generisanu od strane prvog protonog stepena. Virtelna adresa se sastoji od broja virtuelne jedinice (v bitova) i ofseta stranice (g bitova). Ako je TLB skupno-asocijativni ke, v bitova koji odgovaraju broju virtuelne stranice se dalje deli na k-to bitni indeks i (v-k)-to bitni tag. Drugi protoni stepen Load/Store jedinice koji je odgovoran za pristup TLB-u koristi virtuelni broj stranice. Ako pretpostavimo da ne postoji TLB promaaj, TLB e generisati fiziki broj stranice (p bitova), koji se zatim povezuju sa g-bitova koji odgovaraju ofsetu stranice i generiu m-to bitnu fiziku adresu gde je m = p + g , pri emu je, u optem sluaju, m n . U toku treeg protonog stepena pristup keu podataka se vri pomou m-to bitne fizike adrese. Ako blok kea podataka sadri vei broj rei, tada se LS b bitova koristi kao ofset bloka radi selekcije referencirane rei iz selektovanog bloka. Selektovani blok se odredjuje na osnovu ostalih (m-n) bitova. Ako ke podataka skupno-asocijativni ke tada se ostalih (m-n) bitova deli na t-to bitni tag i i-to bitni indeks. Vrednost i se odredjuje na osnovu ukupnog obima kea i skupne asocijativnosti, tj. postoji i-skupova kod skupno-asocijativnog kea podataka. Kada nema ke promaaj, tada na kraju treeg stepena (ako usvojimo da pristup keu traje jedan ciklus) podatak bie dostupan na izlazu kea podataka (pod uslovom da se izvrava instrukcija Load).

119

Superskalarne tehnike
Virtuelni broj stranice (VPN) Virtuelna adresa (n = + g bitovi ) Tag
k

Index
k

Ofset stranienja (PO)

TLB
p

Fizika adresa (m = p + g bitovi)

Broj fizike stranice (PPN) Tag


t

PO Index
i

BO
b

BO: blok ofset

D- ke

Podatak

Slika 4.40 Interakcija izmedju TLB-a i kea podataka Organizacija prikazana na slici 4.40 ima nedostataka zbog toga to se TLB-u mora pristupiti pre pristupa keu podataka. Serijalizacija pristupa TLB-u i keu podataka unosi veliku latenciju koja odgovara zbiru dveju latencija. Ovo je razlog koji dovodi do toga da se na slici 4.30 prevodjenje adrese i pristup memoriji obavlja od strane dva razliita protona stepena. Reenje ovog problema sastoji se u korienju virtuelno indeksiranog (virtually indexed) kea podataka koji omoguava paralelni pristup TLB-u i keu podataka. Ova ema je prikazana na slici 4.41.
Virtuelni broj stranice (VPN) Tag
k

Virtuelni broj stranice (VPN) Ofset stranienja (PO) Tag Index Ofset stranienja (PO)

Index
k

TLB
p

D-ke
p

PPN
p

PPN
p

podaci

Hit/miss (pogodak/promaaj)

Slika 4.41 Virtuelno indeksirani ke podataka Direktni nain za implementaciju virtuelno indeksiranog kea podataka sastoji se u korienju ofset bitova stranice radi pristupa keu podataka. S obzirom da bitovi za ofset u okviru stranice ne treba 120

Superskalarne tehnike prevoditi, oni se mogu koristiti bez prevodjenja. To znai da se g bitova ofseta stranice mogu koristiti kao blok ofset (b-bitova) i indeksa (i-to bitna) polja kada se pristupa keu podataka. Radi pojednostavljenja, usvojiemo, da je ke podataka direktno-preslikani ke sa 2 i ulaza pri emu svaki ulaz, ili blok, sadri 2 b rei. Umesto memorisanja ostalih bitova virtuelne adrese, tj. broj virtuelne stranice, kao njegovo tag polje, ke za podatke uva prevedene fizike stranice u svom tag polju. Ovo se obavlja u trenutku kada se popunjava linija kea podataka. U istom trenutku kada se bitovi ofseta stranice koriste za pristup keu podataka, ostali bitovi virtuelne adrese, tj. broj virtuelne stranice, se koristi za pristup TLB-u. Ako usvojimo da su latencije pristupa TLB-u i keu podataka izjednaene, u trenutku kada broj fizike stranice TLB-a postane dostupan, tag polje (koje takodje sadri broj fizike stranice) kea podataka bie takodje dostupno. Dva p-to bitna broja koja odgovaraju fizikoj stranici se uporedjuju sa ciljem da se odredi da li postoji pogodak (uparuju se brojevi fizike stranice) u keu podataka ili ne postoji. Kod virtuelno indeksiranog kea podataka, prevodjenje adrese i pristup keu podataka se moe preklopiti (overlap) sa ciljem da se smanji ukupna latencija. 4.3.3. Uredjenje memorijskih pristupa Memorijska zavisnost po podacima postoji izmedju dve Load/Store instrukcije ako obe instrukcije referenciraju istu memorijsku lokaciju, tj. postoji alijaza, ili kolizija, dveju memorijskih adresa. Load instrukcija obavlja itanje memorijske lokacije, dok Store instrukcija obavlja upis u memorijsku lokaciju. Na slian nain registarske zavisnosti po poadacima, RAW ,WAR i WAW zavisnosti mogu takodje da postoje izmedju Load i Store instrukcija. Store (Load) instrukcija iza koje sledi Load/Store instrukcija podrazumeva obraanje istoj memorijskoj lokaciji, a to dovodi do RAW (WAR) memorijske zavisnosti po podacima. Dve operacije Store na istu memorijsku lokaciju dovee do pojave WAW zavisnosti. Sa ciljem da se ouva korektna semantika programa memorijske zavisnosti po podacima moraju biti korektno izvedene. Jedan od naina da se izbegnu sve memorijske zavisnosti po podacima je da se sve Load i Store instrukcije izvre u programskom redosledu. Ovakvo strogo uredjenje memorijskih instrukcija je dovoljeno, ali ne i neophodno da se izbegnu sve memorijske zavisnosti. Ono je konzervativno i uslovljava nepotrebna ogranienja koja smanjuju performanse programa. Koristiemo primer sa slike 4.42 da bi ukazali na ovaj aspekt. DAXPY je ime dela kda koji se koristi za mnoenje vektora koeficijentom, a zatim sabiranje rezultantnog vektora sa drugim vektorom. DAXPY ( izvedeno je od u duploj preciznosti pomnoi A sa X i saberi sa Y) predstavlja kernel kod LINPAC rutina koje se standardno koriste kod velikog broja numerikih programa. Uoimo da su sve iteracije ove petlje nezavisne po podacima i da se mogu izvravati paralelno. Ipak ako imamo u vidu ogranienje da se sve Load/Store ijstrukcije izvravaju u pravom redosledu, tada prva Load instrukcija druge iteracije nemoe da pone sve dok Store instrukcije prve iteracije ne zavri. Ovo ogranienje e u sutini serijalizovati izvrenje svih iteracija u petlji.

121

Superskalarne tehnike
Y(i)=A X(i) + Y(i) F0 R4 Loop: F2 F2 F4 F4 LD,0 (Rx) MULD,F0,F2 LD,0(Ry) ADDD,F2,F4 SD,F4 ;load X(i) ;A X(i) ;load Y(i) ;A X(i) + Y(i) ;store into Y(i) ;inc. index to X ;inc. index to Y ;compute bound ;check is done
SD ADDD MULTD LD

LD,a ADDI,Rx,#512

;last address
LD

0(Ry) Rx Ry R20

ADDI,Rx,#8 ADDI,Ry,#8 SUB,R4,Rx

BNZ,R20,Loop

Slika 4.42 DAXPY primer Ako dozvolimo da se Load/Store izvravaju van-redosleda (out-of-order) bez naruavanja memorijskih zavisnosti po podacima, mogue je ostvariti poboljanje performansi. Tako na primer ponovo analizirajmo primer DAXPY petlja. Graf na slici 4.42 prikazuje prave zavisnosti po podacima i ukljuuje kljune instrukcije tela petlje. Ove zavisnosti postoje izmedju instrukcija iste iteracije u petlji. Pri tome ne postoje zavisnosti po podacima izmedju veeg broja iteraciija u petlji. Branch instrukcija koja se nalatzi na kraju petlje je veoma prediktabilna, pa zbog toga pribavljanje iinstrukcije iz naredne iteracije se moe obaviti veoma brzo. Isti arhitekturni registri koji se specificiraju od strane instrukcija iz narednih iteracija mogu se dinamiki preimenovati od strane mehanizama za preimenovanje registara; pa stoga ne postoje registarske zavisnoti izmedju iteracija usled dinamikog ponovnog korienja istih arhitekturnih registara. Saglasno tome ako je Load/Store instrukcijama bilo dozvoljeno da se izvravaju van-redosledno, Load instrukcije iz potonje iteracije mogu da ponu pre izvrenja Store instrukcije iz prethodne iteracije. Preklapanjem izvrenja veeg broja iteracija u petlji rezultira poveanju performansi. Memorijski modeli uvode odredjenja ogranienja koja se odnose na van-redosledno izvrenje Load/Store instrukcije od strane procesora. Kao prvo, da bi olakali oporavak nakon izuzetaka, sekvencijalno stanje meorije mora biti ouvano. Drugim reima stanje memorije mora da evoluira u saglasnosti sa sekvencijalnim izvrenjem Load/Store instrukcija. Kao drugo, kod najveeg broja multiprocesorskih sistema usvaja se da postoji sekvencijalni konzistentni memorijski modul, a to zahteva da se pristup deljivoj memoriji od strane svakog procesora izvodi u saglasnosti sa programskim redosledom. Oba prethodno pomenuta razloga u sutini zahtevaju da se Store instrukcija izvravaju u programskom redosledu, ili u najmanju ruku da se memorija mora aurira kao da se memorisanja obavljaju u programskom redosledu. Ako je za memorisanje potrebno da se izvraavaju u programskom redosledu, WAW i WAR memorijske zavisnosti po podacima implicitno su zakoene i ne inicira se njihovo izvrenje. Zbog toga samo RAW memorijske zavisnosti moraju biti zaustavljene.

122

Superskalarne tehnike

4.3.4. Premoavanje i prosledjivanje kod instrukcije Load Van-redosledno izvrenje instrukcije Load instrukcija prestavlja primarno izvorite za postizanje boljih performansi. Kao to smo uoili kod DAXPY primera instrukcija Load se esto javljaju na poetku lanaca zavisnosti, tako da njihovo ranije izvrenje moe da podstakne ranije izvrenje drugih zavisnih instrukcija. Relativno u odnosu na memorijske zavisnosti po podacima, Load instrukcije se mogu posmatrati kao operacije koje obavljaju itanje memorijskih lokacija, a one takodje aktuelno obavljaju i operacije upis odredine registare. Ako punjenja predstavljaju instrukcije za definisanje stanja registara (DEF), iza njih obino neposredno slede druge zavisne instrukcije koje koriste registar (USE). Cilj je da se obezbedi da Load instrukcije ponu sa izvrenjem to je mogue ranije, po mogunosti da se nadju ispred drugih Store instrukcija koje im prethode, sve dok RAW memorijske zavisnosti po podacima nisu naruene i da se memorija aurira u saglasnosti sa sekvencijalnim konzistentnim memorijskim modelom.
Dinamika sekvenca instrukcija: :
Izvravanje Load pre dve Store

Dinamika sekvenca instrukcija: :

Store : Store : Load :

X Y Z

Store

: Store Y : Load Z :

Prosledjivanje podatka Store direktno Load instrukciji

Slika 4.43 Ranije izvravanje Load instrukcije: a) Load premoavanje; b) Load prosledjivanje Dve specifine tehnike za ranije van-redosledno izvrenje punjenja su load bypassing (punjenje sa premoavanjem) i load forwarding (punjenje sa prosledjivanjem).Kao to je prikazano na slici 4.43 a) punjenje sa premoavanjem obezbedjuje da se naredna Load izvri ranije u odnosu na prethodnu Store pod uslovom da adresa Load instrukcije nije u alijazi sa prethodnom Store, tj. ne postoje memorijske zavisnosti po podacima izmedju Store i Load . Sa druge strane, ako izmedju potonje Load i naredne Store postoji alijaza, tj. postoji RAW zavisnost izmedju Store i Load, load forwarding omoguava da Load primi podatak direktno iz Store bez da se saeka na pristup memoriji podataka.(vidi sliku 4.43b)). U oba prethodna sluaja postie se ranije izvrenje Load instrukcije. Pre nego to analiziramo injenice koje moramo sagledati sa ciljem da implementiramo load bypassing i load forwarding, prvo emo predstaviti organizaciju dela execution-jezgra koje je odgovorno za procesiranje Load/Store instrukcija. Ova organizacija, prikazana na slici 4.44, koristie se kao vodilja za dalju diskusiju koja se odnosi na load bypassing i load forwarding. Postoji samo jedna Store jedinica (organizovana kao dvo-protoni sistem) i jedna Load jedinica (organizovana kao tro-protoni sistem) pri emu obe dobijaju podatke od strane jedinistvene rezervacione stanice. Za sada pretpostaviemo da se Load i Store instrukcije iniciraju radi izvrenje iz ove deljive rezervacione stanice u programskom redosledu. Store jedinica se podrava od strane Store bafera. Load jedinica i Store bafer mogu da pristupaju keu podataka.

123

Superskalarne tehnike

Reservation station

Generisanje adrese Prevodjenje adrese

Store unit

Load unit

Generisanje adrese Prevodjenje adrese Pristup memoriji

(Finished) Store buffer (Completed) Store buffer

Podaci

Adrese

D-ke

Auriranje memorije
Slika 4.44 Mehanizmi za procesiranje Load/Store; posebne Load i Store jedinice sa redoslednim iniciranjem redosleda izvrenja instrukcija iz zajednike rezervacione stanice Za datu organizaciju sa slike 4.44, Store instrukcija, u toku procesiranja, se moe nai u jednom od nekoliko stanja. Kada se Store instrukcija dispeuje u rezervacionu stanicu, alocira joj se ulaz u bafer preuredjenja. Ona ostaje u rezervacionoj stanici sve dok svi njeni izvrni operandi ne postanu dostupni i zatim se inicira u protonu izvrnu jedinicu. Nakon to je memorijska adresa generisana i uspeno translirana (prevedena), smatra se da smo zavrili sa njenim izvrenjem i smeta se u deo Store bafera gde se smatra zavrenom (bafer preuredjenja se takodje aurira). Store bafer radi kao red ekanja, a ine ga sledee dve celine: finished i completed. Celina finished sadri one Store koje su zavrile sa izvrenjem ali nisu jo arhitekturno kompletirane. Celina completed bafera Store sadri one Store koje su arhitekturno kompletirane ali ekaju na auriranje mamorije. Identifikacija ove dve celine Store bafera se obavlja preko pokazivaa na Store bafer ili statusnog bita u ulazima Store bafera. Store u finished celinu Store bafera moe potencijalno biti spekulativna, a kada se detektuje pogrena spekulacija, ona treba da se isprazni iz Store bafera. Kada je finished Store kompletirana od strane bafera preuredjenja, ona se menja iz stanja finished u stanje completed. Ovo se izvodi auriranjem pokazivaa Store bafera ili promenom statusnog bita. Kada kompletirana Store konano napusti Store bafer i aurira memoriju, za nju smatramo da je izvuena (retired). Posmatrano sa perspektive memorijske Store, u sutini Store ne zavrava sve dok nije izvuena. Ako se javi izuzetak, Store u kompletiranoj celini Store bafera mora da se proputi (zanemari njen efekat) kako bi se na adekvatan nain aurirala memorija. Na ovaj nain izmedju dispeovanja i izvlaenja, za instrukciju Store kaemo da se moe nai u jednom od sledea tri stanja: issued (u Execution jedinici), finished (u finished celini Store bafera), ili completed (u completed celini Store bafera). Jedna od kljunih stavki kod implementacije load bypassing sastoji se u potrebi za proverom radi mogue alijaze sa prethodnom Store, tj. one Store koje su premoenje. Za Load smatramo da premoava prethodnu Store ako Load ita iz memorije pre nego to Store upie u memoriju. Stoga pre nego to je takvoj Load dozvoljeno da se izvri ili proita podatak iz memorije, neophodno je odrediti da li postoji alijaza sa svim prethodnim Store koje se nalaze u fazi procesiranja, tj. one ije je izvrenje 124

Superskalarne tehnike inicirano (issued), ali iji rezultati jo nisu izvueni (retired). Ako usvojimo da, iz Load/Store rezervacione stanice, postoji redosledno iniciranje izvrenja Load i Store instrukcija, tada sve Store treba da budu smetene u bafer-Store, ukljuujui kako finished tako i completed celine. Alijazom se proverava na sve mogue zavisnosti koje postoje izmedju Load i prethodne Store, pri emu se provera ostvaruje korienjem Store bafera. U svaki ulaz Store bafera ugradjuje se tag polje koje sadri memorijsku adresu. Nakon to je memorijska adresa Load instrukcije dostupna, ona se koristi da obavi asocijativno pretraivanje tag polja svih ulaza Store bafera. Ako dodje do uparivanja, tada za alijazu kaemo da postoji, a instrukciji Load nije dozvoljeno da se izvrava van-redosledno. U ostalim sluajevima, Load je nezavisna od prethodnih upisa u Store bafer i moe se unapred izravati. Asocijativno pretraivanje se obavlja u treem protonom stepenu Load jedinice konkuretnu sa pristupom keu podataka; vidi sliku 4.45. Ako se ne detektuje alijaza instrukciji Load je dozvoljeno da zavri, a odgovarajui preimenovani odredini registar se aurira sa podatkom koji se vraa iz kea podataka. Ako se alijaza detektuje podaci koji se vraaju iz kea podataka se anuliraju a Load se zadrava u rezervacionoj stanici radi ponovnog budueg iniciranja izvrenja. Najvea kompleksnost u implementaciji load bypassing-a ogleda se u Store baferu i u pridruenom mehanizmu za asocijativno pretraivanje. Da bi se smanjila kompleksnost, tag polje koje se koristi za asocijativno pretraivanje moe se redukovati tako da sadri samo podskup adresnih bitova. Koristei samo podskup adresnih bitova mogue je redukovati obim komparatora koji se koriste za asocijativno pretraivanje. Ipak, rezultat moe biti pesimistiki. Potencijalno alijaza moe biti indicirana od strane ne tako obimnog komparatora u sluaju kada se ne kompariraju svi adresni bitovi. Neke od load bypassing mogunosti se mogu izgubiti zbog egzistencije ovog kompromisa u implementaciji. U optem sluaju degradacije performansi su minimalne ako se korsiti dovoljan broj bitova. Tehnika za load forwarding moe da pobolja i dopuni tehniku load bypassing. Kada je instrukciji Load dozvoljeno da preskoi prethodne Store, a da pri tome izmedju Load i prethodne Store postoji alijaza, tada se realno moe ostvariti da Load koja direktno prosledjuje podatke koristi te podatke od Store sa kojom egzistira alijaza. U sutini, postoji memorijska RAW zavisnosti izmedju vodee Store i pratee Load . Isto asocijativno pretraivanje Store bafera je u tom sluaju potrebno. Kada se detektuje alijaza, umesto da se sauva Load tradi kasnijeg ponovnog iniciranja izvrenja, podatak sa ulaza koji ukazuje na alijazu, a pripada Store baferu, se prosledjuje preimenovanom odredinom registru instrukcije Load. Ova tehnika ne samo da omoguava ranije izvrenje Load instrukcije, nego i eliminie potrebu da Load pristupa keu podataka. Na ovaj nain se moe poveati propusnost magistrale kea podataka.

125

Superskalarne tehnike

Reservation station

Store unit
Tag uparivane

Load unit Adresa Podaci Ako nema uparivanje: auriraj odredini registar D-ke

(Finished) Store buffer (Completed) Store buffer

data

addr

Match/no match- (uparivanje/nema uparivanja)

Slika 4.45 Prikaz load bypassing(premoavanja)


Reservation station

Store unit
Tag uparivanje

Load unit Adresa Podaci

(Finished) Store buffer (Completed) Store buffer

data

addr
uparivanj e

Ako je uparen: Prosledi odredinom registru

D-ke

Match/no match (uparivanje/nema uparivanja)

Slika 4.46 Prikaz load forwarding (prosledjivanja) Da bi podrali load forwarding neophodno je usloniti Store bafer, vidi sliku 4.46. Kao prvo, svi adresni bitovi se moraju koristiti da bi se obavilo asocijativno pretraivanje. Kada se koristi 126

Superskalarne tehnike podskup adresnih bitova sa cilje da se podri load bypassing, jedina negativna konsekvenca je gubitak mogunosti. Kod load forwarding detekcija alijaze mora da se obavi pre nego to se obavi forwarding podataka, inae to e uzrokovati semantiku nekorektnost. Kao drugo, moe da postoji vei broj prethodnih Store u Store baferu koji su u alijazi sa Load. Kada u toku asocijativnog pretraivanja dodje do veeg broja uparivanja, mora da postoji dodatna logika koja e odrediti koja od Store ima najskoriju alijazu. Ovo uzahteva ugradnju dodatne prioritetne logike kodiranja koja identifikuje najdavniju Store od koje je Load zavisna pre nego to se obavi forwarding. Kao tree, poterbno da se u Store bafer ugradi dodatni port za itanje. Pre ugradnje load forwarding, store bafer je imao samo jedan port za upis preko koga je bio spregnut sa Store jedinicom i jedan port za itanje preko koga je bio spregnut sa keom za podatke. Novi port za itanje koji se sada ugradjuje spree se sa Load jedinicom; a sudari zbog pristupa portu se mogu javiti izmedju load forwarding i auriranja kea podataka. Znaajna performansa poboljanja se mogu sotvariti pomou load bypassing i load forwarding. Po Mike Johnson-u obino load bypassing rezultira poveanju performansi od 11 % - 19 %, a load forwarding dodatnom poboljanju od 1 % - 4 %. U toku dosadanje analize usvojili smo da Load i Store dele istu rezervacionu stanicu sa instrukcijama ije se izvrenje inicira, u programskom redosledu, iz rezervacione stanice ka Store i Load jedinicama. To znai da pretpostavka o redoslednom iniciranju izvrenja instrukcija polazi od toga da e sve prethodne Store i Load, u trenutku kada se Load izvrava, nalaziti u store baferu. Na ovaj nain se pojednostavljaje provera memorijske zavisnosti, pa kaemo da je neophodno obaviti samo asocijativno pretraivanje store bafera. Ipak pretpostavka o redoslednom iniciranju izvrenja instrukcija unosi nepotrebna ogranienja kod van-redoslednog izvrenja Load. Instrukcija Load moe da bude spremna za iniciranje izvrenja, ali pri tome, prethodna Store moe da zadrava iniciranje izvrenja instrukcije Load i pored toga to izmedju ove dve memorijske instrukcije ne postoji alijaza. To znai da dozvoljavanje van-redoslednog iniciranja izvrenja Load i Store instrukcija iz Load/Store rezervacione stanice moe da obezbedi vei stepen van-redoslednog izvrenja prethodnih Load instrukcija. Ovo je posebno povojno u sluajevima kada se Load nalaze na poetku kritinih lanaca zavisnosti tako da njihovo ranije izvrenje moe da otkloni kritina performansna uska grla. Ako je van-redosledno iniciranje izvrenja instruckija dozvoljeno iz Load/Store rezervacione stanice, tada je potrebno reiti jedan dodatni problem. Ako je Load instruikciji dozvoljeno iniciranje izvrenja van-redosleda, tada je mogue za neke od Store instrukcija koje joj prethode da se nalaze jo u rezervacionoj stanici ili da budu u izvrnim protonim stepenima, a ne u store baferu. Stoga, jednostavno obavljanje asocijativnog pretraivanja ulaza store bafera nije adekvatno kad se proverava potencijalna alijaza izmedju Load i sve prethodne Store instrukcija. to je jo gore, memorijske adrese prethodnih Store koje se i dalje nalaze u rezervacionoj stanici ili u izvrnim protonim stepenima mogu biti jo nedostupni. Jedan od prstupa je da se obezbedi instrukciji Load da nastavi, usvajajui da ne postoji alijaza sa rethodnim Store koje se jo ne nalaze u store baferu, a zatim da se kasnije obavi njihova validacija. Kod ovakvog pritstupa, instrukciji Load je dozvoljeno da se inicira radi izvrenja van.redosleda i da se izvrava spekulativno. Dakle, ako izmedju nje i bilo koje Strore u store baferu ne postoji alijaza , inistrukciji Load je dozvoljeno da zavri sa izvrenjem. Ipak ovaj Load mora da se sauva u novi bafer koji se naziva finished load bafer (vidi sliku 4.47). Finished load baferom se upravlja na slian nain kao i finished store baferom. Load je jedino rezidentan u finished load bafer nakon to ona zavri sa izvrenjem, ali pre nego to se kompletira. Uvek kada se Store instrukcija kompletira, ona mora da obavi proveru radi alijaze u odnosu na inatrukcije Load koje senalaze u finished load baferu. Ako se ne detektuje alijaza, instrukciji Store je dozvoljeno kompletiranje. Ako se detektuje alijaza, tada to znai da postoji pratea instrukcija Load koja je zavisna od Store, i da je Load ve zavrila sa izvrenjem. To znai da spekulativno izvr enje te instruckije Load mora da se invalidoira i koriguje ponovnim iniciranjem izvrenja instruckije, ili ak ponovnim pribavljanjem, te instrukcije Load kao i sve naredne instrukcije. Ovo moe da iziskuje uznaajnu hardversku kompleksnost i visoku cenu koja se plaa zbog degradacije performansi. 127

Superskalarne tehnike

Reservation station

Store unit Tag uparivanje addr


Tag uparivanje Kod store kompletiranja

Load unit Adresa Podaci Kod finish-a: auriraj preimenovani registar addr data D-ke

(Finished) Store buffer (Completed) Store buffer

data

Finished load buffer

Match/no match (uparivanje/nema uparivanja)

Kod completion: auriraj arhitekturni registar Match/no match Ako postoji uparivanje: izbaci sve alijaz load i sve instrukcije koje slede

Slika 4.47 Potpuno van-redosledno iniciranje izvrenja kao i izvrenje Load i Store instrukcija Agresivno ranije iniciranje izvrenja Load instrukcija moe da dovede do znaajnog poveanja performansi. Mogunost da se spekulativno inicira izvrenje Load ispred Store moe da dovede do ranijeg izvrenja veeg brohja uzavisnih instrukcija od kojih neke mogu biti razliite od Load. Ovo je posebno vano za sluaj kada se javljaju ke promaaji. Ranije iniicranje izvrenja instrukcija Load moe da dvovede do ranije pojave ke promaaja to dovodi do maskiranja nekih ili svih ciklusa koji se javljaju zbog ke promaaja. Negativna strana spekulativnog iniciranja izvrenja instrukcija Load predstavlja potencijalno reijsko vreme koje se odnosi na oporavljanje od pogrene spekulacije. Jedan od naina da se smanji ovo reijsko vreme je da se ostvari alijaza ili zavisna predikcija. Kod tipinih programa odnos zavisnosti izmedju Load i njene prethodne Store instrukcije je veoma predvidljiv. Prediktor memorijske zavisnosti se moe implementirati sa ciljem da predvidi da li e Load imati alijazu sa prethodnim Store. Ovakav prediktor se moe koristiti da bi odredio kada treba, ili ne treba spekulativno inicirati izvrenje Load instrukcija. Da bi dobili stvarno performanso poboljanje sukcesivna spekulativna iniciranja Load instrukcija moraju se obavljati veoma razumno. 4.3.5. Druge tehnike za memorijski protok Pored laod bypassing i load forwarding, postoje i druge tehnike za memorijski protok. Sve ove tehnike imaju za cilj da poveaju memorijsku propusnost i/ili redukuju memorijsku latentnost. Kako superskalarni procesori postaju obimniji, vea memorijska propusnost koja je u stanju da podri vei broj Load/Store instrukcija po ciklusu je takodje potrebna. Zbog dispariteta zbog brzine procesora sa jedne strane i brzine memorije sa druge strane poveava se latentnost pruistupa memoriji, tako da posebno kada se javi ke promaaj dolazi do pojave uskog grla u performansama maine. Jedan od naina da se povea memorijska propusnost je da se koristi vei broj Load/Store jedinica u execution jezrgu, iji je rad podran od strane multi-portnog kea podataka. U sekciji 4.3.4 mi smo usvojili da postoji jedna store jedinica i jedna load jedinica iji je rad podran od strane jednoportnog kea podataka. Load jedinica ima priritet kod pristupa keu podataka. Store instrukcije se smetaju u redu ekanja store bafera i izvlae se iz njega ka keu podataka onog trenutka kada 128

Superskalarne tehnike memorijska magistrala nije zauzeta a store bafer stekne pravo upravljanja nad keom za podatke. Ukupna propusnost memorije podataka ograniena je na jednu Load/Store instrukciju po ciklusu. Ovo pretstavlja ozbiljno ogranienje posebno kada dodje do pojave paketnih (burst) Load instrukcija. Jedan od naina da se premosti ovo usko grlo je da se ugrade dve Load jedinice,kako je to prikazano na slici 4.48, kao i dvo-portni ke podataka. Dvo-portni ke podataka treba da je u stanju da podri dva simultana prsitupa keu u svakom ciklusu. Na ovaj nain udvostruava se potencijal memorijske propusnosti. Ipak to se ostvaruje po ceni poveanje kompleksnosti hardvera, jer dvo-portni ke zahteva udvostruavanje hardvera kea. Jedan od naina da se premosti ova poveana cena hardvera sastoji se u implementaciji interleaved (preklapajuih) banki kea podataka. Kada se ke podataka implementira pomou veeg broja memorijskih banaka, dva simultana pristupa razliitim bankama mogu biti podrane u jednom ciklusu. Ako dva pristupa treba da pritupaju istoj banki javlja se konflikt zbog korienja banaka, tako da se oba pristupa moraju serijalizovati. Sa praktine take gledita, ke koga ine 8 banaka moe da ouva uestanost konflikta kod pristupanja bankama na prihvatljivi nizak nivo.
Reservation station

Store unit

Load unit Adresa ke promaaj

Load unit Adresa ke promaaj Podatak Missed load queue D-ke

(Finished) Store buffer (Completed) Store buffer

Podatak

Glavna memorija

Slika 4.48 Dvo-portni ne blokirajui ke podataka


Napomena:: Missed Load queue- red ekanja promaenih Load instrukcija

Najstandardniji nain da se smanji memorijska latencija ostvaruje se korienjem kea. Ke memorije se danas masovno koriste. Kako se razlika u brzini pristupa izmedju procesora i memoriji poveava, neophodno je koristiti vei broj nivoa kea memorije. Kod najveeg broja visokoperformansnih superskalarni procesora inkorporirana su najmanje dva nivoa kea. Prvi nivo kea (L1) ima vreme pristupa od jednog ili nekoliko ciklusa. Obino postoje popsebni L1 keevi za uvanje instrukcija i podataka. Drugi nivo kea (L2) obino podrava memorisanje kako instrukcije tako i podataka, a moe biti ugradjen u ipu (on-chip cache) ili van ipa (off-chip cache). Ovoj memoriji se moe pristupati serijski, u sluaju da postoji promaaj na nivou L1, ili paralelno kada se istovremeno pristupa i keu L1. Kod nekih reenja koristi se i nivo tri (L3). Predvidjana su da e u bliskoj budunosti L3 ke postati standardno reenje. Pored korienja kea i hijerarhijske organizacije keeva postoje i jo dve druge tehnike za smanjenje efektivne memorijske latentnosti koje se nazivaju nonblocking cache i prefetching cache. Nonblocking ke moe smanjiti efektivnu memorijsku latenciju smanjenjem broja ke promaaja. Obino, kada se u toku Load instrukcije javi ker promaaj, on e zaustaviti rad Load 129

Superskalarne tehnike protone jedinice a shodno tome i dalje iniciranje izvrenja Load instrukcija sve dok se ke promaaj ne opslui. Ovakav oblik zastoja je sa aspekta preklapanja konzervativan i brani iniciranje izvrenja narednih i nezavisnih Load instrukcija za koje se moe javiti pogodak u keu podataka. Ne blokirajui ke podataka premoava ovaj nedostatak postavljanjem na stranu Load instrukcije koja je bila uzrok ke promaaja u specijalan red ekanja Load instrukcija zbog promaaja (missed load queue) i obezbedjujui iniciranje izvrenja narednim Load instrukcijama (vidi sliku 4.48). Load instrukcija zbog koje se javio promaaj smeta se u missed load queue sve dok se ke promaaj ne opslui. Kada se blok zbog koga se javio promaaj pribavi iz glavne memorije, Load instrukcija zbog koje se javio promaaj izlazi iz missed load queue i zavrava sa izvrenjem. U sutini ciklusi koji se javljaju usled ke promaaja se preklapaju, i maskiraju, procesiranjem narednih nezavisnih instrukcija. Naravno, ako naredne instrukcioje zavise od instrukcije Load zbog kooje se javio promaaj, iniciranje izvrenja te instrukcije se zaustavlja. Broj ciklusa u toku kojih dolazi do zastoja se moe maskirati o zavisi od broja nezavisnih instrukcija koje slede nakon instrukcije Load u toku koje se javio promaaj. Missed load queue sadri vei broj ulaza koji omoguavaju konkuretno opsluivanje veeg broja Load instrukcija u toku kojih se javio promaaj. Potencijalno ciklusi zastoja u radu kea zbog veeg broja Load instrukcija u toku kojih se javio promaaj mogu se preklapati to rezultira manjim brojem ciklusa zastoja. Broj iniciranja izvrenja mora se takodje razmatrati kada se implementiraju neblokirajui keevi. Load promaaji mogu da se jave u paketima (burst). mogunost da se podrava vei broj promaaja i obavi preklapanje njihovog opsluivanja je vana. Interfejs prema glavnoj memoriji, ili nii nivo kea, mora biti u stanju da podri preklapanje ili protono izvrenje veeg broja pristupa. Popunjenost kea trigerovan od strane instrukcije Load u toku koje se javio promaaj moe da dodje u konflikt sa store baferom usled porta za upis u taj ke. Postoji jedna komplikacija koja moe da iskrsne kod ne blokirajuih keeva. Ako je Load instrukcija zbog koje se javio promaaj na spekulativnom putu, tj. prediktovanom putu tada postoji verovatnoa da e spekulacija, tj. predikcija grananja, biti nekorektna. Ako je ova Load na pogreno prediktovanom putu pitanje je kada ke promaaj treba da se opslui. Kod maina koje koriste agresivnu predikciju grananja broj instrukcija Load na pogreno prediktovanom putu moe biti znaajan, tako da njihovi promaaji spekulativno mogu da zahtevaju znaajnu memorijsku propusnost. studije pokazuju da ne blokirajui ke moe da smanji cenu zbog Load promaaja na oko 15 %. Drugi nain da se smanji ili maskira cena koja se plaa zbog ke promaaja sastoji se u korienju prefetching kea. Prefetching ke sudeluje u budue ke promaaje i ranije trigeruje ke promaaje tako da dolazi do preklapanja promaaja sa procesiranjem instrukcija koje prethode ke promaaju. Na slici 4.49 prikazan je prefetching ke podataka. Za implementaciju prefetching kea potrebne su dve strukture: memory references predictione table-MRPT (memorijska tabela za predikciju obraanja) i prefetching queue-PQ (red ekanja unapred pribavljenih instrukcija). MRPT uva insformaciju o prethodno izvrenim instrukcijama Load u tri razliita polja. Prvo polje sadri adresu instrukcije Load i koristi se kao tag marker za selekciju ulaza u tabelu. Drugo polje sadri adresu prethodnog podatka instrukcije Load, dok tree sadri vrednost koja ukazuje na razliku izmedju prethodne dve adrese podataka koje se koriste od strane te Load. MRPT-u se pristupa pomou asocijativnog pretraivanja koristei fetch adresu generisanu od strane prediktora grananja i prvog polja tabele. Kada postoji tag uparivanje, koje ukazuje na pogodak kod MRPT-a, prethodna vrednost se dodaje vrednosti sa cilem da se generie prediktovana memorijska adresa. Prediktovana adresa se zatim puni u PQ-u. Ulazi u PQ-u se izvlae radi spekulativnog pristupa keu podataka i ako se javi ke promaaj, tada se pristupa glavnoj memoriji ili narednom nivou kea. Prtistup keu podataka je u sutini ke operacija, tj. pristup keu se ostvaruje po redosledu kako bi se trigerovao potencijalni ke promaaj , a ne sa ciljem da se ostvari izvlaenje podataka iz kea.

130

Superskalarne tehnike
Predikcija grananja Ke instrukcija

Decode buffer

Decode

Predikcija kod obraanja memoriji


Dispatch buffer

Dispatch

Reservation station

Branch

Integer

Integer

Foating point

Store

Load

Prefetc h queue

Completion buffer

Store buffer

Ke podataka

Complete

Glavna memorija

Slika 4.49 Prefetching ke podataka


Napomena:: Prefetch queue- red ekanja tipa prefetch (pre-pribavljanja instrukcija)

Cilj prefetching kea ogleda se u njegovom pokuaju da uestvuje u nailazee ke promaaje i da ranije trigeruje ove promaaje tako da se ublai cena koja se plaa zbog ke promaaja preklapanjem ponovnih punjenja kea sa procesiranjem instrukcije koje prethode instrukciji Load zbog koje se javio promaaj. Kada se izvri Load zbog koje se javio promaaj, podatak bie rezidentan u keu, pa stoga e doi do generisanja ke promaaja, pa zbog toga cena koja e postojati zbog ke promaaja bie prihvatljiva. Aktuelna efikasnost prefetching zavisi od veeg broja faktora. Prefetching razmak, tj. koliko unapred se prefetching trigeruje mora biti dovoljno veliki da bi u potpunosti maskirao cenu koja se plaa zbog promaaja. Ovo je razlog da se pribavljanje adrese prediktovane instrukcije koristi za pristup MRPT-u, sa nadom da e podatak koji se pribavlja biti dovoljno ispred instrukcije Load. Na alost ovo ini da prefetching efikasnost bude podlona efikasnosti predikcije grananja. ta vie postoji opasnost od zagadjivanja kea podataka sa unapred pribavljenjim instrukcijama koje se nalaze na pogreno prediktovanom putu. Statusni ili bitovi poverljivosti se mogu dodati svakom ulazu MRPT-a kako bi modulisale agresivnost prefetching-a. Drugi problem koji se javlja kada se prefetching obavlja mnogo ranije sastoji se u iseljenju korisnog bloka iz kea i u izbegavanju nepotrebnog promaaja. Dodatni faktor predstavlja korienje aktuelnog algoritma za predikciju obraanja. Predikcija Load 131

Superskalarne tehnike adrese zasnovana na napredovanje je veoma efikasno za Load instrukcije koje napreduju jedna za drugom kroz polje. Za ostale Load koje prolaze kroz strukture podataka tipa lanane liste predikcija nee raditi tako dobro. Prefetching kod ovakvih obraanja memoriji zahteva znatno sofisticiranije algoritme za predikciju. Da bi se poboljao memorijski protok podataka, instrukcije Load se moraju izvriti to je mogue pre. Store instrukcije su manje vane jer na osnovu eksperimentalnih podataka se dolo do zakljuka da se redje javljaju u odnosu na Load instrukcije i da se one ne nalaze na kritinom putu sa aspekta performansi. Da bi ubrzali izvrenje instrukcije Load mi moramo smanjiti latenciju procesiranja Load instrukcija. Ukupna latencija kod procesiranja Load instrukcija sadri sledee etiri komponente: 1. protona front-end latencija za fetching, decoding, i dispatching Load instrukcije, 2. latencija rezervacione stanice zbog ekanja razreavanja registarske zavisnosti po podacima, 3. latencija execution protonog sistema kod generisanja i transliranja adrese, i 4. latencija kod pristupa keu radi izvlaenja podataka iz memorije. Oba tipa kea, nonblocking i prefetching imaju uticaj samo na etvrtu komponentu, koja je kljuna komponenta zbog veoma spore memorije. Da bi radili sa veom taktnom frekvencijom, superskalarni protoni procesori postaju sve dublji i dublji. Saglasno tome latencije, u zavisnosti od broja mainskih ciklusa, prvih triju komponenti takodje postaju znaajne. Vei broj spekulativnih tehnika je predloen sa ciljem da se smanje ove latencije, tu spadaju predikcije adrese Load, predikcija Load vrednosti, i predikcija memorijske zavisnosti. Od skoro predloen je vei broj tehnika za predikciju Load adrese (load adrress prediction) koje imaju za cilj da razree latencije koje se odnose na prve tri komponente. Da bi izali na kraj sa latencijom koja prati prvu komponentu predlae se korienje load prediction table koja je slina MRPT-u. Ova tabela se indeksira sa prediktovanom pribaljenom adresom instrukcije, a pogodak u ovoj tabeli oznaava prisustvo instrukcije Load u dolazeoj fetch grupi. Stoga predikcija prisustva Load instrukcije u dolazeoj fetch grupi se obavlja u stepenu fetch bez da se zahtevaju usluge stepena za dekodiranje i dispeovanje. Svaki ulaz u ovu tabelu sadri prediktovanu efektivnu adresu koja je izvuena iz stepena Fetch, ime se eliminie potreba za ekanje u rezervacionoj stanici na dostupnost vrednosti baznog registra i stepena za generisanje adresa u execution delu protonog sistema. Saglasno tome, pristup keu podatka moe poeti u narednom ciklusu, a potencijalni podatak se moe izvlaiti iz kea na kraju stepena Decode. Ovaj oblik Load adresne predikcije moe da efikasno da smanji latencije prvih triju komponenti na dva ciklusa, tj. Fetch i Decode stepeni, pod uslovom da je predikcija adrese korektna i da se javio pogodak u toku obraanja keu podataka. I pored toga to hardverske strukture za podrku predikcije Load adresa imaju veoma sline strukture onima koje se koriste za prefetching instrukcija iz memorije, izmedju ova dva mehanizna postoje znaajne razlike. Dok sa jedne strane predikcija Load adrese u sutini spekulativno izvrava Load instrukciju ranije, sa druge strane prefetching instrukcije iz memorije pokuava da pribavi unapred neophodne podatke u ke bez da se izvri Load instrukcija. Kod predikcije Load adrese, instrukcije koje zavise od Load se mogu izvriti ranije poto su njihovi zavisni podaci ranije i dostupni. Imajui u vidu da je predikcija Load adrese spekulativna tehnika, ona se mora validirati, pogrena predikcija detektovati, i nakon toga oporavljanje obavljati. Validacija se obavlja na taj nain to se omoguava da se stvarna Loadinstrukcija pribavi iz intrukcionog kea i izvri na normalan nain. Rezultat spekulativne verzije se komparira sa onim koji je karakteristian za normalnu verziju. Ako dodje do slagana rezultata, tada spekulativni rezultat postaje ne spekulativni i sve zavisne instrukcije koje su psekulativno izvrene deklariu se kao ne spekulativne. Ako dodje do neslaganja rezultata, tada se koristi ne spekulativni rezultat, a sve zavisne instrukcije se moraju ponovo izvriti. Ako je mehanizam za predikciju Loadi adresa zadovoljavajue taan tada se pogrene predikcije retko javljaju, cena koja mora da se plati zbog loe predikcije je mala a poveanje performansi znaajno. Neto agresivniji pristup u odnosu na predikciju Load adrese predstavlja predikcija Load vrednosti. Nasuprot predikciji Load adrese koja pokuava da predvidi efektivnu adresu Load 132

Superskalarne tehnike instrukcije predikcija Load vrednosti pokuava da predvidi vrednost koja se izvlai iz memorije. Ovo se ostvaruje proirenjem Load predikcione tabele tako da ona sada sadri ne samo prediktovanu adresu nego i prediktovanu vrednost odredinog registra. Eksperimentalni rezultati su pokazali da je kod velikog broja Load instrukcija odredina vrednost veoma predvidljiva. Na primer, veliki broj Load instrukcija puni istu vrednost kao zadnjeg puta. Zbog toga memorisanje zadnje vrednosti koja se puni od strane statike Load instrukcije u load prediction table ukazuje da se ova vrednost moe koristiti kao prediktovana vrednost kada se Load instrukcija ponovo izvrava. Kao rezultat, load prediction table-i se moe pristupati u toku stepena Fetch, pa na kraju tog ciklusa, aktuelna odredina vrednost prediktovane Load instrukcije moe postati dostupna za korienje u narednom ciklusu za potrebe zavisne instrukcije. Na ovaj nain znaajno se smanjuje potrebna latentnost za procesiranje Load instrukcije pod uslovom da je prediktovana Load vrednost korektna. I sada ponovo, neophodna je validacija, a za sluaj pogrene predikcije mora se platiti odredjenja cena. Pored tehnike tipa predikcije Load adrese i tehnike predikcija Load vrednosti, veoma esto se koristi i spekulativna tehnika nazvana predikcija memorijske zavisnosti (memory dependence prediction). Napomenimo, na osnovu izlaganja u sekciji 4.3.4, da bi obavili load bypassing i load forwarding potrebno je da se proveri memorijska zavisnost. Kod load bypassing mora se odrediti da Load nije u alijazi sa bilo kojom od Store koje su bypassed (premoene). Kod load forwarding najskorija alijaza zbog Store instrukcije mora biti identifikovana. Provera memorijske zavisnosti zbog toga moe biti veoma kompleksna pogotovu ako vei broj Load/Store instrukcija je ukljuen u proveru i ako potencijalno zahteva ugradnju jednog celog protonog stepena. Poeljno je svakako eliminisati ovu latenciju. Eksperimenti pokazuju da su memorijske zavisnosti veoma predvidljive. Mogue je pratiti memorijske zavisnosti koje postoje kada se Load/Store instrukcije izvravaju i koristiti ovu informaciju da bi se obavila predikcija memorije pod uslovom da se isti programski redosled Load/Store instrukcija ponavlja. Predikcija ovakvih memorijskih zavisnosti moe da olaka ranije izvrenje load bypassing i load forwarding. Kao i kod spekulativnih tehnika, neophodno je ugraditi mehanizam za validaciju kao i mehanizam za oporavljanje od pogrene predikcije.

133

You might also like