Sunteți pe pagina 1din 336

Lucian N.

VINAN - Organizarea si
proiectarea microarhitecturilor de calcul
(pentru uzul studenilor), Universitatea L.
Blaga din Sibiu, 2010,
http://webspace.ulbsibiu.ro/lucian.vintan/
1. O INTRODUCERE N FILOSOFIA
MICROSISTEMELOR DE CALCUL

1.1. SCHEMA BLOC A UNUI MICROSISTEM. ROLUL


BLOCURILOR COMPONENTE, FUNCIONARE DE
ANSAMBLU.
Microprocesoarele i, mai general, microarhitecturile de prelucrare a
informaiei (procesoarele, controlere sau chiar calculatoare sau
multiprocesoare integrate pe un cip) au declanat o adevrat revoluie n
industria calculatoarelor att prin performanele deosebite ct i prin
costurile tot mai diminuate, la aceeai putere de calcul. n multe aplicaii, un
microprocesor de vrf al zilelor noastre (2002) depete performanele unui
supercalculator de acum 10 ani, la un pre de cteva zeci sau chiar sute de
ori mai mic. n ultimii 10 ani performana relativ a microprocesoarelor a
crescut cu cca. 60% pe an. Cercetorii susin c cca. 65% din aceast cretere
se datoreaz mbuntirilor arhitecturale i doar cca. 35% celor de natur
tehnologic.
Azi, la peste 20 de ani de la inventarea calculatorului personal (AppleMacIntosh), din punct de vedere al pieei, apar trei tipuri distincte de
calculatoare.
Calculatoarele personale (desktop-uri) sunt cele mai populare i sunt
destinate utilizatorilor celor mai obinuii, de toate categoriile
profesionale. Cost de la cteva sute de $ la cca. 10.000 $ n configuraii
hard-soft mai sofisticate, de tip staii de lucru (workstations). Piaa de
PC-uri (Personal Computers) impune gsirea unor compromisuri

O introducere n filosofia microsistemelor de calcul

optimale performan cost. Se mai caracterizeaz printr-o performan


deosebit a graficii i capabilitilor de conectare la Internet. La nivelul
anului 2000 s-au produs cca. 150 milioane de desktop-uri.
Serverele sunt destinate s ofere servicii tot mai sofisticate de reea,
inclusiv ca noduri de Internet, n locul mainframe-urilor de acum un
deceniu i mai bine. Caracteristicile lor cele mai importante se
focalizeaz pe fiabilitate, disponibilitate, scalabilitate i vitez de
procesare. Aceste servere cost actualmente ntre 10.000$ i 10.000.000$
(supercalculatoare) i absorb cca. 4 milioane de microprocesoare pe an
(2000).
Sistemele dedicate (Embedded Systems) au dezvoltarea cea mai
dinamic, estimrile artnd c la nivelul anului 2000 s-au produs cca.
300 milioane de astfel de sisteme pe an. Ele acoper aplicaiile cele mai
frecvente(aparate foto i camere video, comand aparate electrocasnice,
telefoane mobile, imprimante, comenzi auto, jocuri electronice, switchuri pentru reele etc.) i au costuri cuprinse ntre 10$ i 100.00$. Multe
dintre aceste sisteme au softurile scrise de productor avnd un grad de
programabilitate relativ redus. Performana se focalizeaz pe ndeplinirea
cerinelor de timp real ale aplicaiei. Sunt caracterizate n principal de
consumuri reduse de putere (deseori sunt alimentate prin baterii i
acumulatori) i memorii de capaciti relativ reduse. Peste ani, aceste
sisteme vor fi integrate practic n toate dispozitivele folsite de om i
interconectate prin reeaua global de tip Internet, conducnd la
conceptul de calculator omniprezent (ubiquitous computing). Astfel,
calculatorul miniaturizat va migra de la explicitul remarcabil de azi la
implicitul banal de mine.
O caracterizare global a actualelor i viitoarelor microarhitecturi de
procesare a informaiei necesit nelegerea tendinelor tehnologice i
respectiv a celor arhitecturale. n ultima perioad de timp, prin arhitectura
unui microprocesor se nelege nu numai setul de instruciuni i modurile de
adresare (ISA Instruction Set Arhitecture) ci i structura organizatoric a
procesorului i respectiv implementarea hardware a acestuia, toate aflate
intr-o ierarhizare strict.
ntre cele mai importante tendine tehnologice amintim:
n cazul microprocesoarelor, gradul de integrare al tranzistorilor pe cip
crete cu cca. 55% pe an. Tehnologia de integrare a microprocesoarelor a
evoluat de la 10 microni (1971) la 0,18 microni (2001). Frecvena
ceasului crete si ea cu cca. 50% pe an.

O introducere n filosofia microsistemelor de calcul

n cazul memoriilor DRAM, densitatea de integrare crete cu 40-60 % pe


an, n timp ce timpul de acces aferent scade cu 33% pe decad
(descurajant)
Densitatea informaiei scrise pe hard-disc-uri crete cu cca. 100% pe an,
n timp ce timpul de acces aferent scade cu cca. 33% pe decad (iari
descurajant)
Tehnologia i performanele reelelor se mbuntesc semnificativ
(Ethernet la 1 Gb, switch-uri ultrarapide, cablare pe fibr optic etc.)
n paralel cu tendinele mai sus menionate, costurile scad simitor n
timp (la aceeai putere de calcul ori capacitate de memorare).
ntre cele mai importante tendine arhitecturale, unele analizate n
continuarea acestor note de curs, amintim succint:
Exploatarea paralelismului la nivelul instruciunilor i firelor de execuie,
att prin tehnici statice (soft), ct i dinamice (hard) sau chiar hibride
(cazul arhitecturii IA-64, procesorul Intel Ithanium)
Structuri tot mai performante de ierarhizare a sistemului de memorie,
prin utilizarea unor arhitecturi evoluate de memorie tip cache
Reducerea latenei cii critice de program, inclusiv prin tehnici de
reutilizare dinamic a instruciunilor i predicie a valorilor
instruciunilor
Utilizarea multiprocesoarelor (shared memory), n special n cadrul
arhitecturilor serverelor i staiilor grafice. De asemenea se constat o
dezvoltare a sistemelor distribuite de procesare a informaiei (message
passing)

O introducere n filosofia microsistemelor de calcul

Figura 1.1. Schema bloc a unui microsistem (Microprocesor, amplificatoare


de magistrale, magistrale de adrese, date comenzi i stri,
module memorie ROM i RAM, porturi I/O lente, porturi I/O
rapide interfee DMA, program incarcator - POST, programe
BIOS)

Microprocesorul este elementul central al structurii, responsabil cu


aducerea din memorie, decodificarea i execuia instruciunilor main,
codificate binar. n conformitate cu aceste instruciuni, microprocesorul
genereaz secveniat toate semnalele (adrese, date, comenzi) necesare
memoriilor i interfeelor pe care le gestioneaz. Conine regitri interni,
uniti de execuie, o unitate de comand cablat sau microprogramat, busuri interne de interconectare etc. n general este integrat pe un singur circuit.
n sfera comercial, primul microprocesor, pe doar 4 bii, s-a realizat n anul
1971 la compania Intel i a fost proiectat de ctre inginerul Tedd Hoff. S-a
numit Intel 4004. (n domeniul militar existau pare-se mai demult asemenea
sisteme integrate complexe;, spre ex. n comanda avioanelor militare
americane F14A a existat un microsistem pe 20 de bii, cu procesare
pipeline a instruciunilor v. http://www.microcomputerhistory.com/).
Bus-ul de adrese este unidirecional de tip tree state (TS). Prin
intermediul acestui bus microprocesorul pune adresa de acces la memorie
sau la porturile I/O (Input/Output). Lumea extern a microprocesorului este

O introducere n filosofia microsistemelor de calcul

constituit exclusiv din memorie i interfeele de intrare ieire. Acestea


sunt resursele care pot fi accesate (scrise respectiv citite) de ctre
microprocesor. Aadar, acesta nu vede n mod direct perifericele ci doar
prin intermediul interfeelor de I/O.
Bus-ul de date este de tip bidirecional TS. Prin intermediul acestui
bus microprocesorul aduce din memorie instruciunea, respectiv citete data
(operandul) din memorie sau dintr-un port de intrare (arhitectura Princeton
de memorie).
La scriere microprocesorul plaseaz pe bus-ul de date rezultatul pe
care dorete s-l scrie n memorie sau ntr-un port de ieire. La citire,
rezultatul este preluat prin intermediul acestui bus din memorie sau dintr-un
port de intrare. n ambele cazuri, microprocesorul activeaz adresa
respectiv pe bus-ul de adrese mpreun cu semnalele de comand aferente
(Read, Write, Memorie, Interfa etc.) pe bus-ul de comenzi. Pe bus-ul de
stri, dispozitivele slave (memorii, interfee) comunic informaii referitoare
la modul de desfurare al transferului (Ex. semnalul ateapt, emis spre
microprocesor, cu semnificaia c transferul de date comandat nu este nc
ncheiat).
Memoria poate fi vzut intr-o prim abordare ca o stiv de locaii
binare (cuvinte), fiecare cuvnt fiind caracterizat de o adres binar unic.

Figura 1.2. Schem generic de memorie

O introducere n filosofia microsistemelor de calcul

10

n general M=8,16,32,64<=> largime bus date microprocesor (microsistem


pe M biti)
Memoria este caracterizat prin 2 parametri de baz:
- capacitatea (nr. de locaii pe care le conine)
- latena (timpul de acces) care este o caracteristic intrinsec a
circuitului de memorie si reprezint in principiu timpul scurs din
momentul furnizrii adresei de ctre microprocesor pn in
momentul in care memoria a ncheiat operaia comandat (citire
sau scriere).
Fireste, se doresc capaciti ct mai mari si latente ct mai mici,
cerine n general contradictorii.

Figura 1.3. Un ciclu (faz) extern de citire din memorie

ntre busul de adrese si memorie exista un decodificator N:2N ca n figur:

O introducere n filosofia microsistemelor de calcul

11

Figura 1.4. Decodificator N:2N


Sel 0 = NADR0 * NADR1 * ... * NADR(2 N 1)

N
N
N
Sel (2 2) = ADR0 * ADR1 * ... * ADR(2 2) * NADR(2 1)
Sel (2 N 1) = ADR0 * ADR1 * ... * ADR(2 N 1)

Cu 10 bii de adrese => 210 cuvinte = 1k cuvnt (kilo)


Cu 20 bii de adrese => 220 cuvinte = 210 k cuvnt = 1M cuvnt (mega)
Cu 30 bii de adrese => 230 cuvinte = 210 M cuvnt = 1G cuvnt (giga)
Cu 40 bii de adrese => 240 cuvinte = 210 G cuvnt = 1T cuvnt (terra)
M = 8 => 1 cuvnt = 1 octet
Dintr-un punct de vedere tehnologic memoriile se mpart:
ROM (Read Only Memory) EPROM, EEPROM
RAM (Random Acces Memory)
- SRAM (static)
- DRAM (dinamic)
Memoriile EPROM sunt memorii rezidente care pstreaz coninutul
i dup decuplarea tensiunii de alimentare. Ele sunt reprogramabile n sensul
n care pot fi terse prin expunere la raze ultraviolete i renscrise pe baza
unui dispozitiv special numit programator de EPROM uri.

O introducere n filosofia microsistemelor de calcul

12

EPROM-urile pstreaz aa numitul program monitor nscris de


ctre fabricant care este primul program procesat de ctre sistem imediat
dup alimentarea (resetarea) sa. Acest lucru este absolut necesar ntruct
coninutul memoriilor RAM este neprecizabil imediat dup alimentare. Prin
urmare, imediat dup RESET coninutul PC-ului este iniializat i va pointa
spre prima instruciune din programul monitor rezident n EPROM.Rolul
programului monitor este de a efectua o testare sumar a microprocesorului
i a celorlalte componente ale microsistemului, dup care va iniia
ncrcarea sistemului de operare (Linux, Windows etc.) de pe disc n
memoria RAM. Dup aceasta programul monitor d controlul sistemului de
operare rezident acum n RAM. De asemenea ROM-ul conine rutinele de
intrare ieire BIOS.
SRAM: sunt memorii deosebit de rapide, timp de acces de t0 = 1 ns
15 ns, avnd capacitate de integrare redus (sute de Ko per circuit).
DRAM: constituie peste 95 % din memoria oricrui sistem de calcul
de uz general datorit faptului c ofer densiti mari de integrare (64 Mbii
256 Mbii / chip) i timpi de acces relativ rezonabili t0=30 ns 60 ns.
Totui, decalajul ntre timpul de acces ridicat al acestor memorii i viteza
mare de execuie a microprocesorului, constituie una dintre marile probleme
tehnologice i arhitecturale n ingineria calculatoarelor. Fiind realizate n
tehnologie MOS puterea absorbit este redus. Din pcate au 2 mari
dezavantaje:
1. Accesare (citire / scriere) complicat. Circuitele DRAM sunt
organizate sub o form matricial, pe linii i coloane. Bitul ce se dorete a fi
accesat se afl la intersecia liniei cu coloana selectat.
Un circuit DRAM are urmtoarele terminale (pini):

O introducere n filosofia microsistemelor de calcul

13

Figura 1.5. Circuit DRAM

RAS (Row Address Strobe strob adres rnd), CAS (Column


Address Strobe strob adres coloan)

Figura 1.6. Ciclul de citire din DRAM

Pentru o citire corect este necesar ca frontul cztor al lui RAS s


strobeze perfect adresa de rnd (o memoreaz ntr-un registru intern al
circuitului) iar frontul cztor al lui CAS s strobeze perfect adresa de
coloan. n momentul memorrii adresei de coloan (cztorul lui CAS)
memoria are toate elementele necesare furnizrii bitului de ieire Dout, dup
un timp precizat n catalog (de cca. 20 ns la memoriile 4164). Rezult deci
c interfaa ntre microprocesor i DRAM este complicat ntruct din
semnalele pe care le furnizeaz microprocesorul (adres de memorie i

O introducere n filosofia microsistemelor de calcul

14

comand), interfaa trebuie s fabrice protocolul mai sus expus (secvena


ADR, RAS, CAS).
2. Necesitatea regenerrii memoriei DRAM.
Bitul de informaie DRAM este implementat sub forma unui
condensator. Din pcate acest condensator se descarc n timp i prin urmare
cu timpul poate s piard informaia pe care o memoreaz => deci c
periodic el trebuie rencrcat (refresh, regenerare).
Regenerarea se face pe ntreg rndul din matricea de memorare.
Conform catalogului un anumit rnd ine minte informaia circa 2 ms.
Dup acest interval, ntreg rndul trebuie regenerat. Algoritmul de
regenerare va trebui s fie unul de tip secvenial care s regenereze rnd
dup rnd n mod ordonat.
Rezult c rata de regenerare a 2 rnduri succesive i respectiv (i+1)
trebuie s se fac la un interval de maxim 2 ms/N, unde N=nr. de rnduri al
circuitului de memorie DRAM.
De exemplu, considernd N=128 rnduri (DRAM 4116, 4164)
=> rata de regenerare 2 ms/128 ~ 15,6 s.
Prin urmare vom avea accese la DRAM din 2 pri:
din partea procesorului care citete / scrie conform programului
pe care l execut
din partea unui automat de regenerare care regenereaz periodic,
rnd dup rnd, memoria DRAM.
Posibilele conflicte la memoria DRAM ntre microprocesor i
automatul de regenerare vor trebui gestionate corespunztor, eventual
acceptnd chiar prin blocaje reciproce, rezultnd scderea performanei. Ar
fi util implementarea unei "regenerari transparente" (care sa nu blocheze
deloc procesorul). Acest deziderat necesit compromisuri ntre viteza de
procesare i gradul de transparen al regenerrii.
Standardizarea bus-urilor i a protocoalelor aferente a condus la
conceptul fecund de microsistem de dezvoltare. ntr-un asemenea
microsistem, prin simpla conectare la bus-ul comun (date, adrese, comenzi,
stri) standard a unor noi module compatibile (memorii, interfee) se
permite o dezvoltare n timp a microsistemului iniial. Spre exemplu,
cunoscutele microsisteme standardizate de tip IBM PC, constituie astfel de
sisteme de dezvoltare construite n jurul unor magistrale standardizate.
Cam ct timp dureaz procesarea unei instruciuni ?

O introducere n filosofia microsistemelor de calcul

15

Exemplu: instruciunea ADD reg1,(reg2)200, codificat pe un singur


cuvnt egal cu lrgimea de band a interfeei procesor memorie.
Semantica:
reg1 (reg1) + cuv. mem| adr.(reg2)+200
1

= 10ns
fCLK = 100 MHz TCLK =
fCLK

Timpul de acces DRAM : taDRAM = 70 ns

Aceast instruciune se proceseaz, conform modelului secvenial


clasic (atribuit marelui matematician american John von Neumann autorul
primului document referitor la un calculator electronic numeric pe deplin
funcional), n faze succesive, dup cum urmeaz:
Faza IF (instruction fetch): ciclu de citire din memorie de la adresa
dat de PC (program counter) dureaz aproximativ, spre ex., 10 TCLK (conf.
protocolului unui ciclu mediu de acces la memorie) = 100 ns.
Faza ID (instruction decode): n aceast faz microprocesorul
decodific instruciunea (nelege ce trebuie s fac ]n continuare) i ca
urmare aduce ntr-un registru temporar intern, situat la intrarea ALU,
operandul din reg1. Decodificarea instruciunii consum uzual 1TCLK =
10ns.
Calcul adres memorie a celui de-al doilea operand (reg2) + 200
ADR(BUS) atac memoria: ~ 1 TCLK=10 ns.
Declanare ciclu de aducere a operandului din memorie de la adresa
anterior calculat. Dureaz, ca i IF, ~ 10 TCLK = 100 ns.
Faza EX: execuia propriu-zis a instruciunii, adunarea celor 2
operanzi, dureaz ~ 1 TCLK = 10 ns => timpul de procesare aferent acestei
instruciuni T~250 ns => nr. de instruciuni pe secund:~ 4.000.000
instruciuni sec. (4 MIPS) (Pentium I ~ 15 MIPS)
De remarcat faptul c o instruciune se proceseaz sub forma unei
nlnuiri de cicli main (faze). Un ciclu main reprezint o nlnuire de
aciuni sincronizate cu un impuls de tact. Ciclul main este unitatea
atomic de procesare, cea care nu poate fi ntrerupt de nici o cerere extern.
Obs.: Utilitatea modurilor de adresare indirecte prin registru i
indexate (adresa operand din memorie = R+index) este dat de facilitatea
scrierii compacte a programelor (bucle), adresrii elegante a unor structuri
de date de tip tablou situate n memorie etc. Astfel de structuri de date se
ntlnesc implementate att n cadrul limbajelor de nivel nalt (ex. n
limbajul C, stiva de date asociat unei funcii i care trebuie accesat n
vederea transmiterii de parametri respectiv revenire dintr-un apel) ct i al
aplicaiilor scrise n aceste limbaje.

O introducere n filosofia microsistemelor de calcul

16

Harta de memorie a unui microsistem.


Ex. S se proiecteze un sub-sistem de memorie avnd 16 KO de ROM
incepnd cu adresa 0, implementai cu cipuri de 4 KO i, n continuarea
ROM, 32 KO SRAM implementai cu cipuri de 8 KO.

1.2. MODURI DE LUCRU NTRE MICROPROCESOR I


INTERFEELE I/O
1.2.1. MODUL DE LUCRU PRIN INTEROGARE (POLLING)
Se bazeaz pe testarea de ctre microprocesor a unui bit de stare
asociat dispozitivului periferic. Microprocesorul nu va iniializa transferul
cu perifericul dect n momentul n care bitul de stare semnific faptul c
perifericul este pregtit pentru transfer (nu lucreaz la un transfer iniiat
anterior). S considerm de exemplu interfaa cu o tastatur. Aceast
interfa trebuie s conin minimum 2 registre.

RBuff va memora un octet care reprezint codul ASCII (Unicode) al


tastei apsate de ctre utilizator.
Exemple:
A = 41h 0100.0001
a = 61h 0110.0001
0 = 30h
= 20h
Bitul Ready din registrul de stare este un bit de tip Read Only cu
urmtoarea semnificaie: dac registrul RBuff se ncarc cu un octet

O introducere n filosofia microsistemelor de calcul

17

(utilizatorul a apsat o tast) atunci Ready se pune automat pe 1 artnd


microprocesorului c poate s preia codul din RBuff. Bitul Ready se va
reseta automat odat cu preluarea codului din Rbuff de ctre microprocesor.
Un program - absolut principial - de gestiune a tastaturii s-ar scrie ca mai
jos:

Dezavantajul acestei metode const n faptul c microprocesorul


ateapt un timp T, neacceptabil de mare la nivelul vitezei sale, pentru a
inspecta dac perifericul este sau nu este pregtit. Considernd c
utilizatorul apas o tast la interval de 500 ms i c o instruciune a
microprocesorului dureaz cca. 250 ns (vezi justificarea anterioar) => c
pierde 500 ms / 250 ns = 2 milioane instruciuni n bucla de ateptare n
loc s execute instruciuni utile. Acest dezavantaj este eliminat de metoda
urmtoare de comunicare procesor-interfa:

1.2.2. MODUL DE LUCRU PRIN NTRERUPERI HARDWARE


Se bazeaz pe generarea unui semnal de ntrerupere INT de la interfa
(port) spre microprocesor ori de cte ori acesta dorete un serviciu de la
microprocesor. Ca urmare a recepionrii semnalului INT microprocesorul
va abandona programul principal (PP) urmnd s intre intr-o aa numit
rutin tratare a ntreruperii n care va satisface cererea interfeei. La finele
rutinei de tratare a ntreruperii printr-o instruciune de tip RETURN,
microprocesorul va reveni in PP, in general dar nu ntotdeauna, pe
instruciunea imediat urmtoare ultimei instruciuni din PP executate. In
cazul exemplului cu tastatura anterior considerat, interfaa va genera
ntreruperea INT ori de cte ori utilizatorul a apsat o tast, adic registrul

O introducere n filosofia microsistemelor de calcul

18

RBuff este plin, deci conine codul (ASCII, Unicode etc.) al caracterului
tastat.

Figura 1.7. Modelul de lucru prin ntreruperi

Aadar RTI dup ce execut serviciul necesar perifericului (n cazul


acesta preluare i depozitare caracter n memorie) revine n PP, unde pn
cnd perifericul cere un nou serviciu (de ex. se apas din nou o tast),
microprocesorul va executa instruciuni utile din PP (sistem de operare,
program utilizator etc.) si deci nu mai este necesar s mai atepte inutil ca in
cazul 1.
Totalitatea aciunilor executate de ctre microprocesor din momentul
apariiei semnalului de ntrerupere INT pn n momentul procesrii primei
instruciuni din RTI formeaz aa numitul protocol hardware de acceptare
a ntreruperii (sgeile 1 i 3 din figur). n principiu acest protocol se
desfoar n urmtoarele etape succesive:
1.) Odat sesizat ntreruperea INT de ctre microprocesor acesta i
va termina instruciunea in curs de execuie dup care, dac anumite condiii
sunt ndeplinite (nu exist activat o cerere de ntrerupere sau de bus mai
prioritare etc.), va trece la pasul 2. n general, microprocesoarele
examineaz activarea ntreruperilor la finele ultimului ciclu aferent
instruciunii n curs de execuie.
2.) Recunoaterea ntreruperii: microprocesorul va iniializa aa
numitul ciclu de achitare a ntreruperii. Pe parcursul acestui ciclu extern
va genera un semnal de rspuns (achitare) a ntreruperii INTACK (interrupt
acknowledge) spre toate interfeele de intrare - ieire. Ca urmare a
recepionrii INTACK interfaa care a ntrerupt va furniza

O introducere n filosofia microsistemelor de calcul

19

microprocesorului prin intermediul bus-ului de date un aa numit octet


vector de ntrerupere (VI). Acest VI este diferit pentru fiecare periferic n
parte, individualizndu-l deci ntr-un mod unic. Pe baza acestui VI i
conform unui algoritm care difer de la microprocesor la microprocesor,
acesta va determina adresa de nceput a RTI, adres ce va urma s o
introduc in PC. Firete, la VI diferii vor corespunde adrese de nceput
diferite.
3.) Microprocesorul va salva ntr-o zon special de program numit
memorie stiv, PC-ul aferent instruciunii imediat urmtoare instruciunii
executate de ctre microprocesor din PP (PCrev), pentru a putea ti la finele
RTI unde s revin exact n PP.
Memoria stiv este o zon de memorie RAM caracterizat la un
moment dat de aa numitul vrf al stivei adic de ultima locaie ocupat
din stiv.
Acest vrf al stivei este pointat (adresat) permanent de coninutul unui
registru special dedicat, existent n orice microprocesor modern, numit SP
(stack pointer).
n memoria stiv sunt posibile 2 tipuri de operaii:
operaia PUSH Reg care se desfoar astfel:
SP (SP) 1 (cuvnt = octet )

(Reg) Mem | adr. SP


operaia POP Reg:
(Reg) Mem | adr. SP

SP (SP) + 1

Figura 1.8. Modul de lucru al stivei


Stiva este o memorie de tip LIFO (last in first out) si care spre
deosebire de PC n procesarea secvenial, "crete" (PUSH) de obicei nspre
adrese descresctoare evitndu-se astfel suprapunerea zonelor de program
(cod) cu cele de stiva.

O introducere n filosofia microsistemelor de calcul

20

4.) Intrarea n RTI se face simplu prin introducerea adresei de nceput


a RTI calculat in pasul 2, in registrul PC. Normal n continuare
microprocesorul va aduce i executa prima instruciune din RTI protocolul
de tratare fiind n acest moment ncheiat i controlul fiind preluat de RTI a
perifericului care a fost ntrerupt.
Dup cum s-a observat protocolul de tratare salveaz in stiva doar
PC-ul de revenire (la anumite microprocesoare se mai salveaz registrul de
stri - flags). Acest fapt se poate dovedi insuficient avnd n vedere c in
cadrul RTI pot fi alterai anumii regitri interni ai microprocesorului.
Aceast alterare a regitrilor poate fi chiar catastrofal la revenirea n PP.
Din acest motiv cade in sarcina celui care scrie RTI s salveze (instruciuni
PUSH) respectiv s returneze corespunztor (instruciuni POP) aceti
regitri.

Figura 1.9. Efectul RTI asupra stivei


Aciunea instruciunii RETURN este echivalent cu o operaie de tip
POP PC.
a ) PC Mem | adrSP
RET :
b) SP SP + 1
Acum devine evident de ce instruciunea RETURN implementeaz
revenirea n PP pe instruciunea imediat urmtoare celei ntrerupte.
Obs.: Prin mecanismul de stiv se pot gestiona perfect i
ntreruperile de tip imbricat (apariia unei ntreruperi INT n chiar rutina de
tratare a altei ntreruperi, cnd este permis).

O introducere n filosofia microsistemelor de calcul

21

1.2.3. MODUL DE LUCRU PRIN TRANSFER DMA (DIRECT


MEMORY ACCESS)
Exist dispozitive periferice a cror rat de transfer (octei /secund)
este att de ridicat nct, din motive de timing, face imposibil modul de
lucru prin ntreruperi. Astfel de exemplu discurile magnetice i interfeele
video, impun rate de transfer de 4-20 Mo /s rezultnd 1 octet la 250 ns pn
la 50 ns. Este evident c, fr un buffer FIFO (First In First Out) ntre
periferic i memorie, transferul prin ntreruperi este imposibil n acest caz
ntruct rata de transfer este comparabil cu durata unei instruciuni a
microprocesorului. Aadar, n aceste cazuri durata RTI ar fi mult mai mare
dect rata de transfer a perifericului (octei per secund). Un monitor video
este un alt periferic rapid de vreme ce, pe durata unei curse directe a
baleiajului pe orizontal a spotului de cteva zeci de microsecunde, trebuie
afiate zeci sau chiar sute de octei (caractere). De aceea n aceste cazuri se
impune un transfer direct ntre memorie i dispozitivul periferic.

Figura 1.10. Modul de lucru prin transfer DMA

Atunci cnd se dorete prin program transferul unor octei din


memorie pe disc sau citirea de pe disc n memorie microprocesorul va scrie
n interfaa DMA aferent (prin instruciuni de tip OUT succesive)
urmtoarele informaii:
- adresa de nceput de pe disc (nr. cilindru, nr. cap, nr. sector). Header
reprezint adresa de nceput sector, deci un identificator al sectorului
care se scrie la formatarea fizic a discului

O introducere n filosofia microsistemelor de calcul

22

Figura 1.11. Structura discului magnetic

- adresa de nceput a zonei de memorie (RAM) utilizat n transfer


- nr. octei (sectoare) care trebuiesc transferate
- sens transfer (Write sau Read pe / de pe disc)
n urma recepionrii acestor informaii interfaa DMA va activa un
semnal numit cerere de bus (HOLD) spre microprocesor. Ca urmare a
recepionrii semnalului HOLD, la finele ciclului main n curs
(reamintesc, ciclul este unitate atomic de procesare !) microprocesorul i
va pune bus-urile de adrese date i comenzi in TS permind astfel controlul
acestora de ctre DMA (EN1=1, microprocesor master pe bus, EN2=1,
DMA master pe bus).

Simultan microprocesorul va activa semnalul de rspuns la HOLD


numit semnal de achitare a cererii (HLDA). Ca urmare a recepionrii
achitrii HLDA (Hold Acknowledge), DMA-ul va starta transferul efectiv
ntre disc i memorie avnd toate informaiile necesare pentru aceasta. Spre
exemplu, dac s-a comandat citire de pe disc (scriere n memorie) DMA-ul
va adresa memoria pe bus-ul de adrese simultan cu punerea pe bus-ul de
date a cuvntului (octetului) scris n memorie. La finele transferului DMA
interfaa va dezactiva semnalul HOLD, ca urmare microprocesorul,
dezactivnd i el semnalul HLDA, i va continua activitatea ntrerupt prin

O introducere n filosofia microsistemelor de calcul

23

procesarea urmtorului ciclu main. O cerere de bus (HOLD) este


prioritar fa de o cerere de ntrerupere (INT).
De remarcat c diferena de principiu ntre transferurile prin interogare
- ntreruperi i respectiv transferul DMA const n faptul c n cazul
primelor dou transferul se face programat, prin intermediul
microprocesorului care servete perifericul n cadrul rutinei de tratare, pe
cnd n cazul DMA se face fr intervenia microprocesorului, direct ntre
memorie i interfaa DMA. Pe timpul HLDA=1, microprocesorul i
ntrerupe orice activitate extern, master pe bus fiind DMA-ul. Un sistem de
calcul cu DMA este un arhetip al sistemelor multiprocesor.

Figura 1.12. Cronograma unui transfer DMA

Tipuri de interfee (porturi)


Porturi (interfee) paralele
Faciliteaz transferul de date ntre memoria microprocesorului
(microcontrolerului calculator pe un singur cip. Conine CPU,
memorie si interfee I/O. Este destinat controlului n timp real a unor
procese.) i dispozitivele periferice prin intermediul unor magistrale
paralele (transfer simultan al mai multor bii). Sens transfer input sau
output.
Transferul se face de obicei prin intermediul unor protocoale
asincrone de tip handshake (intrebare-rspuns; vezi spre ex. modul
de lucru prin interogare).
Exemplu generic protocol handshake: Activare Adres Port In (MP),
Activare Comand Read - de la microprocesor (MP), Wait
(eventual), Read_Ack de la interfa (periferic) + Activare i Citire

O introducere n filosofia microsistemelor de calcul

24

Date - de la interfa, Dezactivare Comand Read, Dezactivare


Read_Ack, Dezactivare Date (periferic), Dezactivare Adres Port In
(MP).
O magistral caracterizat de protocolul de transfer aferent
Porturi seriale
Transfer serial asincron (Universal Asynchronous Receiver
Transmitter UART)
START (1 bit activ pe 0), DATE (5-8 bii), PARITATE (parimpar), STOP (1-2 bii activi pe 1)
Este necesar ca durata unui bit s fie aceeai la Emitor i la
Receptor (ex. 600, 1200, 2400, 4800, 9600 bps)
Emisie: buffer emisie gol (empty)
se poate nscrie un nou cuvnt
de date (paralel), care va fi serializat de ctre UART
Recepie: buffer recepie plin (full) trebuie citit cuvntul asamblat
de UART din buffer (conine doar datele)
UART cuvintele se transmit-recepioneaz asincron chiar dac biii
din cadrul unui cuvant sunt, evident, sincroni.
Timere
Ofer funcii de timp (real). Obligatoriu la microcontroler (MC).
Msoara timpul (ex. bucle de ntrziere) i genereaz semnale de
diferite frecvene (spre ex. pe post de ntreruperi de timp real
comutare ntre aplicaii, startare secven periodic de program etc.).
Spre ex. programatorul seteaz un registru timer cu o anumit
valoare. Acesta este decrementat cu un semnal de frecven
cunoscut. Cnd coninutul acestui registru este zero se genereaz o
ntrerupere etc.
Alt ex.: msoar perioada unui semnal (nr. impulsuri timer ntre 2
fronturi cresctoare succesive ale semnalului)
Funcie watchdog un numrtor intern MC care este activat prin
soft. Cnd ajunge la valoarea maxim reseteaz sistemul. Ca s nu se
ntmple asta, programatorul trebuie s-l ncarce nainte de resetare.
Util n depanare (detecie eroare de program).
Module PWM (Pulse Width Modulation)

O introducere n filosofia microsistemelor de calcul

25

Folosit la comanda motoarelor de c.c., comanda surselor de


alimentare etc.
Generat periodic, fr intervenia CPU. Perioad (T), factor de
umplere (T 1/T) se poate modifica n mod controlat prin soft.
Module A/D i D/A
Practic obligatoriu la microcontroler (MC).
Timpi conversie 8-20 micosecunde. Semnalul analogic trebuie
meninut constant pe durata conversiei. (Circuite de
eantionare/memorare).
Rezoluii 8-12 bii. Tensiunea dereferin, GND.
Declanarea i terminarea conversiei sunt semnalizate prin bii de
control. Rezultatul conversiei este memorat ntr-un registru de date.
Se pot genera ntreruperi la finele procesului.
Declanarea conversiei poate fi intern (prin soft) sau extern (ex.
prin timer)
Controler de ntreruperi
Arbitreaz cererile (prioriti fixe - PF, rotitoare Round Robin)
Genereaz INTACK i vectori de ntrerupere pentru fiecare nivel de
cerere (Interrupt Request Level)
Poate masca anumite cereri. Demascare. Ex. n modul PF,
ntreruperea de un anumit nivel poate bloca toate cererile mai puin
prioritare la finele rutinei de tratare (RTI), trebuie demascate (prin
scrierea intr-un registru special al controlerului).
n general, RTI aferent unei ntreruperi poate fi ntrerupt de o
cerere mai prioritar. A nu se uita ns demascarea ntreruperii mai
puin prioritare la finele rutinei celei mai prioritare.

2. ARHITECTURA SISTEMULUI IERARHIZAT DE


MEMORIE [8]

2.1. MEMORII CACHE


Cache: a safe place for hiding or storing things. (Websters New
World Dictionary of the American Language, Third College Edition - 1988)
Memoria cache este o memorie situat din punct de vedere logic ntre
CPU (Central Processing Unit - unitate central) i memoria principal
(uzual DRAM - Dynamic Random Access Memory), mai mic, mai rapid
i mai scump (per byte) dect aceasta i gestionat n general prin
hardware astfel nct s existe o ct mai mare probabilitate statistic de
gsire a datei accesate de ctre CPU, n cache. Aadar, cache-ul este adresat
de ctre CPU n paralel cu memoria principal (MP): dac data dorit a fi
accesat se gsete n cache, accesul la MP se aborteaz, dac nu, se
acceseaz MP cu penalizrile de timp impuse de latena mai mare a acesteia,
relativ ridicat n comparaie cu frecvena de tact a CPU. Oricum, data
accesat din MP se va introduce i n cache.
Memoriile cache sunt implementate n tehnologii de nalt
performan, avnd deci un timp de acces foarte redus dac sunt integrate n
microprocesor (cca. 1 5 ns la ora actual). n prezent presiunea asupra
acestor memorii este foarte ridicat, rolul lor fiind acela de a apropia
performana microprocesoarelor (care crete cu cca. 50 60 % pe an) cu
aceea a memoriilor DRAM, a cror laten scade cu doar cca. 7 % pe an. n
general, pentru a accesa o locaie DRAM, un procesor pierde 15 50 de
impulsuri de tact (~ timp acces DRAM / TCLK, TCLK = perioada ceasului
microprocesorului), n schimb accesarea cache-ului se face n doar 1 3
impulsuri de tact. Cu alte cuvinte, memoria cache reduce timpul mediu de
acces al CPU la MP, ceea ce este foarte util.
Se definete un acces al CPU cu hit n cache, un acces care gsete o
copie n cache a datei accesate. Un acces cu miss n cache este unul care nu
gsete o copie n cache a datei accesate de ctre CPU i care, prin urmare,

Arhitectura sistemului ierarhizat de memorie

27

adreseaz MP cu toate penalizrile de timp care deriv din accesarea


acesteia.
Se definete ca parametru de performan al unei memorii cache rata
de hit, ca fiind raportul statistic ntre numrul acceselor cu hit n cache
respectiv numrul total al acceselor CPU la memorie. Msurat pe
benchmark-uri (programe de test) reprezentative, la ora actual sunt
frecvente rate de hit de peste 90 %. Rata de miss (RM) este complementara
ratei de hit (RH), astfel c: RH [%] + RM [%] = 100 %. n esen, utilitatea
cache-ului deriv din urmtorul fapt: la o citire cu miss (din MP), data adus
din MP este introdus i n cache, n sperana c la o urmtoare citire a
aceleiai date, aceasta se va gsi n cache (hit). n realitate, n cazul unei
citiri cu miss n cache se aduce din MP nu doar data (cuvntul) dorit de
ctre CPU ci un ntreg bloc (4 16 cuvinte) care evident conine data
respectiv. O citire cu miss presupune aducerea blocului din MP dar nainte
de aceasta se impune evacuarea n MP a unui bloc din cache. Aadar,
transferul din cache n MP se face tot la nivel de bloc i nu de cuvnt.
Astfel, se optimizeaz traficul ntre cache i MP pe baza a 2 principii care
vor fi discutate n continuare.
n esen, eficiena memoriilor cache se bazeaz pe 2 principii de
natur statistic i care caracterizeaz intrinsec noiunea de program:
principiile de localitate temporal i spaial. Conform principiului de
localitate (vecintate) temporal, exist o mare probabilitate ca o dat
(instruciune) accesat acum de ctre CPU s fie accesat din nou, n viitorul
imediat. Conform principiului de localitate spaial, exist o mare
probabilitate ca o dat situat n imediata vecintate a unei date accesate
curent de ctre CPU, s fie i ea accesat n viitorul apropiat (pe baza
acestui principiu statistic se aduce din MP n cache un ntreg bloc i nu doar
strict cuvntul dorit de ctre CPU). O bucl de program structur esenial
n orice program exemplific foarte clar aceste principii i justific
eficiena conceptului de cache.
O combinare a celor 2 principii anterior expuse conduce la celebra
regul 90/10 care spune c cca. 90 % din timpul de rulare al unui program
se execut doar cca. 10 % din codul acestuia. Personal, credem c mai puin.
Pe baza acestor principii empirice se situeaz ntreg eafodajul conceptului
de cache; eficiena sa deosebit nu poate fi explicat prin considerente
analitice pentru simplul fapt c este practic imposibil a descrie analitic
noiunea de program. n fond, ce este un program? Care este distribuia
instruciunilor sau a primitivelor structurale ntr-un program? Poate fi
aceasta descris concret, pe baza unor modele deterministe sau aleatoare?
Dificultatea unor rspunsuri exacte la aceste ntrebri dat n fond de
imposibilitatea punerii n ecuaie a minii umane, cea care creeaz infinita

Arhitectura sistemului ierarhizat de memorie

28

diversitate de programe face ca cea mai bun explicaie asupra eficienei


memoriilor cache s stea n cele 2 principii empirice anterior schiate,
caracteriznd intrinsec noiunea de program.
Din punct de vedere arhitectural, exist 3 tipuri distincte de memorii
cache n conformitate cu gradul de asociativitate: cu mapare direct,
semiasociative i total asociative.

Figura 2.1. Scheme de mapare n cache

La cache-urile cu mapare direct, ideea principal const n faptul c


un bloc din MP poate fi gsit n cache (hit) ntr-un bloc unic determinat. n
acest caz regula de mapare a unui bloc din MP n cache este:
(Adresa bloc MP) modulo (Nr. blocuri din cache)
Stricteea regulii de mapare conduce la o simplitate constructiv a
acestor memorii dar i la fenomenul de interferen al blocurilor din MP n
cache. Astfel, de exemplu, blocurile 12, 20, 28, 36, 42 etc. nu pot coexista n
cache la un moment dat ntruct toate se mapeaz pe blocul 4 din cache.
Prin urmare, o bucl de program care ar accesa alternativ blocurile 20 i 28
din MP ar genera o rat de hit egal cu zero.
La cache-urile semiasociative exist mai multe seturi, fiecare set
avnd mai multe blocuri componente. Aici, regula de mapare precizeaz
strict doar setul n care se poate afla blocul dorit, astfel:
(Adresa bloc MP) modulo (Nr. seturi din cache)
n principiu blocul dorit se poate mapa oriunde n setul respectiv. Mai
precis, la un miss n cache, nainte de ncrcarea noului bloc din MP, trebuie
evacuat un anumit bloc din setul respectiv. n principiu, n mod uzual, exist
implementate dou-trei tipuri de algoritmi de evacuare: pseudorandom
(cvasialeator, uor de implementat), FIFO (sau round-robin, se evacueaz

Arhitectura sistemului ierarhizat de memorie

29

blocul cel mai vechi din cache. Contorul aferent se ncarc doar la
ncrcarea blocului n cache i nu la fiecare hit per bloc, ca la algoritmul
LRU) i LRU (Least Recently Used). Algoritmul LRU evacueaz blocul
din cache cel mai de demult neaccesat, n baza principiului de localitate
temporal (aflat oarecum n contradicie cu o probabilistic markovian care
ar sugera s fie pstrat!). n practic, implementrile FIFO, LRU sunt
simplificate i deci aproximative. Dei acest model pare intuitiv corect, el
poate genera i rezultate eronate uneori. De exemplu, numrul total de
accese cu miss poate uneori s creasc cnd crete asociativitatea, iar
politica de nlocuire LRU este departe de a fi cea optim pentru unele din
programe.Aceast anomalie poate fi evitat prin folosirea algoritmului
optim (OPT) n loc de LRU ca baz pentru clasificarea miss-urilor n
cache. Algoritmul OPT, nlocuiete ntotdeauna blocul care va fi adresat cel
mai trziu n viitor (eventual nu va mai fi adresat deloc). Un astfel de
algoritm s-a dovedit a fi cvasi-optimal pentru toate pattern-urile de program,
ratele de miss fiind cele mai mici n acest caz, dintre mai toate politicile de
nlocuire folosite. Politica se dovedete optim doar pentru fluxuri de
instruciuni read-only. Pentru cache-urile cu modalitate de scriere writeback algoritmul de nlocuire nu este ntotdeauna optim (spre exemplu poate
fi mai costisitor s se nlocuiasc blocul cel mai trziu referit n viitor dac
blocul trebuie scris i n memoria principal ,fiind "murdar", fa de un bloc
"curat" referit n viitor puin mai devreme dect blocul "murdar" anterior; n
plus, blocul curat nu mai trebuie evacuat, ci doar supra-scris). Este evident
un algoritm speculativ, practic imposibil de implementat n practic. Totui
el are dou caliti majore: (1) reprezint o metric de evaluare teoretic a
eficenei algoritmului de evacuare implementat n realitate, absolut necesar
i (2) induce ideea fecund a predictibilitii valorilor de folosin ale
blocurilor din cache, conducnd astfel la algoritmi predictivi rafinai de
evacuare (revezi memoria SVC, care implementeaz un astfel de algoritm).
Dac un set din cache-ul semiasociativ conine N blocuri atunci cacheul se mai numete tip N-way set associative. Mai nou, se implementeaz
algoritmi de evacuare predictivi, care anticipeaz pe baze euristice utilitatea
de viitor a blocurilor memorate n cache, evacundu-l pe cela mai puin
valoros. Dei aceti algoritmi depesc n mod normal cadrul acestui curs de
iniiere n domeniul microprocesoarelor, n continuare se va prezenta totui
unul, integrat n arhitectura numit Selective Victim Cache.
Este evident c ntr-un astfel de cache rata de interferen se reduce
odat cu creterea gradului de asociativitate (N mare). Aici, de exemplu,
blocurile 12, 20, 28 i 36 pot coexista n setul 0. Prin reducerea posibilelor
interferene ale blocurilor, creterea gradului de asociativitate determin

Arhitectura sistemului ierarhizat de memorie

30

mbuntirea ratei de hit i deci a performanei globale. Pe de alt parte


ns, asociativitatea impune cutarea dup coninut (se caut deci ntr-un set
dac exist memorat blocul respectiv) ceea ce conduce la complicaii
structurale i deci la creterea timpului de acces la cache i implicit la
diminuarea performanei globale. Optimizarea gradului de asociativitate, a
capacitii cache, a lungimii blocului din cache etc., nu se poate face dect
prin laborioase simulri software, variind toi aceti parametrii n vederea
minimizrii ratei globale de procesare a instruciunilor [instr./cicli].
n fine, memoriile cache total asociative, implementeaz practic un
singur set permind maparea blocului practic oriunde n cache. Ele nu se
implementeaz deocamdat n siliciu datorit complexitii deosebite i a
timpului prohibit de cutare. Reduc ns (practic) total interferenele
blocurilor la aceeai locaie cache i constituie o metric superioar util n
evaluarea ratei de hit pentru celelalte tipuri de cache-uri (prin comparaie).
Cele 3 scheme urmtoare prezint implementri realizate pentru tipurile de
cache anterior discutate.

Cache semiasociativ pe 2 ci

Figura 2.2. Cache semiasociativ pe 2 ci

Cache complet associativ

Arhitectura sistemului ierarhizat de memorie

31

Figura 2.3. Cache complet associativ

Cache direct mapat

Figura 2.4. Cache direct mapat

S-a considerat un bloc compus din 4 cuvinte. Bitul V este un bit de


validare a blocului, V = 1 fiind o condiie necesar a obinerii hitului. Bitul
este util ndeosebi n Sistemele multiprocesor n vederea meninerii
coerenei memoriilor cache locale datorit redundanei informaionale. Mai
precis, aici apare necesitatea citirii din cache-ul propriu a ultimei copii
modificate a datei respective. Cnd un procesor modific o copie local a

Arhitectura sistemului ierarhizat de memorie

32

unei date, toate blocurile care conin acea dat din cadrul celorlalte
procesoare, trebuie invalidate prin resetarea V = 0. Necesitatea invalidrii
blocurilor (V = 0) apare chiar i n sistemele uniprocesor. Imediat dup
resetarea sistemului, uzual, procesorul execut un program ncrctor
rezident n memoria EPROM. Cum imediat dup iniializarea sistemului
coninutul cache-ului e practic aleator, pentru a evita false hituri la citirea
programului ncrctor din EPROM, se iniializeaz biii V cu zero. La
prima ncrcare a unei date (instruciuni) n cache, bitul V aferent se va seta
pe 1, validnd astfel hitul.
Bitul D (Dirty) este pus pe 0 la ncrcarea iniial a blocului n
cache. La prima scriere a acelui bloc, bitul se pune deci pe 1. Evacuarea
propriu-zis a blocului se face doar dac bitul D = 1. Practic prin acest bit se
minimizeaz evacurile de blocuri n MP, pe baza principiului c un bloc
trebuie evacuat numai dac a fost scris n cache.
n acest sens, din punct de vedere al acceselor de scriere a unui
procesor, exist 2 posibiliti:

Strategia Write Through (WT), prin care informaia este scris de


ctre procesor att n blocul aferent din cache ct i n blocul
corespunztor din memoria principal. Mai uor de implementat
dect strategia WB (v. mai jos), nu mai e necesar evacuarea
blocului din cache n MP. Scrierea se face la viteza redus a MP,
ngreunat i de accesarea busului sistem. Pentru a reduce acest
dezavantaj deseori se folosete un aa numit Data Write Buffer
(DWB). DWB reprezint o coad FIFO de lungime parametrizabil,
a crei valoare trebuie s fie minim IRmax. Fiecare locaie conine
adresa de memorie (virtual) i data de scris. Cu DWB sunt posibile
deci STORE-uri simultane, fr el acestea trebuind serializate cu
penalitile de rigoare. n plus DWB va putea rezolva prin
"bypassing" foarte elegant hazarduri de tip "LOAD after STORE" cu
adrese identice, nemaifiind deci necesar accesarea sistemului de
memorie de ctre instruciunea LOAD.
Strategia Write - Back (WB), prin care informaia este scris
numai n cache, blocul modificat fiind transferat n MP numai la
evacuarea din cache. Asigura coeren mai facil (v. n continuare),
sincronizare la scriere cu cache-ul, consum redus de putere (nu
acceseaz busul sistem) etc.
n vederea meninerii coerenei cache-urilor cu precdere n sistemele
multimicroprocesor exist 2 posibiliti n funcie de ce se ntmpl la o
scriere (vezi pentru detalii capitolul dedicat sistemelor multimicroprocesor):

Arhitectura sistemului ierarhizat de memorie

33

a) Write invalidate prin care CPU care scrie determin ca toate


copiile din celelalte memorii cache s fie invalidate nainte ca el si modifice blocul din cache-ul propriu.
b) Write Broadcast CPU care scrie pune data de scris pe busul comun
spre a fi actualizate toate copiile din celelalte cache-uri.
Ambele strategii de meninere a coerenei pot fi asociate cu oricare
dintre protocoalele de scriere (WT, WB) dar de cele mai multe ori se prefer
WB cu invalidare. Nu detaliem aici problemele de coeren ntruct acestea
se refer cu deosebire la problematica sistemelor multiprocesor i deci
depesc cadrul acestei prezentri.
Se va considera un exemplu care arat cum 2 procesoare pot "vedea" 2
valori diferite pentru aceeai locaie (X) de memorie global, adic un caz tipic
de incoeren a unei valori globale.
Pas Eveniment

Coninut cache Coninut cache Coninut Memorie


CPU1
CPU2
global (X)
1

CPU1 citete X

2
3

CPU2 citete X
CPU1 scrie 0 n X (WT)
WB

1
0
0

1
1
1
1

1
0
1
Tabelul 8.1.

Exemplificarea unei incoerene

S-a presupus c iniial, nici una din cele 2 cache-uri nu conine


variabila global X i c aceasta are valoare 1 n memoria global. De
asemenea s-au presupus cache-uri de tip WT (un cache WB ar introduce o
incoeren asemntoare). n pasul 3 CPU 2 are o valoare incoerent a
variabilei X.
n continuare, se prezint un exemplu de protocol de coeren WI, bazat
pe un protocol de scriere n cache de tip WB.

Pas

Activitate procesor

Activitate
bus comun

pe Loc.X
cache
CPU1

Loc.X
cache CPU2

Loc. X
Memorie
global
0

Arhitectura sistemului ierarhizat de memorie

34

CPU1 citete X

Cache Miss (X)

2
3

CPU2 citete X
CPU1 scrie 1 n X

Cache Miss (X)


Invalidare X

0
1

CPU2 citete X

Cache Miss (X)

1
0
INV.
1

0
0
1
Tabelul 8.2.

Coerena prin protocol WI

n pasul 4, CPU1 aborteaz ciclul de citire al lui CPU2 din memoria


global i pune pe busul comun valoarea lui X ("1", copie exclusiv). Apoi,
scrie (actualizeaz) valoarea lui X n cache-ul lui CPU2 i n memoria
global iar X devine o variabil partajat.
Apar posibile 4 procese distincte ntr-un cache ca n tabelul urmtor:
Tip
acces

Hit

Aciune n cache

Miss
Citire

Miss

Citire
Scriere

Hit
Miss

Scriere

Hit

Evacuare bloc + ncrcare bloc nou (alocare


cache)
(comparare tag-uri)
(Evacuare bloc Dirty=1) + ncrcare bloc
nou + scriere data n bloc (WB)
Scriere data n blocul din cache (WB)
Tabelul 2.1.
Tipuri de acces n cache

Aadar, memoriile cache mbuntesc performana ndeosebi pe


citirile cu hit iar n cazul utilizrii scrierii tip Write Back i pe scrierile cu
hit.
mbuntirea accesului la memorie pe citirile CPU este normal
avnd n vedere c acestea sunt mult mai frecvente dect scrierile (orice
instruciune implic cel puin o citire din memorie pentru aducerea sa;
statistic, cca. 75 % din accesele la memorie sunt citiri).
Explicaia la cauzele miss-urilor n cache-uri, conform literaturii
acestui domeniu, sunt de 3 tipuri:
datorit faptului c n fond primul acces la un bloc genereaz ntotdeauna
miss (compulsory); sunt inevitabile.
datorit capacitii fatalmente limitate a cache-ului care nu poate conine
la un moment dat toate blocurile din MP, ceea ce implic evacuri /
ncrcri (capacity).

Arhitectura sistemului ierarhizat de memorie

35

datorit interferenelor (conflictelor) unor blocuri din MP pe acelai bloc


din cache (conflict); acestea se reduc odat cu creterea capacitii i a
gradului de asociativitate.
Reducerea penalizrilor la un miss n cache se face prin:

Niveluri multiple
exclusion, hibrid)

de

cache-uri

(multi-level

inclusion,

L1 Read_Miss aduce bloc din L2 in L1si bloc L1 evacueaza in MP (Multilevel


Inclusion) SAU Swap_L2&L1 (Multilevel Exclusion)
L1 Write_Hit Write_Back (Multilevel Exclusion); Write_Through
(Multilevel Inclusion)
L1 Write_Miss (Multilevel Exclusion) aduce bloc din L2/MP si scrie in L1
(WB); (Multilevel Inclusion) aduce bloc L2/MP L1 si scrie in ambele (WT).

Aadar:

Multilevel Inclusion
Multilevel Exclusion

L2 mare (redundanta info)


L2 mai mic

Memorii victim cache (v. n continuare)

Reducerea ratei de miss n cache se face prin:


1. Creterea mrimii blocului (din pcate cresc i penalitile de miss
la evacuare-ncrcare bloc)
2. Creterea capacitii cache (mrire timp acces hit i costuri)
3. Cretere asociativitate cache (crete timp acces la hit)
4. Optimizarea de programe prin compilator
- intrarea ntr-un basic-block s reprezinte nceputul unui bloc n
cache
- exploatarea localitilor spaiale ale datelor din cache loop
interchange etc.
Exemplu:
for (j=0; j<1000; i++)
for (i=0; i<2000; j++)
A[i,j]=4*A[i,j];
Dezavantaj: pas (a[i,j]; a[i+1, j]) este 1000
cache scade Rhit

sunt in blocuri diferite in

Arhitectura sistemului ierarhizat de memorie

for (i=0; i<2000; i++)


for (j=0; j<1000; j++)
A[i,j]=4*A[i,j];
Avantaj: pas (a[i,j] si a[i, j+1]) este 1
creste Rhit

36

sunt in acelasi bloc in cache

Primul care a pus n lumin conceptul de memorie cache a fost prof.


Maurice Wilkes (Univ. Cambridge, Anglia) un pionier al calculatoarelor
care a inventat n 1951 i tehnica microprogramrii unitilor de comand
aferente procesoarelor ntr-un articol publicat n 1965 (Slave memories
and dynamic storage allocation, IEEE Trans. Electronic Computers, April,
1965). Prima implementare a unui cache (cu mapare direct) aparine
probabil lui Scarrott, n cadrul unui sistem experimental construit tot la
Universitatea din Cambridge. Primul sistem comercial care utiliza cacheurile a fost IBM 360/85 (1968). Conceptul de cache s-a dovedit a fi foarte
fecund nu numai n hardware dar i n software prin aplicaii dintre cele mai
diverse n sistemele de operare (memoria virtual), reele de calculatoare,
baze de date, compilatoare etc.
Pentru a reduce rata de miss a cache-urilor mapate direct (fr s se
afecteze ns timpul de hit sau penalitatea n caz de miss), cercettorul
Norman Jouppi (DEC) a propus conceptul de victim cache. Aceasta
reprezint o memorie mic complet asociativ, plasat ntre primul nivel de
cache mapat direct i memoria principal. Blocurile nlocuite din cache-ul
principal datorit unui miss sunt temporar memorate n victim cache. Dac
sunt referite din nou nainte de a fi nlocuite din victim cache, ele pot fi
extrase direct din victim cache cu o penalitate mai mic dect cea a
memoriei principale. Deoarece victim cache-ul este complet asociativ, multe
blocuri care ar genera conflict n cache-ul principal mapat direct, ar putea
rezida n victim cache fr s dea natere la conflicte. Decizia de a plasa un
bloc n cache-ul principal sau n victim cache (n caz de miss) este fcut cu
ajutorul unei informaii de stare asociate blocurilor din cache. Biii de stare
conin informaii despre istoria blocului. Aceast idee a fost propus de
McFarling, care folosete informaia de stare pentru a exclude blocurile
sigure din cache-ul mapat direct, reducnd nlocuirile ciclice implicate de
acelai bloc. Aceast schem, numit excludere dinamic, reduce miss-urile
de conflict n multe cazuri. O predicie greit implic un acces n nivelul
urmtor al ierarhiei de memorie contrabalansnd eventuale ctiguri n
performan. Schema este mai puin eficace cu blocuri mari, de capaciti
tipice cache-urilor microprocesoarelor curente.

Arhitectura sistemului ierarhizat de memorie

37

Pentru a reduce numrul de interschimbri dintre cache-ul principal i


victim cache, Stiliadis i Varma au introdus un nou concept numit selective
victim cache(SVC).

Figura 2.5. Ierarhia de memorie pentru scema cu Selective Victim Cache

Cu SVC, blocurile aduse din memoria principal sunt plasate selectiv


fie n cache-ul principal cu mapare direct fie n selective victim cache,
folosind un algoritm de predicie euristic bazat pe istoria folosirii sale.
Blocurile care sunt mai puin probabil s fie accesate n viitor sunt plasate n
SVC i nu n cache-ul principal. Predicia este de asemenea folosit n cazul
unui miss n cache-ul principal pentru a determina dac este necesar o
schimbare a blocurilor conflictuale. Algoritmul obiectiv este de a plasa
blocurile, care sunt mai probabil a fi referite din nou, n cache-ul principal i
altele n victim cache.
La referirea unui cache mapat direct, victim cache-ul este adresat n
paralel; dac rezult miss n cache-ul principal, dar hit n victim cache,
instruciunea (n cazul ICache-ului) este extras din victim cache.
Penalitatea pentru miss n cache-ul principal, n acest caz este mult mai
redus dect costul unui acces n nivelul urmtor de memorie. Algoritmul de
victim cache ncearc s izoleze blocurile conflictuale i s le memoreze
doar unul n cache-ul principal restul n victim cache. Dac numrul
blocurilor conflictuale este suficient de mic s se potriveasc n victim
cache, att rata de miss n nivelul urmtor de memorie ct i timpul mediu
de acces va fi mbuntit datorit penalitii reduse implicate de prezena
blocurilor n victim cache.

Arhitectura sistemului ierarhizat de memorie

38

Cache-ul mapat direct crete cu un bloc pentru a implementa


conceptul de selective victim cache. Acest bloc adiional se numete bloc
tranzitoriu, i este necesar pentru dou motive. Primul ar fi acela c, blocul
tranzitoriu este folosit de algoritmul de predicie pentru referiri secveniale
ntr-un acelai bloc. Hardware-ul este capabil s determine accese
secveniale, folosind semnalul Acces Secvenial activat de CPU, cnd
referirea curent se face n acelai bloc ca i cel anterior. Semnalul este
folosit de ctre cache pentru a evita actualizarea biilor de stare folosii de
algoritmul de predicie la referine repetate n acelai bloc tranzitoriu. Al
doilea motiv const n faptul c, atunci cnd are loc un hit n victim cache i
algoritmul de predicie decide s nu se interschimbe blocurile, blocul
corespondent este copiat din victim cache n blocul tranzitoriu. Astfel,
blocul tranzitoriu servete ca buffer, accesele secveniale la acel bloc fiind
satisfcute direct din acest buffer la timpul de acces al cache-ului principal.
Similar, la un miss n urmtorul nivel de memorie, algoritmul de predicie
va decide s plaseze blocul sosit n victim cache i n blocul tranzitoriu.
ntruct un al doilea sau un al n-lea acces consecutiv n acelai bloc n
cache-ul principal poate fi servit din blocul tranzitoriu, acestuia i este
adugat un bit de stare pentru a adresa cache-ul principal. Acest bit de stare
urmrete starea datei din blocul tranzitoriu. Cnd starea este normal,
adresa sosit pe bus este decodificat pentru a accesa cache-ul principal n
mod obinuit; cnd starea este special, accesul se face n blocul tranzitoriu.
Figura urmtoare arat tranziiile dintre cele dou stri. Mai jos se prezint
acest algoritm sub form de main secvenial de stare.

Figura 2.6. Maina secvenial de stare SVC i tranziiile ei

Iniial starea mainii este resetat n stare normal. Dac avem un


miss n cache-ul mapat direct, acesta este servit fie de victim cache fie de
nivelul urmtor de memorie. n fiecare din cazuri, algoritmul de predicie
este folosit pentru a determina care bloc urmeaz a fi memorat n cache-ul

Arhitectura sistemului ierarhizat de memorie

39

principal. Dac algoritmul de predicie plaseaz blocul accesat n cache-ul


principal, starea mainii rmne n stare normal. Altfel, blocul este copiat
n blocul tranzitoriu di acest cache i maina tranziteaz n starea special.
Referirea secvenial a aceluiai bloc pstreaz semnalul Acces Secvenial
activat iar maina n starea special. Datele se extrag din blocul tranzitoriu.
Primul acces nesecvenial reseteaz starea mainii n stare normal,
distingndu-se trei cazuri distincte, pe care le vom discuta mai jos.

Algoritmul Selective Victim Cache


1. Hit n cache-ul principal: dac cuvntul este gsit n cache-ul principal,
el este extras pentru CPU. Nu este nici o diferen fa de cazul cacheului mapat direct. Singura operaie suplimentar este o posibil
actualizare a biilor de stare folosii de schema de predicie. Actualizarea
se poate face n paralel cu operaia de fetch i nu introduce ntrzieri
suplimentare.
2. Miss n cache-ul principal, hit n victim cache: n acest caz, cuvntul
este extras din victim cache n cache-ul mapat direct i naintat CPU. Un
algoritm de predicie este invocat pentru a determina dac va avea loc o
interschimbare ntre blocul referit i blocul conflictual din cache-ul
principal. Dac algoritmul decide c blocul din victim cache este mai
probabil s fie referit din nou dect blocul conflictual din cache-ul
principal se realizeaz interschimbarea; altfel blocul din victim cache
este copiat n blocul tranzitoriu al cache-ului principal iar main
secvenial de stare trece n starea special. Data poate fi naintat CPU.
n ambele cazuri blocul din victim cache este marcat drept cel mai recent
folosit din lista LRU. n plus, biii de predicie sunt actualizai pentru a
reflecta istoria acceselor.
3. Miss att n cache-ul principal ct i n victim cache: dac cuvntul nu
este gsit nici n cache-ul principal nici n victim cache, el trebuie extras
din nivelul urmtor al ierarhiei de memorie. Aceasta nseamn c fie
blocul corespondent din cache-ul principal este gol, fie noul bloc este
n conflict cu un alt bloc memorat n cache (mai probabil). n primul caz,
noul bloc este adus n cache-ul principal iar victim cache-ul nu este
afectat. n cel de-al doilea caz, trebuie aplicat algoritmul de predicie
pentru a determina care din blocuri este mai probabil s fie referit pe
viitor. Dac blocul care sosete din memoria central are o probabilitate
mai mare dect blocul conflictual din cache-ul principal, ultimul este
mutat n victim cache i noul bloc i ia locul n cache; altfel, blocul sosit
este direcionat spre victim cache i copiat n blocul tranzitoriu al cacheului mapat direct, de unde poate fi accesat mai iute de ctre CPU.

Arhitectura sistemului ierarhizat de memorie

40

Main secvenial de stare trece n starea special iar biii de predicie


sunt actualizai.
Diferena de esen dintre schema prezentat (selective victim cache)
i conceptul de victim cache simplu se observ n cazurile 2 i 3. n cazul 2,
blocurile conflictuale din cache-ul principal i cele din victim cache sunt
ntotdeauna schimbate n cazul folosirii victim cache-ului tradiional, pe
cnd schema prezentat face acest lucru ntr-un mod selectiv, euristic.
Similar, n cazul 3, prin folosirea victim cache-ului obinuit blocurile din
memorie sunt ntotdeauna plasate n cache-ul principal, pe cnd n cazul
Selective Victim Cache-ului plaseaz aceste blocuri selectiv n cache-ul
principal sau n victim cache. Orice algoritm de nlocuire poate fi folosit
pentru victim cache. LRU (cel mai puin recent referit) pare s fie cea mai
bun alegere, ntruct scopul victim cache-ului este de a captura cele mai
multe victime recent nlocuite i victim cache-ul este de dimensiune mic.

Algoritmul de Predicie
Scopul algoritmului de predicie este de determina care din cele dou
blocuri conflictuale este mai probabil s fie referit pe viitor. Blocul
considerat cu o probabilitate mai mare de acces n viitor este plasat n cacheul principal, cellalt fiind plasat n victim cache. Astfel, dac blocul din
victim cache este pe viitor nlocuit datorit capacitii reduse a victim cacheului, impactul ar fi mai puin sever dect alegerea opus (interschimbarea
permanent a blocurilor din cazul schemei cu victim cache obinuit).
Algoritmul de predicie se bazeaz pe algoritmul de excludere
dinamic propus de McFarling. Algoritmul folosete doi bii de stare
asociai fiecrui bloc, numii hit bit i sticky bit. Hit bit este asociat logic cu
blocul din nivelul 1 (L1 - level one) al cache-ului care se afl pe nivelul 2
(L2) sau n memoria central. Hit bit egal cu 1 logic indic, faptul c a avut
cel puin un acces cu hit la blocul respectiv de cnd el a prsit cache-ul
principal (cache-ul de pe nivelul L1). Hit bit egal cu 0 nseamn c blocul
corespunztor nu a fost deloc accesat de cnd a fost nlocuit din cache-ul
principal. ntr-o implementare ideal, biii de hit sunt meninui n nivelul
L2 de cache sau n memoria principal i adui n nivelul L1 de cache cu
blocul corespondent. Dac blocul este nlocuit din cache-ul principal (L1
cache), starea bitului de hit trebuie actualizat n L2 cache sau n memoria
central. Cnd un bloc, s-l numim , a fost adus n cache-ul principal, bitul
su sticky este setat. Fiecare secven cu hit la blocul remprospteaz
bitul sticky la valoarea 1. La referirea unui bloc conflictual, fie acesta ,
dac algoritmul de predicie decide ca blocul s nu fie nlocuit din cache-ul
principal atunci bitul sticky este resetat. Dac un acces ulterior n cache-ul

Arhitectura sistemului ierarhizat de memorie

41

principal intr n conflict cu blocul care are bitul sticky resetat, atunci blocul
va fi nlocuit din cache-ul principal. De aceea, sticky bit de valoare 1 pentru
blocul semnific faptul c nu a avut loc nici o referire la un bloc
conflictual cu , de la ultima referire a acestuia.
Este uor de neles rolul blocului tranzitoriu n algoritmul de
predicie. Dac algoritmul trateaz toate fetch-urile n acelai fel, accesele
secveniale n acelai bloc vor seta ntotdeauna bitul sticky. Algoritmul de
predicie va fi incapabil s determine dac blocul a fost referit repetat n
interiorul unei bucle, sau dac mai mult dect un cuvnt din acelai bloc a
fost extras din cache fr o referin intervenit la un alt bloc.

Figura 2.7. Algoritmul de Selective Victim Cache

n algoritmul Selective Victim Cache prezentat n figura anterioar, se


disting trei cazuri: n primul caz, un hit n cache-ul principal seteaz biii de
stare hit i sticky. n al doilea caz, blocul accesat, fie acesta , se consider
rezident n victim cache. Acesta implic un conflict ntre blocul i cel din
cache-ul principal, notat . n acest caz, algoritmul de predicie este aplicat
pentru a determina dac va avea loc o interschimbare. Dac bitul sticky al
lui este 0, semnificnd faptul c blocul nu a fost accesat de la conflictul

Arhitectura sistemului ierarhizat de memorie

42

anterior la acest bloc, noul bloc primete o prioritate superioar lui ,


determinnd o interschimbare. De asemenea, dac bitul hit al lui este setat
pe 1, acestuia i este dat o prioritate mai mare dect lui , i ele sunt
interschimbate. Dac bitul sticky al lui este 1 i bitul hit al lui este 0,
accesul este satisfcut din victim cache i nu are loc nici o interschimbare
(se consider c blocul nu este suficient de valoros pt. a fi adus n
cache-ul principal). Bitul sticky aferent lui este resetat astfel nct o
secven urmtoare care implic conflict la acest bloc va determina mutarea
lui din cache-ul principal. n final, cazul 3 al algoritmului prezint
secvena de aciuni care au loc n cazul unor accese cu miss att n cache-ul
principal ct i n victim cache. Secvena este similar cu cea de la cazul 2,
cu excepia faptului c, destinaia blocului sosit se alege fie cache-ul
principal fie victim cache-ul. n situaia cu victim cache simplu, blocul
conflictual din cache-ul principal era mutat n victim cache nainte s fie
nlocuit. n cazul de fa cnd blocul sosit este plasat n victim cache, el este
de asemenea plasat i n blocul tranzitoriu pentru a servi eventualele viitoare
referine secveniale.
Operaiile algoritmului de Selective Victim Cache pot fi ilustrate
printr-o secven de instruciuni repetate (m)n implicnd trei blocuri
conflictuale , i . Notaia (m)n reprezint execuia unei secvene
compus din dou bucle de program imbricate, bucla interioar constnd n
m referine la blocul , urmate de accesul la blocurile i n bucla
exterioar, care se execut de n ori. Primul acces l aduce pe n cache-ul
principal i att bitul hit ct i cel sticky sunt setai dup cel mult dou
referiri ale acestuia. Cnd este referit, bitul su hit este iniial 0. De aceea
el nu-l nlocuiete pe n cache-ul principal i este memorat n victim
cache. Conflictul generat determin resetarea bitului sticky al lui . Cnd
este referit, bitul su hit este 0, dar bitul sticky al lui este tot 0. Deci, l
nlocuiete pe . Blocul este transferat n victim cache i bitul su hit
rmne 1 datorit referinei sale anterioare. n ciclul urmtor cnd este
referit din nou, el este mutat napoi n cache-ul principal datorit bitului su
de hit, rmas setat. Astfel, dac victim cache-ul este suficient de mare pentru
a ncape att i , sau i , doar trei referine ar fi servite de ctre al
doilea nivel de cache. Numrul total de interschimbri nu va depi 2n. n
cazul unei scheme simple de predicie fr victim cache, numrul total de
referiri cu miss ar fi 2n, n cazul n care schema poate rezolva doar conflicte
ntre dou blocuri. Un victim cache simplu, fr predicie ar fi capabil s
reduc numrul de accese cu miss la cel de-al doilea nivel de cache la 3, dar
ar necesita 3n interschimbri n timpul execuiei buclei exterioare, cu

Arhitectura sistemului ierarhizat de memorie

43

influene evident defavorabile asupra timpului global de procesare. Aceasta


arat avantajul Selective Victim Cache-ului superioar altor scheme care
trateaz conflicte implicnd mai mult de dou blocuri. De reinut c,
penalitatea pentru o predicie greit n aceast schem este limitat la
accesul n victim cache i o posibil interschimbare, presupunnd c victim
cache-ul este suficient de mare pentru a reine blocurile conflictuale ntre
accese.

Metrici de performan
Metricile de performan folosite sunt rata de miss la nivelul L1 de
cache i timpul mediu de acces la ierarhia de memorie. n cazurile cu victim
cache simplu i cel cu victim cache selectiv, folosim de asemenea i
numrul de interschimbri ntre cache-ul principal i victim cache ca
metric de comparaie. Rata de miss la nivelul L1 de cache se bazeaz pe
numrul de referine propagate n nivelul urmtor al ierarhiei de memorie.
n caz de miss n cache-ul principal acestea sunt servite de ctre victim
cache, fiind pltit o penalitate pentru accesul n victim cache precum i
pentru interschimbrile de blocuri rezultate ntre cache-ul principal i victim
cache. Timpul mediu de acces la ierarhia de memorie ia n calcul i aceste
penalizri i de aceea este un bun indicator al performanei memoriei
sistemului, desigur mai complet dect rata de miss n nivelul L1 de cache.
Deoarece obiectivul principal al victim cache-ului este de a reduce
numrul de miss-uri de conflict n cache-ul mapat direct, este de asemenea
important s comparm procentul de miss-uri de conflict eliminate prin
fiecare din scheme. Miss-urile de conflict sunt de obicei calculate ca missuri suplimentare ale unui cache, comparate cu un cache complet asociativ de
aceeai mrime i care dezvolt un acelai algoritm de nlocuire. Algoritmul
folosit este LRU (Least Recently Used, cel mai de demult nefolosit) sau
variaiuni.

Modelarea timpului de acces la ierarhia de memorie


Estimarea timpului de acces se face ca o funcie de mrimea cacheului, dimensiunea blocului, asociativitatea i organizarea fizic a cache-ului.
Presupunem c penalitatea medie pentru un miss n cache-ul de pe nivelul
L1 este acelai pentru toate arhitecturile i este de p ori ciclul de baz al
cache-lui principal, unde p variaz ntre 1 i 100. Considerm un bloc de
dimensiune de 32 octei, penalitate n caz de miss de 10-50 de cicli, n caz
c nu exist un nivel L2 de cache. Cteva studii, raporteaz c penalitatea
pentru un miss poate fi pn la 100-200 de cicli cnd nu este inclus un al
doilea nivel de cache.
Parametrii

Cache

Victim

Selective

2-way

Arhitectura sistemului ierarhizat de memorie

Mapat
Direct
Referine totale
R
Numr total de miss-uri n L1 Md
cache
Hit-uri n victim cache
Interschimbri ntre victim cache
i cache-ul principal
Timp mediu de acces
Td
Timp mediu de penalizare (n cicli p
CPU)
Perioada de tact CPU
clk

44

Cache
Simplu

Victim
Cache

cache

Mv

Ms

M2

hv
Iv

hs
Is

Tv

Ts

T2

clk2-way
Tabelul 2.2.

Notaiile folosite n calculul timpului de acces

Tabelul 2.2., rezum toate notaiile privitoare la calculul timpului de


acces la memorie. R este numrul total de referine generate de programele
de tip trace. n cazul cache-ului simplu mapat direct, Md reprezint numrul
total de accese cu miss n cache. n cazul folosirii unui victim cache obinuit
sau a unui Selective Victim Cache, Mv i Ms sunt folosite pentru a nota
numrul de accese cu miss n primul nivel de cache care sunt servite de al
doilea nivel al ierarhiei de memorie. Numrul total de hituri n victim cache
pentru aceste scheme le-am notat cu hv i respectiv hs.
Timpul mediu de acces pentru un cache mapat direct se calculeaz
astfel:
Td = clk

R + p Md
M

= clk1 + p d
R
R

(2.1)

Pentru fiecare miss, sunt necesari p cicli suplimentari. Presupunem c


cei p cicli includ toate cheltuielile CPU-ului. n cazul victim cache-ului
simplu, o penalitate de p cicli este produs la fiecare miss n primul nivel al
ierarhiei de memorie. n plus, pentru fiecare referin servit de ctre victim
cache, o penalizare suplimentar de cel puin un ciclu este pltit pentru
accesarea n victim cache, iar operaia de interschimbare dintre cache-ul
principal i victim cache necesit o penalitate de civa cicli (presupunem 3
cicli, de altfel minimali). Aceast penalitate ar fi chiar mai mare dac
matricea memoriei cache-ului mapat direct sau a victim cache-ului este
organizat fizic n cuvinte egale cu o fraciune din mrimea blocului de
cache. De exemplu, blocul poate avea dimensiunea de 32 de octei, dar

Arhitectura sistemului ierarhizat de memorie

45

cache-ul poate fi organizat n cuvinte de 8 sau 16 octei. n acest caz


penalitatea pentru interschimbare va fi multiplicat cu raportul:
Dimensiunea blocului de cache
Mrimea cuvntului de date al cache - ului

Astfel, timpul mediu de acces la memorie pentru un sistem cu victim


cache simplu, se calculeaz astfel:
M
h + 3 Iv

Tv = clk1 + p v + v

R
R

(2.2)

ntr-un sistem cu Selective Victim Cache, timpul mediu de acces la


memorie poate fi calculat n acelai fel ca n cazul victim cache-ului simplu.
O penalitate de p cicli este aplicat de cte ori este accesat nivelul urmtor al
ierarhiei de memorie. Un ciclu suplimentar este necesar la un hit n victim
cache i 3 cicli suplimentari pentru operaia de interschimbare de blocuri.
Timpul mediu de acces la memorie este dat de formula:
M
h + 3 Is

Ts = clk1 + p s + s

R
R

(2.3)

Se observ c, chiar dac rata de miss Ms este foarte aproape de cea a


victim cache-ului simplu, sistemele ce folosesc selective victim cache pot
totui oferi o mbuntire substanial a performanei superioar sistemelor
cu victim cache simplu, din urmtoarele dou motive:
1. Rata de miss local n cache-ul principal poate fi mbuntit
printr-un plasament mai bun al blocurilor.
2. Numrul de interschimbri poate descrete ca rezultat al
algoritmului de predicie. Aceasta reduce media penalizrii pentru
accesele care sunt servite de victime cache, n special cnd numrul
de cicli folosii la o interschimbare este ridicat.
Se folosete timpul mediu de acces la memorie pentru un sistem cu un
cache 2-way associative, ca o referin pentru evaluarea performanei
sistemului cu selective victim cache. Pentru estimarea timpului de acces la
un cache cache 2-way associative, se presupune c penalitatea n
nanosecunde pentru al doilea nivel al ierarhiei de memorie rmne aceeai
ca i n cazul cache-ului mapat direct. Pot exista unele constrngeri de
implementare care afecteaz penalitatea n caz de miss. Accesarea
magistralei sistem, poate implica o secven de operaii care necesit un

Arhitectura sistemului ierarhizat de memorie

46

numr fix de perioade de tact. Astfel, numrul de cicli necesari pentru


deservirea unui miss nu poate descrete proporional cu creterea perioadei
de tact CPU, rezultnd ntr-o penalizare mai mare n cazul cache-ului cache
2-way associative. Timpul mediu de acces la memorie acestui cache este
estimat de relaia:

clk 2-way
M
T2 = clk
+ p 2
R
clk

(2.4)

Primul termen reprezint timpul de acces la cache iar al doilea termen


este timpul de acces la nivelul urmtor de memorie. Comparnd aceast
ecuaie cu (2.1), orice mbuntire a performanei se datoreaz celui de-al
doilea termen, n timp ce primul termen reprezint ctigul introdus prin
asociativitatea cache-ului asupra timpului de acces. Dac mbuntirea
datorat celui de-al doilea termen nu este adecvat pentru a compensa acest
ctig, performana cache-ului 2-asociativ poate fi inferioar celei a cacheului mapat direct.
mbuntirea n performan obinut att prin victim cache ct i prin
selective victim cache variaz n funcie de trace, depinznd de mrimea lor
i de numrul de conflicte de acces pe care schema de predicie le elimin.
Chiar pentru programe mici, selective vitim cache asigur o mbuntire
semnificativ comparat cu victim cache-ul simplu, cnd cache-ul nu este
suficient de mare pentru a memora ntreg programul. Stiliadis i Varma,
afirm c cea mai bun mbuntire a performanei n termenii ratei de
miss, de aproximativ 33%, este obinut pentru cache-uri de instruciuni de
8 pn la 16 Koctei. Pentru cache-uri mai mari de dimensiuni 64 pn la
128 Koctei, majoritatea trace-urilor pot fi uor memorate n cache i missurile de conflict reprezint un mic procent din numrul total de accese cu
miss. n aceste cazuri victim cache-ul simplu este capabil s elimine
majoritatea conflictelor, i performana sa este comparabil cu cea a
selective victim cache-ului.
O problem potenial cu algoritmul de predicie dezvoltat n selective
victim cache este aceea c, performana sa se poate degrada odat cu
creterea dimensiunii blocului, ca rezultat al partajrii biilor de stare de
cuvinte din interiorul aceluiai bloc. Selective victim cache asigur o
mbuntire semnificativ a ratei de miss indiferent de dimensiunea
blocului. Pentru blocuri de dimensiune de 4 octei, selective victim cache
reduce rata de miss cu aproximativ 30% fa de o arhitectur cache cu
mapare direct, n timp ce pentru blocuri de dimensiuni de 64 octei, rata de
miss este redus cu aproape 50%. Aceste rezultate contrazic

Arhitectura sistemului ierarhizat de memorie

47

comportamentul excluziunii dinamice, unde reducerea ratei de miss scade


cu creterea dimensiunii blocului. Rezultatele se datoreaz meninerii la
aceeai dimensiune a victim cache-ului n termenii numrului de blocuri,
astfel c, o cretere a dimensiunii blocului determin o cretere efectiv a
capacitii cache-ului. Aceast cretere n capacitate compenseaz mai mult
dect orice degradare a ratei de predici prin creterea dimensiunii blocului.
Acest fapt nu crete semnificativ complexitatea implementrii victim cacheului, deoarece asociativitatea rmne aceeai. Indiferent de mrimea cacheului, numrul de interschimbri prin folosirea selective victim cache-ului
este redus cu 50% sau mai mult fa de folosirea unui victim cache simplu.
Cnd dimensiunea blocului este mai mare, n funcie de implementare,
operaia de interschimbare poate necesita civa cicli. Prin mbuntirea att
a ratei de hit ct i a numrului de interschimbri, selective victim cache-ul
poate crete semnificativ performana primului nivel de cache, superioar
victim cache-ului simplu i cache-ului two-way set associative. Pentru
diverse dimensiuni de cache, mbuntirea ratei de miss la cache-ul twoway semiasociativ nu este suficient pentru a compensa creterea timpului
de acces, rezultnd ntr-o cretere net a timpului mediu de acces la
memorie superior cache-urilor mapate direct. Cea mai mare cretere n
performan a selective victim cache-ului superioar cache-ului
semiasociativ, este aproximativ 25%, obinut pentru dimensiuni de cacheuri de 16-64 Koctei.
Politica de scriere implementat este write back cu write allocate.
Pentru a menine proprietatea de incluziune multinivel, blocurile din cacheul de pe nivelul L1 au fost invalidate cnd au fost nlocuite pe nivelul L2 de
cache. Dei selective victim cache-ul produce mbuntiri semnificative ale
ratei de hit comparativ cu cache-urile mapate direct de dimensiune redus,
performana sa este inferioar celei obinut folosind victim cache simplu.
De fapt, mbuntirile ratei de miss variaz semnificativ n funcie de traceuri. Sunt dou motive care explic acest raionament: primul este natura
acceselor la memorie a programelor folosite. Programele care implic o
alocare static a datelor i structurilor de date, arat o mbuntire cu
selective victim cache, ca rezultat al folosirii algoritmului de predicie.
Structurile de date principale ale acestor programe sunt vectori. Algoritmul
de predicie este capabil s rezolve un numr mare de conflicte n aceste
cazuri, fr s acceseze al doilea nivel. n programele cu alocare dinamic a
memoriei i folosire a extensiei de pointeri, conflictele sunt mai greu de
rezolvat de ctre algoritmul de predicie. Ratele de miss n situaia folosirii
selective victim cache-ului pentru aceste trace-uri sunt mai mari dect n
cazul folosirii unui simplu victim cache. n timp ce pentru selective victim
cache presupunem un al doilea nivel de cache i meninem proprietatea de

Arhitectura sistemului ierarhizat de memorie

48

incluziune, simularea victim cache-ului simplu presupune c al doilea nivel


al ierarhiei este memoria principal.
Chiar dac mbuntirile asupra ratei de miss sunt mai puin
convingtoare n cazul cache-urilor de date comparativ cu cel de
instruciuni, selective victim cache poate reduce timpul mediu de acces la
memorie pentru primul nivel al cache-ului de date prin reducerea numrului
de interschimbri. Pentru cache-uri de dimensiuni pn la 64 Koctei,
numrul de interschimbri pentru selective victim cache este mult mai mic
dect cel pentru victim cache simplu. n cteva cazuri mbuntirea este
mai mare de 50%. Numrul de interschimbri pentru victim cache simplu
descrete sub selective victim cache pentru dimensiuni mai mari sau egale
cu 128 Koctei. Astfel, pentru cache-uri de 128 Koctei, selective victim
cache este capabil s reduc rata de miss prin creterea numrului de
interschimbri. Dei, victim cache-ul simplu, pare s se comporte mai bine
dect selective victim cache-ul, pentru cache-uri de dimensiuni sub 8
Koctei, din punct de vedere al timpului mediu de acces. Performana cacheului semiasociativ este inferioar ambelor (simplu victim cache i selective
victim cache), dar superioar cache-ului mapat direct.
Trace-urile de date sunt caracterizate de o rat de miss mai mare dect
trace-urile de instruciuni. n plus miss-urile de conflict sunt rspunztoare
de procentul ridicat din rata total de miss. Sunt dou consecine ale acestui
fapt: primul, efectul reducerii ratei de miss asupra timpului de acces la
memorie este mai pronunat, iar al doilea, cache-urile semiasociative pe 2
ci asigur mbuntiri n timpul mediu de acces chiar i pentru cache-uri
mari, spre deosebire de cache-urile de instruciuni, unde avantajul obinut
prin reducerea ratei de miss datorat creterii asociativitii este mai mare
dect ctigul obinut asupra timpului de acces la cache. Concluzionm c,
att victim cache-ul simplu ct i selective victim cache-ul sunt mult mai
puin atractive pentru folosire n cache-ul de date comparativ cu cel de
instruciuni.
n continuare se analizeaz modul n care informaiile de stare de care
are nevoie schema de predicie dezvoltat n selective victim cache pot fi
stocate n interiorul ierarhiei de memorie. Dup cum s-a artat schema
selective victim cache-ului necesit doi bii de stare pentru a pstra
informaii despre istoria blocurilor din cache - bitul sticky i bitul hit. Bitul
sticky este asociat logic cu blocul din cache-ul principal. De aceea este
normal s se memoreze acest bit n cache-ul mapat direct ca parte a fiecrui
bloc. Pe de alt parte, bitul hit este asociat logic cu fiecare bloc din memoria
principal. Astfel, ntr-o implementare perfect, biii de hit trebuie memorai
n memoria principal. Aceast abordare este impracticabil n majoritatea
cazurilor.

Arhitectura sistemului ierarhizat de memorie

49

Figura 2.8. Implementarea schemei de memorare a biilor de hit

Dac ierarhia de memorie include un la doilea nivel de cache, este


posibil s se memoreze biii de hit n cadrul blocurilor din acest nivel. Cnd
un bloc este adus pe nivelul L1 de cache din nivelul L2, o copie local a
bitului de hit este memorat n blocul de pe nivelul L1. Aceasta elimin
nevoia de acces a nivelului L2 de cache de fiecare dat cnd bitul hit este
actualizat de ctre algoritmul de predicie. Cnd blocul este nlocuit din
nivelul L1 de cache, bitul hit corespondent este copiat n nivelul L2. O
problem ar fi ns aceea c, multiple locaii din memoria principal sunt
forate s mpart acelai bit de pe nivelul L2. Astfel, cnd un bloc este
nlocuit de pe nivelul L2 de cache, toate informaiile lui de stare se pierd,
reducnd eficacitatea algoritmului de predicie. De fiecare dat cnd un bloc
este adus pe nivelul L2 de cache din memoria principal, bitul hit al su
trebuie setat la o valoare iniial. Pentru o secven specific de acces, valori
iniiale diferite pot produce rezultate diferite. Cu cache-urile de pe nivelul
L2 de dimensiuni mari, efectul valorilor iniiale este probabil mai mic.
O tratare alternativ este de a menine biii de hit n interiorul CPU, n
cadrul nivelului L1 de cache. n abordarea lui Stiliadis i Varma, un ir de
bii de hit numit hit array este meninut ca parte a nivelului L1 de cache.
Fiecare bloc de memorie este asociat unuia din biii acestui ir. Lungimea
irului este inevitabil mai mic dect numrul maxim de blocuri care pot fi
adresate. Deci, mai mult de un bloc va fi mapat aceluiai bit de hit, cauznd
datorit interferenelor un aleatorism ce trebuie introdus n procesul de
predicie. Dei, aceasta poate potenial reduce performana selective victim
cache-ului, rezultatele simulrilor nu confirm acest lucru chiar i pentru
iruri de hit de dimensiune modest.

Arhitectura sistemului ierarhizat de memorie

50

Implementarea nivelului L1 de cache sistem este prezentat n Figura


4. Bitul sticky este meninut cu fiecare bloc n cache-ul principal. Nici un bit
de stare nu este necesar n victim cache. Biii de hit sunt pstrai n hit array,
adresai de o parte a adresei de memorie. Dimensiunea irului de hit bit este
aleas ca un multiplu al numrului de blocuri din cache-ul principal. Astfel,
Dimensiunea irului hit array = Numr de blocuri n cache-ul
principal H
unde H determin gradul de partajare a biilor de hit de ctre blocurile
memoriei principale. Se presupune c H este o putere a lui 2, H=2h. Hit
array poate fi adresat de adresa de bloc concatenat cu cei mai puin
semnificativi bii h, din partea de tag a adresei. O valoare mare pentru H
implic mai puine interferene ntre blocurile conflictuale la biii de hit.
Dac H este ales ca raport dintre dimensiunea cache-ului de pe nivelul L2 i
cea a cache-ului de pe nivelul L1 (principal), atunci efectul este similar cu
meninerea biilor hit n nivelul L2 de cache.
O problem a implementrii schemei att a victim cache-ului ct i a
selective victim cache-ului este costul implementrii victim cache-ului full
asociativ. Chiar i atunci cnd aceste cache-uri sunt foarte mici, costul
hardware al memoriei adresabil contextual (CAM) poate fi semnificativ.
Cache-urile complet asociative cu algoritm de nlocuire LRU pot uneori
suferi de o rat de miss mai ridicat dect cache-urile two-way asociative
deoarece algoritmul de nlocuire nu este cel optimal. Efectul ambelor
probleme de mai sus poate fi diminuat prin reducerea asociativitii victim
cache-ului. Cu un victim cache semiasociativ pe 2 ci, nu se observ nici o
cretere a ratei de miss la nivelul urmtor al ierarhiei de memorie pentru nici
o instruciune din trace-urile simulate, att n victim cache simplu ct i n
selective victim cache. Surprinztor, victim cache-ul semiasociativ pe 2 ci
poate mbunti rata de miss i timpul mediu de acces pentru mai multe
trace-uri. Acest comportament se datoreaz algoritmului de nlocuire LRU
dezvoltat n victim cache-ul complet asociativ. Blocurile mutate n victim
cache-ul complet asociativ ca rezultat al conflictelor din cache-ul principal
sunt nlocuite frecvent nainte de a fi accesate din nou. Victim cache-ul
semiasociativ pe 2 ci asigur o mai bun izolare pentru blocurile sale n
multe cazuri, micornd rata de miss n victim cache. n plus, datorit
dimensiunii sale reduse, miss-urile de conflict formeaz doar o mic
fraciune din numrul total de accese cu miss n victim cache comparativ cu
miss-urile de capacitate. Aceasta limiteaz mbuntirea ratei de miss prin
creterea asociativitii victim cache-ului, chiar cu un algoritm optimal de
nlocuire. Se observ c, victim cache-ul full asociativ poate mbunti

Arhitectura sistemului ierarhizat de memorie

51

dramatic rata de miss n cazul conflictelor ce implic mai mult de trei


blocuri, blocurile conflictuale fiind reinute n victim cache ntre accese.
Cu un victim cache simplu coninutul cache-ului principal mapat
direct este neafectat de asociativitatea acestuia. Astfel, rata de miss local
rmne neschimbat n timp ce se variaz asociativitatea victim cache-ului.
Prin urmare toate mbuntirile efectuate asupra ratei de miss la nivelul L1
de cache pot fi atribuite mbuntirii ratei de miss locale a victim cacheului. Cu victim cache-ul selectiv, asociativitatea poate afecta potenial att
rata de miss local a cache-ului principal ct i numrul de interschimbri
dintre cele dou cache-uri. Comparaia timpului de acces ine cont de
schimbrile aprute n rata de miss i numrul de interschimbri (substanial
micorat) i de aceea timpul mediu de acces reprezint o msur mai bun
pentru caracterizarea efectului de asociativitate al victim cache-ului asupra
performanei sistemului. Chiar cu un victim cache mapat direct, timpul
mediu de acces este mai mare sau egal dect cel din cazul victim cache-ului
complet asociativ. Cnd folosim un victim cache de date semiasociativ pe 2
ci, rezultatele sunt mai proaste dect acelea cu un victim cache complet
asociativ, att pentru victim cache simplu ct i pentru victim cache-ul
selectiv. Acest lucru nu surprinde, dnd conflictelor de acces la date o
natur aleatorie. Astfel, un cache complet asociativ poate fi nc atractiv
cnd este folosit ca i cache de date. Totui, mbuntirile observate sunt
mai mici.
Chiar dac nu este nici o mbuntire a ratei de hit n cache-ul
principal, schema victim cache-ului selectiv poate totui asigura o
mbuntire a performanei superioar victim cache-ului simplu. Pentru
schema cu SVC rezultatele demonstreaz c mbuntirile de performan
sunt puternic determinate de impactul algoritmului de predicie asupra
numrului de interschimbri cu cache-ul mapat direct. Algoritmul poate de
asemenea contribui la o mai bun plasare a blocurilor n cache, reducnd
numrul de accese n victim cache i genernd rate de hit ridicate n cacheul mapat direct.
Folosirea victim cache-ului selectiv determin mbuntiri ale ratei de
miss precum i ale timpului mediu de acces la memorie, att pentru cacheuri mici ct i pentru cele mari (4Koctei - 128 Koctei). Simulri fcute pe
trace-uri de instruciuni a 10 benchmark-uri SPEC92 arat o mbuntire
de aproximativ 21% a ratei de miss, superioar folosirii unui victim cache
simplu de 16 Koctei cu blocuri de dimensiuni de 32 octei; numrul
blocurilor interschimbate ntre cache-ul principal i victim cache s-a redus
cu aproximativ 70%.

Arhitectura sistemului ierarhizat de memorie

52

2.2. MEMORIA VIRTUAL


Memoria virtual reprezint o tehnic de organizare a memoriei prin
intermediul creia programatorul vede un spaiu virtual de adresare foarte
mare i care, fr ca programatorul s simt, este mapat n memoria fizic
disponibil. Uzual, spaiul virtual de adrese corespunde suportului disc
magnetic, programatorul avnd iluzia prin mecanismele de memorie virtual
(MV), c deine o memorie (virtual) de capacitatea hard-discului i nu de
capacitatea memoriei fizice preponderent DRAM (limitat la 64 1024 Mo
la ora actual).
n cazul MV, memoria principal este analoag memoriei cache ntre
CPU (Central Processing Unit) i memoria principal, numai c de aceast
dat ea se situeaz ntre CPU i discul hard. Deci memoria principal (MP)
se comport oarecum ca un cache ntre CPU i discul hard. Prin
mecanismele de MV se mrete probabilitatea ca informaia ce se dorete a
fi accesat de ctre CPU din spaiul virtual (disc), s se afle n MP,
reducnduse astfel dramatic timpul de acces de la 8 15 ms la 45 70 ns n
tehnologiile actuale (2002) ! De obicei, spaiul virtual de adresare este
mprit n entiti de capacitate fix (4 64 Ko actualmente), numite
pagini. O pagin poate fi mapat n MP sau pe disc.

Arhitectura sistemului ierarhizat de memorie

53

Figura 2.9. Maparea adreselor virtuale n adrese fizice

n general, prin mecanismele de MV, MP conine paginile cel mai


recent accesate de ctre un program, ea fiind dup cum am mai artat, pe
post de cache ntre CPU i discul hard. Transformarea adresei virtuale
emis de ctre CPU ntro adres fizic (existent n spaiul MP) se numete
mapare sau translatare. Aadar mecanismul de MV ofer o funcie de
relocare a programelor (adreselor de program), pentru c adresele virtuale
utilizate de un program sunt relocate spre adrese fizice diferite, nainte ca
ele s fie folosite pentru accesarea memoriei. Aceast mapare permite
aceluiai program s fie ncrcat i s ruleze oriunde ar fi ncrcat n MP,
modificrile de adrese realizndu-se automat prin mapare (fr MV un
program depinde de obicei n execuia sa de adresa de memorie unde este
ncrcat).
MV este un concept deosebit de util n special n cadrul sistemelor de
calcul multiprogramate care - de exemplu prin time-sharing - permit
execuia cvasi-simultan a mai multor programe (vezi sistemul de operare
WINDOWS 2000, NT, Unix, Ultrix etc.). Fiecare dintre aceste programe are
propriul su spaiu virtual de cod i date ( avnd alocate un numr de pagini
virtuale), dar n realitate toate aceste programe vor partaja aceeai MP, care
va conine dinamic, pagini aferente diverselor procese. Paginile vor fi

Arhitectura sistemului ierarhizat de memorie

54

dinamic ncrcate de pe disc n MP respectiv evacuate din MP pe disc (spre


a permite ncrcarea altora, mai proaspete).
Cnd o pagin accesat nu se gsete n MP, ea va trebui adus prin
declanarea unui mecanism de excepie, de pe disc. Acest proces analogul
miss-urilor de la cache-uri se numete page fault (PF). Evenimentul PF
va declana un mecanism de excepie care va determina intrarea ntr-o
subrutin de tratare a evenimentului PF. Aici prin software deci se va
aduce de pe disc n MP pagina dorit dup ce, firete, n prealabil s-a
evacuat eventual o alt pagin din MP. Acest proces este unul de lung
durat, necesitnd cteva ms bune la ora actual. Avnd n vedere
multitaskingul, MV trebuie s asigure i mecanismul de protecie a
programelor (ex. s nu permit unui program utilizator s scrie zona de date
sau cod a sistemului de operare sau a altui program, s nu permit scrierea
ntr-o pagin accesabil numai prin citire etc.).
n implementarea MV trebuie avute n vedere urmtoarele aspecte
importante:
paginile s fie suficient de mari (4 ko 16 ko 64 ko) astfel nct s
compenseze timpul mare de acces la disc (9 12 ms).
organizri care s reduc rata de evenimente PF, rezultnd un plasament
flexibil al paginilor n memorie (MP)
PF-urile trebuie tratate prin software i nu prin hardware (spre deosebire
de miss-urile n cache-uri), timpul de acces al discurilor permitnd lejer
acest lucru.
scrierile n MV se fac dup algoritmi tip Write Back i nu Write
Through (ar consuma timp enorm).

Arhitectura sistemului ierarhizat de memorie

55

Figura 2.10. Translatare adres virtual n adres fizic

Obs. Fiecare program are propria sa tabel de pagini care mapeaz spaiul
virtual de adresare al programului ntr-un spaiu fizic, situat n M.P.
Tabela de pagini + PC + registrele microprocesorului formeaz starea
unui anumit program. Programul + starea asociat caracterizeaz un anumit
proces (task). Un proces executat curent este activ, altfel el este inactiv.
Comutarea de taskuri implic inactivarea procesului curent i activarea altui
proces, inactiv pn acum rezultnd deci ca fiind necesar
salvarea/restaurarea strii proceselor. Desigur, sistemul de operare (S..)
trebuie doar s rencarce registrul pointer al adresei de baz a paginii (PTR)
pentru a pointa la tabela de pagini aferent noului proces activ.

Excepia Page Fault (P.F.)


Apare n cursul mecanismului de translatare a adresei virtuale n
adres fizic, dac bitul P = 0. Ca urmare, printr-o procedur de excepie se

Arhitectura sistemului ierarhizat de memorie

56

d controlul unui handler al S.. n vederea tratrii. Aici S.. va trebui s


decid ce pagin din M.P. va trebui evacuat n vederea ncrcrii noii
pagini de pe disc. n general, ca principiu, se poate merge pe ideea LRU
(Least Recently Used), adic va fi evacuat pagina care nu a mai fost
accesat de ctre CPU de cel mai mult timp (se merge deci implicit pe
principiul localitii temporale).
Exemplu: CPU a accesat n ordine paginile: 10,12,9,7,11,10 iar acum
acceseaz pagina 8 care nu este prezent n MP evacueaz pagina 12 !
Dac urmtorul acces genereaz PF evacueaz pagina 9, .a.m.d.
Obs. Unele maini (ex. Pentium) implementeaz n tabela de pagini
cte un bit de referin pentru fiecare pagin. Acest bit este setat
la fiecare accesare a acelei pagini. S.. terge periodic aceti
bii nu nainte de a le memora starea astfel nct s
implementeze pentru fiecare pagin un contor; astfel, bazat pe
starea de moment a acestor contoare, se stabilete care pagin va
fi evacuat. Se realizeaz astfel o implementare simplificat,
bazat pe politica LRU.
Scrierile n MP se desfoar dup urmtoarele principii:
strategie similar cu cea de tip write-back de la memoriile cache (copyback)
se adaug un Dirty Bit (D) n tabela de pagini pentru fiecare pagin.
Bitul D e setat la fiecare scriere n pagin la evacuare, o pagin avnd
bitul D=0, nu are rost s se evacueze efectiv pe disc pierdere mare de
timp minimizare scrieri !

Translation Lookaside Buffers (TLB)


Prin paginare, fiecare acces la o dat necesit 2 accese la memorie:
unul pentru obinerea adresei fizice din tabela de pagini, iar cellalt pentru
accesarea propriu-zis a datei n M.P. n vederea reducerii acestui timp de
acces (dublu), tabela de pagini este caat (memorat parial) n CPU.
Memoria cache care memoreaz maparea tabelei de pagini se numete TLB
(Translation Lookaside Buffer). Ca orice cache, TLB-ul poate avea diferite
grade de asociativitate. Exist evacuri/ncrcri ntre TLB i tabela de
pagini din M.P.
Deoarece TLB-ul este implementat n general on-chip, capacitatea
sa este relativ mic (321024 intrri), n comparare cu tabela de pagini care
are 1 4 M intrri. De obicei TLB-ul se implementeaz complet asociativ
(full-associative), pentru a avea o rat de miss sczut (0,01 % 0,1 % 1

Arhitectura sistemului ierarhizat de memorie

57

%). Missurile n TLB se pot rezolva att prin protocol hardware ct i printrun handler software.

Figura 2.11. Relaia TLB - cache ntr-un microsistem DEC 3100 (microprocesor
MIPS-R2000)

Obs. Ar fi mai rapid dac s-ar adresa cache-ul cu adresa virtual (cache-uri
virtuale) i nu cu cea fizic. Probleme/soluii n acest sens sunt
comutri taskuri- Process Identifier, analiz antialias, "page colouring"
etc. O soluie simpl i imediat ar consta n adresarea cache-ului cu
biii P care sunt nemodificai prin procesul de translatare. Desigur n
acest caz este necesar ca dimensiunea cache dimensiunea paginii.

Arhitectura sistemului ierarhizat de memorie

58

Protecia n sistemele cu M.V.


Dei fiecare proces are propriul su spaiu virtual de adresare,
memoria fizic (MP) este partajat ntre mai multe procese (procese
utilizator, S, driverele I/O etc.). Desigur, trebuie s se controleze strict
accesul unui proces n zonele de cod i date ale altui proces rezultnd
necesitatea proteciei la scrieri/citiri. De exemplu, numai S.. trebuie s
poat modifica tabelele de pagini aferente diferitelor procese. n vederea
implementrii proteciilor, hardul trebuie s asigure cel puin urmtoarele 3
condiii:
1. Cel puin 2 moduri distincte de rulare a unui program:modul
supervizor (kernel, executiv) n care un proces poate s execute
orice instruciuni i s acceseze oricare resurse i respectiv modul
user n care un proces are o mulime de restricii legate de protecia
i securitatea sistemului.
2. S existe o parte a strii CPU n care un proces user s nu poat
scrie. De exemplu: bii de stare user/kernel, registrul PTR, bitul
validare/invalidare, excepii, pagini kernel (ACCES) etc.
Posibilitatea unui proces user s scrie astfel de resurse ar determina
S.. (proces supervizor) s nu poat controla procesele user.
3. Mecanismele de tranziie a procesorului din modul supervizor n
modul user i invers. Tranziia user-supervizor n modul user se
poate face printr-o excepie (ntrerupere) sau printr-o instruciune
special de tip SYSTEM CALL, care transfer controlul la o adres
dedicat din spaiul de cod supervizor (CALL GATE la Pentium).
Se salveaz PC-ul i contextul procesului curent i CPU e plasat n
modul de lucru anterior (user aici).
De asemenea, din modul supervizor se poate trece n modul user
prin simpla modificare a biilor de mod (e permis !). De exemplu, s
presupunem c un proces P2 dorete s i transmit (citire) anumite date,
printr-o pagin proprie, unui alt proces P1. Pentru asta, P2 ar putea apela o
rutin a S.. (printr-un SYSTEM CALL), care la rndul ei (fiind
privilegiat!) va crea o intrare n tabela de pagini a lui P1 care s se mapeze
pe pagina fizic pe care P2 dorete s-o pun la dispoziie. S.. (supervizor)
poate s utilizeze bitul Write Protection pentru a mpiedica procesul P1 s
altereze respectiva pagin. i ali bii de control de tip drepturi de acces" n
pagin pot fi inclui n tabela de pagini i n TLB.

Arhitectura sistemului ierarhizat de memorie

59

Obs. n cazul unei comutri de taskuri de la procesul P1 la procesul P2,


TLB-ul trebuie golit din 2 motive: n caz de hit P2 s nu utilizeze
paginile lui P1 i respectiv s se ncarce n TLB intrrile din tabela de
pagini a procesului P2 (pointat de noul PTR). Asta se ntmpl numai
dac P1 i P2 folosesc VPN-uri identice (biii 31 12 din adrese
virtual). Pentru a nu goli TLB-ul prea des, se prefer adugarea la
tag-ul acestuia a unui cmp numit PID (Process Identifier
identificator al procesului), care va contribui corepunztor la HIT.
Aceast informaie (PID) este inut de obicei ntr-un registru special,
ce va fi ncrcat de ctre S.. la fiecare comutare de taskuri. Ca i
consecin se evit n majoritatea cazurilor golirea (i implicit
reumplerea!) TLB-ului.
n concluzie, foarte succint, protecia este asigurat n principal prin:
moduri de lucru CPU de diferite nivele de privilegiu
control strict al S.. asupra tranziiilor din user n kernel (prin CALL
GATES-uri - pori de apel - la o anumit adres determinat din spaiul
de cod kernel)
protecie a paginilor prin drepturi de acces la pagin (read only,
read/write etc).

Tratarea miss-urilor n TLB i a PF-urilor


Pe durata procesului de translatare a adresei virtuale n adres fizic
pot s apar 2 evenimente de excepie:
1. TLB miss, dar pagina accesat este prezent n memoria fizic
(M.P.)
2. Page Fault (PF), adic TLB miss urmat de faptul c pagina dorit
nu este prezent n tabela de pagini rezident n M.P. (bit P=0).
Un TLB miss genereaz de obicei o procedur hardware de aducere a
numrului paginii fizice din tabela de pagini. Aceast operaie se poate
implementa prin hardware, ea durnd un timp relativ scurt (cca. 20 50
tacte CPU).
Tratarea PF n schimb, necesit un mecanism de tratare al excepiei
care s ntrerup procesul activ, s transfere controlul rutinei de tratare PF
(S..) i apoi s redea controlul procesului ntrerupt. PF va fi recunoscut pe
parcursul ciclilor de acces la memorie. Cum instruciunea care a cauzat PF
trebuie reluat, rezult c trebuie salvat n stiv (automat) PC-ul aferent
acesteia. Pentru asta, exist un registru special EPC (Exception PC), ntruct
PC-ul propriu-zis poate s fie mult incrementat sau chiar complet altul (din
motive de prefetch, branch-uri etc.). Mai apoi, printr-un sistem de

Arhitectura sistemului ierarhizat de memorie

60

ntreruperi (vectorizate) se d controlul rutinei de tratare din cadrul S..


Aici, se afl cauza excepiei prin consultarea registrului cauz excepie iar
apoi se salveaz ntreaga stare (context) a procesului ntrerupt (regitrii
generali, PTR, EPC, registri cauz excepie etc.). Dac PF-ul a fost cauzat
de un fetch sau write data, adresa virtual care a cauzat PF trebuie
calculat din nsi formatul instruciunii pe care PF s-a produs (PC-ul
aferent acesteia e memorat n EPC), de genul base + offset.
Odat tiut adresa virtual care a cauzat PF, rutina de tratare a S..
aduce pagina de pe disc n MP, dup ce mai nti a evacuat (LRU) o pagin
din MP pe disc. Cum accesul pe disc dureaz mii de tacte, uzual S.. va
activa un alt proces pe aceast perioad.

Segmentarea
Constituie o alt variant de implementare a MV, care utilizeaz n
locul paginilor de lungime fix, entiti de lungime variabil zise segmente.
n segmentare, adresa virtual este constituit din 2 cuvinte: o baz a
segmentului i respectiv un deplasament (offset) n cadrul segmentului.
Datorit lungimii variabile a segmentului (de ex. 1 octet 2 octei la
arhitecturile Intel Pentium), trebuie fcut i o verificare a faptului c adresa
virtual rezultat (baza + offset) se ncadreaz n lungimea adoptat a
segmentului. Desigur, segmentarea ofer posibiliti de protecie puternice
i sofisticate a segmentelor. Pe de alt parte, segmentarea induce i
numeroase dezavantaje precum:
2 cuvinte pentru o adres virtual, necesare avnd n vedere lungimea
variabil a segmentului. Asta complic sarcina compilatoarelor i a
programelor
ncrcarea segmentelor variabile n memorie mai dificil dect la
paginare
fragmentare a memoriei principale (poriuni nefolosite)
frecvent, trafic ineficient MP-disc (de exemplu pentru segmente mici,
transferul cu discul e complet ineficient accese la nivel de sector = 512
octeti)
Exist n practic i implementri hibride segmentare paginare.

3. PROCESOARE PIPELINE SCALARE CU SET


OPTIMIZAT DE INSTRUCIUNI [7]

3.1. MODELUL RISC. GENEZ I CARACTERISTICI


GENERALE
Microprocesoarele RISC (Reduced Instruction Set Computer) au
aprut ca o replic la lipsa de eficien a modelului convenional de procesor
de tip CISC (Complex Instruction Set Computer). Multe dintre
instruciunile main ale procesoarelor CISC sunt foarte rar folosite n softul
de baz, cel care implementeaz sistemele de operare, utilitarele,
translatoarele, etc. Lipsa de eficien a modelului convenional CISC a fost
pus n eviden prin anii '80 de arhitecturi precum INTEL 80x86,
MOTOROLA 680x0, iar in domeniul (mini)sistemelor n special de ctre
arhitecturile VAX-11/780 i IBM - 360,370, cele mai cunoscute la acea
vreme.
Modelele CISC sunt caracterizate de un set foarte bogat de instruciuni
- main, formate de instruciuni de lungime variabil, numeroase moduri de
adresare deosebit de sofisticate, etc. Evident c aceast complexitate
arhitectural are o repercursiune negativ asupra performanei mainii.
Primele microprocesoare RISC s-au proiectat la Universitile din
Stanford (coordonator prof. John Hennessy) i respectiv Berkeley
(coordonator prof. David Patterson, cel care a i propus denumirea RISC),
din California, USA (1981). Spre deosebire de CISC-uri, proiectarea
sistemelor RISC are n vedere c nalta performan a procesrii se poate
baza pe simplitatea i eficacitatea proiectului ("Keep it simple!). Strategia de
proiectare a unui microprocesor RISC trebuie s in cont de analiza
aplicaiilor posibile pentru a determina operaiile cele mai frecvent utilizate,
precum i optimizarea structurii hardware n vederea unei execuii ct mai
rapide a instruciunilor. Dintre aplicaiile specifice sistemelor RISC se
amintesc: conducerea de procese n timp real, procesare de semnale (DSP),
calcule tiinifice cu vitez ridicat, grafic de mare performan, elemente
de procesare n sisteme multiprocesor i alte sisteme cu prelucrare paralel,
etc.

Procesoare pipeline scalare cu set optimizat de instruciuni

62

Caracteristicile de baz ale modelului RISC sunt urmtoarele:


-Timp de proiectare i erori de construcie mai reduse dect la
variantele CISC.
-Unitate de comand hardware n general cablat, cu firmware redus
sau deloc, ceea ce mrete rata de execuie a instruciunilor.
-Utilizarea tehnicilor de procesare pipeline a instruciunilor, ceea ce
implic o rat teoretic de execuie de o instruciune / ciclu, pe modelele de
procesoare care pot lansa n execuie la un moment dat o singur
instruciune (procesoare scalare).
-Memorie sistem de nalt performan, prin implementarea unor
arhitecturi avansate de memorie cache i MMU (Memory Management
Unit). De asemenea conin mecanisme hardware de memorie virtual bazate
n special pe paginare ca i sistemele CISC de altfel.
-Set relativ redus de instruciuni simple, majoritatea fr referire la
memorie i cu puine moduri de adresare. n general, doar instruciunile
LOAD / STORE sunt cu referire la memorie (arhitectur tip LOAD /
STORE). La implementrile recente caracteristica de "set redus de
instruciuni" nu trebuie neleas add literam ci mai corect n sensul de set
optimizat de instruciuni n vederea implementrii aplicaiilor propuse (n
special implementrii limbajelor de nivel nalt - C, Visual C++, Pascal, etc.).
-Datorit unor particulariti ale procesrii pipeline (n special
hazardurile pe care aceasta le implic), apare necesitatea unor compilatoare
optimizate (schedulere), cu rolul de a reorganiza programul surs pentru a
putea fi procesat optimal din punct de vedere al timpului de execuie.
-Format fix al instruciunilor, codificate n general pe un singur cuvnt
de 32 bii, mai recent pe 64 bii (Alpha 21164, Power PC-620, etc.).
-Necesiti de memorare a programelor mai mari dect n cazul
microsistemelor convenionale, datorit simplitii instruciunilor ct i
reorganizatoarelor care pot aciona defavorabil asupra "lungimii"
programului obiect.
-Set de registre generale substanial mai mare dect la CISC-uri, n
vederea lucrului "n ferestre" (register windows), util n optimizarea
instruciunilor CALL / RET. Numrul mare de registre generale este util i
pentru mrirea spaiului intern de procesare, tratrii optimizate a
evenimentelor de excepie, modelului ortogonal de programare, etc.
Registrul R0 este cablat la zero n majoritatea implementrilor, pentru
optimizarea modurilor de adresare i a instruciunilor.
Microprocesoarele RISC scalare reprezint modele cu adevrat
evolutive n istoria tehnicii de calcul. Primul articol despre acest model de
procesare a aprut n anul 1981 (David Patterson, Carlo Sequin), iar peste
numai 6-7 ani toate marile firme productoare de hardware realizau

Procesoare pipeline scalare cu set optimizat de instruciuni

63

microprocesoare RISC scalare n scopuri comerciale sau de cercetare.


Performana acestor microprocesoare crete n medie cu cca. 75% n fiecare
an.

3.2. SET DE INSTRUCIUNI. REGITRI INTERNI LA


MODELUL ARHITECTURAL RISC
n proiectarea setului de instruciuni aferent unui microprocesor RISC
intervin o multitudine de consideraii dintre care se amintesc:
a). Compatibilitatea cu seturile de instruciuni ale altor procesoare pe
care s-au dezvoltat produse software consacrate (compatibilitatea de sus n
jos, valabil de altfel i la CISC-uri). Portabilitatea acestor produse pe noile
procesoare este condiionat de aceast cerin care vine n general n
contradicie cu cerinele de performan ale sistemului.
b). n cazul microprocesoarelor, setul de instruciuni este n strns
dependen cu tehnologia folosit, care de obicei limiteaz sever
performanele (constrngeri legate de aria de integrare, numrul de pini,
cerine restrictive particulare ale tehnologiei, etc.).
c). Minimizarea complexitii unitii de comand precum i
minimizarea fluxului de informaie procesor - memorie.
d). n cazul multor microprocesoare RISC setul de instruciuni main
este ales ca suport pentru implementarea unor limbaje de nivel nalt.
Setul de instruciuni al unui microprocesor RISC este caracterizat de
simplitatea formatului precum i de un numr limitat de moduri de adresare.
De asemenea, se urmrete ortogonalizarea setului de instruciuni. Deosebit
de semnificativ n acest sens, este chiar primul microprocesor RISC numit
RISC I Berkeley. Acesta deinea un set de 31 instruciuni grupate n 4
categorii: aritmetico-logice, de acces la memorie, de salt / apel subrutine i
speciale. Microprocesorul deinea un set logic de 32 regitri generali pe 32
bii. Formatul instruciunilor de tip registru-registru i respectiv de acces la
memorie (LOAD / STORE) este dat n figura 3.1:

Figura 3.1. Formatul instruciunii la Berkeley I RISC.

Cmpul IMM = 0 arat c cei mai puini semnificativi (c.m.p.s.) 5 bii


ai cmpului SOURCE2 codific al 2-lea registru operand.

Procesoare pipeline scalare cu set optimizat de instruciuni

64

Cmpul IMM = 1 arat c SOURCE2 semnific o constant pe 13 bii


cu extensie semn pe 32 bii.
Cmpul SCC (Store Condition Codes) semnific validare / invalidare
a activrii indicatorilor de condiie, corespunztor operaiilor aritmeticologice executate.
n ciuda setului redus de instruciuni al procesorului Berkeley RISC I,
acesta poate sintetiza o multitudine de instruciuni aparent "inexistente" la
acest model. Practic nu se "pierd" instruciuni ci doar "opcode"- uri, i ca o
consecin, n plus se simplific substanial logica de decodificare i unitatea
de comand.
Un alt format de instruciuni combin ultimele 3 cmpuri ale acestui
format ca un offset pe 19 bii, n instruciunile de salt relativ. Cu precizarea
c registrul R0 este cablat la 0, se poate arta c practic pot fi sintetizate
toate modurile de adresare de la procesorul CISC tip VAX11-780, dup cum
se sugereaz n tabel:
Mod de adresare
Vax 11/780
Echivalent RISC 1
Registru
Ri
Ri
Imediat
#Literal
S2 (literal pe 13 biti), IMM =1
Indexat
Ri + offset
Ri+S2(offset pe 13 biti)
Indirect-registru
(Ri)
Ri+S2, S2=0
Absolut
@#Adresa
R0+S2, R0=0
Tabelul 3.1.
Formatul instruciunii la Berkeley I RISC.

n ciuda setului redus de instruciuni al procesorului RISC I, acesta


poate sintetiza o multitudine de instruciuni aparent inexistente. Iat doar
cteva exemple :
Instruciune
VAX 11/780
Echivalent RISC I
Move registruMOVL Ri, Rj
ADD R0, Ri, Rj
registru
(R0+Ri Rj, R0=0, SCC=1)
Comparare registru- CMPL Ri, Rj
Sub Ri, Rj, R0
registru
(Ri-Rj R0, SCC=1); R0=0
Clear locaie
CLRL <Adresa>
STL R0, (R0) S2
memorie
(Locaie mem. (R0+S2) 0)
Incrementri
INCL Ri
ADD Ri, #1, Ri
Decrementri
DECL Ri
SUB Ri, #1, Ri
Incrcare contor
MOVL $N, Ri
ADD R0, #N, Ri
Complement de 1
MCOMPL Ri, Rj
XOR Ri, #1, Rj
Tabelul 3.2.

Procesoare pipeline scalare cu set optimizat de instruciuni

65

Instruciuni emulate cu ajutorul setului de instruciuni al procesorului RISC I

Urmtoarele 3 formate de instruciuni sunt ntlnite practic n toate


arhitecturile RISC studiate (DLX, Intel 860, 960, MIPS 88000, SPARC,
APLHA, Power PC, HP PA etc.) :
instruciuni registru registru (RS1, RS2, RDEST), de tip aritmetico
logice cu 2 operanzi
instruciuni registru constant imediat (RS1, constant, RDEST) sunt
instruciuni de transfer, aritmetico logice, etc.
instruciuni de ramificaie n program (JUMP / CALL, BRANCH, etc.)
O alt categorie de microprocesoare RISC reprezentative sunt cele din familia
MIPS 2000 / 3000, dezvoltate iniial la universitatea din Stanford U.S.A. La aceste
procesoare exist 3 formate distincte de instruciuni main : R-type, I-type i J-type.
Formatul R-type nglobeaz instruciuni aritmetico logice, de salt / apel etc. i
este prezentat mai jos :

OPCODE (6)

RS(5)

RT(5)

RD(5)

SHAMT (5)

FUNCT (6)

Figura 3.2. Formatul R-type la procesorul MIPS R-2000.


Cmpurile RS, RT i RD specific regitrii surs respectiv registrul destinaie al
instruciunii. Cmpul FUNCT codific varianta de operaie aferent unei anumite
grupe de operaii codificate de cmpul OPCODE. Cmpul SHAMT specific numrul
poziiilor binare cu care se face deplasarea pentru instruciunile de deplasare aritmetice
sau logice.

De ex. instruciunea SLL $10, $16, 8, introduce n registrul 10


coninutul registrului 16 deplasat logic la stnga cu 8 poziii binare.
Tot n formatul R-Type se ncadreaz i instruciuni de comparaie. De
exemplu instruciunea SLT $1, $2, $3 semnific : if ($2 < $3) $1 = 1 else $1
= 0. Tot aici se ncadreaz i instruciunea de salt indirect registru JR $31.
Formatul I-type este ca n figur:
OPCODE (6)

RS (5)

RT (5)

OFFSET (16)

Figura 3.3. Formatul I-type la procesorul MIPS R-2000.

Acest format este specific instruciunilor LOAD / STORE care


utilizeaz modul de adresare indexat. De exemplu o instruciune de
ncrcare:
LW $8, ASTART ($9) (incarc n registrul 8 locaia de memorie de la
adresa indexat).
Tot aici se incadreaz i instruciunile de salt condiionat pe diverse
condiii precum:

Procesoare pipeline scalare cu set optimizat de instruciuni

66

BEQ $1, $2, ADR sau BNE 41, $2, ADR.


OBS. Distincia ntre formatele R i I se face prin cmpul de OPCODE.
Formatul J type este specific instruciunilor de salt.
OPCODE (6)

ADRES (26)

Figura 3.4. Formatul J-type la procesorul MIPS R-2000.

De exemplu J 10000, salt la adresa 10000.


Instruciunea Jump and Link: JAL ADR determin $31 = PC + 4 iar
apoi salt la adresa ADR.
De remarcat simplitatea i regularitatea setului de instruciuni.
Cmpurile i pstreaz locurile n cele 3 tipuri de formate de instruciuni,
ceea ce determin simplificarea decodificatorului de instruciuni al
procesorului. Desigur ns c adresele i constantele din cadrul
instruciunilor sunt limitate de lungimea fix a cmpurilor aferente.
De exemplu apelul / revenirea la / din o subrutin se face prin
instruciunile JAL Subr / JR $31 respectiv, evitndu-se astfel memoria stiv.
Ce se ntmpl ns n cazul a 3 rutine imbricate? Considernd 3 rutine A,
B, C imbricate, situaia se rezolv elegant ca n continuare:
A:
JAL B

B:
ADD $29, $29, $24
SW $31, 0($29)
JAL C

C:
JR $31

LW $31, 0($29)
SUB $29,$29,$24
JR $31
i la acest microprocesor, setul instruciunilor main a fost proiectat
innd cont de facilizarea implementrii unor limbaje HLL (High Level
Languages).
Exemplificm prin implementarea urmtoarei secvene n limbajul C :
switch (k)
{
case 0: f = i + j; break
case 1: f = g + h; break
case 2: f = g h; break
case 3: f= i j; break
}

Procesoare pipeline scalare cu set optimizat de instruciuni

67

Considernd variabilele f, g, h, i, j, k stocate respectiv n regitrii 16,


17, 18, 19, 20, 21 i c $10 = 4 avem urmtoarea implementare n limbaj
main MIPS a secvenei C anterioare :
LOOP:

L0:
L1:
L2:
L3:

MULT $9, $10, $21;


LW $8, JT ($9)
JR $8
ADD $16, $19, $20
J EXIT
ADD $16, $17, $18
J EXIT
SUB $16, $17, $18
J EXIT
SUB $16, $19, $20
J EXIT

$9

k*4

EXIT:
Menionm c la adresele JT, JT + 4, JT + 8, JT + 12 n memorie
avem stocate etichetele L0, L1, L2 i L3.
O variant a ideii de RISC este modelul Single Instruction
Computer (SIC) de procesor, care execut o singur instruciune cablat.
De exemplu un procesor SIC care tie s execute doar instruciunea
Substract and Branch if Negative(SBN) dup urmtoarea regul:
SBN a, b, c; MEM MEM (a) MEM(b)
if MEM (a) < 0 go to c
Prin aceast instruciune se pot emula multe alte instruciuni mai
complicate. De exemplu o instruciune de tipul MEM (a)
MEM (b) s-ar
emula pe un procesor SIC SBN astfel:
START: SBN temp, temp, +1
SBN temp, a, +1
SBN b, b, +1
SBN b, temp, +1
Este surprinztor c printr-o singur instruciune se pot emula
principalele instruciuni ale unui procesor mai matur. Ideea a fost de altfel
reluat de arhitecii anilor 80, care au introdus conceptul de TTA (vezi
capitolul urmtor). nc o dovad c procesoarele SIC, RISC, superscalare,

Procesoare pipeline scalare cu set optimizat de instruciuni

68

VLIW, EPIC, vectoriale etc. au repus n discuie lucruri absolut


fundamentale dar nefundamentate satisfctor prin implementrile CISC.
Regndirea modurilor optimale de proiectare a procesoarelor numerice a
stratat abia la nceputul anilor 1980 odat cu cercetrile legate de conceptul
de RISC.
Potenial, programele RISC pot conine mai multe CALL-uri dect
cele convenionale, n principal pentru c instruciunile complexe
implementate n procesoarele CISC vor fi subrutine n cazul procesoarelor
RISC. Din acest motiv procedura CALL / RET se impune a fi ct mai rapid
n procesarea RISC. Modelul utilizrii registrelor n fereastre ndeplinete
acest deziderat prin reducerea traficului de date cu memoria sistem
(Berkeley I RISC, SUN-SPARC, etc.) Principiul de lucru const n faptul c
fiecare instruciune CALL aloc o nou fereastr de registre pentru a fi
utilizat de procedura apelat, n timp ce o instruciune RET va restaura
vechea fereastr de registre. Se consider spre exemplificare 3 procese soft,
care se apeleaz imbricat ca n figura urmtoare (figura.3.5):

Figura 3.5. Lucrul n ferestre de registre

Statistici deosebit de serioase arat c n cadrul implementrilor de


limbaje HLL (High Level Languages) instruciunile CALL / RET sunt
frecvent folosite i totodat cele mai mari consumatoare de timp (ocup
ntre 5%-45% din referirile la memorie). Fiecare proces are alocat o
fereastr de regitri constnd n 3 seturi distincte : HIGH, LOCAL i LOW.
Registrele globale R0 - R9 conin parametrii globali ai proceselor soft.
Aceti regitri sunt comuni tuturor proceselor i nu se salveaz / restaureaz

Procesoare pipeline scalare cu set optimizat de instruciuni

69

niciodat.
Regitrii locali R16 - R25 sunt utilizai pentru memorarea scalarilor
locali ai procesului curent. O instruciune CALL determin ca registrele
LOW din procesul master apelant s devin registre HIGH n procesul
SLAVE apelat. Odat cu schimbarea ferestrelor, o instruciune CALL
memoreaz registrul PC ntr-un anumit registru al noii ferestre.
O instruciune RET determin o aciune reciproc, adic regitrii
HIGH ai procesului curent vor deveni regitrii LOW pentru procesul
MASTER n care se revine.
n regitrii LOW procesul MASTER transmite automat parametrii
spre procesul SLAVE, respectiv din aceti regitri procesul MASTER
curent preia rezultatele de la procesul SLAVE apelat. n regitrii HIGH
procesul curent memoreaz rezultatele, respectiv din aceti regitri procesul
curent preia parametrii transmii de ctre procesul MASTER apelant. Se
observ c aceste comutri de ferestre au drept principal scop eliminarea
stivei i deci a timpului consumat cu accesarea acesteia.
Referitor la cele de mai sus apar 2 tipuri de excepii ca fiind posibile:
- "window overflow" (WO) poate s apar dup o instruciune CALL
n care schimbarea setului de regitri LOW ai procesului curent n regitrii
HIGH ai procesului viitor devine imposibil datorit numrului limitat de
regitri generali implementai;
- "window underflow" (WU) poate s apar dup o instruciune RET
care determin ca schimbarea regitrilor HIGH ai procesului curent n
regitrii LOW ai procesului viitor s devin imposibil.
Dintre microprocesoarele RISC consacrate, cele din familia SPARC
(sistemele SUN) au implementat un set de maxim 32 ferestre a cte 32
regitri fiecare. Numrul mare de regitri generali necesari pentru
implementarea conceptului de "register windows" implic reducerea
frecvenei de tact a procesorului, fapt pentru care conceptul nu este
implementat dect rar n microprocesoarele RISC comerciale. Studii
statistice realizate nc din perioada de pionierat de ctre Halbert i Kessler,
arat c dac procesorul deine 8 ferestre de regitri, excepiile WO i WU
vor apare n mai puin de 1% din cazuri. Evident c supraplasarea trebuie
evitat n cadrul rutinei de tratare a excepiei prin trimiterea / recepionarea
parametrilor proceselor n / din buffere de memorie dedicate (stive).
De precizat c setul larg de regitri generali este posibil de
implementat la microprocesoarele RISC prin prisma tehnologiilor VLSI
(Very Large Scale Integration) disponibile (HC-MOS, ECL, GaAs, etc.),
ntruct unitatea de comand, datorit simplitii ei, ocup un spaiu relativ
restrns (la Berkeley RISC I de ex., ocupa doar aproximativ 6% din aria de
integrare). Restul spaiului rmne disponibil pentru implementarea unor

Procesoare pipeline scalare cu set optimizat de instruciuni

70

suporturi de comunicaie interprocesor (ex. transputere), memorii cache,


logic de management al memoriei, set regitri generali extins, arii sistolice
specializate de calcul (la DSP-uri, neuroprocesoare), etc.

3.2.1. DUALITATEA ARHITECTUR APLICAIE:


IMPLEMENTAREA GESTIUNII STIVELOR DE DATE
ASOCIATE FUNCIILOR C
Dup cum se tie, stiva de date asociat unei funcii scrise n limbajul C
reprezint o zon de memorie unde sunt stocate toate variabilele locale i parametrii
afereni respectivei funcii (activation record). Fiecare funcie C are propriul context
pstrat n aceast structur de date special. Stiva de date se asociaz n mod dinamic
fiecrei funcii n curs. Aadar, o funcie poate avea la un moment dat mai multe stive
(instane), doar una fiind ns activ. Spre exemplu, recursivitatea se poate implementa
facil n C tocmai datorit acestei caracteristici.
Structura stivei de date asociate unei funcii C este prezentat n figura
urmtoare, corespunztor secvenei de program de mai jos.
int NoName (int a, int b)
{
int w,x,z;
/* Corpul funciei */
.
.
.
return y;
}

Procesoare pipeline scalare cu set optimizat de instruciuni

71

Figura. 3.6. Structura stivei de date asociate funciei NoName

RETURN VALUE: aici se plaseaz valoarea variabilei y, chiar


nainte de revenirea din funcie. Acest cmp exist i dac funcia nu ar
returna practic nici o valoare.
RETURN ADDRESS (PC): reprezint PC-ul de revenire n funcia
apelant.
DYNAMIC LINK: memoreaz adresa de nceput a stivei de date
aferente funciei apelante. n continuare, se va considera c registrul R6 va
conine adresa de nceput a stivei de date asociat funciei respective.
Aadar funcia NoName proceseaz asupra parametrilor trimii de
ctre funcia apelant (a,b) respectiv asupra variabilelor locale ale acesteia
(w,x,y). Firete, ea trimite rezultatele (y) ctre funcia apelant prin stiva de
date curent. n continuare se consider c atunci cnd funcia NoName este
apelat, pointerul la stivele de date (R6, aici) va pointa la nceputul stivei de
date aferente funciei.
Pentru a nelege implementarea apelurilor/revenirilor funciilor, se
consider urmtorul exemplu de program:
main()
{
int a;
int b;
.
.

Procesoare pipeline scalare cu set optimizat de instruciuni

72

b=NoName(a,10);
.
.
}
int NoName(int a, int b)
{
int w,x,y;
/* Corpul funciei */
.
.
.
return y;
}
Stiva de date ncepe la o locaie de memorie determinat de ctre
proiectanii sistemului de operare i crete nspre adrese cresctoare.
Execuia programului ncepe cu un apel al sistemului de operare ctre
funcia main. n acest punct, stiva datelor funciei main se structureaz
n memorie, iar registrul R6 pointeaz la nceputul ei. n translatarea
apelului unei funcii, compilatorul genereaz automat cod main pentru a
nscrie o stiv de date n memorie. n translatarea revenirii dintr-o funcie
apelat n funcia apelant, compilatorul genereaz automat cod pentru
preluarea stivei de date din memorie.
Apelul i revenirea se fac n 4 pai, aa cum se prezint n continuare :
1)

Apelul funciei NoName

Se face prin asignarea b=NoName(a,10); Stiva de date a funciei


main() respectiv a funciei NoName(a,10) sunt prezentate n figura
urmtoare.

Procesoare pipeline scalare cu set optimizat de instruciuni

73

Figura 3.7. Stivele de date asociate funciilor main() i NoName(a,10)

Secvena compilat a apelului funciei NoName este urmtoarea:


ld R8, (R6)3;
st R8, (R6)8;
and R8, (R8), #0
add R8, R8, #10;
st R8, (R6)9;
st R6, (R6)7;
add R6, R6, #5;
jsr NoName;
PCnext: ld R8, (R6)5
st R8, (R6)4

R8 a
a
Stiva NoName
;R8 0
R8 10
(b=10) Stiva NoName
(R6)main
Stiva NoName
(Dynamic Link)
R6
(R6) +5, actualizare nou
nceput al stivei de date
apel funcie, R7 PCnext i
PC (NoName)

Procesoare pipeline scalare cu set optimizat de instruciuni

2)

74

Startarea funciei apelate (NoName)


ncepe cu instruciunea care salveaz n stiva de date a funciei NoName adresa
de revenire n funcia principal main(). Adresa de revenire se afl stocat n registrul
R7 (conine adresa urmtoare a instruciunii JSR NoName)

st R7, (R6)1
Sfritul funciei apelate (NoName)

3)

ld R8, (R6)7
st R8, (R6)0;
ld R7, (R6)1;
ld R6, (R6)2;
RET;
4)

Revenirea n funcia apelant (main)


JSR NoName;

PCnext:

Se memoreaz valoarea lui y n RET


VALUE din stiva de date
R7 RET ADDRESS
adresa de nceput a stivei de date
R6
aferente funciei main ().
PC adresa de revenire n funcia main().

ld R8, (R6)5;
st R8, (R6)4;

pe aceast instruciune se face revenirea (la


finele execuiei acesteia)
R8 valoarea lui y din funcia NoName
se face asignarea : b=NoName(a,10).

Obs.: Stivele de date asociate funciilor C sunt structuri de tip tablou, avnd
o adres de baz stocat n registrul R6 i un numr (variabil) de elemente.
Avnd n vedere frecvena deosebit a accesrii acestor structuri de date,
modul de adresare indexat (Rbaz + offset) este esenial n facilitarea
manipulrii datelor prin aceste structuri de tip tablou.

3.2.2. IMPLEMENTAREA RECURSIVITII

Procesoare pipeline scalare cu set optimizat de instruciuni

75

Se consider irul recurent liniar omogen de ordinul 2 cunoscut sub


numele de irul lui Fibonacci:
Fibo(n) = Fibo(n-1) + Fibo(n-2), Fibo(1) = Fibo(0) = 1
O implementare C recursiv a calcului elementului Fibo(n) din cadrul
acestui ir recurent este prezentat mai jos:
#include<stdio.h>
int Fibo(int n);
main ()
{
int in;
int numar;
printf(Care termen din ir?);
scanf(%d, &in);
numar = Fibo (in);
printf(Termenul are valoarea %d\n, numar);
}
int Fibo(int n)
{
if (n = = 0 || n = = 1)
return 1;
else
return (Fibo(n-1) + Fibo(n-2));
}
Esena implementrii recursivitii const n manipularea stivelor de
date asociate funciilor dinamice (adic funciilor n curs de execuie la un
moment dat). n continuare se prezint, la nivel de cod obiect,
implementarea funciei Fibo (int n), cu referire la stivele de date accesate.

Procesoare pipeline scalare cu set optimizat de instruciuni

76

Figura 3.8. Stiva de date asociat funciei Fibo(n)

Fibo:
st R7, (R6)1;
ld R8, (R6)3;
brz Fib_end
add R8,R8, # -1
brz Fib_end
ld R8, (R6)3;
add R8,R8, # -1;
st R8, (R6)8;
st R6, (R6)7;
add R6, R6,#5;
JSR Fibo;
ld R8, (R6)5;
st R8, (R6)4;
ld R8, (R6)3;
add R8, R8, #-1;

salveaz PC revenire n stiva de date


R8
valoare n

R8
R8

n
n-1
pune (n-1) ca parametru n stiva
funciei Fibo(n-1)
pune adresa de nceput a stivei funciei
Fibo(n) n stiva funciei Fibo(n-1)
pune n R6 noua adres de nceput
aferent stivei de date a lui Fibo(n-1)
apel funcie Fibo (recursiv)
R8 valoarea returnat de Fibo (n-1)
memoreaz variabila local aferent
stivei de date a lui Fibo (n)
R8 (n-1)
R8 (n-2)

Procesoare pipeline scalare cu set optimizat de instruciuni

st R8, (R6)8
st R6, (R6)7
add R6, R6, #5;
JSR Fibo;
ld R8, (R6)5;
ld R1, (R6)4;
add R8, R8, R1;
st R8, (R6)0;
ld R6, (R6)2;
RET
Fib_end:
and R8, R8, #0
add R8, R8, #1
st R8, (R6)0
ld R6, (R6)2
RET

77

pregtete stiva de date a lui Fibo (n-2)


apel recursiv
R8 Fibo (n-2)
R1 Fibo (n-1)
R8 Fibo (n-1) + Fibo (n-2)
Fibo (n) RET VALUE
revenire n stiva precedent

Obs: Legtura ntre arhitectura unui microprocesor si aplicaiile scrise n


limbaje de nivel nalt este una complex i extrem de subtil. Exist
microarhitecturi de calcul optimizate n mod special n vederea rulrii
eficiente a unor clase de aplicaii bine precizate scrise n anumite limbaje de
nivel nalt (ex. microprocesoare Java).

3.3. ARHITECTURA SISTEMULUI DE MEMORIE LA


PROCESOARELE RISC
Principalele caracteristici ale sistemului de memorie aferent unui
sistem RISC sunt preyentate succint n continuare. Astfel, n general
microprocesoarele RISC dein un management intern de memorie (MMUMemory Management Unit) n majoritatea implementrilor. MMU-ul are
rolul de a translata adresa virtual emis de ctre microprocesor ntr-o aa
numit adres fizic de acces la memoria principal i respectiv de a asigura
un mecanism de control i protecie - prin paginare sau / i segmentare a
memoriei - a accesului la memorie. n general, MMU lucreaz prin
paginare n majoritatea implementrilor cunoscute, oferind i resursele
hardware necesare mecanismelor de memorie virtual. De asemenea,
sistemele RISC dein memorii cache interne i externe cu spaii n general

Procesoare pipeline scalare cu set optimizat de instruciuni

78

separate pentru instruciuni i date (arhitecturi Harvard de memorie) i


structuri de tip DWB (Data Write Buffer) cu rol de gestionare a scrierii
efective a datelor n memoria sistem, prin degrevarea total a procesorului
propriu - zis. Pentru a asigura coerena i consistena datelor scrise n cache,
acestea trebuie scrise la un moment dat i n memoria principal. n scopul
eliberrii microprocesorului de acest lucru, DWB captureaz data i adresa
emise de ctre microprocesor i execut efectiv scrierea n memoria cache
sau n cea principal, permind astfel microprocesorului s-i continue
activitatea fr s mai atepte pn cnd data a fost efectiv scris in
memoria principal. Aadar, DWB se comport ca un mic procesor de ieire
lucrnd n paralel cu microprocesorul. Arhitectura de principiu a memoriei
unui sistem RISC este caracterizat n figura 3.9:

Figura 3.9. Arhitectura de memorie tip Harvard la procesoarele RISC

n afara spaiilor separate de instruciuni i date i a procesorului de


ieire (DWB) nu exist alte probleme majore specifice microprocesoarelor
RISC n arhitectura sistemelor de memorie. n principiu, ierarhizarea
sistemului de memorie este aceeai ca i la sistemele CISC (memorii cache,
memorie virtual). Nu intrm aici n detalii teoretice legate de organizarea
cache-urilor, a mecanismelor de memorie virtual etc., ntruct aceste
probleme sunt similare cu cele de la sistemele CISC, fiind deci foarte
cunoscute i bine documentate bibliografic.
Problema major a sistemelor de memorie pentru ambele variante
const n decalajul tot mai accentuat ntre performana microprocesoarelor

Procesoare pipeline scalare cu set optimizat de instruciuni

79

care crete anual cu 50 -75% i respectiv performana tehnologic a


memoriilor (latena) care are o rat de cretere de doar 7% pe an. Prin
urmare acest "semantic gap" microprocesor - memorie reprezint o
provocare esenial pentru mbuntirea performanelor arhitecturilor de
memorie aferente arhitecturilor actuale de procesoare. n caz contrar, avnd
n vedere frecvenele de tact actuale ale microprocesoarelor (400 - 800
MHz) i timpii de acces ai memoriilor tip DRAM (cca. 50 ns la ora actual 1998), sistemul de calcul va funciona practic "cu frna de mn tras".
Cercetarea acestei interfee procesor - cache, ntr-un mod pragmatic i
cantitativ, va constitui un obiectiv major al acestei monografii.

3.4.
PROCESAREA
PIPELINE
PROCESOARELOR SCALARE

CADRUL

Cea mai important caracteristic arhitectural a acestor


microprocesoare RISC scalare o constituie procesarea pipeline a
instruciunilor i datelor. n fapt, aproape toate celelalte caracteristici
arhitecturale ale RISC-urilor au scopul de a adapta structura procesorului la
procesarea pipeline. Acest concept a migrat de la sistemele mari de calcul la
microprocesoare datorit progresului tehnologiei microprocesoarelor,
caracterizat prin "legea lui G. Moore". Toate supercalculatoarele au
implementat acest concept. Din punct de vedere istoric primul calculator
pipeline viabil a fost - la acea vreme - supersistemul CDC 6600 (firma
Control Data Company, ef proiect Seymour Cray,1964).

3.4.1. DEFINIREA CONCEPTULUI


PIPELINE SCALAR

DE

ARHITECTUR

Tehnica de procesare pipeline reprezint o tehnic de procesare


paralel a informaiei prin care un proces secvenial este divizat n
subprocese, fiecare subproces fiind executat ntr-un segment special dedicat
i care opereaz n paralel cu celelalte segmente. Fiecare segment execut o
procesare parial a informaiei. Rezultatul obinut n segmentul i este
transmis n tactul urmtor spre procesare segmentului (i+1). Rezultatul final
este obinut numai dup ce informaia a parcurs toate segmentele, la ieirea

Procesoare pipeline scalare cu set optimizat de instruciuni

80

ultimului segment. Denumirea de pipeline provine de la analogia cu o band


industrial de asamblare. Este caracteristic acestor tehnici faptul c diversele
procese se pot afla n diferite faze de prelucrare n cadrul diverselor
segmente, simultan. Suprapunerea procesrilor este posibil prin asocierea
unui registru de ncrcare (latch) fiecrui segment din pipeline. Registrele
produc o separare ntre segmente astfel nct fiecare segment s poat
prelucra date separate (vezi figura 3.10).

Figura 3.10. Structur de procesare tip pipeline.

n figura 3.10 s-au notat prin Ti - regitrii tampon iar prin Ni - nivelele
de prelucrare (combinaionale sau secveniale).
Este evident c nivelul cel mai lent de prelucrare va stabili viteza de
lucru a benzii. Aadar, se impune n acest caz partiionarea unui eventual
proces mai lent n subprocese cu timpi de procesare cvasiegali i
interdependene minime. Exist 2 soluii principiale, discutate n literatur,
de a compensa ntrzierile diferite pe diversele nivele de prelucrare:

Figura 3.11. Balansarea unei structuri pipeline prin divizarea nivelului lent

Procesoare pipeline scalare cu set optimizat de instruciuni

81

Prima soluie, zis de "balansare a benzii", necesit circuite


suplimentare i poate fi realizat doar cu condiia ca sarcinile alocate
respectivului nivel s poat fi descompuse, ca n figura 3.11. O a doua
soluie, se bazeaz pe conectarea n paralel a unui alt nivel cu aceeai
ntrziere ca cel mai lent. i aici trebuiesc circuite suplimentare. n plus,
apare problema sincronizrii i controlului nivelelor care lucreaz n paralel.
Soluia aceasta este utilizat cnd sarcinile alocate nivelului mai lent nu mai
pot fi descompuse (vezi figura 3.12).

Figura 3.12. Balansare prin conectarea unui nivel lent n paralel

n Tact (i) informaia se trimite spre procesare nivelului urmtor pe


calea A. n Tact (i+1) informaia se trimite n mod analog pe calea B,
implementndu-se deci o demultiplexare.
Se definete rata de lucru R a unei benzi de asamblare ca fiind
numrul de procese executate n unitatea de timp T (ciclu main sau tact).
Considernd m posturi de lucru prin care trec n procese, rezult c banda le
va executa ntr-un interval de timp Dt = (m + n -1) * T. Normal, avnd n
vedere c m*T este timpul de "setup" al benzii, adic timpul necesar
terminrii primului proces. Aadar, rata de execuie a unei benzi prin care
trec n procese este:
Rn = n/ (m+n-1)T
(3.1)
Rata ideal este de un proces per ciclu, ntruct:
R = lim Rn = 1/T
(3.2)
n
Dup cum se va arta n continuare, aceast rat teoretic nu se va
putea atinge n practic, nu numai datorit faptului c se prelucreaz un
numr finit de procese i datorit timpului de "setup", ci mai ales datorit
unor blocaje n funcionarea normal a benzii numite hazarduri.

Procesoare pipeline scalare cu set optimizat de instruciuni

82

3.4.2. PRINCIPIUL DE PROCESARE NTR-UN PROCESOR


PIPELINE
Procesarea pipeline a instruciunilor reprezint o tehnic de procesare
prin intermediul creia fazele (ciclii) aferente multiplelor instruciuni sunt
suprapuse n timp. Se nelege printr-o faz aferent unei instruciuni main
o prelucrare atomic a informaiei care se desfoar dup un algoritm
implementat n hardware (firmware) i care dureaz unul sau mai muli taci.
n acest sens se exemplific: faza de aducere (fetch) a instruciunii, faza de
decodificare, faza de execuie, faza de citire / scriere dat, etc. Arhitectura
microprocesoarelor RISC este mai bine adaptat la procesarea pipeline dect
cea a sistemelor convenionale CISC, datorit instruciunilor de lungime
fix, a modurilor de adresare specifice, a structurii interne bazate pe registre
generale, etc. Microprocesoarele RISC uzuale dein o structur pipeline de
instruciuni ntregi pe 4 - 6 nivele. De exemplu, microprocesoarele MIPS au
urmtoarele 5 nivele tipice:
1. Nivelul IF (instruction fetch) - se calculeaz adresa instruciunii ce
trebuie citit din cache-ul de instruciuni sau din memoria principal i se
aduce instruciunea;
2. Nivelul RD (ID) - se decodific instruciunea adus i se citesc
operanzii din setul de regitri generali. n cazul instruciunilor de salt, pe
parcursul acestei faze se calculeaz adresa de salt;
3. Nivelul ALU - se execut operaia ALU asupra operanzilor
selectai n cazul instruciunilor aritmetico-logice; se calculeaz adresa de
acces la memoria de date pentru instruciunile LOAD / STORE;
4. Nivelul MEM - se acceseaz memoria cache de date sau memoria
principal, ns numai pentru instruciunile LOAD / STORE. Acest nivel pe
funcia de citire poate pune probleme datorate neconcordanei ntre rata de
procesare i timpul de acces la memoria principal. Rezult deci c ntr-o
structur pipeline cu N nivele, memoria trebuie s fie n principiu de N ori
mai rapid dect ntr-o structur de calcul convenional. Acest lucru se
realizeaz prin implementarea de arhitecturi de memorie rapide (cache,
memorii cu acces ntreesut, etc.). Desigur c un ciclu cu MISS n cache pe
acest nivel ( ca i pe nivelul IF de altfel), va determina stagnarea temporar
a acceselor la memorie sau chiar a procesrii interne. La scriere, problema
aceasta nu se pune datorit procesorului de ieire specializat DWB care
lucreaz n paralel cu procesorul central dup cum deja am artat.
5. Nivelul WB (write buffer) - se scrie rezultatul ALU sau data citit
din memorie (n cazul unei instruciuni LOAD) n registrul destinaie din
setul de regitri generali ai microprocesorului.

Procesoare pipeline scalare cu set optimizat de instruciuni

83

Prin urmare, printr-o astfel de procesare se urmrete o rat ideal de o


instruciune / ciclu main ca n figura 3.13, dei dup cum se observ,
timpul de execuie pentru o instruciune dat nu se reduce.

Figura 3.13. Principiul procesrii pipeline ntr-un procesor RISC

Se observ imediat necesitatea suprapunerii a 2 nivele concureniale:


nivelul IF i respectiv nivelul MEM, ambele cu referire la memorie. n cazul
microprocesoarelor RISC aceast situaie se rezolv deseori prin legturi
(busuri) separate ntre procesor i memoria de date respectiv de instruciuni
(arhitectur Harvard).
Dei aceast mprire pe 5 nivele este caracteristic mai multor
microprocesoare RISC, ea are o deficien important i anume c nu orice
instruciune trece prin toate cele 5 nivele de procesare. Astfel, nivelul MEM
este exploatat doar de ctre instruciunile LOAD / STORE, nivelul ALU de
ctre instruciunile aritmetico-logice i LOAD / STORE, iar instruciunile
de comparare sau memorare (STORE) nu folosesc nivelul WB. Probabil
asemenea observaii au determinat proiectanii anumitor microprocesore
RISC (de ex. microprocesorul HARP - Hatfield Advanced RISC Processor
proiectat la Universitatea din Hertfordshire, Marea Britanie), s comprime
nivelele ALU i MEM ntr-unul singur. In acest caz calculul adreselor de
memorie se face n nivelul RD prin mecanisme care reduc acest timp de
calcul.
n literatur se citeaz un model de procesor numit superpipeline.
Acesta este caracterizat printr-un numr relativ mare al nivelelor de
procesare. Desigur c n acest caz detecia i corecia hazardurilor este mai
dificil, dup cum se va arta n continuare. Arhitecturile superpipeline se
preteaz la tehnologiile cu grade de mpachetare reduse unde nu este
posibil multiplicarea resurselor hardware, n schimb caracterizate prin
viteze de comutaie ridicate (ECL, GaAs). O asemenea arhitectur
caracterizeaz de ex. procesoarele din familia DEC (Digital Equipment

Procesoare pipeline scalare cu set optimizat de instruciuni

84

Corporation, actualmente nglobat n concernul HP) Alpha. Avantajul


principal al arhitecturilor superpipeline este c permit frecvene de tact
deosebit de ridicate (800 - 3000 MHz la nivelul tehnologiilor actuale, 2002),
aspect normal avnd n vedere super - divizarea stagiilor de procesare.

3.4.3. STRUCTURA PRINCIPIAL A UNUI PROCESOR RISC


n continuare se prezint o structur hardware de principiu a unui
procesor RISC compatibil cu modelul de programare al microprocesorului
RISC Berkeley I anterior prezentat. De remarcat c structura permite
procesarea pipeline a instruciunilor, adic atunci cnd o instruciune se afl
ntr-un anumit nivel de procesare, instruciunea urmtoare se afl n nivelul
anterior. Stagiile de interconectare ale nivelelor structurii (IF / ID, ID / EX,
EX / MEM, MEM / WB) sunt implementate sub forma unor regitri de
ncrcare, actualizai sincron cu fiecare nou ciclu de procesare. Memorarea
anumitor informaii de la un nivel la altul este absolut necesar, pentru ca
informaiile coninute n formatul instruciunii curente s nu se piard prin
suprapunerea fazelor de procesare.
n acest sens, s ne imaginm de exemplu ce s-ar ntmpla dac
cmpul DEST nu ar fi memorat succesiv din nivel n nivel i rebuclat la
intrarea setului de regitri generali (vezi figura 3.14). Utilitatea acestui cmp
devine oportun abia n faza WB cnd i data de nscris n setul de regitri
generali devine disponibil (cazul instruciunilor aritmetico-logice sau
STORE). S remarcm c setul de regitri generali trebuie s permit
simultan dou citiri i o scriere. Schema intern a unui astfel de set de
regitri generali (REGISTER FILE), de tip multiport (2 porturi de citire i
unul de scriere), este prezentat n cele 3 figuri urmtoare.

Procesoare pipeline scalare cu set optimizat de instruciuni

85

Procesoare pipeline scalare cu set optimizat de instruciuni

86

Procesoare pipeline scalare cu set optimizat de instruciuni

87

Revenind la Figura 3.14, multiplexorul de la intrarea ALU are rolul de


a genera registrul surs 2, n cazul instruciunilor aritmetico-logice,
respectiv indexul de calcul adres (constant pe 13 bii cu extensie semn), n
cazul instruciunilor LOAD / STORE. Sumatorul SUM 2 calculeaz adresa
de salt n cazul instruciunilor de salt (branch) dup formula:
PCnext = PC + Ext.semn(IR18 - 0)
(2.3.)

Procesoare pipeline scalare cu set optimizat de instruciuni

88

Figura 3.14. Schema de principiu a unui procesor RISC

Multiplexorul 2:1 de la ieirea nivelului MEM / WB multiplexeaz


rezultatul ALU n cazul unei instruciuni aritmetico-logice, respectiv data
citit din memoria de date n cazul unei instruciuni LOAD. Ieirea acestui
multiplexor se va nscrie n registrul destinaie codificat n instruciune.
Evident c ntreaga structur este comandat de ctre o unitate de control.
Detalii despre proiectarea unei asemenea uniti sunt date de exemplu n
cap.6.

3.4.4. PROBLEMA HAZARDURILOR N PROCESOARELE


RISC
Hazardurile constituie acele situaii care pot s apar n procesarea
pipeline i care pot determina blocarea (stagnarea) procesrii, avnd deci o
influen negativ asupra ratei de execuie a instruciunilor. Conform unei
clasificri consacrate aceste hazarduri sunt de 3 categorii : hazarduri
structurale, de date i de ramificaie.

Procesoare pipeline scalare cu set optimizat de instruciuni

89

3.4.4.1. HAZARDURI STRUCTURALE (HS): PROBLEME


IMPLICATE I SOLUII
Sunt determinate de conflictele la resurse comune, adic atunci cnd
mai multe procese simultane aferente mai multor instruciuni n curs de
procesare, acceseaz o resurs comun. Pentru a le elimina prin hardware, se
impune de obicei multiplicarea acestor resurse. De exemplu, un procesor
care are un set de regitri generali de tip uniport i n anumite situaii exist
posibilitatea ca 2 procese s doreasc s scrie n acest set simultan. Se
prezint mai jos (figura 3.15) o structur ALU implementat la
microprocesorul RISC superscalar HARP care permite 4 operaii ALU
simultane. Prin partiionarea timpului afectat nivelului WB n dou, n
cadrul acestui nivel se pot face dou scrieri (n prima jumtate a nivelului
WB se nscrie n setul de regitri coninutul cii A, iar n a doua parte a
nivelului WB se nscrie coninutul cii B). n principiu, un astfel de procesor
poate s execute 4 instruciuni simultan cu condiia ca numai dou dintre ele
s aib nivelul WB activ. Evident c cele 4 seturi de regitri generali dein
coninuturi identice n orice moment. Deci, prin multiplicarea resurselor
hardware s-a creat posibilitatea execuiei mai multor operaii (instruciuni)
fr a avea conflicte la resurse.
O alt situaie de acest fel, dup cum deja am mai artat, poate consta
n accesul simultan la memorie a 2 procese distincte: unul de aducere a
instruciunii (IF), iar cellalt de aducere a operandului sau scriere a
rezultatului n cazul unei instruciuni LOAD / STORE (nivelul MEM). Dup
cum am mai artat, aceast situaie se rezolv n general printr-o arhitectur
Harvard a busurilor i cache-urilor. Totui, exist microprocesoare care
dein busuri i cache-uri unificate pe instruciuni i date (Power PC 601, de
exemplu).

Procesoare pipeline scalare cu set optimizat de instruciuni

90

Figura 3.15. Structur de procesare multipl.

S considerm acum, fr a reduce din generalitate, o structur


pipeline cu 5 nivele avnd timpul de"setup" de 7 cicli, descris n
funcionare de tabelul 3.3.
Ciclu/
Nivel
N1
N2
N3
N4
N5

T1

T2

T3

T4

X
X

T5

T6

T7

X
X
Tabelul 3.3.

Descrierea funcionrii unei structuri pipeline cu 5 nivele

Un X n tabel semnific faptul c n ciclul Ti nivelul Nj este activ


adic proceseaz informaii. S mai considerm c aceast structur pipeline
corespunde unui anumit proces (de ex. procesarea unei instruciuni). Se
observ c un alt proces de acest tip, nu poate starta n ciclul urmtor (T2)
datorit coliziunilor care ar putea s apar ntre cele dou procese pe nivelul
(N2, T3) i respectiv (N3, T4). Mai mult, urmtorul proces n-ar putea starta

Procesoare pipeline scalare cu set optimizat de instruciuni

91

nici mcar n T3 din motive similare de coliziune cu procesul anterior n


nivelul (N4, T5). n schimb procesul urmtor ar putea starta n T4 fr a
produce coliziuni sau hazarduri structurale cum le-am denumit, deci la 2
cicli dup startarea procesului curent.
Se definete vectorul de coliziune al unei structuri pipeline avnd
timpul de setup de (N+1) cicli, un vector binar pe N bii astfel: dac bitul i,
i {0, 1, ..., N-1} e 1 logic atunci procesul urmtor nu poate fi startat dup i
cicli de la startarea procesului curent, iar dac bitul i este 0 logic, atunci
procesul urmtor poate fi startat dup i cicli fr a produce coliziuni cu
procesul curent. Se observ de exemplu pentru structura pipeline anterioar
c vectorul de coliziune este 110000, nsemnnd deci c procesul urmtor
nu trebuie startat n momentele T2 sau T3, n schimb poate fi startat fr
probleme oricnd dup aceea.
Se pune problema: cum trebuie gestionat o structur pipeline dat,
caracterizat printr-un anumit vector de coliziune, asftel nct s se obin o
rat de procesare (procese / ciclu) maxim ? Considernd o structur
pipeline cu timpul de "setup" de 8 cicli i avnd vectorul de coliziune
1001011 ar trebui procedat ca n figurile urmtoare (figurile 3.16, 3.17):

Figura 3.16 Principiul de lansare procese ntr-o structur pipe cu hazarduri


structurale

Procesoare pipeline scalare cu set optimizat de instruciuni

92

Figura 3.17. Graful de optimizare ntr-o structur pipeline

Vectorul unei stri Sj, se obine dup relaia:


Vj = (VC) V (Vi*(m)) ,
(3.4)
V = SAU logic
VC = vector coliziune
Vi*(m) = vectorul Vi deplasat logic la stnga cu (m) poziii binare

Figura 3.18. Trecerea dintr-o stare n alta

Pentru maximizarea performanei, se pune problema ca pornind din


starea iniial a grafului, s se determine un drum nchis n graf cu
proprietatea ca NS / L s fie maxim, unde NS = numrul de stri al
drumului iar L = lungimea drumului. n cazul anterior considerat, avem L =
3 + 5 + 3 + 2 = 13, iar NS = 4. Printr-o astfel de gestionare a structurii se
evit coliziunile i se obine o performan optim de 4 procese n 13 cicli,
adic 0.31 procese / ciclu. De menionat c o structur convenional ar
procesa doar 0.125 procese / ciclu. Nu ntotdeauna startarea procesului
urmtor imediat ce acest lucru devine posibil ("greedy strategy"), duce la o

Procesoare pipeline scalare cu set optimizat de instruciuni

93

performan maxim. Un exemplu n acest sens ar fi o structur pipeline cu


vectorul de coliziune asociat 01011. E adevrat ns c o asemenea strategie
conduce la dezvoltarea unui algoritm mai simplu.
Este clar c performana maxim a unei structuri pipeline se obine
numai n ipoteza alimentrii ritmice cu date de intrare. n caz contrar,
gestiunea structurii se va face pe un drum diferit de cel optim n graful
vectorilor de coliziune. Pe baza unei tehnici elementare atribuit lui Patel i
Davidson (1976), se arat c prin modificarea tabelei aferent structurii
pipeline n sensul introducerii unor ntrzieri, se poate mbunti
performana benzii.
S considerm acum o structur pipeline bifuncional capabil s
execute 2 tipuri de procese: P1 i respectiv P2. Aceste procese sunt descrise
prin tabele adecvate, n care se arat ce nivele solicit procesul n fiecare
ciclu. Este clar c aceste procese vor fi mai dificil de controlat. Pentru
controlul acestora prin structur, este necesar a fi determinai mai nti
vectorii de coliziune i anume: VC(P1, P1) , VC(P1, P2), VC(P2, P1) i
VC(P2, P2), unde prin VC(Pi, Pj) am notat vectorul de coliziune ntre
procesul curent Pi i procesul urmtor Pj. Odat determinai aceti vectori n
baza tabelelor de descriere aferente celor dou procese controlul structurii sar putea face prin schema de principiu din figura 3.19.

Figura 3.19. Controlul unei structuri pipeline bifuncionale

Iniial registrul "P1 control" conine VC(P1, P1), iar registrul "P2
control" conine VC(P2, P2). Procesul urmtor care se dorete a fi startat n
structur va face o cerere de startare ctre unitatea de control. Cererea va fi

Procesoare pipeline scalare cu set optimizat de instruciuni

94

acceptat sau respins dup cum bitul cel mai semnificativ al registrului de
control este 0 sau 1 respectiv. Dup fiecare iteraie, registrul de control se va
deplasa logic cu o poziie la stnga dup care se execut un SAU logic ntre
coninutul registrului de control, cile (A) i (B) respectic cile de date (C)
i (D), cu nscrierea rezultatului n registrul de control. Se observ n acest
caz c gestionarea proceselor se face dup o strategie de tip "greedy".

3.4.4.2. HAZARDURI DE DATE: DEFINIRE, CLASIFICARE,


SOLUII DE EVITARE A EFECTELOR DEFAVORABILE
Apar cnd o instruciune depinde de rezultatele unei instruciuni
anterioare n band. Pot fi la rndul lor clasificate n 3 categorii, dependent
de ordinea acceselor de citire respectiv scriere, n cadrul instruciunilor.
Considernd instruciunile i i j succesive, hazardul RAW (Read
After Write) apare atunci cnd instruciunea j ncearc s citeasc o surs
nainte ca instruciunea i s scrie n aceasta. Apare deosebit de frecvent n
implementrile actuale de procesoare pipeline. S considerm secvena de
instruciuni de mai jos procesat ntr-o structur pe 5 nivele, ca n figura
urmtoare. Se observ c data ce urmeaz a fi incrcat n R5 este
disponibil doar la finele nivelului MEM aferent instruciunii I1, prea trziu
pentru procesarea corect a instruciunii I2 care ar avea nevoie de aceast
dat cel trziu la nceputul nivelului su ALU. Aadar, pentru o procesare
corect, I2 trebuie stagnat cu un ciclu main.

Figura 3.20. Hazard RAW n cazul unei instruciuni LOAD

Aceasta se poate realiza prin software, de exemplu prin inserarea unei


instruciuni NOP ntre I1 i I2 (umplerea "load delay slot"-ului - LDS) sau o
alt instruciune util independent de instruciunea I1. O alt modalitate de
rezolvare const n stagnarea hardware a instruciunii I2, stagnare

Procesoare pipeline scalare cu set optimizat de instruciuni

95

determinat de detecia hazardului RAW de ctre unitatea de control.


Realizarea ntrzierii hardware se poate baza pe tehnica "scoreboarding"
propus pentru prima dat de ctre Seymour Cray (1964 - CDC 6600). Se
impune ca fiecare registru al procesorului din setul de regitri s aib un "bit
de scor" asociat. Dac bitul este zero, registrul respectiv e disponibil, dac
bitul este 1, registrul respectiv este ocupat. Dac pe un anumit nivel al
procesrii este necesar accesul la un anumit registru avnd bitul de scor
asociat pe 1, respectivul nivel va fi ntrziat, permindu-i-se accesul doar
cnd bitul respectiv a fost ters de ctre procesul care l-a setat (figura 3.21a,
figura 3.21.b). De remarcat c ambele soluii bazate pe stagnarea fluxului
(software - NOP sau hardware - semafoare) au acelai efect defavorabil
asupra performanei.

Figura 3.21a. Detecie hazard pe baza bitului de scor

Figura 3.21b. Restartarea procesrii instruciunilor

Exist situaii n care hazardul RAW se rezolv prin hardware fr s


cauzeze stagnri ale fluxului de procesare ca n cazul anterior. Aceste
tehnici de rezolvare se numesc tehnici forwarding (bypassing) bazate pe
"pasarea anticipat" a rezultatului instruciunii i, nivelului de procesare
aferent instruciunii j care are nevoie de acest rezultat. De exemplu s
considerm secvena:

Procesoare pipeline scalare cu set optimizat de instruciuni

ADD
SUB

R1, R2, R3 ;
R4, R1, R5 ;

96

R1 <------ ( R2 ) + ( R3 )
R4 <------ ( R1 ) - ( R5 )

Figura 3.22. Implementarea "forwarding"-ului

Rezultatul ALU aferent primei instrucii (R2 + R3) este memorat n


tampoanele ALU la finele fazei ALU a instruciunii ADD. Dac unitatea de
control va detecta hazardul RAW, va selecta pe parcursul fazei ALU
aferente instruciunii SUB la intrarea A a ALU, tamponul care conine (R2)
+ (R3) (n urma fazei ALU a instruciunii ADD), evitnd astfel hazardul
RAW. Desigur, este necesar implementarea proceselor de forwarding nu
numai de la ieirile ALU spre intrri ci i din cadrul nivelelor urmtoare (de
ex. nivelul MEM) spre intrrile ALU. Aceast situaie corespunde unor
instruciuni dependente RAW dar nesuccesive strict n program. Valoarea
"pasat" uneia din intrrile ALU n acest caz, reprezint rezultatul ALU
memorat n nivelul urmtor (MEM) n cazul unor instruciuni aritmeticologice sau data citit din memoria cache de date n cazul unor instruciuni

Procesoare pipeline scalare cu set optimizat de instruciuni

97

LOAD.
n implementarea controlului mecanismelor de forwarding, pot apare
i situaii conflictuale care trebuiesc rezolvate pe baz de arbitrareprioritizare. Ca exemplu n acest sens se consider secvena de instruciuni:
I1:
SUB R2,R1,R3
I2:
AND R2,R2,R5
I3:
ADD R6,R2,R4
n acest caz se observ imediat c apar necesare dou "pasri
anticipate" de valori: de la I1 la I3 (R2) pe intrarea A a ALU i respectiv de
la I2 la I3 (R2) pe aceeai intrare A a ALU. Este evident c n acest caz
trebuie acordat prioritate nivelului pipeline mai "apropiat" de ALU, deci
informaiei produs de ieirile ALU i nu celei situate n nivelul urmtor
(MEM aici). Cu alte cuvinte, se preia pe intrarea A a ALU rezultatul produs
de I2 i nu cel produs de I1. Rezult deci c i astfel de poteniale situaii
conflictuale trebuie implementate n logica de control a mecanismelor de
forwarding.
Hazardul WAR (Write After Read) poate s apar atunci cnd
instruciunea j scrie o destinaie nainte ca aceasta s fie citit pe post de
surs de ctre o instruciune anterioar notat i. Poate s apar cnd ntr-o
structur pipeline exist o faz de citire posterioar unei faze de scriere. De
exemplu, modurile de adresare indirect cu predecrementare pot introduce
acest hazard, de aceea ele nici nu sunt implementate n arhitecturile de tip
RISC.

Figura 3.23. Apariia unui hazard WAR

De precizat c aceste hazarduri WAR (Write After Read), pot apare


i datorit execuiei instruciunilor n afara ordinii lor normale, din program
(execuie Out of Order), dup cum se va remarca n continuare. Aceast
procesare Out of Order este impus de creterea performanei si se poate
realiza att prin mijloace hardware ct i software, legat de optimizarea
programelor pe arhitecturile pipeline.
Hazardul WAW (Write After Write), apare atunci cnd instruciunea
j scrie un operand nainte ca acesta s fie scris de ctre instruciunea i.
Aadar, n acest caz scrierile s-ar face ntr-o ordine eronat. Hazardul WAW

Procesoare pipeline scalare cu set optimizat de instruciuni

98

poate aprea n structurile care au mai multe nivele de scriere sau care
permit unei instruciuni s fie procesat chiar dac o instruciune anterioar
este blocat. Modurile de adresare indirect cu postincrementare pot
introduce acest hazard, fapt pentru care ele sunt evitate n procesoarele
RISC. De asemenea, acest hazard poate s apar in cazul execuiei Out of
Order a instruciunilor care au aceeai destinaie.

Figura 3.24 Apariia unui unui hazard WAW

Hazardurile de tip WAW sau WAR nu reprezint hazarduri reale, ci


mai degrab conflicte de nume. Ele pot fi eliminate de ctre compilator
(scheduler) prin redenumirea resurselor utilizate de program. De aceea se
mai numesc dependene de ieire respectiv antidependene.
Ex.:

I1:
I2:

MULF Ri, Rj, Rk;


ADD Rj, Rp, Rm;

Ri <--- ( Rj ) * ( Rk )
Rj <--- ( Rp) + ( Rm )

n acest caz poate s apar hazard WAR ntruct instruciunea I1 fiind


o instruciune de coprocesor flotant se va ncheia n execuie dup I2 care
este o instruciune de procesor cu operanzi ntregi. Am presupus deci c
numrul de nivele aferent structurii pipeline a coprocesorului este mai mare
dect numrul de nivele aferent procesorului. Rezult deci c instruciunile
I1, I2 se termin "Out of Order" (I2 naintea lui I1). Secvena reorganizat
prin software, care elimin hazardul WAR este :
MULF Ri, Rj, Rk
ADD Rx, Rp, Rm
.....
MOV Rj, Rx
: Rj <- Rx (dup Ri <- (Rj) x (Rk))
Prezentm n continuare un exemplu de reorganizare a unui program
n vederea eliminrii hazardurilor de date i a procesrii sale optimale:
I0
ADD R3, R1, R2
I1
LD R9, A(R7)
I2
ADD R4, R3, R2
I3
ADD R5, R4, R6

Procesoare pipeline scalare cu set optimizat de instruciuni

99

I4
LD R4, A(R6)
I5
LD R2, A(R4)
Graful dependenelor de date corespunztor acestei secvene este
urmtorul (vezi figura 3.25):

Figura 3.25. Graful dependenelor de date asociat secvenei

Aparent, pe baza grafului de mai sus, secvena reorganizat ar starta


astfel:
I0
ADD R3, R1, R2
I1
LD R5, A(R7)
I4
LD R4, A(R6)
I2
ADD R4, R3, R2
I3
ADD R5,R4,R6, etc.
Se observ n acest caz c execuia Out of Order a instruciunilor I4 i
I2 determin o procesare eronat a programului prin hazardul de tip WAW
prin registrul R4. De asemenea, ntre instruciunile I3 i I4 exist hazard
WAR prin acelai registru. Aadar detecia hazardului WAW ntre
instruciunile I2 i I4 determin impunerea unei relaii de preceden ntre
aceste instruciuni, adic procesarea lor trebuie s se realizeze n ordinea din
program (In Order). n cazul nostru, este necesar deci ca I3, dependent
RAW de I2, s se execute naintea instruciunii I4. Aceste restricii au fost
evideniate prin linie punctat n graful dependenelor de date, anterior
prezentat. innd cont de cele de mai sus, pe baza grafului dependenelor de
date, secvena reorganizat corect va fi:
I0
ADD R3, R1, R2
I1
LD R9, A(R7)
I2
ADD R4, R3, R2
I3
ADD R5, R4, R6
I4
LD R4, A(R6)
NOP; Compensare LDS!
I5
LD R2, A(R4)
Rata de procesare n acest caz este de 6/7 instr./tact, performan

Procesoare pipeline scalare cu set optimizat de instruciuni

100

superioar programului iniial ntruct prin procesarea Out of Order, se evit


la maximum dependenele de date ntre instruciuni. Hazardul WAR ntre I3
i I4 prin registrul R4 ar putea fi eliminat prin redenumirea registrului R4 n
instruciunea I4. De asemenea, relaii suplimentare de preceden ntre
instruciuni impun ntr-un mod analog hazardurile de tip WAR (n ex. nostru
ntre I3 i I4). Dup cum am mai artat, hazardurile WAR i WAW nu
reprezint conflicte reale, ci doar aa-zise conflicte de nume, ele nefiind
considerate dependene adevrate. Considernd un procesor cu mai muli
regitri fizici dect cei logici, precedenele impuse de aceste hazarduri pot fi
eliminate uor prin redenumirea regitrilor logici cu cei fizici (register
renaming). Principiul const n existena unei liste a regitrilor activi, adic
folosii momentan, i o alta a celor liberi (adic a celor nefolosii
momentan). Fiecare schimbare a coninutului unui registru logic prin
program, se va face asupra unui registru fizic disponibil n lista regitrilor
liberi i care va fi trecut n lista regitrilor activi. n acest caz secvena n
discuie s-ar transforma n urmtoarea:
I0:
ADD R3a, R1a, R2a
I1:
LD R9a, A(R7a)
I2:
ADD R4a, R3a, R2a
I3:
ADD R5a, R4a, R6a
I4:
LD R4b, A(R6a)
I5:
LD R2b, A(R4b)
n acest caz n optimizare nu ar mai avea importan dect
dependenele RAW, celelalte fiind eliminate. n baza grafului dependenelor
de date procesarea optimal ar nsemna n acest caz: I0, I1, I4, I2, I3, I5, etc.
S observm c deocamdat am prezentat exclusiv problema reorganizrii
aa numitelor "basic-block"-uri sau uniti secveniale de program. Se
numete basic-block o secven de instruciuni cuprins ntre dou
instruciuni de ramificaie, care nu conine nici o instruciune de ramificaie
i care nu conine nici o instruciune destinaie a unei instruciuni de
ramificaie.
Optimizarea programelor n basic - block-uri este rezolvat nc din
perioada de pionierat a cercetrilor legate de microprogramare. Din pcate,
prin concatenarea mai multor basic- block-uri optimizate nu se obine un
program optimizat. Se pune deci problema unei optimizri globale, a
ntregului program (vom reveni n capitolul urmtor).

Procesoare pipeline scalare cu set optimizat de instruciuni

101

3.4.4.3. HAZARDURI DE RAMIFICAIE (HR): PROBLEME


IMPLICATE I SOLUII
Pot fi generate de ctre instruciunile de ramificaie (branch).
Cauzeaz pierderi de perfoman n general mai importante dect
hazardurile structurale i de date. Efectele defavorabile ale instruciunilor de
ramificaie pot fi reduse prin metode soft (reorganizarea programului
surs), sau prin metode hard care determin n avans dac saltul se va face
sau nu (branch prediction) i calculeaz n avans noul PC (program counter).
Diverse statistici arat c instruciunile de salt necondiionat au o frecven
ntre 2 - 8% din instruciunile unui program de uz general, iar cele de salt
condiionat ntre 11 - 17%. S-a artat c salturile condiionate simple se fac
cu o probabilitate de cca. 50%, loop-urile cu o probabilitate de cca. 90%, iar
majoritatea salturilor orientate pe bit nu se fac.
Considernd o structur pipeline pe 5 nivele i c la finele nivelului
RD adresa de salt este disponibil, efectul defavorabil al unei instruciuni de
salt este sugerat n figura 3.26. Evident c n alte structuri "branch delay
slot"-ul (BDS) poate fi mai mare dect un singur ciclu.

Figura 3.26. Hazardul de ramificaie pe un procesor scalar

O prim soluie pentru o procesare corect, ar fi aceea de a dezvolta


unitatea de control hardware n vederea detectrii prezenei saltului i de a
ntrzia procesarea instruciunilor urmtoare cu un numr de cicli egal cu
latena BDS-ului, pn cnd adresa de salt devine disponibil. Soluia
implic desigur reducerea performanelor. Acelai efect l-ar avea i
"umplerea" BDS-ului de ctre scheduler cu instruciuni NOP n vederea
ntrzierii necesare.
n continuare se vor prezenta succint principiile i tehnicile care stau
la baza soluionrii prin software a ramificaiilor de program. Acestea se

Procesoare pipeline scalare cu set optimizat de instruciuni

102

bazeaz pe reorganizarea secvenei de instruciuni main, astfel nct


efectul defavorabil al salturilor s fie eliminat. n continuare se va prezenta
o astfel de strategie atribuit lui T. Gross i J. Hennessy i dezvoltat nc
din perioada de pionierat a acestor cercetri (1982). Mai nti se definete o
instruciune de salt situat la adresa b spre o instruciune situat la adresa l,
ca un salt ntrziat de ordinul n, dac instruciunile situate la locaiile b, b
+ 1, ....., b + n i l sunt executate ntotdeauna cnd saltul se face. O prim
soluie de optimizare ar fi aceea de mutare a instuciunii de salt cu n
instruciuni "n sus". Acest lucru e posibil doar atunci cnd nici una dintre
precedentele n instruciuni nu afecteaz determinarea condiiilor de salt. n
general, se poate muta instruciunea de salt cu doar k instruciuni "n sus"
unde k reprezint numrul maxim de instruciuni anterioare care nu
afecteaz condiiile de salt, k (0, n]. Cnd acest lucru se ntmpl, se poate
aplica succesiv o alt tehnic ce const n duplicarea primelor (n - k)
instruciuni plasate ncepnd de la adresa destinaie a saltului, imediat dup
instruciunea de salt i modificarea corespunztoare a adresei de salt la acea
adres care urmeaz imediat dup cele (n - k) instruciuni "originale", ca n
figura 3.27.

Figura 3.27. Soluionarea unui hazard de ramificaie prin duplicarea instruciunilor

n cazul n care saltul condiionat nu se execut, este necesar ca nici


una dintre cele (n - k) instruciuni adiionale s nu afecteze execuia
urmtoarelor (l + n - k) instruciuni. Metoda se recomand atunci cnd saltul
se face predominant, ceea ce poate fi stabilit n urma colectrii unor statistici
obinute dup rulare (profilings). n acest caz se realizeaz un ctig de
performan n schimb se suplimenteaz spaiul de memorare al
programului. De remarcat c aceste microprocesoare nu au n general
registru de flaguri i deci salturile condiionate nu se fac pe baza acestor
flaguri ci pe baza unei condiii specificate explicit n opcode-ul instruciunii

Procesoare pipeline scalare cu set optimizat de instruciuni

103

de salt.
n continuare se prezint un exemplu concret de reorganizare n
vederea eliminrii efectului BDS- ului, considernd ns c BDS- ul
instruciunii de salt este doar de 1 tact.
a)

Figura 3.28. Soluionarea optim

Strategia anterioar mbuntete rata de execuie ntotdeauna,


indiferent dac saltul se face ori nu se face. Dac aceast reorganizare nu e
posibil, se ncearc una dintre urmtoarele 2 variante ((b) sau (c)).
b)

Figura 3.29. Soluie util cnd saltul se face preponderent

n acest caz, rata de execuie crete doar atunci cnd saltul condiionat
se face. Dac saltul nu se face, trebuie ca instruciunea introdus n BDS
(SUB R4, R5, R6), s nu provoace execuia eronat a ramurii de program
respective. Din pcate un astfel de caz mrete zona de cod oricum i n plus
necesit timp de execuie sporit cu o instruciune adiional n cazul n care
saltul nu se face.

Procesoare pipeline scalare cu set optimizat de instruciuni

104

c)

Figura 3.30. Soluie util cnd saltul nu se face preponderent

Acest ultim caz, crete performana doar atunci cnd saltul condiionat
nu se face. i aici este necesar ca instruciunea introdus n BDS, s nu
provoace execuia eronat a ramurii de program n cazul n care saltul se
face.
n concluzie, prin toate aceste strategii software se urmrete
"umplerea" BDS-ului cu instruciuni utile i care s nu afecteze programul
din punct de vedere logic. n general microprocesoarele RISC, care dein un
BDS de una-dou instruciuni, au posibilitatea - printr-un bit din codul
instruciunii de salt condiionat - s introduc stagnri hardware n cazul
salturilor condiionate sau s se bazeze pe umplerea BDS-ului cu
instruciuni NOP sau cu alte instruciuni utile de ctre reorganizator
(scheduler).
n cele ce urmeaz, se vor prezenta pe larg, ntr-un mod critic i pe
deplin actualizat, cele mai performante strategii actuale de gestionare a
ramificaiilor de program i anume predicia prin hardware. Aceste strategii
hardware de predicie a branch-urilor au la baz un proces de predicie "run
- time" a ramurii de salt condiionat precum i determinarea n avans a
noului PC. Ele sunt comune practic att procesoarelor scalare ct i celor cu
execuii multiple ale instruciunilor care se vor analiza n detaliu n capitolul
urmtor al acestei lucrri. Cercetri recente insist pe aceast problem,
ntruct s-ar elimina necesitatea reorganizrilor soft ale programului surs i
deci s-ar obine o independen fa de main.
Necesitatea prediciei, mai ales n cazul procesoarelor cu execuii
multiple ale instruciunilor (VLIW, superscalare, etc., vezi cap. 3, 6) este
imperios necesar. Notnd cu BP (Branch Penalty) numrul mediu de cicli
de ateptare pentru fiecare instruciune din program, introdui de salturile
fals predicionate, se poate scrie relaia:
BP= C (1-Ap) b IR
(3.5)
unde s-au notat prin:

Procesoare pipeline scalare cu set optimizat de instruciuni

105

C= Numrul de cicli de penalizare introdui de un salt prost


predicionat
Ap= Acurateea prediciei
b= Procentajul instruciunilor de salt, din totalul instruciunilor,
procesate n program
IR= Rata medie de lansare n execuie a instruciunilor
Se observ c BP(Ap=0)=C b IR, iar BP(Ap=1)=0 (normal, predicia
este ideal aici). Impunnd un BP=0.1 i considernd valorile tipice: C=5,
IR=4, b=22.5%, rezult ca fiind necesar o acuratee a prediciei de peste
97.7% ! Cu alte cuvinte, la o acuratee de 97.7%, IR=4/1.4=2.8 instr./ciclu,
fa de IR=4 instr./ciclu, la o predicie perfect (Ap=100%). Este o dovad
clar c sunt necesare acuratei ale prediciilor foarte apropiate de 100%
pentru a nu se "simi" efectul defavorabil al ramificaiilor de program asupra
performanei procesoarelor avansate. O metod consacrat n acest sens o
constituie metoda "branch prediction buffer" (BPB). BPB-ul reprezint o
mic memorie adresat cu cei mai puin semnificativi bii ai PC-ului aferent
unei instruciuni de salt condiionat. Cuvntul BPB este constituit n
principiu dintr-un singur bit. Dac acesta e 1 logic, atunci se prezice c
saltul se va face, iar dac e 0 logic, se prezice c saltul nu se va face.
Evident c nu se poate ti n avans dac predicia este corect. Oricum,
structura va considera c predicia este corect i va declana aducerea
instruciunii urmtoare de pe ramura prezis. Dac predicia se dovedete a
fi fost fals structura pipeline se evacueaz i se va iniia procesarea
celeilale ramuri de program. Totodat, valoarea bitului de predicie din BPB
se inverseaz.

Figura 3.31. O bucl tipic

BPB cu un singur bit are un dezavantaj care se manifest cu precdere


n cazul buclelor de program ca cea din figura anterioar, n care saltul se va
face ( N - 1) ori i o dat, la ieirea din bucl nu se face. Bazat pe tehnica

Procesoare pipeline scalare cu set optimizat de instruciuni

106

BPB n acest caz vom avea uzual 2 predicii false: una la intrarea n bucl
(prima parcurgere) i alta la ieirea din bucl (ultima parcurgere a buclei).
Aadar, acurateea prediciei va fi de (N - 2) * 100 / N %, iar saltul se
face n proporie de (N - 1) * 100 / N %. Pentru a elimina acest dezavantaj
se utilizeaz 2 bii de predicie modificabili conform grafului de tranziie de
mai jos (numrtor saturat). n acest caz acurateea prediciei unei bucle care
se face de (N - 1) ori va fi (N - 1) * 100 / N %.

Figura 3.32. Automat de predicie de tip numrtor saturat pe 2 bii

Prin urmare, n cazul n care se prezice c branch-ul se va face,


aducerea noii instruciuni se face de ndat ce coninutul noului PC e
cunoscut. n cazul unei predicii incorecte, se evacueaz structura pipeline i
se atac cealalt ramur a instruciunii de salt. Totodat, biii de predicie se
modific n conformitate cu graful din figur numit i numrtor saturat
(vezi figura 3.32). Probabilitatea p ca predicia s fie corect pentru o
instruciune de salt, este dat de relaia:
p = p1 * p2 + (1-p2) * p3,
(3.6)
unde am notat prin:
p1, p2 - probabilitatea ca predicia adresat n BPB s fie corect i s
se refere la respectiva instruciune de salt;
(1-p2)*p3 - probabilitatea ca predicia s fie corect, dei nu se refer
la instruciunea n curs de aducere. (Exist de ex. posibilitatea ca 2
instruciuni de branch distincte s aib cei mai puini semnificativi bii ai
PC-ului identici). Este evident c maximizarea probabilitii P se obine prin
maximizarea probabilitilor p1, p2 (p3 nu depinde de caracteristicile BPBului).
Datorit faptului c predictorul propriu-zis este implementat prin
automate finite de stare, mai mult sau mai puin complexe, aceste scheme au
un caracter dinamic, comportarea lor adaptndu-se funcie de istoria

Procesoare pipeline scalare cu set optimizat de instruciuni

107

saltului respectiv. Exist i scheme de predicie numite statice, caracterizate


prin faptul c predicia saltului pentru o anumit istorie a sa este fix, bazat
n general pe studii statistice ale comportamentului salturilor. Astfel de
exemplu un salt care anterioarele trei instane s-a fcut efectiv (taken) poate
fi predicionat n tabele c se va face. Desigur c cel puin principial, o
schem dinamic de predicie este superioar uneia statice datorit
adaptabilitii sale.
O alt problem delicat const n faptul c dei predicia poate fi
corect, de multe ori adresa de salt (noul PC) nu este disponibil n timp
util, adic la finele fazei de aducere IF. Timpul necesar calculului noului PC
are un efect defavorabil asupra ratei de procesare. Soluia la aceast
problem este dat de metoda de predicie numit "branch target buffer"
(BTB). Un BTB este constituit dintr-un BPB care conine pe lng biii de
predicie, noul PC de dup instruciunea de salt condiionat i eventual alte
informaii. De exemplu, un cuvnt din BTB ar putea conine i instruciunea
int a saltului. Astfel ar crete performana, nemaifiind necesar un ciclu de
aducere a acestei instruciuni, dar n schimb ar crete costurile de
implementare. Diferena esenial ntre memoriile BPB i BTB const n
faptul c prima este o memorie operativ iar a 2-a poate fi asociativ, ca n
figura urmtoare.

Figura 3.33.. Structur de predicie BTB asociativ

La nceputul fazei IF se declaneaz o cutare asociativ n BTB dup


coninutul PC-ului n curs de aducere. n cazul n care se obine hit se obine
n avans PC-ul aferent instruciunii urmtoare. Mai precis, considernd o

Procesoare pipeline scalare cu set optimizat de instruciuni

108

structur pipeline pe 3 faze (IF, RD, EX) algoritmul de lucru cu BTB-ul este
n principiu urmtorul:
IF) Se trimite PC-ul instruciunii ce urmeaz a fi adus spre memorie
i spre BTB. Dac PC-ul trimis corespunde cu un PC din BTB (hit) se trece
n pasul RD2, altfel n pasul RD1.
RD1) Dac instruciunea adus e o instruciune de branch, se trece n
pasul EX1, altfel se continu procesarea normal.
RD2) Se trimite PC-ul prezis din BTB spre memoria de instruciuni.
n cazul n care condiiile de salt sunt satisfcute, se trece n pasul EX 3,
altfel n pasul EX2.
EX1) Se introduce PC-ul instruciunii de salt precum i PC-ul prezis
n BTB. De obicei aceast alocare se face n locaia cea mai de demult
neaccesat (Least Recently Used - LRU).
EX2) Predicia s-a dovedit eronat. Trebuie reluat faza IF de pe
cealalt ramur cu penalizrile de rigoare datorate evacurii structurilor
pipeline.
EX3) Predicia a fost corect, ns numai dac i PC-ul predicionat
este ntr-adevr corect, adic neschimbat. n acest caz, se continu execuia
normal.
n tabelul urmtor (tabelul 3.4) sunt rezumate avantajele i
dezavantajele tehnicii BTB, anterior descrise.
Instr. n BTB ?
Da
Da
Da
Da
Nu
Nu

Predicie
Da
Da
Nu
Nu
-

Realitate
Da
Nu
Nu
Da
Da
Nu

Cicli penalizare
0(Ctt)
Ctn
0
Cnt
Ct
0
Tabelul 3.4.

Penalizarea ntr-o structur de predicie tip BTB

n baza celor anterior discutate, rezult c numrul de cicli de


penalizare CP este dat de urmtoarea relaie:
CP = PBTB (Ptn*Ctn +Pnt*Cnt) +(1-PBTB )*P*Ct
(3.7)
unde s-a notat:
PBTB - probabilitatea ca instruciunea de salt s se afle n BTB;
Ptn - probabilitatea ca saltul s fie prezis c se face i n realitate nu
se va face;

Procesoare pipeline scalare cu set optimizat de instruciuni

109

Pnt - probabilitatea ca saltul s fie prezis c nu se face i n realitate


se va face;
P
- probabilitatea ca respectiva instruciune de salt s se fac;
Aceast relaie, necesit amendamente serioase pentru a fi util i
exact, dup cum se va arta ntr-o contribuie ulterioar a acestei lucrri. n
acest caz, rata de procesare a instruciunilor ar fi dat de relaia:
IR= 1/(1 + Pb*CP), [instr./tact],
(3.8)
unde Pb= probabilitatea ca instruciunea curent sa fie una de
ramificaie.
Un model matematic simplu al acestei tehnici pentru un BTB cu N bii
de memorare, legat de eficiena schemei, se refer la maximizarea funciei:
s

F=

Pex(i)[P(i)*Ptt(i)*V(i) - (1 - P(i))* Ptn( i )*W(i)]

(3.9)

i=1
s

astfel nct

n( i ) N,

i=1

unde :
n( i ) - numrul de bii din BTB alocat instruciunii de branch i;
N - numrul total de bii din BTB;
S - numrul de instruciuni branch procesate n cadrul programului;
Relativ la expresia funciei F avem urmtorii termeni:
Pex( i ) - probabilitatea ca branch-ul i s se execute n cadrul
programului ;
P( i ) - probabilitatea ca branch-ul i s se fac;
Ptt( i ) - probabilitatea ca branch-ul i s fie prezis c se face i ntradevr se va face;
V( i ) - numrul de cicli economisii n cazul unei predicii corecte a
branch-ului i;
W( i ) - numrul de cicli de penalizare n cazul unei predicii
incorecte a branch-ului i;
Obs.1) Ptt( i ) = Ptn( i ) = 0, dac branch-ul i nu se afl n BTB.
Obs.2) S-a considerat c BTB nu mbuntete performana pentru o
predicie corect de tipul "saltul nu se face" (Pnn( i ) = 0), ntruct n acest
caz structura se comport n mod implict la fel ca i o structur fr BTB.
De asemenea, pentru o predicie incorect a faptului c "saltul se face", am
considerat costul acelai cu cel pe care l-am avea fr BTB; din acest motiv
Pnt( i ) nu intr n expresia funciei.
Obs.3) Un branch trebuie introdus n BTB, cu prima ocazie cnd el
se va face. Un salt care ar fi prezis c nu se va face nu trebuie introdus n

Procesoare pipeline scalare cu set optimizat de instruciuni

110

BTB pentru c nu are potenialul de a mbunti performana (nu intr n


expresia funciei F). Din acest motiv, exist strategii care atunci cnd trebuie
evacuat un branch din BTB l evacueaz pe cel cu potenialul de
performan minim, care nu coincide neaprat cu cel mai puin folosit.
Astfel se construiete cte o variabil MPP (Minimum Performance
Potential), implementat n hardware, asociat fiecrui cuvnt din BTB.
Evacuarea din BTB se face pe baza MPP-ului minim. Acesta se calculeaz
ca un produs ntre probabilitatea ca un branch din BTB s fie din nou
accesat (LRU) i respectiv probabilitatea ca saltul s se fac. Aceasta din
urm se obine pe baza unei istorii a respectivului salt (taken / not taken).
Minimizarea ambilor factori duce la minimizarea MPP-ului i deci la
evacuarea respectivului branch din BTB, pe motiv c potenialul su de
performan este minim.
n literatur se arat c prin astfel de scheme se ajunge la predicii
corecte n cca. (80-90)% din cazuri. Exist implementri de mare
performan n care biii de predicie sunt gestionai i funcie de "istoria"
respectivei instruciuni de salt, pe baze statistice (INTEL NEX GEN,
TRON, etc). Prin asemenea implementri crete probabilitatea de predicie
corect a branch-ului. Microprocesorul Intel Pentium avea un predictor de
ramificaii bazat pe un BTB cu 256 de intrri.
O problem dificil este determinat de instruciunile de tip
RETURN ntruct o aceeai instruciune, poate avea adrese de revenire
diferite, ceea ce va conduce n mod normal la predicii eronate, pe motivul
modificrii adresei eronate n tabela de predicii. Desigur, problema se pune
att n cazul schemelor de tip BTB ct i a celor de tip corelat, ce vor fi
prezentate n continuare. Soluia de principiu, const n implementarea n
hardware a unor aa zise "stack - frame"- uri diferite. Acestea vor fi nite
stive, care vor conine perechi CALL/ RETURN cu toate informaiile
necesare asocierii lor corecte. Astfel, o instruciune CALL poate modifica
dinamic n tabela de predicii adresa de revenire pentru instruciunea
RETURN corespunztoare, evitndu-se astfel situaiile nedorite mai sus
schiate.
n literatur, bazat pe testri laborioase, se arat c se obin predicii
corecte n cca. 88% din cazuri folosind un bit de predicie i respectiv n
cca.93% din cazuri folosind 16 bii de predicie. Acurateea prediciilor
crete asimptotic cu numrul biilor de predicie utilizai, adic practic cu
"istoria prediciei". Schema de predicie pe 4 stri din figura 3.33 poate fi
generalizat uor la N = 2k stri. Se poate arta c exist N2N * 2N (stri x
ieiri) automate distincte de predicie cu N stri, dei multe dintre acestea
sunt triviale din punct de vedere al predictiilor salturilor. n bibliografie se

Procesoare pipeline scalare cu set optimizat de instruciuni

111

arat ntr-un mod elegant, pe baz teoretic i de simulare, c schema din


figura 3.32 este cvasioptimal n mulimea acestor automate de predicie. n
acord cu literatura de specialitate, mrirea numrului N de stri al
automatului de predicie pe k bii nu conduce la creteri semnificative ale
performanei. Dup cum vom arta n continuare, prin scheme de predicie
corelat a salturilor se pot obine performane superioare.
Schemele de predicie anterior prezentate se bazau pe comportarea
recent a unei instruciuni de salt, de aici predicionndu-se comportarea
viitoare a acelei instruciuni de salt. Este posibil mbuntirea acurateii
prediciei dac aceasta se va baza pe comportarea recent a altor instruciuni
de salt, ntruct frecvent aceste instruciuni pot avea o comportare corelat
n cadrul programului. Schemele bazate pe aceast observaie se numesc
scheme de predicie corelat i au fost introduse pentru prima dat n 1992
n mod independent de ctre Yeh i Patt i respectiv de Pan. S considerm
pentru o prim exemplificare a acestei idei o secven de program C extras
din benchmark-ul Eqntott din cadrul grupului de benchmark-uri SPECint
'92:
(b1) if (x = = 2)
x = 0;
(b2) if (y = = 2)
y = 0;
(b3) if (x ! = y) {
Se observ imediat c n acest caz dac salturile b1 i b2 nu se vor
face atunci saltul b3 se va face n mod sigur (x = y = 0). Aadar saltul b3 nu
depinde de comportamentul su anterior ci de comportamentul anterior al
salturilor b1 i b2, fiind deci corelat cu acestea. Evident c n acest caz
schemele de predicie anterior prezentate nu vor da randament. Dac dou
branch-uri sunt corelate, cunoscnd comportarea primului se poate anticipa
comportarea celui de al doilea, ca n exemplul de mai jos:
if (cond1)
....
if (cond1 AND cond2)
Se poate observa c funcia condiional a celui de al doilea salt este
dependent de cea a primului. Astfel, dac prima ramificaie nu se face
atunci se va ti sigur ca nici cea de a doua nu se va face. Dac ns prima
ramificaie se va face atunci cea de a doua va depinde exclusiv de valoarea
logic a condiiei "cond2". Aadar n mod cert aceste dou ramificaii sunt
corelate, chiar dac comportarea celui de al doilea salt nu depinde exclusiv
de comportarea primului. S considerm acum pentru analiz o secven de
program C simplificat mpreun cu secvena obinut n urma compilrii
(s-a presupus c variabila x este asignat registrului R1).

Procesoare pipeline scalare cu set optimizat de instruciuni

if

(x = = 0)
x = 1;
(x = = 1)

112

(b1)

BNEZ R1, L1
ADD R1, R0, #1
if
L1: SUB R3, R1, #1
(b2) BNEZ R3, L2
Se poate observa c dac saltul condiionat b1 nu se va face, atunci
nici b2 nu se va face, cele 2 salturi fiind deci corelate. Vom particulariza
secvena anterioar, considernd iteraii succesive ale acesteia pe parcursul
crora x variaz de exemplu ntre 0 i 5. Un BPB clasic, iniializat pe
predicie NU, avnd un singur bit de predicie, s-ar comporta ca n tabelul
3.5. Aadar o astfel de schem ar prediciona n acest caz, ntotdeauna
greit!

Tabelul 3.5.
Modul de predicionare al unui BPB clasic

S analizm acum comportarea unui predictor corelat avnd un singur


bit de corelaie (se coreleaz deci doar cu instruciunea de salt anterior
executat) i un singur bit de predicie. Acesta se mai numete i predictor
corelat de tip (1, 1). Acest predictor va avea 2 bii de predicie pentru fiecare
instruciune de salt: primul bit predicioneaz dac instruciunea de salt
actual se va face sau nu, n cazul n care instruciunea anterior executat nu
s-a fcut iar al doilea analog, n cazul n care instruciunea de salt anterior
executat s-a fcut. Exist deci urmtoarele 4 posibiliti (tabelul 3.6).
Bii predicie
NU / NU
NU / DA
DA / NU
DA / DA

Predicie dac precedentul salt


nu s-a fcut
NU
NU
DA
DA

Predicie dac
precedentul salt s-a fcut
NU
DA
NU
DA
Tabelul 3.6.

Semnificaia biilor de predicie pentru o schem corelat

Procesoare pipeline scalare cu set optimizat de instruciuni

113

Ca i n cazul BPB-ului clasic cu un bit, n cazul unei predicii care se


dovedete a fi eronat bitul de predicie indicat se va complementa.
Comportarea predictorului (1,1) pe secvena anterioar de program este
prezentat n continuare (s-a considerat c biii de predicie asociai
salturilor b1 i b2 sunt iniializai pe NU / NU).

Tabelul 3.7.
Modul de predicionare al unei scheme corelate

Dup cum se observ n tabelul 3.7, singurele dou predicii incorecte


sunt cnd x = 5 n prima iteraie. n rest, prediciile vor fi ntotdeauna
corecte, schema comportndu-se deci foarte bine spre deosebire de schema
BPB clasic. n cazul general, un predictor corelat de tip (m,n) utilizeaz
comportarea precedentelor m instruciuni de salt executate, alegnd deci o
anumit predicie de tip Da sau Nu din 2m posibile iar n reprezint numrul
biilor utilizai n predicia fiecrui salt. n cazul unei bucle, o nregistrare a
istoriei saltului sub forma 011111111 (m=9) conduce n mod cert la o
predicie corect a saltului ('0', adic nu se va face pentru c dup 8 iteraii
consecutive, n a noua iteraie se va iei din bucl), ceea ce printr-un
predictor clasic BTB e mai dificil de predicionat dup cum deja am artat;
de asemenea o comportare alternativ a unui salt este simplu de predicionat
printr-o schem corelat, n schimb printr-o schem clasic este foarte
dificil. Aadar schemele corelate sunt eficiente atunci cnd predicia depinde
i de un anumit pattern al istoriei saltului de predicionat, corelaia fiind n
acest caz particular cu istoria pe m bii chiar a acelui salt i nu cu istoria
anterioarelor m salturi.
Un alt avantaj al acestor scheme este dat de simplitatea implementrii
hardware, cu puin mai complex dect cea a unui BPB clasic. Aceasta se
bazeaz pe simpla observaie c "istoria" celor mai recent executate m
salturi din program, poate fi memorat ntr-un registru binar de deplasare pe
m ranguri (registru de predicie). Aadar adresarea cuvntului de predicie
format din n bii i situat ntr-o tabel de predicii, se poate face foarte

Procesoare pipeline scalare cu set optimizat de instruciuni

114

simplu prin concatenarea c.m.p.s. bii ai PC-ului instruciunii de salt curente


cu acest registru de deplasare n adresarea BPB-ului de predicie. Ca i n
cazul BPB-ului clasic, un anumit cuvnt de predicie poate corespunde la
mai multe salturi. Exist n implementare 2 nivele deci: un registru de
predicie al crui coninut concatenat cu PC- ul c.m.p.s. al instruciunii de
salt pointeaz la un cuvnt din tabela de predicii (aceasta conine biii de
predicie, adresa destinaie, etc.). Yeh nu face concatenarea PC - registru de
predicie i n consecin se obin rezultate nesatisfctoare datorit
interferenei diverselor salturi la aceeai locaie din tabela de predicii,
lucru constatat i eliminat de noi prin simulri proprii dup cum se va arta
ntr-un viitor capitol al acestei lucrri.
Pan analizeaz calitativ i cantitativ ntr-un mod foarte atent, rolul
informaiei de corelaie, pe exemple concrete extrase din benchmark-urile
SPECint '92. Se arat c bazat pe predictoare de tip numrtoare saturate pe
2 bii, schemele corelate (5-8 bii de corelaie utilizai) ating acuratei ale
prediciilor de pn la 11% n plus fa de cele clasice.
De remarcat c un BPB clasic reprezint un predictor de tip (0,n),
unde n este numrul biilor de predicie utilizai. Numrul total de bii
utilizai n implementarea unui predictor corelat de tip (m,n) este:
N = 2m * n * NI,
(3.10)
unde NI reprezint numrul de intrri al BPB-ului utilizat.
Exist citate n literatur mai multe implementri de scheme de
predicie a ramificaiilor, prima implementare comercial a unei astfel de
scheme fcndu-se n microprocesorul Intel Pentium Pro. Astfel de
exemplu, implementarea tipic a unui predictor corelat de tip GAg (Global
History Register, Global Prediction History Table) este prezentat n figura
3.34. Tabela de predicii PHT (Prediction History Table) este adresat cu un
index rezultat din concatenarea a dou informaii ortogonale: PClow (i
bii), semnificnd gradul de localizare al saltului, respectiv registrul de
predicie (HR- History Register pe k bii), semnificnd "contextul" n care se
situeaz saltul n program. De fapt, introducerea PClow n adresarea tabelei
precum i introducerea tag-urilor n PHT, aparin autorului acestei lucrri.
Ambele contribuii s-au fcut cu scopul eliminrii interferenelor branchurilor n tabela de predicie. Adresarea PHT exclusiv cu HR, ducea la
serioase interferene (mai multe salturi puteau accesa aceelai automat de
predicie din PHT), cu influene evident defavorabile asupra performanelor.
Desigur, PHT poate avea diferite grade de asociativitate. Un cuvnt din
aceast tabel are un format similar cu cel al cuvntului dintr-un BTB. Se
pare c se poate evita concatenarea HR i PClow n adresarea PHT, cu
rezultate foarte bune, printr-o funcie de dispersie tip SAU EXCLUSIV ntre

Procesoare pipeline scalare cu set optimizat de instruciuni

115

acestea, care s adreseze tabela PHT. Aceasta are o influen benefic


asupra capacitii tabelei PHT.
n scopul reducerii interferenelor diverselor salturi n tabela de
predicii, se prezint o schem numit PAg- Per Address History Table,
Global PHT, a crei structur este oarecum asemntoare cu cea a schemei
GAg. Componenta HR*(k) a introdus-o autorul acestei lucrri, avnd
semnificaia componentei HR de la varianta GAg, adic un registru global
care memoreaz comportarea ultimelor k salturi. Fr aceast component,
cred c schema PAg i-ar pierde din capacitatea de adaptare la contextul
programului n sensul n care schema GAg o face. n opinia mea, Yeh i Patt
renun ntr-un mod curios i greit la informaia de corelaie global (HRg)
n trecerea de la schemele de tip GAg la cele de tip PAg, n favoarea
exclusiv a informaiei de corelaie local (HRl). n schimb, componenta
HR din structura History Table, conine "istoria local" (taken/ not taken) a
saltului curent, ce trebuie predicionat. Dup cum se va arta mai departe,
performana schemei PAg este superioar celei obinute printr-o schem de
tip GAg, cu tributul de rigoare pltit complexitii hardware.

Figura 3.34. Structur de predicie de tip GAg

Urmtoarea schem de predicie (de tip PAg) predicioneaz pe baza a


3 informaii ortogonale, toate disponibile pe chiar timpul fazei IF: istoria
HRg a anterioarelor salturi corelate (taken / not taken), istoria saltului curent
HRl i PC-ul acestui salt. Dac adresarea tabelei PHT s-ar face n schema
PAg cu HR concatenat cu PClow(i), atunci practic fiecare branch ar avea
propria sa tabel PHT, rezultnd deci o schem i mai complex numit

Procesoare pipeline scalare cu set optimizat de instruciuni

116

PAp (Per Address History Table, Per Address PHT), a crei schem de
principiu este prezentat mai jos (figura 3.36). Complexitatea acestei
scheme o face practic neimplementabil n siliciu la ora actual, fiind doar
un model utilizat n cercetare.

Figura 3.35. Structur de predicie de tip PAg

Figura 3.36. Structur de predicie de tip PAp

Procesoare pipeline scalare cu set optimizat de instruciuni

117

Desigur, este posibil ca o parte dintre branch-urile memorate n


registrul HR, s nu se afle n corelaie cu branch-ul curent, ceea ce implic o
serie de dezavantaje. n astfel de cazuri pattern-urile din HR pot pointa n
mod inutil la intrri diferite n tabela de predicii, fr beneficii asupra
performanei prediciei, separndu-se astfel situaii care nu trebuiesc
separate. Mai mult, aceste situaii pot conduce la un timp de "umplere" a
structurilor de predicie mai ndelungat, cu implicaii defavorabile asupra
performanei.
n opinia autorului, o critic valabil pentru toate schemele corelate
const n faptul c informaia de corelaie global (HRg) este insuficient
n predicie. Mai precis, de exemplu n predicia saltului curent notat b4, s
considerm c se dispune de coninutul lui HRg = 101 i respectiv HRl = 01.
De asemenea s considerm c cele 3 salturi anterioare celui curent i a
cror comportare (taken / not taken) este dat de coninutul HRg (101 aici),
au fost b1, b2 i b3. ntr-o urmtoare instan a apariiei saltului b4 n exact
acelai context al coninuturilor HRg i HRl ca cel precedent, se va apela
acelai automat de predicie accesat de anterioara apariie a lui b4. Acest
fapt poate fi total ineficient avnd n vedere c nu exist nici o garanie a
faptului c i de aceast dat, cele 3 salturi anterioare lui b4 au fost b1, b2 i
b3, exact ca n cazul precedent. Prin urmare HRg nu poate "prinde" ntreg
contextul de apariie al unui anumit salt (b4 aici). Acest lucru l-am
demonstrat pe baz de statistici n trace-urile benchmark-urilor Stanford,
artnd c exist salturi care n acelai context (HRg, HRl) au comportri
aberante, adic de ex. n 56% din cazuri s-au fcut iar n 44% din cazuri, nu
s-au fcut. Prin urmare aceste salturi sunt practic inpredictibile, din motivul
c "acelai context" nu este n realitate acelai ! Soluia, n opinia mea,
demonstrat de altfel la nivel de simulare software prin cercetri ale
autorului i colaboratorilor si aflate n curs, ar consta n asocierea fiecrui
bit din HRg cu PC-ul aferent saltului respectiv i accesarea prediciei pe
baza acestei informaii mai complexe. Astfel, am putea avea sigurana c la
contexte diferite de apariie a unui anumit salt, se vor apela automate diferite
de predicie, asociate corect contextelor. Astfel s-ar reduce din efectele unui
fenomen de interferen a prediciilor nc nesesizat pn acum.
Compararea acestor noi scheme de predicie trebuie fcut cu scheme
clasice avnd aceeai complexitate structural. Desigur, comprimarea
acestui complex de informaie (HRg cu PC-urile aferente) este posibil i
poate chiar necesar, avnd n vedere necesitatea unor costuri rezonabile ale
acestor scheme. Ea se poate realiza prin utilizarea unor funcii de dispersie
simple (de ex. tip SAU- EXCLUSIV). Oricum, aceast observaie simpl
poate conduce la mbuntiri substaniale ale acurateii de predicie,
comparativ cu oricare dintre schemele actuale. Beneficiile unei asemenea

Procesoare pipeline scalare cu set optimizat de instruciuni

118

idei novatoare pot fi preliminate cantitativ prin determinarea n cadrul unui


anumit trace a direciei (taken / not taken), pentru fiecare instan a unui
anumit salt, aprut "n aceleai context" dat HRg, HRl. Procentaje (mult)
diferite 100% pentru direcia predilect a saltului, nu vor arta dect
necesitatea implementrii acestei idei, dup cum am mai artat.
O alt cauz a unor comportamente "aberante" ale ramificaiilor
(comportamente diferite n contexte identice) poate fi cauzat de anumite
pattern-uri mai "defavorabile" ale comportrii respectivului salt. Astfel de
ex., un "loop" care se face de 99 de ori i o dat nu se face, este practic
imposibil de a fi predicionat corect 100% pe un context, normal, de genul
HRg =111 respectiv HRl=11. De ce ? Pur i simplu pentru c nu se tie dac
acel 111 coninut n HRg este sau nu este cel de dinaintea "catastrofei" (a
momentului n care se iese din bucl). Ce informaii ar mai fi necesare
atunci "prinderii" unor astfel de comportri imprevizibile. Fr ndoial
acele PC-uri asociate fiecrui bit din HRg vor fi inutile n acest caz, n
schimb ar putea fi util aici memorarea contorului de iteraii undeva n
tabelele de predicie. Aceast ipotez ar putea fi confirmat prin simulri
specifice.
O comparare echitabil ntre schemele de predicie clasice i cele
corelate trebuie s impun acelai numr de bii utilizai n implementarea
celor 2 scheme de comparat. Aa de exemplu se compar un predictor (0,2)
de capacitate 4k cu predictor (2,2) de capacitate 1k. Acurateea prediciilor
schemei corelate este clar mai bun. Simulrile s-au fcut pe procesorul
DLX bazat pe 10 benchmark-uri SPECint 92. Schema corelat a obinut
predicii corecte n 82%-100% din cazuri. Mai mult, predictorul (2,2) obine
rezultate superioare n comparaie cu un BPB avnd un numr infinit de
locaii.
Mai nou, avnd n vedere complexitatea tot mai mare a acestor
predictoare, cu implicaii defavorabile asupra timpului de cutare n
structurile aferente, se vehiculeaz ideea unor predictoare hibride,
constnd n mai multe predictoare relativ simple asociate diferitelor tipuri de
salturi n mod optimal. Aceste predictoare se activeaz n mod dinamic,
funcie de tipul saltului care este n curs de predicionat. O alternativ ar fi
ca s predicioneze predictorul avnd cel mai mare grad de ncredere, la
momentul dat. Aceast soluie pare a fi cea care ar putea depi performana
complicatelor predictoare corelate pe 2 nivele.
O problem dificil n predicia branch-urilor o constituie salturile
codificate n moduri de adresare indirecte, a cror acuratee a prediciei este
deosebit de sczut prin schemele anterior prezentate (cca.50%). Problema
salturilor indirecte este de mare actualitate, cu precdere n contextul
programelor obiectuale, legat mai ales de implementarea polimorfismelor.

Procesoare pipeline scalare cu set optimizat de instruciuni

119

i n filosofia programrii procedurale apar apeluri idirecte (ex. apel indirect


la funcii). n acest caz, adresele de nceput ale diferitelor obiecte vizate sunt
nscrise dinamic n registrul de indirectare al saltului care implementeaz
polimorfismul. Practic, aici problema prediciei direciei saltului este
nlocuit cu una mult mai dificil, anume cu aceea a prediciei valorii
adresei acestuia. Chang propune o structur de predicie numit "target
cache" special dedicat salturilor indirecte. n acest caz predicia adresei de
salt nu se mai face pe baza ultimei adrese int a saltului indirect ca n
schemele de predicie clasice, ci pe baza alegerii uneia din ultimele adrese
int ale respectivului salt, memorate n structur. Aadar, n acest caz
structura de predicie, memoreaz pe parcursul execuiei programului pentru
fiecare salt indirect ultimele N adrese int.
Predicia se va face deci n acest caz pe baza urmtoarelor informaii:
PC-ul saltului, istoria acestuia, precum i ultimele N adrese int
nregistrate. Structura de principiu a target cache-ului e prezentat n figura
urmtoare, 3.37. O linie din acest cache conine ultimele N adrese int ale
saltului mpreun cu tag-ul aferent.

Figura 3.37. Predicia adresei n cazul salturilor indirecte

Informaia "istorie" provine din dou surse: istoria saltului indirect sau
a anterioarelor salturi i respectiv ultimele N adrese int, nscrise n linia
corespunztoare din cache. Aceste dou surse de informaie binar sunt
prelucrate prin intermediul unei funcii de dispersie (SAU EXCLUSIV),
rezultnd indexul de adresare n cache i tag-ul aferent. Dup ce adresa int
a saltului devine efectiv cunoscut, se va introduce n linia corespunztoare
din cache. Schema acioneaz "n mod disperat", miznd pe faptul c la

Procesoare pipeline scalare cu set optimizat de instruciuni

120

acelai context de apariie a unui salt indirect se va asocia o aceeai adres


int. i n opinia mea, aceast abordare principial pare singura posibil n
cazul acestor salturi greu predictibile. Prin astfel de scheme, msurat pe
benchmark-urile SPECint '95 acurateea prediciei salturilor indirecte crete
i ca urmare, ctigul global asupra timpului de execuie este de cca 4.3% 9%.
O alt idee nou n predicia branch-urilor, din pcate puin
mediatizat i neles n opinia mea, a fost lansat n 1996 de ctre Trevor
Mudge i const n predicia pe baz de lanuri Markov utiliznd
algoritmul PPM (Prediction by Partial Matching), utilizat de altfel i n
procesarea (compresia) de imagini i recunoaterea vorbirii. Un predictor
Markov de ordinul k predicioneaz bitul urmtor pe baza celor k bii
precedeni. n esen pentru predicie, se caut patternul memorat n registrul
HRg pe k bii ntr-un ir binar mai lung al istoriei salturilor anterioare. Dac
acest pattern este gsit n irul respectiv cel puin o dat, predicia se face
corespunztor, pe baza unei statistici care determin de cte ori acest pattern
a fost urmat n ir de 0 logic (non taken) i respectiv de cte ori a fost urmat
de 1 logic (taken). Dac ns patternul din HRg nu a fost gsit n irul de
istorie, se construiete un nou pattern mai scurt prin eludarea ultimului bit
din HRg i algoritmul se reia pe cutarea acestui nou pattern, .a.m.d. pn
la gsirea unui anumit pattern n ir. Se arat c dei complexitatea
implementrii acestei noi scheme crete de cca. 2 ori fa de o schem
corelat, eficiena sa - la acelai buget al implementrii - este clar
superioar. Nu sunt ns de acord cu autorii, care fr s o demonstreze,
susin c acest predictor reprezint limita superioar a predictabilitii
ramificaiilor.
n capitolul 5 al acestei lucrri se va prezenta un concept total nou n
predicia ramificaiilor, introdus de ctre autorul acestei lucrri, anume
predictorul neuronal, bazat n cadrul procesului de predicie pe reele
neuronale.
n fine, o alt soluie mai agresiv dect cele precedente, const n
aducerea instruciunilor din cadrul ambelor ramuri ale branch-ului n
structuri pipeline paralele (multiple instructions streams). Cnd condiia
de salt e determinat, una din ramuri se va abandona. Totui, necesitatea
prediciei apare i n acest caz datorit faptului c n anumite cazuri (salturi
indirecte, reveniri din subrutine) adresa de salt este necunoscut la finele
fazei IF i deci ar trebui predicionat n vederea procesrii eficiente. Apoi,
chiar cunoscute ambele adrese, apare dificultatea adresrii memoriei i
aducerii blocurilor de instruciuni de la aceste 2 adrese distincte simultan din
cache. Desigur c n acest caz sunt necesare redundane ale resurselor hard
(cache-uri, uniti de execuie, busuri, logic de control, etc.) precum i

Procesoare pipeline scalare cu set optimizat de instruciuni

121

complicaii n logica de control. Dac pe o ramur a programului exist de


exemplu o instruciune de tip STORE, procesarea acestei ramuri trebuie
oprit ntruct exist posibilitatea unei alterri ireparabile a unei locaii de
memorie. Aceast soluie implic creteri serioase ale costurilor, dar se pare
c ar fi singura capabil s se apropie orict de mult fa de idealul prediciei
absolut corecte. n cazul microprocesoarelor, aceste mecanisme de prefetch
al ambelor ramuri, nu se aplic n prezent la microprocesoare, n principal
datorit lrgimii de band limitate ntre microprocesor i memorie. Tehnica
s-a ntlnit n cazul supercomputerelor anilor '90 (ex. IBM-3033).
Aceste tehnici de predicie hardware a branch-urilor, datorit
complexitii lor, nu sunt implementate n mod uzual n microprocesoarele
RISC scalare, ntruct se prefer tehnicile software de "umplere" a BDS-ului
(limitat n general la o instruciune) cu instruciuni utile, n general
anterioare celei de salt, lucru posibil n cca. 70%-80% din cazuri. n schimb,
predicia hardware este implementat n cazul unor procesoare superscalare,
unde datorit BDS-ului de cteva instruciuni, umplerea lui cu instruciuni
anterioare independente devine practic imposibil.

3.4.5. PROBLEMA EXCEPIILOR N PROCESOARELE RISC


La sesizarea unui eveniment de excepie se vor inhiba toate procesele
de scriere, att pentru instruciunea care a provocat excepia, ct i pentru
urmtoarele aflate n band. Aceasta previne orice modificare a contextului
procesorului care ar putea fi cauzat de continuarea procesrii acestor
instruciuni. n principiu, dup terminarea instruciunii anterioare celei care
a provocat excepia, se intr n protocolul de tratare, n cadrul cruia se
salveaz intern sau extern PC-ul instruciunii care a provocat excepia,
precum i contextul procesorului. n particular, n cazul n care instruciunea
care a provocat excepia se afl ntr-un BDS de ordinul n i saltul se face,
atunci trebuie reluate cele n instruciuni BDS, precum i instruciunea la
care se face saltul. n acest caz trebuie salvate (n + 1) PC-uri pentru c n
general adresele instruciunilor din BDS i respectiv adresa instruciunii la
care se face saltul nu sunt contigue.
Dac n cazul unei excepii structura poate fi oprit astfel nct
instruciunile anterioare celei care a provocat excepia s poat fi complet
executate i respectiva instruciune mpreun cu cele ulterioare ei s poat fi
reluate n condiii deterministe, se zice c avem o excepie precis. n caz
contrar excepia se zice imprecis. Mai jos, se prezint un exemplu de
excepie imprecis :

Procesoare pipeline scalare cu set optimizat de instruciuni

122

DIVF F0, F2, F4


ADDF F6, F6, F8
SUBF F10, F10, F14
n acest caz instruciunile se vor termina Out of Order, adic ADDF i
SUBF se vor termina naintea instruciunii DIVF. S presupunem c
instruciunea DIVF a determinat o derut aritmetic ntr-un moment n care
ADDF i SUBF s-au ncheiat. Aceast situaie implic o excepie imprecis,
ntruct reluarea instruciunii DIVF se va face cu coninutul regitrilor F6 i
F10 alterat. Aceste situaii sunt evident nedorite, iar dac apar trebuie
eliminate. Relativ la excepiile imprecise, n literatur se precizeaz
urmtoarele posibiliti de soluionare:
a) Contextul CPU s fie dublat printr-un aa-numit "history-file",
care s pstreze toate resursele modelului de programare. n acest "historyfile" se nscriu noile rezultate la finele terminrii "normale" (pur secveniale)
a instruciunilor. n cazul apariiei unei excepii imprecise contextul
procesorului se va ncrca din acest context de rezerv (ex. CYBER 180 /
990). Exist i alte variaiuni pe aceast idee.
b) Prin aceast a 2-a soluie de principiu, nu se permite terminarea
unei instruciuni n band, pn cnd toate instruciunile anterioare nu se vor
fi terminat fr s cauzeze o excepie. Astfel se garanteaz c dac a aprut
o excepie n cadrul unei instruciuni, nici o instruciune ulterioar acesteia
nu s-a ncheiat i totodat instruciunile anterioare ei s-au ncheiat normal.
Soluia implic ntrzieri ale procesrii (ex. MIPS R 2000 / 3000).
O alt problem o constituie excepiile simultane. Dac lum n
considerare o procesare pe 5 nivele, n cadrul fiecrui nivel pot apare
urmtoarele excepii :
IF - derut accesare pagin memorie, acces la un cuvnt nealiniat, etc.
RD - cod ilegal de instruciune
EX - diverse derute aritmetice (overflow)
MEM - ca i la IF
WB - acces la resurse privilegiate n modul de lucru user.
Rezult imediat posibilitatea apariiei simultane a 2 sau mai multe
evenimente de excepie. S considerm spre exemplificare secvena de
instruciuni din figura 3.38, n cadrul creia apar simultan dou excepii:

Procesoare pipeline scalare cu set optimizat de instruciuni

123

Figura 3.38. Excepie simultan

Soluia ar consta n tratarea prioritar a derutei instruciunii LOAD,


dup care se va relua aceast instruciune. Apoi va apare deruta de depire
aferent instruciunii ADD care va fi i ea tratat.

Figura 3.39. Excepii n ordine invers

Un caz mai dificil este acela n care excepiile apar Out of Order ca n
exemplul din figura 3.39. n acest caz ar fi posibile 2 soluii de principiu:
1) S existe un flag de stare excepie aferent fiecrei instruciuni i
care s fie testat la intrarea n nivelul WB. Dac exist setat vreo excepie,
se va trece n protocolul de tratare. Astfel se garanteaz c toate excepiile
din cadrul unei anumite instruciuni vor fi vzute naintea excepiilor aprute
pe parcursul unei instruciuni urmtoare.
2) Se bazeaz pe tratarea excepiei de ndat ce aceasta a aprut
La sesizarea derutei din cadrul instruciunii (i + 1) se vor inhiba
instruciunile (i - 2), (i - 1), i, (i + 1) i prin protocolul de tratare se va relua
instruciunea (i - 2). Apoi se va sesiza deruta din cadrul instruciunii i
urmnd ca dup tratarea ei instruciunea i s se reia. Evident c deruta
aferent nivelului IF din cadrul instruciunii (i + 1) a fost anterior eliminat
i deci nu va mai apare. Menionm c majoritatea microprocesoarelor RISC
dein suficiente resurse hardware interne care s le permit n cazul apariiei
unei excepii salvarea intern a contextului CPU. Evident c limitarea
resurselor interne nu implic limitarea posibilitii de imbricare a
excepiilor. Ca i procesoarele CISC, procesoarele RISC dein regitri de
stare excepie, regitri care conin descrierea evenimentului de excepie
curent, regitri care memoreaz adresa virtual care a cauzat o excepie, etc.

Procesoare pipeline scalare cu set optimizat de instruciuni

124

3.4.6. AMBIGUITATEA REFERINELOR LA MEMORIE


Dependenele cauzate de variabilele aflate n memorie reprezint o
alt frn n calea obinerii performanei. Pentru exemplificare s
considerm secvena de program:
ST
4 ( Ri ), R1
LD
R2, 8 ( Rj )
Dup cum deja am artat, exist motive ca instruciunea LD s se
execute naintea instruciunii ST din motive de eficien a execuiei
(mascare laten, beneficii legate de procesarea Out of order, etc.). Acest
lucru este posibil numai dac cele 2 adrese de memorie sunt ntotdeauna
diferite. Este evident c dac la un anumit moment ele sunt identice,
semantica secvenei se modific inacceptabil. n general aceast problem se
rezolv static, de ctre compilator, atunci cnd acest lucru e posibil. O
component a acestuia ("disambiguating routine") compar cele 2 adrese de
memorie i returneaz una dintre urmtoarele 3 posibiliti:
a) adrese ntotdeauna distincte;
b) adrese ntotdeauna identice;
c) cel puin 2 adrese identice sau nu se poate determina.
Aadar, doar n primul caz putem fi siguri c execuia anterioar a
instruciunii LD fa de instruciunea ST (sau simultan n cazul unui
procesor MEM - Main cu Execuie Multipl, vezi capitolul 3)
mbuntete performana fr a cauza alterarea semantic a programului.
Din pcate, nu se poate decide ntotdeauna acest lucru n momentul
compilrii.
Dezambiguizarea static d rezultate bune n cazul unor adresri
liniare i predictibile ale memoriei (de ex. accesri de tablouri, matrici, etc.).
Ea presupune rezolvarea unor ecuaii diofantice mai mult sau mai puin
complexe, similare cu cele necesare vectorizrii buclelor de program. Prin
urmare un reorganizator de program bazat pe dezambiguizarea static va fi
deosebit de conservativ n aciunile sale. Dac aceast comparare a
adreselor de memorie se face pe parcursul procesarii programului prin
hardware, se zice c avem o dezambiguizare dinamic. Aceasta este mai
performant dect cea static dar necesit resurse hardware suplimentare i
deci costuri sporite.
Pentru a pune n eviden performana superioar a variantei dinamice,
s considerm secvena:

Procesoare pipeline scalare cu set optimizat de instruciuni

125

for i = 1 to 100 do
a[ 2i ]=....
y = f(..., a[i+4], ...)
end
ntr-un singur caz din cele 100 posibile (i = 4), cele 2 referine la
memorie a[2i] respectiv a[i + 4] sunt identice. Aadar, o dezambiguizare
static va fi conservativ, nepermind optimizarea buclei dei doar in 99%
din cazuri acest lucru este posibil. Pentru rezolvarea situaiei pe aceast cale
este necesar scoaterea din bucl a dependenelor de alias. O variant
dinamic ns, va putea exploata mai eficient acest fapt.
Exemplu:
1.
for i=1 to 100
a[2i]=x[i];
y[i]=a[i+1]+5;

ET:

ST Rj, a[2i]; // a[2i]=x[i] (x[i] este in Rj)


LD Rk, a[i+1]; // y[i]=a[i+1]
NOP; //Load Delay Slot!
ADD Rk, Rk, #5; // Rk=a[i+1]+5
ST Rk, y[i]; // y[i]=a[i+1]+5
...
LOOP ET

2.
a[2]=x[1];
y[1]=a[2]+5;
for i=2 to 100
a[2i]=x[i];
y[i]=a[i+1]+5;
ET:

LD Rk, a[i+1]; // y[i]=a[i+1]


ST Rj, a[2i]; // a[2i]=x[i]; //LDS full!
ADD Rk, Rk, #5; // Rk=a[i+1]+5
ST Rk, y[i]
...
LOOP ET

Pe un procesor superscalar:
ET:

LD Rk, a[i+1]; // y[i]=a[i+1], ST Rj, a[2i]; // a[2i]=x[i]; LD/ST IN PARALEL!


NOP; // LDS
ADD Rk, Rk, #5; // Rk=a[i+1]+5
ST Rk, y[i]
...
LOOP ET

Pe un procesor superscalar sau VLIW acest lucru este i mai avantajos


ntruct cele 2 operaii din bucl se vor putea realiza simultan. Se consider
c progresele n aceast problem pot duce la creteri semnificative de
performan n domeniul paralelismului la nivelul instruciunilor, dup cum

Procesoare pipeline scalare cu set optimizat de instruciuni

126

vom demonstra i noi ntr-o contribuie ulterioar.

3.4.7. EXECUIA CONDIIONAT I SPECULATIV


Execuia condiionat (predicativ) se refer la implementarea unor
aa numite instruciuni condiionate. O instruciune condiiont se va
executa dac o variabil de condiie inclus n corpul instruciunii
ndeplinete condiia dorit. n caz contrar, instruciunea respectiv nu va
avea nici un efect (NOP). Variabila de condiie poate fi memorat ntr-un
registru general al procesorului sau n regitri special dedicai acestui scop
numii regitri booleeni. Astfel de exemplu, instruciunea CMOVZ R1, R2,
R3 mut (R2) n R1 dac (R3) = 0. Instruciunea TB5 FB3 ADD R1, R2, R3
execut adunarea numai dac variabilele booleene B5 i B3 sunt '1' respectiv
'0'. n caz contrar, instruciunea este inefectiv. Desigur c variabilele
booleene necesit bii suplimentari n corpul instruciunii.
Execuia condiionat a instruciunilor este deosebit de util n
eliminarea salturilor condiionate dintr-un program, simplificnd programul
i transformnd deci hazardurile de ramificaie n hazarduri de date. S
considerm spre exemplificare o construcie if-then-else ca mai jos:
if (R8<1)
LT
B6, R8, #1; if R8<1, B6<---1
R1 = R2 + R3,
BF
B6, Adr1;
Dac B6=0 salt la Adr1
else
ADD R1, R2, R3
R1 = R5 - R7;
BRA Adr2 ; salt la Adr2
R10 = R1 + R11; Adr1: SUB R1, R5, R7
Adr2: ADD R10, R1, R11
Prin rescrierea acestei secvene utiliznd instruciuni condiionate se
elimin cele 2 instruciuni de ramificaie obinndu-se urmtoarea secven
mai simpl i mai eficient de program:
LT
B6, R8, #1
TB6 ADD R1, R2, R3
FB6 SUB R1, R5, R7
ADD R10, R1, R11
Este clar c timpul de execuie pentru aceast secven este mai mic
dect cel aferent secvenei anterioare. Se arat c astfel de transformri
reduc cu cca. 25-30% instruciunile de salt condiionat dintr-un program.
Aceast execuie condiionat a instruciunilor faciliteaz execuia
speculativ. Codul situat dup un salt condiionat n program i executat

Procesoare pipeline scalare cu set optimizat de instruciuni

127

nainte de stabilirea condiiei i adresei de salt cu ajutorul instruciunilor


condiionate, se numete cod cu execuie speculativ, operaia respectiv
asupra codului numindu-se predicare. Predicarea reprezint o tehnic de
procesare care - utiliznd instruciuni cu execuie condiionat - urmrete
execuia paralel prin speculaie a unor instruciuni i reducerea numrului
de ramificaii din program, ambele benefice pt. minimizarea timpului de
execuie al programului. Acest mod de execuie a instruciunilor poate fi
deosebit de util n optimizarea execuiei unui program.
Prezentm n continuare o secven de cod iniial i care apoi e
transformat de ctre scheduler n vederea optimizrii execuiei prin
speculaia unei instruciuni.
SUB
LT
BT
ADD
SUB

R1, R2, R3
B8, R1, #10
B8, Adr
R7, R8, R1
R10, R7, R4

FB8

SUB R1, R2, R3


LT
B8, R1, #10
ADDR7,R8,R1; speculativ
BT
B8, Adr
SUB R10, R7, R4

Execuia speculativ a instruciunii ADD putea fi realizat i n lipsa


variabilelor de gard booleene dar atunci putea fi necesar redenumirea
registrului R7 (dac acesta ar fi n via pe ramura pe care saltul se face).
Orice instruciune - cu excepia celor de tip STORE - poate fi executat
speculativ. O posibil strategie de a permite instruciuni STORE speculative
const n introducerea unui Data Write Buffer (DWB). Memorarea se va
face nti aici i abia cnd condiia de salt este cunoscut se va nscrie n
memorie. Pe lng avantajele legate de eliminarea salturilor, facilizarea
execuiei speculative, predicrii, etc., execuia condiionat are i cteva
dezavantaje dintre care amintim:
- instruciunile condiionate anulate (NOP) necesit totui un timp de
execuie. n cazul speculaiei, n aceste condiii performana n execuie
scade.
- dac variabila de condiie e evaluat trziu, utilitatea instruciunii
condiionate va fi micorat.
- promovarea unei instruciuni peste mai multe ramificaii condiionate
n vederea execuiei speculative necesit gardri multiple.
- instruciunile condiionate pot determina scderea frecvenei de tact a
microprocesorului.
Avnd n vedere cele de mai sus, utilitatea execuiei condiionate este
nc discutat. MIPS, POWER-PC, SUN-SPARC, DEC ALPHA dein doar
o instruciune de tip MOVE condiionat, n timp ce alte microarhitecturi
precum HEWLET PACKARD PA, HARP, HSA, etc., permit execuia

Procesoare pipeline scalare cu set optimizat de instruciuni

128

condiionat a majoritii instruciunilor main. La ora actual exist nc


puine evaluri cantitative care s stabileasc avantajele/dezavantajele
acestei idei ntr-un mod clar.

4. PROCESOARE CU EXECUII MULTIPLE ALE


INSTRUCIUNILOR [7]

4.1.
CONSIDERAII
GENERALE.
SUPERSCALARE I VLIW (EPIC)

PROCESOARE

Un deziderat ambiios este acela de se atinge rate medii de procesare


de mai multe instruciuni per tact. Procesoarele care iniiaz execuia mai
multor operaii simultan intr-un ciclu (sau tact) se numesc procesoare cu
execuii multiple ale instruciunilor. Un astfel de procesor aduce din cacheul de instruciuni una sau mai multe instruciuni simultan i le distribuie spre
execuie n mod dinamic sau static (prin reorganizatorul de program),
multiplelor uniti de execuie.
Principiul acestor procesoare paralele numite i "maini cu execuie
multipl" (MEM) const n existena mai multor uniti de execuie paralele,
care pot avea latene diferite. Pentru a facilita procesarea acestor
instruciuni, acestea sunt codificate pe un singur cuvnt de 32 sau 64 de bii
uzual, pe modelul RISC anterior prezentat. Dac decodificarea
instruciunilor, detecia dependenelor de date dintre ele, rutarea i lansarea
lor n execuie din bufferul de prefetch nspre unitile funcionale se fac
prin hardware, aceste procesoare MEM se mai numesc i superscalare.
Pot exista mai multe uniti funcionale distincte, dedicate de exemplu
diverselor tipuri de instruciuni tip ntreg sau flotant. Aadar execuiile
instruciunilor ntregi, se suprapun cu execuiile instruciunilor flotante (FPFlotant Point). n cazul procesoarelor MEM, paralelismul temporal
determinat de procesarea pipeline se suprapune cu un paralelism spaial
determinat de existena mai multor uniti de execuie. n general structura
pipeline a coprocesorului are mai multe nivele dect structura pipeline a
procesorului ceea ce implic probleme de sincronizare mai dificile dect n
cazul procesoarelor pipeline scalare. Acelai lucru este valabil i ntre
diferite alte tipuri de instruciuni avnd latene de execuie diferite.
Caracteristic deci procesoarelor superscalare este faptul c dependenele de
date ntre instruciuni se rezolv prin hardware, n momentul decodificrii
instruciunilor. Modelul ideal de procesare superscalar, n cazul unui

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

128

procesor care poate aduce i decodifica 2 instruciuni simultan este prezentat


n figura 4.1.
Este evident c n cazul superscalar complexitatea logicii de control
este mult mai ridicat dect n cazul pipeline scalar, ntruct detecia i
sincronizrile ntre structurile pipeline de execuie cu latene diferite i care
lucreaz n paralel devin mult mai dificile. De exemplu un procesor
superscalar avnd posibilitatea aducerii i execuiei a "n" instruciuni main
simultan, necesit n(n-1)/2 uniti de detecie a hazardurilor de date ntre
aceste instruciuni (comparatoare digitale), ceea ce conduce la o
complexitate ridicat a logicii de control.

Figura 4.1. Modelul execuiei superscalare

S-ar putea deci considera aceste procesoare MEM ca fiind arhitecturi


de tip MIMD (Multiple Instructions Multiple Data) n taxonomia lui
Michael Flynn. De remarcat totui c n aceast categorie sunt introduse cu
precdere sistemele multiprocesor care exploateaz paralelismul la nivelul
mai multor aplicaii (coarse grain parallelism), arhitecturile RISC ca i cele
de tip MEM exploatnd paralelismul instruciunilor la nivelul aceleiai
aplicaii (fine grain parallelism). Desigur c - din punctul de vedere al
acestei taxonomii - arhitecturile pipeline scalare (RISC), ar fi ncadrabile n
clasa SISD (Single Instruction Single Data), fiind deci incluse n aceeai
categorie cu procesoarele cele mai convenionale (secveniale), ceea ce
implic o slbiciune a acestei sumare taxonomii.
n figura 4.2 se prezint o structur tipic de procesor superscalar care
deine practic 2 module ce lucreaz n paralel: un procesor universal i un
procesor destinat operaiilor n virgul mobil. Ambele module dein uniti
de execuie proprii avnd latene diferite. La anumite microprocesoare
superscalare regitrii CPU sunt diferii de regitrii FP, pentru a se reduce
hazardurile structurale (n schimb creteri serioase ale costurilor i dificulti
tehnologice) iar la altele (de ex. Motorola 88100), regitrii CPU sunt identici
cu cei ai coprocesorului. De exemplu, pentru eliminarea hazardurilor

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

129

structurale, multe dintre aceste microprocesoare nu dein "clasicul" registru


al indicatorilor de condiie. Salturile condiionate se realizeaz prin
compararea pe o anumit condiie, a 2 dintre registrele codificate n
instruciune. Hazardurile structurale la resursele hardware interne se elimin
prin multiplicarea acestora i sincronizarea adecvat a proceselor.

Figura 4.2. Structur de procesor superscalar pipeline

De remarcat c procesoarele superscalare, determin apropierea ratei


de execuie la una sau, n cazul n care se pot aduce mai multe instruciuni
simultan, la mai multe instruciuni per ciclu. Dificultile de sincronizare
sporite, se rezolv prin utilizarea unor tehnici hardware bazate pe
"scoreboarding" deosebit de sofisticate. Majoritatea microprocesoarelor
RISC actuale sunt de tip superscalar (conin cel puin un coprocesor integrat
n chip). Un procesor superscalar care aduce din cache-ul de instruciuni mai
multe instruciuni primitive simultan, poate mri rata de procesare la 1.2-2.3
instr./ciclu msurat pe o mare diversitate de benchmark-uri, la nivelul
realizrilor practice ntre anii 1995-1998. Exemple remarcabile de
microprocesoare superscalare comerciale de tip RISC, sunt: INTEL 960 CA,
SUN SuperSPARC,
MPC 601, 603, 620 (POWER PC), etc.
Microprocesoarele Intel Pentium, AMD K6, etc., sunt practic procesoare
avnd model de programare CISC dar execuie hardware superscalar.
Procesoarele VLIW (Very Long Instruction Word) reprezint
procesoare care se bazeaz pe aducerea n cadrul unei instruciuni multiple a
mai multor instruciuni RISC independente pe care le distribuie spre
procesare unitilor de execuie. Aadar, rata de execuie ideal la acest
model, este de n instruciuni/ciclu. Pentru a face acest model viabil, sunt

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

130

necesare instrumente soft de exploatare a paralelismului programului, bazate


pe gruparea instruciunilor simple independente i deci executabile n
paralel, n instruciuni multiple. Arhitecturile VLIW sunt tot de tip MEM.
Principiul VLIW este sugerat n figura 4.3:

Figura 4.3. Decodificarea i alocarea instruciunilor ntr-un procesor VLIW

n cadrul acestui model, se ncearc prin transformri ale programului,


ca instruciunile RISC primitive din cadrul unei instruciuni multiple s fie
independente i deci s se evite hazardurile de date ntre ele, a cror
gestionare ar fi deosebit de dificil n acest caz. Performana procesoarelor
VLIW este esenial determinat de programele de compilare i reorganizare
care trebuie s fie deosebit de "inteligente". De aceea acest model de
arhitectur se mai numete uneori i EPIC (Explicitly Parallel Instruction
Computing).
Prin urmare, n cazul modelului de procesor VLIW, compilatorul
trebuie s nglobeze mai multe instruciuni RISC primitive independente n
cadrul unei instruciuni multiple, n timp ce n cazul modelului superscalar,
rezolvarea dependenelor ntre instruciuni se face prin hardware, ncepnd
cu momentul decodificrii acestor instruciuni. De asemenea, poziia
instruciunilor primitive ntr-o instruciune multipl determin alocarea
acestor instruciuni primitive la unitile de execuie, spre deosebire de
modelul superscalar unde alocarea se face dinamic prin control hardware.
Acest model de procesor nu mai necesit sincronizri i comunicaii de date
suplimentare ntre instruciunile primitive dup momentul decodificrii lor,
fiind astfel mai simplu din punct de vedere hardware dect modelul
superscalar. Un model sugestiv al principiului de procesare VLIW este
prezentat n figura 4.4.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

131

Figura 4.4. Principiul de procesare VLIW

Pentru exemplificarea principiului de procesare MEM, s considerm


secvena de program de mai jos :
LOOP:
LD
F0,0(R1)
ADD F4,F0,F2
SD
0(R1),F4
SUB R1,R1,#8
BNEZ R1, LOOP
Se va analiza n continuare cum ar trebui reorganizat i procesat
secvena de program anterioar pentru a fi executat pe un procesor VLIW
care poate aduce maxim 5 instruciuni primitive simultan i deine 5 uniti
de execuie distincte i anume: 2 uniti LOAD / STORE (MEM1, MEM2),
2 uniti de coprocesor flotant (FPP1, FPP2) i o unitate de procesare a
instruciunilor ntregi i respectiv a branch-urilor.

Tabelul 4.1.
Execuia instruciunilor pe un procesor VLIW cu 5 uniti de execuie
specializate (corectati eventualele erori din program!)

De remarcat n acest caz o rat medie de procesare de 2.4 instruciuni /


ciclu. Altfel spus, bucla de program anterioar se execut n doar 1.42 cicli

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

132

(10 cicli / 7 bucle). De remarcat printre altele, o redenumire a regitrilor


absolut necesar acestei procesri agresive. Posibilitile hard / soft aferente
unei asemenea procesri vor fi prezentate succint n continuare. Este clar c
performana procesoarelor MEM este esenial determinat de programele de
compilare i reorganizare care trebuie s fie deosebit de "inteligente".
Cercetri realizate n comun la Universitatea Stanford, USA i firma DEC
(Digital Equipment Corporation) pe procesoare VLIW cu 4 instruciuni
simultane, au artat c n aplicaii reale se ajunge la execuia a max 2 - 3
instruciuni / ciclu, prin compilatoare optimizate. Dei rare, exist realizri
comerciale de computere VLIW cu software de optimizare de oarecare
succes pe pia : IBM RS / 6000 ( 4 instruciuni / ciclu , teoretic), INTEL
860 (maxim 2 instruciuni / ciclu), APOLLO DN 10000, etc. Aceste
realizri sunt disponibile comercial ncepnd cu anul 1991, dei cercetrile
au fost iniiate ncepnd din 1983. Firma Intel a anunat c noul su model
de procesor avnd numele de cod Merced (IA-64), ce va fi lansat n anii
1999 - 2000, va fi realizat pe principii VLIW (EPIC). Avnd n vedere c n
cadrul acestor arhitecturi compilatorul este puternic senzitiv la orice
modificare hardware, personal prevd o legtur hardware - software mai
pronunat dect cea actual (1998), ncepnd cu lansarea comercial a
acestei arhitecturi noi. Necesitile de "upgrade" hardware - software, cred
de asemenea vor fi mai imperioase prin aceast filosofie EPIC, necesitnd
deci mai mult dect pn acum din partea utilizatorilor, serioase i continue
investiii financiare corespunztor noilor modele. IA-64 (Intel Architecture)
va fi prima arhitectur Intel pe 64 de bii care va ngloba dou caracteristici
eseniale descrise deja n capitolul 2: execuia condiionat prin variabile de
gard booleene a instruciunilor (execuie predicativ) i respectiv
execuia speculativ a instruciunilor cu beneficii asupra mascrii latenei
unor instruciuni mari consumatoare de timp i deci asupra vitezei de
procesare. Arhitectura se bazeaz pe explicitarea paralelismului
instruciunilor la nivelul compilatorului ntr-un mod similar cu cel din
arhitecturile VLIW. Intel susine c programele optimizate pe o anumit
main IA-64 vor funciona fr probleme pe oricare alt viitoare main
ntruct latenele unitilor de execuie ca i numrul acestora sunt invizibile
pentru optimizatorul de cod. Aceasta se realizeaz ns prin interconectarea
total a unitilor de execuie care se sincronizeaz prin tehnici de tip
scoreboarding. Rezult deci c un program obiect portat de la o versiune
mai veche de procesor la alta mai nou, chiar dac va funciona totui
corect, se va procesa mai lent dect dac ar fi optimizat special pentru noua
variant de procesor.
Dificultile principale ale modelului VLIW sunt urmtoarele:

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

133

- Paralelismul limitat al aplicaiei, ceea ce determin ca unitile de


execuie s nu fie ocupate permanent, fapt valabil de altfel i la modelul
superscalar.
- Incompatibilitate software cu modele succesive i compatibile de
procesoare care nu pot avea n general un model VLIW identic datorit
faptului c paralelismul la nivelul instruciunilor depinde de latenele
operaiilor procesorului scalar, de numrul unitilor funcionale i de alte
caracteristici hardware ale acestuia.
- Dificulti deosebite n reorganizarea aplicaiei (scheduling) n
vederea determinrii unor instruciuni primitive independente sau cu un grad
sczut de dependene.
- Creterea complexitii hardware i a costurilor ca urmare a
resurselor multiplicate, cilor de informaie "lite", etc.
- Creterea necesitilor de memorare ale programelor datorit
reorganizrilor soft i "mpachetrii" instruciunilor primitive n cadrul unor
instruciuni multiple care necesit introducerea unor instruciuni NOP
(atunci cnd nu exist instruciuni de un anumit tip disponibile spre a fi
asamblate ntr-o instruciune multipl).
n esen, prin aceste modele MEM se ncearc exploatarea
paralelismului din programe secveniale prin excelen, de unde i limitarea
principal a acestui domeniu de "low level parallelism".
Actualmente, datorit faptului c aceste procesoare sunt mult mai
ieftine dect procesoarele vectoriale (superprocesoare), i totodat foarte
performante, se pune problema determinrii unor clase largi de aplicaii n
care modele superscalar, superpipeline i VLIW s se comporte mai bine
sau comparabil cu modelul vectorial. Se poate arta relativ simplu, c din
punct de vedere teoretic performana unui procesor superscalar avnd N
uniti funcionale, fiecare cu o structur pipeline pe M nivele, este
echivalent cu cea a unui procesor scalar superpipeline cu o structur
pipeline pe M*N nivele. Asocierea unei arhitecturi optimale unei clase de
aplicaii dat, este o problem dificil. Performana procesoarelor scalare
superpipeline, superscalare i VLIW este n strns legtur cu progresele
compilatoarelor specifice acestor structuri, compilatoare care trebuie s
extrag ct mai mult din paralelismul existent la nivelul instruciunilor
programului.
De remarcat c modelele superscalar i VLIW nu sunt exclusive, n
implementrile reale se ntlnesc adesea procesoare hibride, n ncercarea de
a se optimiza raportul performan pre. Dup cum se va vedea, spre
exemplu tehnicile soft de optimizare sunt comune ambelor variante de
procesoare. Aceste modele arhitecturale de procesoare paralele sunt

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

134

considerate a face parte din punct de vedere arhitectural, din generaia a IIIa de microprocesoare, adic cea a anilor 1990 - 2000.

4.2. MODELE DE PROCESARE N ARHITECTURILE


SUPERSCALARE
n cazul procesoarelor superscalare sunt citate n literatura de
specialitate 3 modaliti distincte de procesare i anume: In Order Issue In
Order Completion (IN - IN), In Order Issue Out of Order Completion (IN OUT) i respectiv Out of Order Issue Out of Order Completion (OUT OUT). Pentru exemplificarea afirmaiei de mai sus, s considerm o
secven de instruciuni I1 - I6 cu urmtoarele particulariti: I1 necesit 2
cicli pentru execuie, I3 i I4 sunt n conflict structural, ntre I4 i I5 exist
dependen RAW iar I5 i I6 sunt de asemenea n conflict structural. n
aceste condiii i considernd un procesor superscalar care poate aduce i
decodifica 2 instruciuni simultan i care deine 2 uniti de execuie, avem
situaiile urmtoare pe cele trei modele:
a) Modelul IN - IN
Este caracterizat prin faptul c procesorul nu decodific urmtoarea
pereche de instruciuni, dect n momentul n care perechea anterioar se
execut. Aadar att execuia ct i nscrierea rezultatelor se face n ordinea
din program ca n figur.

Tabelul 4.2.

Exemplu de procesare IN-IN

b) Modelul IN - OUT
Este caracterizat de faptul c execuia propriu-zis se face n ordine, n
schimb nscrierea rezultatelor se face de ndat ce o instruciune s-a terminat

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

135

de executat. Modelul este mai eficient dect cel precedent ns poate crea
probleme de genul ntreruperilor imprecise care trebuiesc evitate prin tehnici
deja amintite n capitolul 3.

Tabelul 4.3.
Exemplu de procesare IN-OUT

c) Modelul OUT - OUT


Este cel mai agresiv i performant model de procesare a instruciunilor
ntr-un procesor superscalar. Instruciunile sunt aduse i decodificate
sincron, presupunnd deci existena unui buffer ntre nivelul de decodificare
i execuie (instructions window). Astfel crete capacitatea de anticipare a
instruciunilor independente dintr-un program. Modelul permite o
exploatare mai bun a paralelismului instruciunilor la nivelul unui program
dat, prin creterea probabilitii de determinare a unor instruciuni
independente, stocate n buffer.

Tabelul 4.4.
Exemplu de procesare OUT-OUT

Desigur c execuia Out of Order este posibil numai atunci cnd


dependenele de date ntre instruciuni o permit. Cade n sarcina hardului

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

136

eliminarea dependenelor i alocarea instruciunilor din buffer la diversele


uniti de execuie (rutarea).

4.3. ARHITECTURA LUI R. TOMASULO


A fost proiectat i implementat pentru prima dat n cadrul unitii
de calcul n virgul mobil din cadrul sistemului IBM - 360 / 91 i este
atribuit lui Roberto Tomasulo, considerat a fi fost pionierul procesrii
superscalare i pe acest motiv, laureat al prestigiosului premiu Eckert
Mauchly Award pe anul 1996, acordat celor mai performani constructori i
proiectani de calculatoare. Arhitectura este una de tip superscalar avnd
deci mai multe uniti de execuie, iar algoritmul de control al acestei
structuri stabilete relativ la o instruciune adus, momentul n care aceasta
poate fi lansat n execuie i respectiv unitatea de execuie care va procesa
instruciunea. Arhitectura permite execuia multipl i Out of Order a
instruciunilor i constituie modelul de referin n reorganizarea dinamic a
instruciunilor ntr-un procesor superscalar. De asemenea, algoritmul de
gestiune aferent arhitecturii permite anularea hazardurilor WAR i WAW
printr-un ingenios mecanism hardware de redenumire a regitrilor, fiind deci
posibil execuia Out of Order a instruciunilor i n aceste cazuri. Aadar,
singurele hazarduri care impun execuia In Order sunt cele de tip RAW.
n cadrul acestei arhitecturi, detecia hazardurilor i controlul execuiei
instruciunilor sunt distribuite iar rezultatele instruciunilor sunt "pasate
anticipat" direct unitilor de execuie prin intermediul unei magistrale
comune numit CDB (Common Data Bus). Arhitectura de principiu este
prezentat n figura 4.5. Ea a fost implementat prima dat n unitatea de
virgul mobila FPP a calculatorului IBM 360/91, pe baza creia se va
prezenta n continuare. Staiile de rezervare (SR) memoreaz din SIF (Stiva
Instruciuni Flotante - pe post de buffer de prefetch aici) instruciunea ce
urmeaz a fi lansat spre execuie. Execuia unei instruciuni ncepe dac
exist o unitate de execuie neocupat momentan i dac operanzii afereni
sunt disponibili n SR aferent. Fiecare unitate de execuie (ADD, MUL) are
asociat o SR proprie. Precizm c unitile ADD execut operaii de
adunare / scdere iar unitaile MUL operaii de nmulire / mprire.
Modulele LB i SB memoreaz datele ncrcate din memoria de date
respectiv datele care urmeaz a fi memorate. Toate rezultatele provenite de
la unitile de execuie i de la bufferul LB sunt trimise pe magistrala CDB.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

137

Bufferele LB, SB precum i SR dein cmpuri de TAG necesare n controlul


hazardurilor de date ntre instruciuni.

Figura 4.5. Arhitectura lui Tomasulo

Exist n cadrul acestei uniti de calcul n virgul mobil i deci n


cadrul mai general al procesrii superscalare, 3 stagii de procesare a
instruciunilor i anume:
1) Startare - aducerea unei instruciuni din SIF (bufferul de prefetch)
ntr-o staie de rezervare. Aducerea se va face numai dac exist o SR
disponibil. Dac operanzii afereni se afl n FPR (setul de regitri
generali), vor fi adui n SR aferent. Dac instruciunea este de tip LOAD /
STORE, va fi ncrcat ntr-o SR numai dac exist un buffer (LB sau SB)
disponibil. Dac nu exist disponibil o SR sau un buffer, rezult c avem
un hazard structural i instruciunea va atepta pn cnd aceste resurse se
elibereaz.
2) Execuie - dac un operand nu este disponibil, prin monitorizarea
magistralei CDB de ctre SR ("snooping" - spionaj), se ateapt respectivul
operand. n aceast faz se testeaz existena hazardurilor de tip RAW ntre
instruciuni. Cnd ambii operanzi devin disponibili, se execut instruciunea
n unitatea de execuie corespunztoare.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

138

3) Scriere rezultat (WB) - cnd rezultatul este disponibil se nscrie pe


CDB i de aici n FPR sau ntr-o SR care ateapt acest rezultat
("forwarding").
De observat c nu exist pe parcursul acestor faze testri pentru
hazarduri de tip WAR sau WAW, acestea fiind eliminate prin nsi natura
algoritmului de comand dup cum se va vedea imediat. De asemenea,
operanzii surs vor fi preluai de ctre SR direct de pe CDB prin
"forwarding" cnd acest lucru este posibil. Evident c ei pot fi preluai i din
FPR n cazurile n care nu vor fi produi de instruciunile din staiile de
rezervare sau din unitile de execuie.
O SR deine 6 cmpuri cu urmtoarea semnificaie:
OP
- codul operaiei (opcode) instruciunii din SR.
Qj, Qk - codific pe un numr de bii unitatea de execuie (ADD,
MUL, etc.) sau numrul bufferului LB, care urmeaz s genereze operandul
surs aferent instruciunii din SR. Dac acest cmp este zero, rezult c
operandul surs este deja disponibil ntr-un cmp Vi sau Vj al SR sau pur i
simplu nu este necesar. Cmpurile Qj, Qk sunt pe post de TAG, adic atunci
cnd o unitate de execuie sau un buffer LB "paseaz" rezultatul pe CDB,
acest rezultat se nscrie n cmpul Vi sau Vj al acelei SR al crei TAG
coincide cu numrul sau numele unitii de execuie sau bufferului LB care
a generat rezultatul.
Vj, Vk - conin valorile operanzilor surs afereni instruciunii din
SR. Remarcm c doar unul dintre cmpurile Q respectiv V sunt valide
pentru un anumit operand.
BUSY - indic atunci cnd este setat c SR i unitatea de execuie
aferent sunt ocupate momentan.
Regitrii generali FPR i bufferele SB dein fiecare de asemenea cte
un cmp Qi, care codific numrul unitii de execuie care va genera data
ce va fi ncrcat n respectivul registru general respectiv care va fi stocat
n memoria de date. De asemenea, dein cte un bit de BUSY. Bufferele SB
dein n plus un cmp care conine adresa de acces precum i un cmp care
conine data de nscris. Bufferele LB conin doar un bit BUSY i un cmp
de adres.
Spre a exemplifica funcionarea algoritmului s considerm n
continuare o secven simpl de program main:
Start
Execuie WB
1. LF F6, 27(R1)
x
x
x
2. LF F2, 45(R2)
x
x
3. MULTF F0, F2, F4
x
4. SUBF F8, F6, F2
x
5. DIVF F10, F0, F6
x

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

139

6. ADDF F6, F8, F2


x
n continuare prezentm starea SR i a FPR n momentul definit mai
sus, adic prima instruciune ncheiat, a 2-a n faza de execuie iar celelalte
aflate n faza de startare.

Tabelul 4.5.
Situaia staiilor de rezervare n prima instan

Tabelul 4.6.

Starea regitrilor generali n prima instan

Din aceste structuri de date implementate n hardware, rezult de


exemplu c SR ADD1 urmeaz s lanseze n execuie instruciunea SUBF
F8, F6, F2. Valoarea primului operand (F6) se afl deja n cmpul Vj unde a
fost memorat de pe magistrala CDB ca urmare a terminrii execuiei primei
instruciuni. Evident c rezultatul acestei instruciuni a fost preluat de pe
CDB n registrul F6 dar i n bufferul LB1. Al 2-lea operand al instruciunii
SUBF nu este nc disponibil. Cmpul de TAG Qk arat c acest operand va
fi generat pe CDB cu "adresa" LOAD2 (LB2) i deci aceast SR va prelua

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

140

operandul n cmpul Vk de ndat ce acest lucru devine posibil. Preluarea


acestui operand se va face de ctre toate SR care au un cmp de TAG
identic cu LOAD2 (LB2).
S considerm de exemplu c latena unitilor ADD este de 2
impulsuri de tact, latena unitilor MUL este de 10 impulsuri de tact pentru
o nmulire i respectiv 40 impulsuri de tact pentru o operaie de mprire.
"Starea" secvenei anterioare n tactul premergtor celui n care
instruciunea MULTF va intra n faza WB va fi urmtoarea:
Start
Execuie
WB
1. LF F6, 27(R1)
x
x
x
2. LF F2, 45(R2)
x
x
x
3. MULTF F0, F2, F4 x
x
4. SUBF F8, F6, F2 x
x
x
5. DIVF F10, F0, F6 x
6. ADDF F6, F8, F2 x
x
x
n acest moment, starea staiilor de rezervare i a setului de regitri
generali va fi cea prezentat n tabelele 4.7 respectiv 4.8:

Tabelul 4.7.
Situaia staiilor de rezervare n a doua instan

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

141

Tabelul 4.8.
Starea regitrilor generali n a doua instan

De remarcat c algoritmul a eliminat hazardul WAR prin registrul F6


ntre instruciunile DIVF i ADDF i a permis execuia Out of Order a
acestor instruciuni, n vederea creterii ratei de procesare. Cum prima
instruciune s-a ncheiat, cmpul Vk aferent SR MUL2 va conine valoarea
operandului instruciunii DIVF, permind deci ca instruciunea ADDF s se
ncheie naintea instruciunii DIVF. Chiar dac prima instruciune nu s-ar fi
ncheiat, cmpul Qk aferent SR MUL2 ar fi pointat la LOAD1 i deci
instruciunea DIVF ar fi fost independent de ADDF. Aadar, algoritmul
prin "pasarea" rezultatelor n SR de ndat ce acestea sunt disponibile, evit
hazardurile WAR. Pentru a pune n eviden ntreaga "for" a algoritmului
n eliminarea hazardurilor WAR i WAW prin redenumire dinamic a
resurselor, s considerm bucla urmtoare:
LOOP:
LF F0, 0 (R1)
MULTF F4, F0, F4
SD 0 (R1), F4
SUB R1, R1, #4
BNEZ R1, LOOP
Considernd o unitate de predicie a branchurilor de tip "branchtaken", 2 iteraii succesive ale buclei se vor procesa ca mai jos (tabelele 4.9):
Start
Execuie WB
LF F0, 0 (R1)
x
x
MULTF F4, F0, F2
x
SD 0 (R1), F4
x
LF F0, 0 (R1)
x
x
MULTF F4, F0, F2
x
SD 0 (R1), F4
x
Se observ o procesare de tip "loop unrolling" ("netezirea buclei") prin
hardware (tabelele 4.9). Instruciunea LOAD din a 2-a iteraie se poate

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

142

executa naintea instruciunii STORE din prima iteraie ntruct adresele de


acces sunt diferite n cmpurile din buffere. Ulterior i instruciunile
MULTF se vor putea suprapune n execuie. De remarcat deci hazardul de
tip WAW prin F0 ntre instruciunile de LOAD s-a eliminat cu ajutorul SR
i a bufferelor SB i LB.

Tabelul 4.9.

Contextul procesorului aferent buclei de program

Arhitectura Tomasulo are deci avantajele de a avea logica de detecie


a hazardurilor distribuit i prin redenumire dinamic a resurselor, elimin
hazardurile WAW i WAR. Acest lucru este posibil pentru c resursele tip
surs folosite i aflate n starea "BUSY", nu se adreseaz ca nume de regitri
ci ca nume de uniti de execuie ce vor produce aceste surse. n schimb,
arhitectura este complex, necesitnd deci costuri ridicate. Este necesar o
logic de control complex, capabil s execute cutri / memorri
asociative cu vitez ridicat. Avnd n vedere progresele mari ale
tehnologiilor VLSI, variante uor mbuntite ale acestei arhitecturi se
aplic practic n toate procesoarele superscalare actuale (pentru reducerea
conflictelor, se folosesc mai multe busuri de tip CDB).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

143

Acest mecanism de forwarding din arhitectura lui Tomasulo, are


meritul de a reduce semnificativ din presiunea la "citire" asupra setului
general de regitri logici, speculnd dependenele RAW ntre instruciuni.

4.4. O ARHITECTUR REPREZENTATIV


PROCESOR SUPERSCALAR

DE

Avnd n vedere ideile de implementare a execuiilor multiple din


arhitectura lui Tomasulo, o arhitectur superscalar reprezentativ este
prezentat n figura 4.6. Prin SR am notat staiile de rezervare aferente
unitilor de execuie ale procesorului. Acestea implementeaz printre altele
bufferul "instruction window" necesar procesoarelor superscalare cu
execuie Out of Order. Numrul optim de locaii al fiecrei SR se determin
pe baz de simulare.
Dei performana maxim a unei asemenea arhitecturi ar fi de 6
instruciuni/ciclu, n realitate, bazat pe simulri ample, s-a stabilit c rata
medie de execuie este situat ntre 1-2 instruciuni / ciclu. n sub 1% din
cazuri, msurat pe benchmark-uri nenumerice, exist un potenial de
paralelism mai mare de 6 instruciuni / ciclu n cazul unei arhitecturi
superscalare "pure". Aceasta se datoreaz n primul rnd capacitii limitate
a bufferului de prefetch care constituie o limitare principial a oricrui
procesor, exploatarea paralelismului ntre instruciuni fiind limitat de
capacitatea acestui buffer. n tehnologia actual acesta poate memora ntre 8
- 64 instruciuni, capaciti mai mari ale acestuia complicnd mult logica de
detecie a hazardurilor RAW dup cum am artat (vezi paragraful 3.1).
Prezentm pe scurt rolul modulelor componente din aceast schem tipic.
Decodificatorul plaseaz instruciunile multiple n SR- urile
corespunztoare. O unitate funcional poate starta execuia unei instruciuni
din SR imediat dup decodificare dac instruciunea nu implic dependene,
operanzii i sunt diponibili i dac unitatea de execuie este liber. n caz
contrar, instruciunea ateapt n SR pn cnd aceste condiii vor fi
ndeplinite. Dac mai multe instruciuni dintr-o SR sunt simultan disponibile
spre a fi executate, procesorul o va selecta pe prima din secvena de
instruciuni.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

144

Figura 4.6. Arhitectura tipic a unui procesor superscalar

Desigur c este necesar un mecanism de arbitrare n vederea accesrii


CDB de ctre diversele uniti de execuie (UE). n vederea creterii
eficienei, deseori magistralele interne sunt multiplicate. Prezentm n figura
4.7 circulaia informaiei ntr-o structur superscalar puternic, similar cu
cea implementat la microprocesorul Motorola MC 88110. Setul de regitri
generali (FILE) este multiplicat fizic, coninutul acestor seturi fizice este
identic ns n orice moment. Am considerat c UE- urile conin i staiile de
rezervare aferente. Din acest motiv, avnd n vedere mecanismul de
"forwarding" implementat, comunicaia ntre UE i CDB s-a considerat
bidirecional.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

145

Figura 4.7. Multiplicarea magistralelor i a seturilor de regitri

Exist 3 categorii de busuri comune i anume: busuri rezultat (RB),


busuri surs (SB) si busuri destinaie (CDB). N corespunde numrului
maxim de instruciuni care pot fi lansate simultan n execuie. Min (M, P)
reprezint numrul maxim de instruciuni care pot fi terminate simultan.
Uzual se alege M = P. Exist implementate mecanisme de arbitrare
distribuite n vederea rezolvrii tuturor hazardurilor structurale posibile pe
parcursul procesrilor.
Pe baz de simulare se ncearc stabilirea unei arhitecturi optimale.
Astfel se arat c pentru o rat de fetch i de execuie de 4 instruciuni,
procesarea optim din punct de vedere performan/cost impune 7 busuri
destinaie, 4 uniti de execuie ntregi i 8 staii de rezervare pentru unitile
LOAD / STORE. Pentru o asemenea arhitectur s-ar obine o rat de
procesare de 2.88 instruciuni / tact, msurat ns pe benchmark-uri cu un
puternic caracter numeric, favorizante deci (Livermore Loops). Ideea de
baz este ns c hazardurile structurale se elimin i aici prin multiplicarea
resurselor hardware, deci fr pierderi de performan. Gradul de
multiplicare trebuie ns stabilit prin simulri ample ori prin metode
teoretice.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

146

Buffer-ul de reordonare (paragraf preluat din cartea VINTAN N. LUCIAN


Prediction Techniques in Advanced Computing Architectures (in limba
engleza), Matrix Rom Publishing House, Bucharest, ISBN 978-973-755137-5, 2007 (292 pg.; 3 ex. ULBS + 7 schimb interbibliotecar; cota
Biblioteca
ULBS
52.103);
http://www.matrixrom.ro/romanian/editura/domenii/informatica.php?id=867
#867
The present-day out of order issue superscalar microprocessor model
(dynamic scheduling processors) is implemented as a speculative
microarchitecture that actually fetches, issues and executes instructions
based on branch prediction using R. Tomasulos or closely related
algorithms and a special data structure called ReOrder Buffer (ROB). This
model extends the idea of instructions dynamic scheduling by introducing
the possibility of speculative execution. The hardware that implements
Tomasulos algorithm can be extended to support speculation, only if the
bypassing of results, which is needed to execute an instruction
speculatively, is separated from the completion of an instruction (that
consists in updating the memory or register file). Doing this separation, an
instruction bypasses its results to other instructions, without performing any
updates that might modify the CPUs logical state. When the instruction is
no longer speculative, thus after its write-back stage, it updates the logical
registers or data memory; this last phase is called instructions commit.
Separating the results bypassing from instructions completion makes
possible to avoid imprecise exceptions during the out-of-order instructions
processing.
Adding this last commit phase to the instruction execution sequence, an
additional set of hardware buffers is required, which hold the instructions
results that have finished execution but have not yet committed. The
Reorder Buffer structure implements these buffers. The Reorder Buffer is
also used to pass the results of the out of order executed instructions through
the reservation stations. The reservation stations buffer instructions only
between the time they issue and the time they begin execution. In this
architecture the ROB provides the register renaming function, as well
further presented. Figure 1.1 shows the hardware structure of the processor
including the ROB and Figure 1.2 presents ROBs structure.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

Figure 1.1. A typical out-of-order superscalar microarchitecture

Figure 1.2. Reorder Buffers structure

147

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

148

Each reservation station (SR in Figure 1.1) has the following fields:
Op instructions operation code (opcode);
Qj, Qk the ROB entries that will store the source operands, a
value of zero (NULL) indicating that the source operand is already
available in Vj, Vk, or that it is unnecessary; we called these Q
fields potential operands.
Vj, Vk the values of the instructions source operands; for loads
and stores the Vj field is used to hold the address offset; we called
these V fields actual operands.
Addr holds the memory effective address for loads or stores;
Dest supply the corresponding ROB entrys number representing
the destination for the result produced by the execution unit.
Busy indicates if a reservation station (SR) is available or not.
The register file has also a field Qi indicating the number of the ROB entry
that contains the operation whose result should be stored into the register.
Excepting instructions fetch, the other six phases involved in pipeline
instruction processing are the following:
1. Dispatch get the next instruction from the instructions queue. If all
reservation stations are full or the ROB is full (for example due to a
Load with miss in level two cache being in the ROBs head), then
instruction dispatch is stalled until both structures have available entries.
If there is an empty reservation station and the tail of the ROB is free,
the instruction is sent to the reservation station. Here is also
implemented a routing algorithm to dispatch the instruction to the right
reservation station (attached to the right execution unit). The Busy bit of
the allocated reservation station is set and the Ready field of the ROB
entry is reset. ROB is associatively searched in all its Dest fields using
the source registers name. In the case of multiple hits, it is considered
the last entry since the ROB entries are allocated in order. If an operand
value is available in the ROB (Ready=1), it is written from the Value
field into the reservation station fields Vj / Vk. If the operand value is not
available (Ready=0), the number of ROBs entry attached to the operand
is written into the reservation station fields Qj / Qk. In the case of a miss
in the ROB the operand value is written from the register set into the
reservation station fields Vj / Vk. The number of ROBs entry allocated
for the value of the result is sent into the reservation stations Dest field.
The destination register number is written into the Dest field of the ROB
entry.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

149

2. Issue if an operand is not yet available, the common data bus (CDB) is
monitored and when the operand is available on the CDB it is placed
into the corresponding reservation station. When both source operands
are available, the instruction is issued to the appropriate execution unit.
By delaying instructions execution until their source operands are
available, RAW dependences are detected.
3. Execute the corresponding functional unit executes the ALU
instructions. In the case of loads and stores in this stage is calculated the
data memory effective address. In the case of a taken branch, usually it
is calculated the branchs target address.
4. Memory active only for load and store instructions. During this stage
the result is written in the data-memory location (store) or loaded from
the data-memory location into the destination register (store). The datamemory address was calculated during the previous stage.
5. Writeback when the result is available, it is put on the Common Data
Bus (together with the ROBs entry number indicated by the reservation
stations Dest field) and from there into the Value field of the
corresponding ROB entry (its Ready field is set to 1). The Busy field of
the corresponding reservation station is reset. The result is also written
into the fields Vj / Vk of all those reservation stations that are waiting for
it. In the case of a store instruction, if the value to be stored is available,
it is written into the Value field of the ROB entry allocated for that store.
If the value to be stored is not available, the CDB is monitored, and
when the data-value is received, the Value field of the ROB entry is
updated.
6. Commit The normal commit case occurs when an instruction reaches
the head of ROB and its result is available (Ready=1). In this case, the
result is written from the Val field of the ROBs entry into the
destination register indicated by the Dest field of the ROBs entry or
into a data-memory location and, after that, the instruction is squashed
from the ROB. Thus, the in order commit is guaranteed by the in order
dispatch, while the issue, execute and writeback stages can be processed
out of order. When an incorrect predicted branch reaches the head of the
ROB, the ROB is emptied and the execution is restarted with the correct
successor of the branch.
As it can be observed, in the case of speculative architectures it is very
important when is performed the updating. Using the ROB, speculative
executions are possible because the register file or data memory are updated
with the result of an instruction only when that instruction is no longer
speculative. ROB capacity is largely determined by how many instructions

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

150

may be executed in parallel between Dispatch and Commit. Of course


branch prediction is crucial for exploiting instruction level parallelism
between multiple basic-blocks.
Each ROB entry contains four fields: Type, Dest, Value and the Ready field.
The Type field indicates whether the instruction is a branch, a store, or a
register operation (ALU operation or load). The Dest field supplies the
register number for loads and ALU operations or the memory address for
stores, where the instructions result must be written. The Value field is used
to hold the value of the result until the instruction commits. The Ready field
indicates if the instruction has completed execution (the value is ready).
ROB completely replaces the store buffers. ROB is usually implemented as
a circular FIFO queue having associative search facilities. For a better
understanding of the ROB functions we are analyzing the following
problems:
1. What is happen in the <Tail_ROB> after the current instruction decode?
If the <Tail_ROB> entry is free it will be allocated to the decoded
instruction. After this ROBs Ready field will be reset on 0. In the Dest field
it will be written the destination registers number.
2. When an ALU instruction will be introduced into a Reservation Station,
what might be written in its Q fields?
In the Qj and Qk fields it will be written the ROB locations indexes that will
generate
operands
value
(after
associative
searches
Opcode[Source_Reg1,2]=Dest[ROB]?). Obviously, if an operand is
available its value will be introduced in the reservation stations V field. In
this case the corresponding Q field will contain a NULL value. In the
reservation stations Dest fields it will be introduced ROB locations index
that was allocated to that concrete instruction (associative search
Opcode[Dest_Reg]=Dest[ROB]? If yes, k Dest[SR]; the corresponding
ROB entrys index is noted with k). At the end of the executions stage the
functional execution unit will write the result in ROB at the address Dest.
Now, the question is: what will happen if after these associative searches
well obtain multiple hits in ROB? Answer: Well consider the last hit
location from the ROB. Why? Because the instructions were in order
allocated in the ROB during the decode stage. But if one search is with
miss? Answer: Then the register file will be accessed.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

151

3. What is happen in ROB during the WriteBack stage?


If the instruction produced a result it is written in ROBs Value field.
Produced Data-Value ROB at address Dest[SR](k) AND Ready=1. The
results value is send also to the reservation stations (through the fields Vj /
Vk). In the case of a Store, the value that must be written in the Commit
stage is written in ROBs Value field.
4. What conditions must be fulfilled to start the Commit phase?
Commit stage starts only if the instruction is already in the WriteBack stage
and the corresponding ROB entry is in <Head_ROB> (in order commit).
More precisely, Commit is doing if: <Instr. Head ROB> AND
<Ready=1> AND <No_Exception> (If Exception=1
Blocking writes in
register file)
5. Considering Dispatch, Issue, Exec, WriteBack, Commit stages, what of
them are processing Out of Order. Why?
Issue, Exec, and WriteBack because the operations results are written only
in ROB and not in the CPUs logical registers. After an exception event,
branch misprediction, etc. the processors context might be recovered by
evicting from the ROB all the instructions processed immediately after the
exceptions event. The instructions result is written into the register file or
data memory only during Commit stage. (Also see below the Commit
phases comments)
6. Why Commit phase is In Order processed?
Its in order processing is guaranteed by the ROBs FIFO circular queue
organization. Obviously Dispatch stage must be in order in this processing
model, otherwise we cant guarantee that Commit will be in order.
7. What is the ROBs Dest field role?
The Dest field contains destination registers name if the instruction really
has a destination register. During Commit stage the value from ROB is
written in the register file at the address Dest. After Dispatch it is
associatively searched in ROB if Source_Reg=Dest[ROB].

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

152

As an alternative to ROB is the dynamic register renaming technique. This


is based on a set of extended physical registers instead of using a ROB and
reservation stations. During the Dispatch phase the destination register is
renamed with a free physical register belonging to the extended set of
registers. In this way, WAR (Write After Read) and WAW (Write After
Write) instructions data dependences are avoided. After Commit stage this
register become a logical register and the physical register becomes free (if
there arent instructions that use it as a source). The logic-physic conversion
is done through a simple mapping table. As a register renaming advantage,
the in order processes are simplified. As an alternative to this register deallocation process, the CPU has to wait for de-allocation until another
instruction will modify that register. In this case a register might be
allocated more that it is strictly necessary (MIPS R10000 case). MIPS
R10000/120000, Alpha 21264, Pentium III, IV implemented register
renaming technique, adding up to 80 extended physical registers.
However, in the last 3-4 years there are some opinions considering
that future processors must avoid a ROB centric design and move toward a
checkpoint-oriented processing model. Check pointing means saving the
CPUs state at appropriate points of execution in order to repair the
processor to a known previous architectural state. ROB limits the
microarchitectures scalability, it does not scale efficiently as instruction
window size increases. If an uncompleted instruction reaches the ROBs
head, it blocks the ROB and, in the nearest time, also the instructions issue
process (because the ROB would be full). The checkpointing key idea is that
sometimes reconstructing CPUs logical state is more efficient than
explicitly storing state like ROB-based approaches that record states every
instruction. Checkpointing records state only at some selected execution
points (miss-predicted branches, L2 cache miss Loads the so called
memory wall problem, etc.) and will regenerate state for individual
instructions only if it is necessary. Researchers show that such an approach
is scalable and more efficient comparing with centralized ROB models. This
solution will permit thousands of in-flight instructions, as Professor Mateo
Valeros research group from UPC Barcelona already proposed (KiloInstruction Processors Project). The main challenge is to design such an
architecture without so much resource enlargements (instruction queues,
load/store queues, physical register file, etc.) and therefore permitting a high
clock frequency.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

153

4.5. PROBLEME SPECIFICE INSTRUCIUNILOR DE


RAMIFICAIE N ARHITECTURILE MEM
S considerm o secven de program care se execut astfel:
PC=743644 :
I1
I2
I3
I4
I5
(branch condiionat)
PC=342234 :
I6
I7
I8
I9
(branch condiionat)
Dac am presupune c BDS-ul este de 2 cicli, procesarea secvenei de
mai sus pe un procesor superscalar (VLIW) cu procesare In Order care poate
aduce i executa maxim 4 instruciuni / ciclu, s-ar desfura ca n Tabelul
4.10. Se observ c pentru a compensa BDS-ul de 10 instruciuni, ar trebui
introduse n acesta 10 instruciuni anterioare instruciunii I5 i care s nu o
afecteze. Acest lucru este practic imposibil, de unde rezult c asemenea
metode sunt inefective pentru procesoarele superscalare. Din acest motiv
predicia hardware a branch-urilor pe baza unui BTB sau a unei scheme
corelate pe 2 nivele, este implementat deseori n aceste procesoare. Pentru
ca metodele de predicie prezentate pe larg n Capitolul 2 s funcioneze i
n acest caz, sunt necesare cteva completri datorate aducerii i execuiei
multiple a instruciunilor.

Tabelul 4.10.
Efectul BDS-ului ntr-un procesor superscalar

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

154

Se va considera c o locaie a memoriei cache de instruciuni conine 4


cmpuri. Fiecare cmp la rndul su va fi format din: codul instruciunii
respective, tag-ul format din biii de adres cei mai semnificativi, indexul de
succesor (IS) i indexul branch-ului n locaie (IBL). Subcmpul IS indic
urmtoarea locaie din cache- ul de instruciuni (I-Cache) predicionat a fi
adus i respectiv prima instruciune ce trebuie executat din cadrul acestei
locaii. Subcmpul IBL indic dac exist sau nu o instruciune de salt n
locaia din cache i dac da, locul acesteia n cadrul locaiei. Pentru secvena
anterioar de program, intrrile n memoria I-Cache se prezint ca n figura
4.8 (IBL s-a exprimat n binar).

Figura 4.8. Structura intrrilor I-Cache ntr-un procesor superscalar

Aadar subcmpul IS pointeaz spre prima instruciune care trebuie


executat n cadrul unei locaii din cache, iar subcmpul IBL spre o
eventual instruciune de salt din cadrul aceleiai locaii, predicionat c se
va face. Adresa complet a instruciunii la care se face saltul este coninut
n tabelele de predicie corespunztoare.
n continuare se vor prezenta cteva tehnici software utilizate n
procesoarele superscalare i VLIW. Aceste alternative pot simplifica mult
complexitatea hardware a procesorului. Dup cum se va vedea, utilizarea
unor optimizri software elimin necesitatea execuiei Out of Order a
instruciunilor, a bufferului "instruction window", redenumirii dinamice a
regitrilor, etc.

Microprocesoare multi-microthread. Abordarea


multithread pentru acoperirea latenelor
paragraf preluat/adaptat din lucrarea: VINTAN N. LUCIAN Predictie si speculatie
in microprocesoarele avansate, Editura Matrix Rom, Bucuresti, ISBN 973-685-497-3,

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

155

2002, Bibl. Univ. Sibiu - cota 47.697 (10 ex. la Biblioteca ULBS + 10 schimb
interbibliotecar)

O alt categorie de microarhitecturi interesante o constituie aa


numitele microprocesoare multi-microthread (cu microfire multiple de
execuie simultan). Un procesor multi-microthread (PMT) deine
abilitatea de a procesa simultan instruciuni provenite din thread-uri
(microfire de execuie) diferite, facilitnd astfel execuia programelor
multifir. n accepiunea clasic din ingineria software, un thread (fir)
reprezint o secven atomic de program, concurent, recunoscut de ctre
sistemele de operare care permit mai multor fire de execuie s ruleze,
alocndu-le resursele necesare n acest scop. Firele au propriul spaiu de cod
i de stiv dar, spre deosebire de taskuri, nu au zon de date proprie, ele
comunicnd printr-o zon partajat de memorie (zona de date a taskului
respectiv). Firele partajeaz informaia de stare a taskului precum i anumite
resurse hardware alocate acestuia. n general, un task este constituit din mai
multe fire de execuie. n general, variabilele partajate au aceeai adres i
acelai neles pentru toate firele. n accepiunea din arhitectura
calculatoarelor, mai larg, un microfir de execuie poate fi un task, un fir de
execuie dintr-un task dar poate fi constituit i din entiti soft de
granularitate mai mare, precum iteraii ale unei bucle de program, secvente
de cod cvasi-independente sau proceduri (rutine) din cadrul unui fir, toate
executabile n paralel (execuie concurent). Dup cum se va arta n
continuare, firele se activeaz-dezactiveaz pe parcursul execuiei
programelor, comunicnd ntre ele i sincronizndu-i activitile. Aceast
tehnic se mai numete uneori, n mod inexact, multitasking, deoarece
programul se poate ocupa cvasi-simultan de mai multe sarcini. PMT
gestioneaz o list a microthread-urilor active i decide ntr-o manier
dinamic asupra instruciunilor pe care s le lanseze n execuie. Coexistena
mai multor thread-uri active permite exploatarea unui tip de paralelism
numit Thread Level Parallelism (TLP), adic paralelism la nivelul
microfirelor concurente de execuie [Sil99, Vin00]. n continuare, pentru
comoditate, vom numi un microfir pur i simplu, fir sau thread.
Instruciunile din thread-uri diferite, fiind n general independente ntre ele,
se pot executa n paralel ceea ce implic grade superioare de utilizare ale
resurselor precum i mascarea latenelor unor instruciuni aflate n execuie.
n acest ultim sens, de asemenea, gestiunea branch-urilor este simplificat,
latena acestora putnd fi (mcar parial) acoperit de instruciuni aparinnd
unor thread-uri diferite i deci independente de condiia de salt. De
asemenea, efectul defavorabil al miss-urilor n cache-uri poate fi contracarat
prin acest multithreading (dac un thread genereaz un miss n cache de ex.,

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

156

CPU-ul - Central Processing Unit - poate continua procesele de aducere ale


instruciunilor din cadrul celorlalte thread-uri). Aadar groapa semantic
ntre conceptele de procesare multithreading a aplicaiilor HLL i procesorul
hardware convenional este umplut tocmai de aceste microprocesoare
multithread. Aadar TLP-ul reprezint o extensie, de granularitate mai
mic (deci granul mai mare!), a paralelismului ILP (Instruction Level
Parallelism) exploatat de ctre microprocesoarele superscalare.
Dei multithreading-ul mbuntete performana global, se cuvine a
se remarca faptul c viteza de procesare a unui anumit thread n sine, nu se
mbuntete prin aceast tehnic. Mai mult, este de ateptat chiar ca viteza
de procesare pentru fiecare thread n parte s se degradeze ntruct resursele
CPU trebuiesc partajate ntre toate thread-urile active din structurile
pipeline. Cu alte cuvinte, acest TLP se preteaz a fi exploatat, firete, n
modurile de lucru ale sistemelor cu multiprogramare sau/i multithread.
Partajarea multiplelor resurse hardware n vederea implementrii mai multor
contexte de procesare aferente fiecrui thread, implic probleme dificile n
cadrul unui PMT (mecanisme de aducere a mai multor instruciuni de la
adrese diferite i necontigue, structuri de predicie multiple, lansarea n
execuie a mai multor instruciuni aparinnd unor thread-uri distincte etc).
Simularea i optimizarea unor arhitecturi PMT devin extrem de sofisticate,
clasicele benchmark-uri n sine, nemaifiind aici de mare ajutor. Trebuie
lucrat n medii software bazate pe multiprogramare sau multihreading ceea
ce nu este deloc uor de implementat i mai ales de simulat i evaluat.
Latena memoriei principale este o problema esenial n sistemele de
calcul actuale, numit i memory wall. n cadrul unui sistem
multimicroprocesor cu memorie partajat (DSM - Data Shared Memory),
procesoarele sunt conectate la modulele fizice de memorie printr-o reea de
interconectare, mai mult sau mai puin complex (unibus, crossbar,
interconectri dinamice multinivel etc. [Hen02, Vin00b]). Dac un anumit
procesor dorete s citeasc o anumit locaie din spaiul logic unic de
adresare el va lansa o cerere de acces printr-o instrucine tip Load (sau un
mesaj, n cadrul sistemelor multiprocesor de tip message passing, cu
memorii fizic distribuite dpdv logic). Aceasta se va propaga de la procesor
la modulul fizic de memorie prin intermediul reelei de interconectare.
Modulul de memorie va furniza data procesorului dup un timp de citire
propriu, intrinsec circuitului, prin intermediul aceleiai reele de
interconectare. Intervalul de timp dintre cererea procesorului i
recepionarea datei de ctre acesta se numete laten. n cazul sistemelor
actuale aceasta devine tot mai mult o problem datorit creterii vitezei
microprocesoarelor cu cca. 58 % pe an n timp ce timpul de acces al
memoriilor de tip DRAM scade cu doar 7 % pe an (dup ali autori acesta

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

157

scade doar cu cca. 3-4% pe an, n timp ce densitatea de integrare a acestor


memorii crete cu 40-60% pe an [Hen02]).
De exemplu, pe un multiprocesor Alpha Server 4100 SMP avnd 4
procesoare Alpha 21164 la 300 MHz, latenele la citire sunt:
7 tacte (deci cca. 23 ns) n cazul unui miss pe nivelul 1 de cache (L1)
i hit pe nivelul 2 de cache (L2).
21 tacte n cazul unui miss pe nivelul L2 i hit pe L3 (situat pe placa
de baz).
80 tacte pentru miss n ntreaga ierarhia de cache-uri i accesarea
DRAM-ului (memoria principal).
125 de tacte pentru un miss care a fost servit din cache-ul altui
procesor (se adaug aici i latena reelei de interconectare).
Pentru un multiprocesor DSM de tip Silicon Graphics SGI Origin
2000, care poate interconecta pn la 1024 de microprocesoare, ne putem
atepta la latene de 200 de tacte sau chiar mai mult. Este evident c aceste
latene se traduc n principal prin ateptri prohibitive din partea
procesorului respectiv.
Una dintre strategiile arhitecturale relativ recente de a contracara
problema latenelor mari ale sistemelor de memorie o constituie
microprocesoarele multithread dedicate (MMT). n principiu,
multitheading-ul a migrat aici din nivelul nalt al sistemelor de operare i
aplicaiilor HLL (High Level Languages), pe vertical, n cadrul firmwareului i al hardware-ului microprocesoarelor moderne. Printr-o definiie
succint i intuitiv, un MMT difer de un microprocesor convenional de
tip monofir ("single threaded") prin faptul c faciliteaz procesarea
simultan a mai multor instruciuni aparinnd unor thread-uri ("fire de
execuie") diferite, care ns sunt toate candidate nspre a fi executate de
ctre procesor. Similar cu procesoarele convenionale "monofir", starea unui
MMT const n contextul momentan al regitrilor procesorului respectiv al
memoriei; diferena specific rezid n faptul c exist n principiu mai
multe perechi (PC - Program Counter i SP Stack Pointer) i seturi logice
de regitri generali, permindu-se astfel diferenierea contextelor
momentane aferente thread-urilor n curs de execuie. Iat deci, ntr-un mod
succint i principial, cum aceste caracteristici specifice ale MMT-urilor
faciliteaz procesarea multithread de la nivelul sistemului de operare i
aplicaiilor HLL pn la cel al hardware-ului.
O alt noiune important este aceea de fir de execuie blocant
respectiv neblocant ("blocking or non-blocking"). Noiunea se refer la
blocarea fluxurilor de instruciuni n cadrul structurilor pipeline de procesare
a acestora, structuri indispensabile procesoarelor multithreading dedicate de

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

158

care ne ocupm aici. Un fir blocant poate stagna structura pipeline de


procesare pe un procesor convenional "monofir", n cazul apariiei unor
hazarduri specifice (structurale, de date, de ramificaie, latene etc.)
[Hen02]. n schimb pe o arhitectur MMT aceste blocri pot fi evitate prin
activarea unui alt thread realizat prin comutarea de context (context
switching). Comutarea de context ntr-un procesor "monofir", n general
consum timp (salvri/restaurri de contexte n/din memorie), astfel nct
mascarea unui blocaj datorat unui miss n cache este practic compromis,
cel puin parial.
Firele neblocante sunt datorate componentei scheduler (reorganizator
sau optimizator de cod) din cadrul compilatorului. Acesta partiioneaz
programul n mici thread-uri (microthreads), activarea unuia fcndu-se
numai cnd toate datele devin disponibile. Aceleai mecanisme hardware
trebuie utilizate pentru a sincroniza comunicaiile interprocese ntre firele
aflate n stare de ateptare. Ca exemple de fire blocante, acestea sunt firele
P(Osix), Solaris sau chiar ntregi procese Unix din cadrul unui sistem de
operare Unix de tip multifir dar chiar i microthread-uri generate de ctre
compilator pentru a exploata potenialul unui MMT.
n cadrul acestui scurt paragraf ne vom ocupa de acele arhitecturi
MMT dedicate i care se dezvolt pe cunoscutele structuri de procesoare
RISC, EPIC (Explicitly Instruction Set Computing vezi Intel IA 64,
procesorul Ithanium [Vin00b]), VLIW (Very Long Instruction Word) i
superscalare [Vin00]. Principala cerin pentru un MMT o constituie
abilitatea de a gestiona 2 sau mai multe fire n paralel i un mecanism care
s permit comutarea acestora. Firete, aceast comutare este de dorit s fie
ct mai rapid (03 tacte CPU). Ea este facilitat, dup cum am mai
menionat, de mai multe PC-uri, SP-uri i seturi de regitri logici, asociate
firelor de execuie.
n principiu, dup modul n care un fir intr i respectiv iese n/din
execuie, exist 3 modaliti distincte de procesoare multithreading
[Sil99,Wall99]:
prin ntreeserea instruciunilor n fiecare ciclu ("cycle by cycle
interleaving"), adic n fiecare ciclu CPU o instruciune dintr-un alt thread
este adus i lansat n structura pipeline.
prin ntreeserea blocurilor de instruciuni, adic instruciunile dintrun thread sunt, executate pn cnd apare un hazard ce produce o laten.
Acest eveniment implic o comutare de context, deci sunt activate
instruciunile din alt bloc (block interleaving).
multithreading simultan ("simultaneous multithreading"), care const
ntr-o combinare a multithreading-ului cu procesarea superscalar.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

159

Instruciunile - aparinnd sau nu unor fire de execuie diferite - sunt lansate


nspre unitile funcionale aferente procesorului superscalar n mod
simultan, n vederea ocuprii optimale a resurselor acestuia.
De menionat c o problem criticabil a MMT-urilor const n faptul
c n general proceseaz mai puin performant dect un procesor superscalar
un program de tip "monofir". Foarte important, n toate cazurile este necesar
un scheduler (planificator) de thread-uri (hardware, software, hibrid).
Acesta exploateaza efectiv paralelismul TLP.

Figura 4.1 Modele de procesoare


4.1 Modelul cu ntreesere la nivel de ciclu (cycle by cycle
interleaving)
n cadrul acestui model, numit n literatura de specialitate i "finegrain multithreading", procesorul comut pe un alt thread dup fiecare
aducere de instruciune. n principiu, prin multiplexarea instruciunilor
aparinnd unor thread-uri diferite, pot fi anulate hazardurile RAW (Read
After Write), hazardurile de ramificaie, latenele etc. De asemenea,
comutarea de context are n acest caz laten nul. Modelul necesit un
numr de thread-uri cel puin egal cu numrul de nivele ale structurii
pipeline, pentru a fi cert anularea hazardurilor mai sus-amintite. De
remarcat totui c multiplexrile instruciunilor din cadrul mai multor
thread-uri limiteaz viteza de procesare a unui singur thread. Exist n
esent 2 modaliti de a limita aceast deficien [Sil99]:
a) O tehnic static integrat n scheduler care permite lansarea
succesiv n structura pipe a unor instruciuni din cadrul aceluiai thread,

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

160

dac acestea nu sunt dependente de instruciuni anterioare aflate n curs de


procesare n structur. Aceast tehnic implic modificarea structurii ISA
(Instruction Set Architecture) a microprocesorului n sensul adugrii
ctorva bii fiecrui format de instruciune. Aceti bii vor informa cte
instruciuni din acelai thread o vor urma succesiv pe cea lansat n
structur. Firete, tehnica aceasta (numit "dependence lookahead") se
preteaz a fi utilizat atunci cnd numrul de thread-uri este insuficient.
b) O tehnic hardware, prin care se adaug structurii pipeline o
logic suplimentar de detecie i rezolvare a hazardurilor, atunci cnd se
proceseaz un singur thread, deci un hibrid ntre un CPU clasic i unul de tip
multithreading cu ntreesere.
Unul dintre cele mai cunoscute sisteme muliprocesor, care utilizeaz
pn la 256 de procesoare MMT este "Tera Multithreaded Architecture"
(MTA), proiectat i implementat la Seattle, S.U.A., de ctre cunoscuta
companie Tera Computer Co. Un procesor are un kernel ISA de tip VLIW,
utilizeaz modelul cu ntreesere a thread-urilor la nivel de ciclu, suport
128 de thread-uri distincte (numite "streams") pe care le comut la fiecare 3
ns (f=333 MHz). n vederea creterii vitezei de procesare monofir se
folosete tehnica "dependence lookahead", anterior descris pe scurt.
MTA deine maximum 512 module de memorie interconectate la
procesoare printr-o reea toroidal 3D avnd 2816 noduri de rutare. MTA
poate suporta pna la 512 Goctei de memorie intern i poate atinge o
performan maxim, pe benchmark-uri numerice n virgul mobil, de 256
GFLOPS. Sistemul exploateaz paralelismul pe toate cele 3 nivele de
granularitate succesive: la nivel de instruciuni (ILP) [Vin00], la nivelul
intermediar de thread-uri (TLP) ct i la nivel de aplicaii paralele
(multiprogramare propriu-zis). Prima achiziie comercial a unui asemenea
supercomputer s-a fcut n aprilie 1998 de ctre "San Diego Supercomputer
Center" din S.U.A.
4.2 Modelul cu ntreeserea blocurilor (block interleaving)
Acest model numit i "coarse grain multithreading", execut un
singur thread pn n momentul n care apare un eveniment ce declaneaz
comutarea de context. Uzual, asemenea evenimente apar atunci cnd fluxul
de instruciuni din structura pipeline se blocheaz datorit unei operaii
avnd o laten relativ mare. Comparnd cu modelul anterior, se remarc
faptul c n acest caz este necesar un numr mai mic de thread-uri distincte;
de asemenea performana procesrii unui singur thread este comparabil cu

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

161

cea obtenabil pe un procesor clasic (superscalar) echivalent d. p. d. v. logic


(al ISA Instruction Set Architecture).

Time

Resources (e.g. FUs)


Figura. Modelul de procesare superscalar, ineficient (un
thread)

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

162

Time

Resources (e.g. FUs)


Figura. Modelul Block Interleaving (2 threaduri; 1 + 1)
Exist principial 2 modaliti de comutare a thread-urilor n cadrul
acestui model: static i respectiv dinamic. n continuare se vor explicita
sumar fiecare dintre aceste tehnici de comutare a blocurilor.
a. Comutare static
n acest caz comutarea este dictat prin program (compilator) printr-o
instruciune special dedicat. n principiu, timpul de comutare este aici de
un tact avnd n vedere c dup aducerea i decodificarea instruciunii care
comut thread-ul, aceasta trebuie evacuat din structura pipe. Dac nu s-ar
evacua, timpul de comutare ar fi nul dar ntrzierea ar fi determinat de
nsi procesarea acestei instruciuni "inutile". Exist implementri n care
comutarea de context nu se face explicit ca mai sus ci ntr-un mod implicit.
Astfel de exemplu, dup introducerea fiecrei instruciuni de citire din
memorie (LOAD), se determin comutarea, tocmai spre a se evita latena
miss-ului potenial. Firete n cazul unui hit n cache-ul de date, comutarea

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

163

este practic inutil. O alt posibilitate const n comutarea dup fiecare


scriere n memoria de date (STORE). Raiunea ar fi legat i de asigurarea
consistenei
secveniale
a
memoriilor
locale
n
sistemele
multimicroprocesor, adic asigurarea faptului c un procesor citete din
memorie ultima dat nscris n respectiva locaie. n fine, n cadrul altor
cercetri se comut thread-urile (blocurile mai precis) dup fiecare
instruciune de ramificaie (branch), n scopul reducerii latenelor aferente
sau renunrii la implementarea prediciei acestora. n schimb, performana
n cazul "monofir" este drastic diminuat n acest caz. Totui, aceast
modalitate este eficient n cazul blocurilor cu branch-uri dificil de
predicionat (ex. branch-uri indirecte generate de polimorfismele din
programarea obiectual, branch-uri nepolarizate ntr-un anumit context
dinamic unbiased branches etc.)
b. Comutarea dinamic
n acest caz comutarea blocurilor se declaneaz datorit unui
eveniment dinamic, aprut deci pe parcursul procesrii hardware (run-time).
n general, comutarea dinamic implic timpi mai mari de comutare dect
cea static datorit necesitii evacurii tuturor instruciunilor din structura
pipe, anterioare stagiului care a declanat comutarea. i aici, ca i n cazul
comutrii statice, putem avea cteva modaliti distincte de comutare. Astfel
se poate comuta blocul pe un miss n cache. Din pcate acesta este detectat
relativ trziu n structura pipeline, implicnd astfel timpi de comutare
considerabili. O alt modalitate poate comuta pe activarea unui semnal
specific ("switch-on-signal"), dat de o ntrerupere, derut ori de
recepionarea unui mesaj. n fine, se ntlnesc i modele de comutare hibride
de gen "conditional switch", n care comutarea se realizeaz printr-o
instruciune special (caracter static), ns numai n cazul n care aceasta
ntlnete un anumit context dinamic (instan hardware). Astfel de exemplu
o instruciune tip "switch" poate fi introdus de ctre compilator dup un
grup de instruciuni LOAD/STORE. Dac grupul a generat "miss"-uri
comutarea se face, altfel nu.
Un exemplu experimental de astfel de procesor, a fost implementat la
prestigioasa universitate MIT din S.U.A. i se numete "MIT Sparcle",
ntruct deriv din arhitectura binecunoscutului procesor RISC numit Sparc
(Sun Co.). Procesorul este scalar, are 4 contexte independente (seturi de
regitri, PC-uri, SP-uri i stri). Aadar, pot fi procesate simultan n
structura pipe pn la 4 thread-uri distincte. Sunt implementate strategiile de
comutare a blocurilor de tip "cache miss" i respectiv "switch-on signal",
anterior descrise succint. Comutarea se face prin hardware deci, de ctre
controller-ul de cache (care implementeaz inclusiv protocoale de coeren

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

164

pentru conectarea n sisteme multimicroprocesor). Penalizarea de comutare


e relativ mare, de 14 tacte.

Figura 4.2 Structura procesorului MIT Sparcle

4.3 Modelul multithreading simultan


Cele dou modele de procesoare multithreading anterior prezentate
sunt modele eficiente pe procesoare scalare RISC ori chiar procesoare de tip
VLIW sau EPIC. Modelul "simultaneous multithreading" (SMT) deriv din
arhitectura superscalar, cea mai popular actualmente, care lanseaz n
execuie mai multe instruciuni independente n fiecare ciclu i, asemenea
MMT-urilor, conine resurse hardware pentru contexte multiple procesate
simultan. Instruciunile independente procesate simultan intr-un ciclu pot
proveni din acelai fir (ILP) sau din fire distincte (TLP), de unde avantajul

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

165

esenial i popularitatea acestor microprocesoare (numite de compania Intel,


hyperthreaded).
Datorit faptului c un procesor SMT exploateaz simultan att
paralelismul la nivel de instruciuni ct i cel la nivel de thread-uri,
adaptndu-se astfel n mod dinamic la cele 2 tipuri de paralelisme (ILP i
TLP), performana acestuia o depete, teoretic cel puin, pe cea a
modelelor anterioare. Preul const ns ntr-o organizare hardware ceva mai
complex dect n cazurile anterioare.
ntr-un model de procesor SMT lansarea instruciunilor n execuie se
poate face din buffer-e de prefetch separate, n mod simultan. Aadar,
unitile funcionale ale procesorului pot fi ocupate cu instruciuni din
thread-uri diferite, mascndu-se astfel latenele instruciunilor provenite
dintr-un singur fir de execuie. Un procesor SMT menine starea fiecrui
thread n hardware i permite comutarea rapid ntre thread-uri.
Unitatea de fetch instruciuni poate aduce n fiecare ciclu, instruciuni
din thread-uri distincte, crescnd astfel probabilitatea de a aduce instruciuni
nespeculative. Firete unitatea de fetch poate avea o politic selectiv
relativ la thread-urile pe care le alege. Spre exemplu, ar putea s le aleag
pe acelea care ofer un beneficiu de performan imediat. Procesoarele SMT
pot fi organizate principial n dou moduri distincte:

Ele pot partaja prin thread-uri diferite, n mod agresiv, nite


resurse (ex. buffer-ele de prefetch i structurile pipeline de procesare ale
instruciunilor) atunci cnd aceste thread-uri nu conin suficient de mult
paralelism la nivel de instruciuni. Deci procesoarele SMT adaug un
hardware minimal la superscalarele convenionale; complexitatea adugat
se refer n principiu la un tag (identificator) adugat fiecrei instruciuni
dintr-un anumit thread, seturi multiple de regitri logici etc.

Al 2-lea model organizaional multiplic toate buffer-ele interne


ale procesorului superscalar, asociind cte un astfel de buffer unui thread, la
un moment dat (v. figura 4.1, dreapta). Aceast organizare este mai
complex dar face modelul SMT mai natural, raportat la paradigma
multithreading, conducnd astfel la o alocare mai eficient a thread-urilor la
resursele hardware existente. De observat c arhitectura SMT nu d
rezultate deosebite pe programe tip monofir.
Problema esentiala este cea a scheduler-ului care exploateaza ILP si
TLP deopotriva.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

Superscalar

166

Fine-Grained Coarse-Grained Multiprocessing

Thread 1
Thread 2

Thread 3
Thread 4

Figura. Comparatie intre diferite modele de procesare


(superscalar, multithreads, multi-cores)
O interesant cercetare pe baz de simulare a avut loc la Universitatea
din Washington, S.U.A. Arhitectura SMT era centrat pe o arhitectur
superscalar cu posibilitatea lansrii n execuie a 8 instruciuni
independente simultan precum i cu posibilitatea procesrii a 8 fire de
execuie. n fiecare ciclu de fetch instruciuni se aduc cte 8 instruciuni din
2 thread-uri diferite pe baza unui algoritm cu prioriti rotitoare ("roundrobin"). Pentru simulare s-au folosit binecunoscutele benchmark-uri
SPEC98 care au fost executate simultan pe post de thread-uri distincte. Pe
aceast configuraie s-a obinut o rat de execuie de 6,64 instr./ciclu,
remarcabil avnd n vedere c un procesor superscalar (monofir) echivalent,
ar obine doar cca. 2-3 instr./ciclu. De asemenea, studii relativ recente
asupra eficienei arhitecturilor SMT, cu posibilitatea pocesrii a 8 fire de
execuie n procesarea bazelor de date i respectiv multimedia, arat c

Simultaneous
Multithreading

Thread 5
Idle slot

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

167

aceste arhitecturi realizeaz creteri de performan de cca. 300 % n


comparaie cu arhitecturi monofir avnd resurse hardware/software similare.
n [Mar99] se propune o abordare inedit care integreaz predicia
valorilor n arhitecturile de tip multithread. Ideea de baz const n execuia
concurent a unor thread-uri speculative din cadrul programului. Acestea
sunt determinate pe timpul rulrii programului cu ajutorul predictorului de
branch-uri. Firete c, n vederea execuiei thread-urilor speculative
mpreun cu cele nespeculative, este necesar ca procesorul s ofere contexte
hardware multiple. Fiecare thread va avea propria sa fereastr de
instruciuni. O problem esenial este aceea a determinrii efective a
thread-urilor speculative. Spre exemplu, n cazul unei bucle de program,
thread-urile speculative ar putea fi constituite din chiar iteraiile buclei
respective. Acesta este cazul proiectului STAMPede de la Universitatea
Carnegie Mellon, SUA, condus de ctre profesorul Todd Mowry
(www.cs.cmu.edu/~tcm/STAMPede.html). Pentru programele nonnumerice, caracterizate prin grade limitate de paralelism, este foarte
probabil s existe inter-dependene ntre aceste thread-uri. O rezolvare
simpl n acest sens ar consta n serializarea acestor dependene de date.
Predicia valorilor ar putea comprima lanurile de instruciuni dependente,
mbuntind semnificativ performana acestor arhitecturi multifir. Cercetri
laborioase au artat c o asemenea arhitectur hibrid a implicat o cretere
de performan de 40% fa de o arhitectur superscalar monofir i
respectiv de 9% fa de o arhitectur superscalar monofir avnd nglobat un
predictor hibrid de valori.
n concluzie, procesoarele multithread au aprut din necesiti
evidente de mapare a hardware-ului pe softurile actuale de nivel nalt care
exploateaz i ele acest concept, nc mai de demult. Aceste MMT-uri i n
special procesoarele SMT constituie o tendin serioas a actualei generaii
arhitecturale de microprocesoare (cea de a 4-a). Alturi de reutilizarea
dinamic a instruciunilor (Dynamic Instruction Reuse tehnic de
comprimare nespeculativ a lanurilor de instruciuni dependente) i
predicia valorilor instruciunilor (Value Locality and Value Prediction
tehnic speculativ), ce vor fi prezentate n semestrele urmtoare de studiu,
dar i de alte concepte arhitecturale, precum multiprocesoarele integrate pe
un singur cip (multi and many-cores), cred c SMT-urile se vor impune n
continuare, n vederea exploatrii agresive a ILP i TLP.

Pipeline (faze)
partajate)

ILP (instructiuni) TLP (threads, resurse


Multi & Many-Cores (tasks, procesoare
distincte)

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

168

4.6.
OPTIMIZAREA
BASIC-BLOCK-URILOR
ARHITECTURILE MEM

Ca i n cazul procesoarelor scalare, reorganizarea (scheduling)


reprezint procesul de aranjare a instruciunilor din cadrul unui program
obiect astfel nct acesta s se execute ntr-un mod cvasioptimal din punct
de vedere al timpului de procesare. Procesul de reorganizare a
instruciunilor determin creterea probabilitii ca procesorul s aduc
simultan din cache-ul de instruciuni mai multe instruciuni independente.
De asemenea asigur procesarea eficient a operaiilor critice din punct de
vedere temporal n sensul reducerii prin masacare a latenelor specifice
acestor operaii. Se va aborda mai nti problema optimizrii " basic block"urilor. De remarcat c schedulingul n procesoarele superscalare poate
determina o simplificare substanial a arhitecturii hardware aferent
acestora.
Se va analiza acum spre exemplificare urmtoarea secven de
program:
I1:
ADD R1, R11, R12
I2:
ADD R1, R1, R13
I3:
SLL R2, R3, #4; R2<--R3 deplasat logic la stnga cu 4
poz. binare
I4:
AND R2, R1, R2
I5:
ADD R1, R14, R15
I6:
ADD R1, R1, R16
I7:
ADD R1, R1, #6
I8:
LD
R1, (R1)
I9:
LD
R4, (R4)
I10:
ADD R1, R4, R1
I11:
OR
R1, R1, R2
I12:
ST
R1, (R4)
Considernd un procesor superscalar care decodific simultan 4
instruciuni i deine 4 uniti de execuie (2 uniti ALU, o unitate LOAD /
STORE i o unitate pentru deplasri / rotiri), procesul de execuie al
secvenei anterioare s-ar desfura ca n Tabelul 4.11 (am presupus c doar
instruciunile LOAD au latena de 2 cicli main):

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

169

Tabelul 4.11.

Execuia unui program neoptimizat pe un procesor superscalar

De remarcat c rata de procesare a acestei secvene este de 12


instruciuni per ciclu, adic 1,1 instruciuni / ciclu ( s-a considerat procesare
In Order din punct de vedere al ferestrelor de execuie i respectiv Out of
Order n cadrul unei ferestre de execuie). Se observ c paralelismul
potenial al secvenelor de instruciuni I1 - I4 respectiv I5 - I12 nu este
exploatat. n continuare se va prezenta un algoritm de reorganizare n "basic
block"-uri (uniti secveniale de program) n vederea unei execuii
cvasioptimale pe un procesor superscalar sau VLIW.

4.6.1. PARTIIONAREA UNUI PROGRAM N "BASICBLOCK"-URI


Se are n vedere construirea grafului de control al unui program dat.
Algoritmul de partiionare const principial n urmtorii 2 pai:
1) Determinarea setului de lideri n cadrul programului. Se numete
lider prima instruciune dintr-un program, instruciunea destinaie a oricrei

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

170

instruciuni de branch sau orice instruciune urmtoare unei instruciuni de


branch.
2) Partiionarea programului n uniti secveniale i construirea
grafului de control. Fiecare unitate secvenial conine un singur lider i
toate instruciunile de la acest lider pn la urmtorul exclusiv.
Se determin predecesorii imediai fa de o unitate secvenial de
program. Poate fi un predecesor imediat al unei uniti secveniale date orice
unitate secvenial care se poate executa naintea unitii date.
Se determin succesorii unei uniti secveniale de program. Se
numete succesor al unei uniti secveniale de program orice unitate
secvenial de program care poate s se execute dup execuia celei curente.
n figura de mai jos (figura 4.9) se d un exemplu de partiionare a unui
program dat n "basic block"-uri i graful de control al programului.

Figura 4.9. Partiionarea unui program n basic-block-uri

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

171

4.6.2. CONSTRUCIA GRAFULUI DEPENDENELOR DE


DATE ASOCIAT
Dup cum se va vedea, n stabilirea unei secvene reorganizate de
program n vederea unei procesri cvasioptimale pe un procesor superscalar
sau VLIW, graful dependenelor de date aferent unei uniti secveniale de
program, se va dovedi deosebit de util. Un arc n acest graf semnific o
dependen RAW ntre cele 2 stri. Instruciunile care utilizeaz date din
afara unitii secveniale de program se vor plasa n vrful grafului astfel
nct n ele nu va intra nici un arc. Pentru o instruciune dat se caut n jos
proxima dependen RAW. Cu aceste reguli simple, graful dependenelor de
date corespunztor secvenei de program anterioare este prezentat mai jos
(figura 4.10):

Figura 4.10. Graful dependenelor de date asociat

n stnga arcului este scris latena operaiei respective. n dreapta


arcului este scris latena maxim a drumului msurat dintr-un vrf al
arcului pn n starea respectiv. Graful dependenelor specific deci relaii
de ordine ntre instruciuni absolut necesare execuiei corecte a programului
dat.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

172

Graful precedenelor
Se obine pe baza grafului dependenelor de date n baza faptului c
exist cazuri n care acesta poate s nu cuprind toate precedenele necesare
unei corecte reorganizri. Altfel spus, acest graf nu pune n eviden relaiile
de preceden strict n lansarea n execuie, impuse de ctre dependenele
de tip WAR respectiv WAW ntre instruciuni.
De exemplu, ntre instruciunile I2 i I5 exist o dependen de tip
WAW, iar ntre I4 i I5 una de tip WAR. Aceste dependene ar obliga
schedulerul s proceseze I2 i I4 naintea instruciunii I5. i totui aceste
dependene (mai degrab conflicte de nume) ntre secvenele I1 - I4 i
respectiv I5-I10 pot fi eliminate prin redenumirea regitrilor care determin
dependenele WAR i WAW ( n cazul nostru registrul R1). Astfel, de
exemplu, dac n cadrul secvenei de instruciuni I1-I4 se redenumete
registrul R1 cu un alt registru disponibil n acel moment (de ex. cu R5),
atunci secvenele I1 - I4 i respectiv I5 - I10 devin complet independente,
permind o procesare paralel mai accentuat.
Redenumirea regitrilor, ca i n cazul procesoarelor scalare, se poate
face static, adic prin software n momentul compilrii, sau dinamic, prin
hardware n momentul procesrii. Trebuie deci redenumii acei regitri care
determin dependenele WAR i WAW ntre ramuri independente ale
unitii secveniale de program. Se arat c redenumirea regitrilor crete
numrul regitrilor utilizai i timpul de via al unui registru. Prin timp de
via al unui registru se nelege numrul instruciunilor cuprinse ntre prima
instruciune care actualizeaz respectivul registru i respectiv ultima
instruciune care-l citete. Aadar, redenumirea regitrilor creaz dificulti
alocrii regitrilor. Redenumirea se poate face pe durata timpului de via al
registrului.
Important este ns faptul c prin redenumire, graful precedenelor
devine inefectiv, singurul care impune precedene reale, fundamentale, fiind
deci graful dependenelor de date prin dependenele RAW intre instruciuni.
Precedenele impuse prin dependene WAR i WAW au fost puse n
eviden prin linii ntrerupte n figura anterioar. (figura 4.10) De asemenea,
pentru o corect execuie trebuie respectat ordinea instruciunilor LOAD /
STORE, aadar instruciunile I8 i I9 trebuie s precead instruciunea I12.
Aceast ultim constrngere ns, nu introduce n cazul concret analizat
precedene suplimentare n graful dependenelor de date. Aceast problem numit i analiz antialias - a fost detaliat n capitolul 3.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

173

4.6.3. CONCEPTUL CII CRITICE


Calea critic a grafului dependenelor de date o reprezint drumul cu
laten maxim, fiind deci reprezentat n exemplul analizat aici de secvena
de instruciuni I5, I6, I7, I8, I10, I11 i I12. Latena acestei ci este de 8
cicli. Conceptul cii critice este important deoarece el indic faptul c dup
scheduling, profitnd la maxim de paralelismul ntre instruciuni, programul
se va putea executa n minimum 8 cicli, adic ntr-un timp egal cu latena
cii critice. Prin strategia sa, schedulerul va trebui ca n fiecare ciclu, pe ct
posibil, s execute cte o instruciune din calea critic ncercnd simultan s
suprapun peste aceast instruciune i alte instruciuni independente din
program.
ntr-un procesor ipotetic avnd resurse infinite, schedulerul optim ar
trebui pur i simplu s urmeze calea critic, suprapunnd peste operaiile de
aici operaii din alte ci. n cazul apariiei unui hazard WAW sau WAR ntre
instruciuni trebuiesc redenumite registrele implicate. De exemplu n cazul
anterior prezentat, simultan cu instruciunea I5 s-ar putea executa
instruciunile I1, I3 i I9 n condiiile n care procesorul ar deine suficiente
resurse hardware (2 uniti ALU, o unitate de shiftare i o unitate LOAD /
STORE n acest caz). De asemenea, datorit hazardului WAW dintre I1 i
I5, n instruciunea I1 ar trebui redenumit registrul R1 cu un alt registru
disponibil din setul de regitri. Cum n practic un procesor nu deine
totdeauna suficiente resurse n vederea executrii celor de mai sus, rezult
c timpul de execuie al programului reorganizat este mai mare sau cel mult
egal cu latena cii critice.
O reorganizare optim ar nsemna s se simuleze execuia tuturor
variantelor posibile de programe reorganizate i s se msoare ratele de
procesare aferente, alegndu-se varianta de program cu rata cea mai mare.
Pentru programe mari acest deziderat ar implica uneori sptmni sau chiar
ani de procesare devenind deci prohibit. n practic se prefer algoritmi
euristici bazai pe graful dependenelor, care dau rezultate apropiate de cele
optimale, n schimb necesit timpi de execuie acceptabili. Aadar problema
optimalitii teoretice a scheduling-ului, nu se pune din probleme de timp. n
plus algoritmii euristici utilizai n practic dau rezultate bune.

4.6.4. ALGORITMUL "LIST SCHEDULING" (LS)

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

174

Este unul dintre cei mai reprezentativi algoritmi n acest sens, fapt
pentru care va fi prezentat pe scurt. Timpul de execuie este rezonabil
ntruct algoritmul se execut ntr-o singur trecere prin graful
dependenelor, genernd n majoritatea cazurilor reorganizri optimale.
Algoritmul LS parcurge graful dependenelor asociat unitii
secveniale de program de jos n sus. n fiecare pas se ncearc lansarea n
execuie a instruciunilor disponibile. Dup ce aceste instruciuni au fost
puse n execuie, instruciunile precedente devin disponibile spre a fi lansate
n pasul urmtor. Fiecrei instruciuni i se ataeaz un grad de prioritate egal
cu latena cii instruciunii. Dac apare un conflict la resurse hardware
comune ntre 2 sau mai multe instruciuni, are prioritate instruciunea cu un
grad de prioritate mai mare. Preciznd c iniial se seteaz un contor de cicli
la o valoare maxim, paii algoritmului sunt urmtorii:
1) Instruciunea cea mai prioritar dintre instruciunile disponibile n
setul curent este lansat n execuie dac nu necesit o resurs ocupat n
acest ciclu.
2) Dac o instruciune a fost pus n execuie n pasul 1, resursele
utilizate de aceasta vor fi setate ca fiind ocupate pentru un numr de cicli
egali cu latena instruciunii. Pentru exemplul nostru se va considera latena
instruciunilor LOAD de 2 cicli, iar latena celorlalte instruciuni de un
ciclu.
3) Dac instruciunea a fost lansat n execuie n pasul 1 ea va fi
tears din lista instruciunilor disponibile n acel ciclu. Dac instruciunea
nu a fost lansat n execuie datorit unui conflict, reorganizarea va continua
cu o alt instruciune disponibil.
4) Se repet paii 1-3 pn cnd nu mai exist nici o instruciune
disponibil n acest ciclu.
5) Se decrementeaz contorul de cicli.
6) Se determin urmtorul set de instruciuni disponibile. Precizm c
o instruciune este disponibil dac diferena ntre numrul ciclului n care a
fost lansat n execuie instruciunea succesoare i numrul ciclului curent
este egal cu latena instruciunii.
7) Dac setul determinat la pasul 6 este consistent se trece la pasul 1.
n caz contrar, reorganizarea este complet.
Aplicarea algoritmului pe graful din exemplul considerat genereaz
urmtoarea ordine de execuie a instruciunilor (Tabelul 4.12).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

175

Tabelul 4.12.

Ordinea de execuie a instruciunilor n urma optimizrii

Execuia instruciunilor pe un procesor superscalar In Order Issue cu 4


uniti de execuie se va face ca n tabelul de mai jos (tabelul 4.13):

Tabelul 4.13.
Execuia programului optimizat

De remarcat c n ciclul 4 a existat un conflict structural ntre


instruciunile I8 i I9. S-a dat prioritate instruciunii I8 pentru c are un grad
de prioritate superior. Invers n-ar fi putut fi pentru c I8 i I7 sunt

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

176

dependente RAW, de unde rezult necesitatea prioritizrii dup latena


nodurilor respective. Pe aceast secven de program se obine o rat de
procesare de 12 / 8 = 1.5 instr./ciclu fa de doar 1.1 instr. / ciclu ct era rata
de procesare a variantei de program nereorganizate, executat pe acelai
procesor superscalar.
O alt observaie foarte important este aceea c schedulingul poate
mbunti semnificativ gradul de utilizare al resurselor hardware, dup cum
de altfel se poate observa i n cazul analizat aici. O variant de algoritm
similar care ns ar parcurge graful de sus n jos, ar genera urmtoarea
execuie (Tabelul 4.14):

Tabelul 4.14.
O alt posibil execuie a programului optimizat

Latena instruciunii I8 i dependena RAW ntre I8 i I10, au impus


ca n ciclul 4 s nu se execute nici o operaie. Performana este ns i n
acest caz de 1.5 instr. / ciclu. Este evident c performana unui procesor
superscalar de tip In Order Issue care proceseaz un basic-block reorganizat
optimal, este mai bun dect performana unui procesor superscalar Out of
Order care proceseaz programul neoptimizat pentru c n al doilea caz
paralelismul ntre instruciuni este limitat de capacitatea bufferului de
prefetch (instruction window).
n literatur sunt citate 2 variante principiale de realizare a
reorganizrilor software, ntre care exist un compromis fundamental. Prima
este metoda postscheduling, care implic dup compilare mai nti alocarea
regitrilor, iar apoi reorganizarea propriu-zis. n acest caz reorganizatorul
este constrns la nite false dependene datorit faptului c alocatorul de
regitri reutilizeaz un registru ct mai mult posibil, rezultnd un timp de

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

177

via mai mic al acestuia, ceea ce duce la false dependene de date care se
rezolv de ctre scheduler prin redenumirea regitrilor (n exemplul nostru a
fost necesar redenumirea registrului R1). A doua metod se numete
prescheduling i presupune mai nti realizarea reorganizrii codului obiect,
iar apoi alocarea regitrilor. n acest caz este posibil ca alocatorul de regitri
s nu poat pstra toate variabilele n regitri, deoarece schedulerul prin
redenumire mrete timpul de via al regitrilor utilizai. Algoritmul LS
pune la dispoziia structurii hard paralelismul la nivel de instruciuni dintrun program, pe care structura respectiv l exploateaz la maxim.
n continuare vom aborda problema optimizrii globale a programelor
pentru procesoarele cu execuie multipl a instruciunilor.

4.7. PROBLEMA OPTIMIZRII GLOBALE N CADRUL


PROCESOARELOR MEM
n continuare vom prezenta cteva tehnici software legate de
optimizarea programelor pentru procesoarele superscalare i VLIW. n
paragraful precedent s-au prezentat cteva tehnici n vederea optimizrii
"basic-block"-urilor (optimizare local). Optimizarea "basic-block"-urilor
aferente unui program nu implic n mod necesar optimizarea ntregului
program datorit problemelor legate de instruciunile de ramificaie.
Reorganizarea programelor care conin branch-uri este mai dificil
ntruct aici "mutrile" de instruciuni pot cauza incorectitudini ale
programului reorganizat care ar trebui corectate. Aceast optimizare se mai
numete i optimizare global. Problema optimizrii globale este una de
mare actualitate i interes, ntruct paralelismul la nivelul basic-block-urilor,
dup cum artau nc din anii '70 pionieri ca Michael Flynn, este relativ
sczut (2-3 instruciuni). Deoarece majoritatea programelor HLL sunt scrise
n limbaje imperative i pentru maini secveniale cu un numr limitat de
registre n vederea stocrii temporare a variabilelor, este de ateptat ca
gradul de dependene ntre instruciunile adiacente s fie ridicat. Aadar
pentru mrirea nivelului de paralelism este necesar suprapunerea execuiei
unor instruciuni situate n basic-block-uri diferite, ceea ce conduce la ideea
optimizrii globale.
Numeroase studii au artat c paralelismul programelor de uz general
poate atinge n variante idealizate (resurse hardware nelimitate, renaming
perfect, analiz antialias perfect, etc.) n medie 50-60 instruciuni

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

178

simultane. De remarcat c schedulerele actuale, cele mai performante,


raporteaz performane cuprinse ntre 3-7 instruciuni simultane. Se
apreciaz ca realiste obinerea n viitorul apropiat a unor performane de 1015 instruciuni simultane bazat pe mbuntirea tehnicilor de optimizare
global.
Problema optimizrii globale este una deschis la ora actual, avnd o
natur NP - complet. Se prezint n continuare n acest sens doar tehnica
numit "Trace Scheduling", datorit faptului c este oarecum mai simpl i
mai clar documentat. Consider c marea majoritate a tehnicilor de
optimizare global nu au nc o justificare teoretic foarte solid, baznduse deseori pe o euristic dependent de caracteristicile arhitecturii. Ele au
drept scop execuia unei instruciuni ct mai repede posibil, prin mutarea
instruciunilor peste mai multe basic- block-uri. Constrngerile sunt date n
principal de resursele hardware limitate. Pentru claritate, se va considera n
continuare c instruciunile de salt nu conin BDS-uri.

4.7.1. TEHNICA "TRACE SCHEDULING" (TS)


Este atribuit cercettorului american Joshua Fischer, pe atunci la
Universitatea din New York, S.U.A., care a implementat-o n cadrul
calculatorului VLIW numit BULLDOG( 1986). O implementare mai veche
a acestei tehnici a fost legat de optimizarea microprogramelor n arhitecturi
microprogramate orizontal.
Se definete o cale ("Trace") ntr-un program ce conine salturi
condiionate, o ramur particular a acelui program legat de o asumare dat
a adreselor acestor salturi. Rezult deci c un program care conine n salturi
condiionate va avea 2n posibile ci (trace-uri). Aadar, o cale a unui
program va traversa mai multe uniti secveniale din acel program. n
figura urmtoare (figura 4.11) se prezint un program compus din 2 ci
distincte, i anume TRACE1 i TRACE2.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

179

Figura 4.11. Exemplu de trace-uri pe o secven de program

Tehnica TS este similar cu tehnicile de reorganizare n "basic block"uri, cu deosebirea c aici se va reorganiza o ntreag cale i nu doar un basic
block. n esen, ea se bazeaz pe optimizarea celor mai probabile ci n a fi
executate. Spre exemplificare s considerm o secven de program C i
secvena de program obiect obinut prin compilare:
a[ i ] = a[ i ]+1;
if (a[ i ] < 100) {
count = count +1;
*(b + sum) = *( b + sum) + a[ i ];}
1:
SLL R1, i, 2
2:
ADD R1, R1, base_a
3:
LD
R2, (R1); a[ i ]
4:
ADD R2, R2, 1; a[ i ]+1
5:
ST
R2, (R1); asignare a[ i ]
6:
CPLT R1, R2, 100; a[ i ] < 100?
7:
JMPF R1, LABEL
8:
ADD count, count, 1
9:
ADD R1, base_b, s_off; adresa lui b[ sum]
10:
LD
R3, (R1)
11:
ADD R3, R3, R2
12:
ST
R3, (R1)
LABEL:
Pentru a putea aplica TS compilatorul trebuie s aib criterii
rezonabile de predicie a salturilor condiionate, n vederea construirii cilor
cu cea mai mare probabilitate de execuie. n general, predicia software se
face pe baza informaiilor rezultate din anterioar execuia programului

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

180

neoptimizat (profilings) sau a altor algoritmi euristici nglobai n


compilator.
Execuia secvenei anterioare pe un procesor superscalar care
decodific 4 instruciuni simultan i deine 5 uniti de execuie se va face ca
n Tabelul 4.15. S-a considerat c saltul condiionat nu se va face i c
procesorul execut In Order.

Tabelul 4.15.
Execuia trace-ului neoptimizat

Figura 4.12. Graful de control aferent secvenei de optimizat

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

181

Datorit paralelismului limitat al acestei secvene se obine o rat


medie de execuie de doar o instr. / ciclu. Graful de control al acestei
secvene este complus din doar 2 basic block-uri ca n figura 4.12.

Figura 4.13. Graful dependenelor pentru trace-ul considerat

Se va considera c programul compilator a ales calea prin care saltul


nu se face spre a fi optimizat. Aadar, instruciunea de salt va fi tratat n
acest caz ca oricare alta. Graful precedenelor de date asociat secvenei
anterioare de program este prezentat n figura 4.13. Pentru a elimina
dependenele WAR i WAW ntre cele 2 ramuri paralele, vom redenumi R1
cu un alt registru disponibil (RS1) pe ramura 9, 10, 11, 12. De remarcat c
aceast problem se datoreaz alocatorului de regitri din cadrul
compilatorului. Aplicnd acum algoritmul LS pe graful dependenelor de
date aferent cii respective, obinem urmtoarea ordine invers de execuie
(v. Tabelul 4.16).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

182

Tabelul 4.16.

Ordinea de execuie n urma optimizrii

Aadar, execuia se va face n 7 cicli ca mai jos:


1)1
2)2
3)3,9
9)10
5)4,8
6)5,6,11
7)12,7

1:
2:
3:
9:
10:
4:
8:
5:
6:
11:
12:
7:
LABEL:

SLL R1, i, 2
ADD R1, R1, base_a
LD
R2, (R1)
ADD RS1, base_b, s_off
LD
R3, (RS1)
ADD
R2, R2, 1
ADD
count, count, 1
ST
R2, (R1)
CPLT R1, R2, 100
ADD R3, R3, R2
ST
R3, (RS1)
JMPF R1, LABEL

Aadar prin suprapunerea operaiilor din cele 2 basic block-uri s-a


obinut o rat de procesare de 1.71 instr. / ciclu. Problema care apare ns
este: ce se ntmpl dac saltul se face ? Rspunsul ar consta n utilizarea
unor coduri de compensaie pentru prediciile incorecte. Tehnica TS
presupune mutarea instruciunilor dintr-un basic block n altul i asta
presupune anumite compensaii n vederea pstrrii corectitudinii
programului reorganizat. Prezentm mai jos compensaiile necesare atunci
cnd o instruciune e mutat dintr-un basic block ntr-unul succesor
respectiv predecesor (figura 4.14).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

183

Figura 4.14. Compensaii la migrarea instruciunilor dintr-un basic-block n altul

n exemplul prezentat am avut o migrare a ntregului bloc 8-12 n


blocul precedent 1-7, deci compilatorul va trebui s introduc n al 2-lea
bloc instruciuni de compensare n vederea anulrii unor operaii, absolut
necesare atunci cnd saltul se face, ca mai jos:
1:
2:
3:
9:
10:
4:
8:
5:
6:
11:
12:
7:
C1:
C2:
C3:
LABEL:

SLL
ADD
LD
ADD
LD
ADD
ADD
ST
CPLT
ADD
ST
JMPF
JMP
SUB
ST

R1, i, 2
R1, R1, base_a
R2, (R1)
RS1, base_b, s_off
R3, (RS1)
R2, R2, 1
count, count, 1
R2, (R10)
R1, R2, 100
RS3, R3, R2
RS3, (RS1)
R1, C2
LABEL
count, count, 1
R3, (RS1)

n vederea anulrii operaiei *(b+sum) = *(b+sum) + a[ i ] n cazul n


care saltul se face, s-a introdus de ctre compilator linia C3. Pentru ca

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

184

aceast anulare s fie posibil a fost necesar redenumirea registrului R3 cu


un altul disponibil (RS3 aici) n instruciunile I11 i I12. Altfel,
instruciunea I11 ar fi alterat R3 i deci anularea asignrii variabilei
*(b+sum) n memorie ar fi fost imposibil. De remarcat similitudinea ntre
coreciile soft i tehnicile hardware de execuie speculativ prin care se
redenumesc dinamic resursele procesorului. Johnson prezint o serie de
caracteristici arhitecturale cu scopul facilizrii implementrii tehnicii TS.
Compensarea este eficient numai dac ciclii suplimentari introdui prin
aceasta nu depesc numrul ciclilor eliminai prin tehnica TS. O
compensare eficient presupune:
- O acuratee ridicat a prediciei branch-urilor de ctre compilator,
obinut prin statistici rezultate din rularea programului. n acest sens
programele numerice se preteaz mai bine la TS dect cele de uz general.
- Procentaj relativ sczut al instruciunilor de ramificaie din program.
- Codurile de compensaie s fie posibile i fezabile.
- Paralelism hardware pronunat n vederea procesrii codurilor de
compensare cu introducerea unui numr minim de cicli suplimentari.
ntr-un program dat, reorganizatorul selecteaz cile pentru
scheduling, utiliznd tehnici de predicie software. Pentru nceput se aplic
algoritmul TS pentru calea cea mai probabil de a fi executat. Pe timpul
acestui proces se vor aduga coduri de compensare. Apoi se selecteaz
urmtoarea cale considerat cea mai probabil. Aceasta va fi de asemenea
reorganizat prin tehnica TS. Reorganizarea se refer inclusiv la posibilele
coduri compensatoare introduse de ctre procesul anterior de reorganizare.
Algoritmul TS se va repeta pentru fiecare cale n parte. Pentru limitarea
timpului de reorganizare, referitor la cile mai puin frecvente n execuie, se
poate renuna la optimizarea global n favoarea optimizrii exclusiv a basic
block-urilor componente prin algoritmul LS. Nu exist nc criterii clare
care s stabileasc momentul n care optimizarea TS s fie abandonat.
O situaie oarecum ironic este legat de optimizarea programelor
pentru procesoare superscalare datorit faptului c n acest caz logica
hardware de lansare n execuie a instruciunilor va relua n mod redundant
cutarea instruciunilor independente. Aceast operaie este inutil fiind
realizat anterior de ctre optimizatorul software. Din acest motiv, acesta ar
trebui s marcheze grupele de instruciuni paralelizate, astfel nct
hardware-ul s nu mai reia inutil aceast operaie. ntr-un asemenea context,
procesarea Out of Order a instruciunilor caracteristic major i complex
a multor procesoare superscalare apare ca fiind complet inutil. Este nc
o dovad a faptului c paradigma procesrii instruciunilor trebuie s fie una
relativ simpl, dar n acelai timp nu mai simpl dect este necesar n
virtutea unor principii de eficien, flexibilitate i compatibilitate.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

185

4.8. OPTIMIZAREA BUCLELOR DE PROGRAM


Este foarte important pentru c n buclele de program se pierde cea
mai mare parte a timpului de execuie aferent respectivului program, dup
regula binecunoscut care afirm c " 90% din timp execut cca. 10% din
program". Iat de ce optimizarea buclelor reprezint o preocupare esenial
la ora actual.

4.8.1. TEHNICA "LOOP UNROLLING"


Pentru ilustrarea principiului de optimizare, s considerm urmtoarea
bucl de program:
for (i = 0; i < 64; i + +) {
sum + = a[ i ];}
Din compilarea acestei bucle rezult urmtoarea secven de program
obiect tip RISC:
LOOP:

1:LD R1, (a_ptr)


2:ADD a_ptr, a_ptr, 4
3:CLT count, a_ptr, end_ptr
4:ADD sum, sum, R1
5:JMPTcount, LOOP

Execuia a dou iteraii succesive pe un procesor superscalar "in order


issue" se va desfura ca n tabelul de mai jos (Tabelul 4.17).

Tabelul 4.17.

Execuia buclei neoptimizate

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

186

S-a considerat c procesorul aduce 4 instruciuni simultan i deine 5


uniti de execuie distincte (BRN - unitate de execuie a instruciunilor de
ramificaie). Se remarc faptul c n acest caz rata de procesare este de 1.25
instr./ciclu sau altfel spus de 0.25 bucle/ciclu. Dup aplicarea tehnicii Loop
Unrolling de 2 ori secvena anterioar devine:
LOOP:
1:
LD
R1, (a_ptr)
2:
ADD a_ptr, a_ptr, 4
3:
ADD sum, sum, R1
4:
LD
R1, (a_ptr)
5:
ADD a_ptr, a_ptr, 4
6:
ADD sum, sum, R1
7:
CLT count, a_ptr, end_ptr
8:
JMPT count, LOOP
Reorganiznd basic block-ul precedent prin metoda LS anterior
descris, obinem urmtoarea secven de program:
LOOP:
1:
LD
R1, (a_ptr)
2:
ADD a_ptr, a_ptr, 4
4:
LD
R2, (a_ptr)
5:
ADD a_ptr, a_ptr, 4
7:
CLT count, a_ptr, end_ptr
3:
ADD sum, sum, R1
6:
ADD sum, sum, R2
8:
JMPT count, LOOP
Execuia acestei bucle pe acelai procesor superscalar se va face ca n
Tabelul 4.18:

Tabelul 4.18.
Execuia buclei optimizate

S-a obinut astfel o rat medie de procesare de 2 instr. / ciclu sau 0.5
bucle / ciclu, deci practic performana s-a dublat fa de exemplul precedent.
Se pune problema: ce se ntmpl dac numrul de iteraii este necunoscut
n momentul compilrii ? Pentru aceasta s considerm secvena de mai jos:

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

187

for (i = 0; i < n ; i + +) {
sum + = a[ i ] ;
}
Aceast secven va fi compilat innd cont i de aplicarea tehnicii
LU ca mai jos:
LOOP:
1:
LD
R1, (a_ptr)
2:
ADD a_ptr, a_ptr, 4
3:
ADD sum, sum, R1
4:
CLT count, a_ptr, end_ptr
5:
JMPF count, EXIT
6:
LD
R1, (a_ptr)
7:
ADD a_ptr, a_ptr, 4
8:
ADD sum, sum, R1
9:
CLT count, a_ptr, end_ptr
10:
JPMT count, LOOP
EXIT:
Graful de control corespunztor acestei secvene este prezentat n
figura 4.15.

Figura 4.15. Graful de control asociat buclei netezite

Aadar, n astfel de cazuri dup aplicarea tehnicii LU se obine o cale


format din dou sau mai multe basic block-uri concatenate. Pentru
optimizare se poate aplica algoritmul TS asupra grafului de control, dar
aceasta poate complica i reduce sever eficiena tehnicii loop unrolling.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

188

4.8.2. TEHNICA "SOFTWARE PIPELINING"


Tehnica software pipelining (TSP) este utilizat n reorganizarea
buclelor de program astfel nct fiecare iteraie a buclei de program
reorganizat s conin instruciuni aparinnd unor iteraii diferite din bucla
original. Aceast reorganizare are drept scop scderea timpului de execuie
al buclei prin eliminarea hazardurilor intrinseci, eliminnd astfel stagnrile
inutile pe timpul procesrii instruciunilor. Prezentm principiul acestei
tehnici bazat pe un exemplu simplu. Aadar s considerm secvena de
program urmtoare:
LOOP:
LD F0, 0(R1)
ADD F4, F0, F2
SD 0(R1), F4
SUBI R1, R1, #8
BNEZ R1, LOOP
Bucla realizeaz modificarea unui tablou de numere reprezentate n
virgul mobil, prin adugarea unei constante coninut n registrul F2 la
fiecare dintre acestea. De remarcat c hazardurile RAW ntre instruciunile
I1, I2 respectiv I2, I3 determin stagnri n procesarea pipeline a
instruciunilor acestei bucle. ntr-o prim faz TSP desfoar, ns doar n
mod simbolic, bucla n iteraii succesive eliminnd actualizarea contorului i
saltul napoi.
iteraia i:
LD F0, 0(R1)
ADD F4, F0, F2
SD 0(R1), F4
LD F0, 0(R1)
iteraia i+1:
ADD F4, F0, F2
SD 0(R1), F4
iteraia i+2:
LD F0, 0(R1)
ADD F4, F0, F1
SD 0(R1), F4
n a doua faz, instruciunile selectate din cele trei iteraii se grupeaz
n cadrul unei noi bucle ca mai jos:
LOOP: SD 0(R1), F4;
memoreaz n M(i)
ADD F4, F0, F2;
modific scalarul M(i-1)
LD F0, - 16(R1);
ncarc elementul M(i-2)
SUBI R1, R1, #8;
BNEZ R1, LOOP;
Observm c prin pipeline-izarea instruciunilor din cadrul acestei
bucle reorganizate s-au eliminat hazardurile anterioare i deci stagnrile

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

189

implicate de ctre acestea. Bucla se execut pe un procesor pipeline scalar n


doar 5 impulsuri de tact, adic la vitez maxim asumnd o predicie
perfect a saltului. De remarcat c pe un procesor superscalar cu suficiente
uniti de execuie primele 3 instruciuni s-ar putea executa simultan, ceea
ce pe varianta original a buclei nu se putea din cauza hazardurilor RAW.
Aadar TSP este deosebit de eficient pe procesoarele cu execuie multipl a
instruciunilor. De multe ori este necesar intervenia hardului sau a softului
pentru eliminarea posibilelor hazarduri WAR care apar n cadrul buclei
reorganizate. Totui, pentru a fi funcional, bucla anterioar are nevoie de
un preambul i respectiv un postambul. Preambulul necesar const n
execuia instruciunilor din iteraiile 1 i 2 care nu au fost executate n cadrul
buclei (LD - 1, LD - 2, ADD - 1). Analog, postambulul const n execuia
instruciunilor care nu au fost executate n ultimele 2 iteraii (ADD - ultima,
SD - ultimele 2 iteraii).
LD F0, (R1)
ADD F4, F0, F2
LD F0, -8(R1)
LOOP: SD 0(R1), F4;
ADD F4, F0, F2;
LD F0, - 16(R1);
SUBI R1, R1, #8;
BNEZ R1, LOOP;
SD (R1), F4
ADD F4, F0, F2
SD -8(R1), F4

iteratia 1
iteratia 1
iteratia 2

PREAMBUL

iteratia (i)/1/n-2; memorare


(i+1)/2/n-1; prelucrare
(i+2)/3/n; incarcare

(n-1)-a iteratie
(n), ultima iteratie
(n)

POSTAMBUL

Alturi de tehnica LU, TSP este des utilizat n optimizarea buclelor


de program. Spre deosebire de LU, aceasta consum mai puin spaiu de
cod. Frecvent, cele 2 tehnici sunt combinate n vederea creterii
performanei. Tehnica LU se concentreaz pe eliminarea codurilor
redundante din cadrul buclelor (actualizri contoare, loop-uri). Bucla se
proceseaz la vitez maxim doar pe parcursul iteraiilor desfurate. TSP
ncearc n schimb, obinerea unei viteze mari de execuie pe ntreg timpul
procesrii buclei.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

190

4.9. ARHITECTURI CU TRANSPORT DECLANAT


Arhitecturile cu transport declanat (TTA - Transport Triggered
Architectures) reprezint o expresie limit a filosofiei RISC de exploatare a
paralelismului instruciunilor. Apariia lor (Universitatea din Delft, Olanda,
1992) a fost determinat de slbiciunile modelelor superscalar i VLIW,
datorate n special gradului sczut de utilizare al resurselor hardware (uniti
funcionale, busuri interne, regitri generali, etc) i complexitii ridicate.
Esena TTA const n separarea transportului datelor, de prelucrarea
lor efectiv. Dac n arhitecturile convenionale (OTA-Operation Triggered
Architectures) declanarea execuiei unei operaii este iniiat chiar de ctre
operaia (instruciunea) respectiv, n cadrul TTA aceast declanare este
iniiat de ctre un transport al operandului surs ntr-un aa-numit registru
trigger (T), ataat fiecrei uniti funcionale din sistem. Un procesor TTA
este compus din uniti funcionale complet independente, interconectate
printr-o aa-zis reea de transport. Fiecare unitate funcional deine 3
regitri: registrul operand (O), registrul trigger (T) i registrul rezultat (R).
Transportul i nscrierea unui operand n registrul T, determin automat
activarea unitii funcionale respective. Dup cum am mai subliniat, un
procesor TTA deine o singur instruciune (MOVE - transfer), care se poate
executa condiionat pe 2 variabile de gard de tip boolean. Planificarea
mutrilor ntre diversele uniti funcionale (FU-Functional Unit) devine o
sarcin software a compilatorului, nemaifiind integrat hardware n CPU ca
n cazul clasic (OTA). Desigur c unitile funcionale cu laten mai mare
de un tact pot fi pipeline-izate. De menionat c avnd o singur
instruciune, logica de decodificare TTA practic nu exist. Cele dou figuri
care urmeaz, 4.16 i 4.17, prezint schema bloc de principiu a unui
procesor TTA i respectiv pipeline-izarea unei anumite uniti funcionale.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

191

Figura 4.16. Schema bloc a unei arhitecturi TTA

Figura 4.17. Pipeline-izarea execuiei n cazul unei arhitecturi TTA

n continuare se prezint 2 exemple: o "instruciune" de adunare i


respectiv una de salt condiionat, implementate n TTA.
ADD R3, R2, R1 R1-->ADD_O, R2-->ADD_T (declanare)
ADD_R-->R3
if R2 = R3 goto Adr

R2-->EQ_O, R3-->EQ_T
EQ_R-->B1 (var. boolean)
[B1]Adr-->PC (execuie condiionat)

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

192

De remarcat ca sunt posibile mai multe transporturi, funcie de


lrgimea de band a reelei de transport. Intervalul de timp dintre declanare
i mutarea rezultatului trebuie controlat prin software astfel nct s acopere
latena unitii funcionale respective.
Avantajele TTA
Datorit simplitii hardware a logicii de decodificare, control i
planificare a instruciunii, procesoarele TTA permit frecvene de tact extrem
de ridicate. Mai mult, separarea unitilor funcionale de reeaua de transport
permite pipeline-izarea optimal a FU. Numrul de regitri generali poate fi
redus drastic datorit faptului c trebuie stocate mai puine date temporare,
multe dintre aceste date circulnd direct ntre FU-uri, fr ca s trebuiasc s
fie memorate ntr-un registru de uz general. Stagiile pipeline i regitrii
operanzi sunt utilizai pe post de regitri temporari. Un rezultat produs de o
FU, dar care nu poate fi utilizat direct de alt FU, poate fi lasat temporar n
unitatea FU care l-a produs, dac acesta nu blocheaz alte rezultate anterior
necesare, ale aceleiai FU. Interesant, aici bypassing-ul (forwarding-ul)
datelor este gestionat prin program, spre deosebire de procesoarele
superscalare care realizeaz acest proces prin hardware (vezi Algoritmul lui
Tomasulo). Spre exemplificare se consider dou instruciuni RISC
dependente RAW, ca mai jos:
ADD
ADD

R3, R1, R2
R5, R3, R4

R1 ADD_O, R2 ADD_T;
ADD_R ADD_O, R4 ADD_T,
ADD_R R3;
ADD_R R5;

Se observ forwarding-ul realizat prin software (ADD_R-->ADD_O)


i care optimizeaz execuia cu un ciclu. Ca urmare se reduce presiunea la
citire asupra setului de regitri generali, analog cu mecanismul lui
Tomasulo, doar c aici prin software. Dac n continuare compilatorul
constat c timpul de via aferent registrului R3 s-a ncheiat, secvena
anterioar devine mai simpl:
ADD R3, R1, R2
R1 ADD_O, R2 ADD_T
ADD R5, R3, R4
ADD_R ADD_O, R4 ADD_T
ADD_R R5
Astfel se reuete oprirea scrierii inutile n R3 i deci reducerea
presiunii la scriere asupra setului de regitri, lucru principial imposibil la
nivelul procesoarelor OTA.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

193

Un alt avantaj al arhitecturilor TTA const n flexibilitatea i


scalabilitatea performanelor. Flexibilitatea const ntr-o facil schimbare a
funcionalitii, n concordan cu aplicaia specific. Scalabilitatea este
determinat n principal de posibilitatea adugrii de noi FU-uri, fr
modifcri arhitecturale majore i de mrirea capacitii de transport n
vederea creterii gradului de paralelism. Divizarea operaiilor n transporturi
elementare ofer un grad de paralelism mai fin, care determin posibiliti
mai eficiente de scheduling static i deci performane superioare.
Structurile TTA se preteaz foarte bine la proiectarea de procesoare
dedicate unor aplicaii specifice (ASP-Application Specific Processor),
parametrii FU i ai reelei de transport putnd fi setai n acord cu aplicaia
int. Dei mediatizate intens n literatura de specialitate, TTA-urile nu
constituie n opinia mea, o paradigm novatoare a conceptului de procesor,
reprezentnd mai degrab o superclas a arhitecturilor VLIW tradiionale,
cu deosebirea c "sparg" atomicitatea instruciunii main n aa-zise
transporturi. Se permite astfel un control mai mare al execuiei din partea
compilatorului, cu posibiliti superioare de optimizare a codului.
Performanele par remarcabile, depind la nivel de simulare respectiv
implementare cu FPGA-uri, cu 25-50% variante OTA echivalente (I-860).
Cu toate c la ora actual aceste procesoare exist doar la nivel de
prototip, firme comerciale serioase precum Intel i Hewlett Packard au
iniiat cercetri n domeniul TTA i deci n-ar fi deloc exclus ca unele idei s
se regseasc n viitoarele microprocesoare avansate produse de aceste
companii.

4.10. EXTENSII ALE ARHITECTURILOR MEM BAZATE


PE REUTILIZAREA DINAMIC A TRACE - URILOR DE
INSTRUCIUNI
Din punct de vedere arhitectural se consider c pn la ora actual au
existat 3 generaii de (micro)procesoare de succes comercial dup cum
urmeaz:
- generaia I caracterizat n principal prin execuia secvenial a
fazelor (ciclilor main) aferente instruciunilor- main. Pionierii acestei
generaii sunt desigur inventatorii calculatorului numeric, inginerii Eckert i
Mauchly, alturi de cel care ulterior a teoretizat i a mbogit conceptul, n
persoana marelui om de tiin american John von Neumann.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

194

- generaia a II-a de procesoare, exploata paralelismul temporal aferent


instruciunilor main prin suprapunerea fazelor (pipeline). Primul
reprezentant comercial a fost sistemul CDC-6600 (1964) proiectat de ctre
cel mai mare creator de calculatoare de nalt performan i totodat unul
dintre pionierii supercalculatoarelor, Seymour Cray. n anii '80,
(micro)procesoarele RISC scalare au reprezentat aceast generaie (J. Cocke
de la IBM i D. Patterson de la Univ. Berkeley fiind doar doi dintre
pionierii promotori ai acestor idei).
- generaia a III-a, cea curent, este caracterizat de procesarea mai
multor instruciuni independente simultan prin exploatarea unui paralelism
spaial la nivelul diverselor uniti funcionale de procesare. Execuia
instruciunilor se face Out of Order, utiliznd deci tehnici de reorganizare
(dinamic sau static) a instruciunilor n vederea minimizrii timpului
global de execuie. Pionierul acestei generaii a fost sistemul anilor '60 IBM360/91 (printre proiectani Anderson, Sparacio, Tomasulo, Goldschmidt,
Earle, etc.). La ora actual generaia aceasta este reprezentat prin
microprocesoarele superscalare, VLIW, etc.
De civa ani, n laboratoarele de cercetare (n special cele
academice!) se ntrezresc cteva soluii privind caracteristicile majore ale
urmtoarei decade, generaia a IV-a, pe care le vom analiza succint i
fatalmente incomplet, n continuare.
n ultimii ani, procesul de proiectare al procesoarelor s-a modificat
radical. Astzi, accentul principal nu se mai pune pe implementarea
hardware, ci pe proiectarea arhitecturii. Se pornete de la o arhitectur de
baz, care este modificat i mbuntit dinamic, prin simulri laborioase
pe benchmark-uri reprezentative (Stanford, SPEC '92, '95, etc., pentru
procesoarele de uz general). De exemplu, proiectanii firmei Intel, pentru
procesorul Intel Pentium Pro (P6), au pornit de la o structur iniial care
coninea un pipeline cu 10 nivele, decodificator cu 4 instruciuni / ciclu,
cache-uri separate pe instruciuni i date de capacitate 32Ko fiecare i un
total de 10 milioane tranzistori. Comportarea fiecrei componente a
arhitecturii (efectul capacitii primului nivel (L1) cache, numrul de nivele
n pipeline, comportarea logicii de predicie a salturilor, numrul de uniti
funcionale, etc.) a fost simulat soft prin rularea a aproximativ 200
benchmark-uri, cu peste 2 miliarde de instruciuni! Rezultatul final a impus
un procesor cu un pipeline pe 14 nivele, 3 instruciuni decodificate n fiecare
ciclu, 8Ko L1 cache de date i 8Ko L1 cache de instruciuni, cu un total de
aproximativ doar 5.5 milioane tranzistoare integrate.
Costul proiectrii este relativ mare i include n principal elaborarea
unei arhitecturi dinamice, scrierea unui compilator, de C in general, pe
arhitectura respectiva, scheduler (optimizator) pentru codul obiect, simulator

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

195

puternic parametrizabil si complex, programe de interpretare a rezultatelor.


De exemplu, microprocesorul MIPS-4000 s-a creat prin efortul a 30 de
ingineri timp de 3 ani. Costul cercetrii-proiectrii a fost de 30 milioane
dolari, iar cel al fabricrii efective de numai 10 milioane dolari. Numai
pentru simulare i evaluare s-au consumat circa 50.000 ore de procesare pe
maini avnd performane de 20 MIPS.
Oricum, arhitecturile cu execuii multiple i pipeline-izate ale
instruciunilor (superscalare, VLIW) dau deja anumite semne de "oboseal",
limitrile fiind att de ordin tehnologic ct i arhitectural. Caracteristicile
arhitecturale complexe implic tehnologii tot mai sofisticate, nc
nedisponibile. Pe de alt parte, performanele lor cresc asimptotic pe
actualele paradigme arhitecturale. Totui, schimbri fundamentale sunt mai
greu de acceptat n viitorul apropiat, n primul rnd datorit compilatoarelor
optimizate, avnd drept scop exploatarea mai pronunat paralelismului la
nivel de instruciuni, deoarece acestea sunt deosebit de complexe i puternic
dependente de caracteristicile hardware.
Exist deja opinii care arat c arhitecturile superscalare i VLIW
conin limitri fundamentale i care ar trebui analizate i eventual eliminate.
Dintre aceste limitri amintim doar conflictele la resurse, datorate n
principal centralizrii acestora. O idee interesant bazat pe descentralizarea
resurselor are n vedere implementarea mai multor aa numite "Instruction
Windows" (IW)- un fel de buffere de prefetch multiple n locul unuia singur
i respectiv pe conceptul de multithreading. Lansarea n execuie a
instruciunilor se face pe baza determinrii celor independente din fiecare
IW. Desigur c trebuie determinate i dependenele inter- IW- uri. Ideea
principal const n execuia paralel a mai multor secvene de program
aflate n IW- uri diferite, bazat pe mai multe uniti funcionale
(multithreading). Astfel de exemplu, 2 iteraii succesive aferente unei bucle
de program pot fi procesate n paralel dac sunt memorate n IW- uri
distincte. O asemenea idee faciliteaz implementarea conceptelor de
expandabilitate i scalabilitate, deosebit de utile n dezvoltarea viitoare a
arhitecturii.
n esen, un procesor cu execuii multiple ale instruciunilor este
compus din 2 mecanisme decuplate: mecanismul de aducere (fetch) a
instruciunilor pe post de productor i respectiv mecanismul de execuie a
instruciunilor pe post de consumator. Separarea ntre cele 2 mecanisme
(arhitectur decuplat) se face prin bufferele de instruciuni i staiile de
rezervare, ca n figura 4.18. Instruciunile de ramificaie i predictoarele
hardware aferente acioneaz printr-un mecanism de reacie ntre
consumator i productor. Astfel, n cazul unei predicii eronate, bufferul de
prefetch trebuie s fie golit mcar parial iar adresa de acces la cache-ul de

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

196

instruciuni trebuie i ea modificat n concordan cu adresa la care se face


saltul.

Figura 4.18. Arhitectur superscalar decuplat

Pe baze statistice se arat c un basic-block conine, pe programele de


uz general, doar 4-5 instruciuni n medie, ceea ce nseamn c rata de fetch
a instruciunilor e limitat la cca. 5, aducerea simultan a mai multor
instruciuni fiind inutil (fetch bottleneck). Desigur, aceast limitare
fundamental ar avea consecine defavorabile i asupra consumatorului, care
ar limita principial i rata medie de execuie a instruciunilor (IR - Issue
Rate) la aceast valoare. Progresele semnificative n algoritmii de lansare n
execuie impun ns depirea acestei bariere. n acest sens, cercetrile
actuale insist pe mbuntirea mecanismelor de aducere a instruciunilor
prin urmtoarele tehnici:
- predicia simultan a mai multor ramificaii / tact rezultnd deci rate
IR sporite (vezi conceptul Dual BTB, n cap. 3)
- posibilitatea accesrii i aducerii simultane a mai multor basicblock-uri din cache, chiar dac acestea sunt nealiniate, prin utilizarea unor
cache-uri multiport
- pstrarea unei latene reduse a procesului de aducere a
instruciunilor, n contradicie cu cele 2 cerine anterioare.
Ali factori care determin limitarea ratei de fetch a instruciunilor
(FR- Fetch Rate) sunt: lrgimea de band limitat a interfeei procesor cache, missurile n cache, prediciile eronate ale ramificaiilor, etc.
O paradigm interesant, situat n prelungirea conceptului de
superscalaritate i care poate constitui o soluie interesant fa de limitrile
mai sus menionate, o constituie trace-procesorul, adic un procesor
superscalar avnd o memorie trace-cache (TC). Ca i cache-urile de
instruciuni (IC), TC este accesat cu adresa de nceput a noului bloc de
instruciuni ce trebuie executat, n paralel cu IC. n caz de miss n TC,
instruciunea va fi adus din IC sau - n caz de miss i aici - din memoria

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

197

principal. Spre deosebire ns de IC, TC memoreaz instruciuni contigue


din punct de vedere al secvenei lor de execuie, n locaii contigue de
memorie. O linie din TC memoreaz un segment de instruciuni executate
dinamic i secvenial n program (trace-segment). Evident, un trace poate
conine mai multe basic-block-uri (uniti secveniale de program). Aadar,
o linie TC poate conine N instruciuni sau M basic- block-uri, N>M,
nscrise pe parcursul execuiei lor.

Figura 4.19. Ansamblul trace-cache respectiv predictor multiplu

Memoria TC este accesat cu adresa de nceput a basic-block-ului A,


n paralel cu predictorul multiplu de salturi (vezi figura 4.19). Acesta, spre
deosebire de un predictor simplu, predicioneaz nu doar adresa de nceput a
urmtorului basic- block ce trebuie executat ci toate cele (M-1) adrese de
nceput aferente urmtoarelor (M-1) basic- block-uri care urmeaz dup A.
Cei (M-1) bii generai de ctre predictorul multiplu (taken/ not taken)
selecteaz spre logica de execuie doar acele blocuri din linia TC care sunt
predicionate c se vor executa ( n cazul acesta doar blocurile A i B
ntruct predictorul a selectat blocurile ABD c se vor executa, n timp ce n
linia TC erau memorate blocurile ABC).
O linie din TC conine:

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

198

- N instruciuni n form decodificat, fiecare avnd specificat blocul


creia i aparine.
- cele 2M-1 posibile adrese destinaie aferente celor M blocuri stocate
n linia TC.
- un cmp care codific numrul i "direciile" salturilor memorate n
linia TC.
nainte de a fi memorate n TC, instruciunile pot fi predecodificate n
scopul nscrierii n TC a unor informaii legate de dependenele de date ce
caracterizeaz instruciunile din linia TC curent. Aceste informaii vor
facilita procese precum bypassing-ul datelor ntre unitile de execuie,
redenumirea dinamic a regitrilor cauzatori de dependene WAR (Write
After Read) sau WAW (Write After Write) ntre instruciuni, etc., utile n
vederea procesrii Out of Order a instruciunilor. O linie din TC poate avea
diferite grade de asociativitate n sensul n care ea poate conine mai multe
pattern-uri de blocuri, toate avnd desigur aceeai adres de nceput (A), ca
n figura 4.20.

Figura 4.20. Selecia dintr-o linie trace-cache asociativ

Aadar, segmentele ncepnd de la aceeai adres (A), sunt memorate


n aceeai linie asociativ din TC. Ca i n structurile TC neasociative,
verificarea validitii liniei selectate se face prin compararea (cutarea) dup
tag. Deosebirea de esen const n faptul c aici este necesar selectarea - n
conformitate cu pattern-ul generat de ctre predictorul multiplu - trace-ului
cel mai lung dintre cele coninute n linia respectiv. Este posibil ca aceast

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

199

selecie complex s dureze mai mult dect n cazul neasociativ i prin


urmare s se repercuteze negativ asupra duratei procesului de aducere a
instruciunilor (fetch). Avantajul principal ns, dup cum se observ i n
figur, const n faptul c este probabil s se furnizeze procesorului un
numr de blocuri "mai lung" dect un TC simplu. Astfel de exemplu, dac
pattern-ul real de blocuri executate este ABD, structura TC l va furniza fr
probleme, n schimb o structur TC neasociativ ce conine doar pattern-ul
ABC, evident va furniza n aceast situaie doar blocurile AB.
Pe msur ce un grup de instruciuni este procesat, el este ncrcat
ntr-o aa-numit "fill unit" (FU-unitate de pregtire). Rolul FU este de a
asambla instruciunile dinamice, pe msur ce acestea sunt executate, ntrun trace-segment. Segmentele astfel obinute sunt memorate n TC. Dup
cum am mai subliniat, este posibil ca nainte de scrierea segmentului n TC,
FU s analizeze instruciunile din cadrul unui segment spre a marca explicit
dependenele dintre ele. Acest lucru va uura mai apoi lansarea n execuie a
acestor instruciuni ntruct ele vor fi aduse din TC i introduse direct n
staiile de rezervare aferente unitilor funcionale. Unitatea FU se ocup
deci de colectarea instruciunilor lansate n execuie, asamblarea lor ntr-un
grup de N instruciuni (sau M blocuri) i nscrierea unui asemenea grup ntro anumit linie din TC. Exist desigur cazuri cnd FU poate crea copii
multiple ale unor blocuri n TC. Aceast redundan informaional poate
implica degradri ale performanei, dar pe de alt parte, lipsa redundanei ar
degrada valoarea ratei de fetch a instruciunilor deci i performana global.

Figura 4.21. Segmente asamblate pe timpul execuiei unei bucle de program

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

200

Se poate deci afirma c un TC exploateaz reutilizarea eficient a


secvenelor dinamice de instruciuni, reprocesate frecvent n baza a 2 motive
de principiu: localizarea temporal a trace-ului i respectiv comportarea
predictibil a salturilor n virtutea comportrii lor anterioare. Aadar, TC
memoreaz trace-uri n scopul eficientizrii execuiei programului i nu doar
n scopul eficientizrii procesului de aducere al instruciunilor. Aceasta, pe
motiv c un segment din trace conine numai instruciuni care se vor
executa. n cazul IC, dac ntr-un bloc exist o ramificaie efectiv,
instruciunile urmtoare se aduceau inutil ntruct nu s-ar fi executat.
Cum TC trebuie s lucreze ntr-o strns dependen cu predictorul de
salturi, se impune mbuntirea performanelor acestor predictoare. Se pare
c soluia de viitor va consta ntr-un predictor multiplu de salturi, al crui rol
principal const n predicia simultan a urmtoarelor (M-1) salturi asociate
celor maximum M blocuri stocabile n linia TC. De exemplu, pentru a
prediciona simultan 3 salturi printr-o schem de predicie corelat pe 2
nivele, trebuie expandat fiecare intrare din structura de predicie PHT
(Pattern History Table), de la un singur numrtor saturat pe 2 bii, la 7
astfel de automate de predicie, ca n figura 4.22. Astfel, predicia generat
de ctre primul predictor (taken / not taken) va multiplexa rezultatele celor 2
predictoare asociate celui de al doilea salt posibil a fi stocat n linia curent
din TC. Ambele predicii aferente primelor 2 salturi vor selecta la rndul lor
unul dintre cele 4 predictoare posibile pentru cel de-al treilea salt ce ar putea
fi rezident n linia TC, predicionndu-se astfel simultan mai multe salturi.
Dac predictorul multiplu furnizeaz simultan mai multe PC-uri, TC rezolv
elegant i problema aducerii simultane a instruciunilor pointate de aceste
PC-uri, fr multiportarea pe care un cache convenional ar fi implicat-o.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

201

Figura 4.22. Predictor a 3 salturi succesive

Asemenea predictoare multiple n conjuncie cu structuri de tip TC


conduc practic la o nou paradigm a procesrii unui program main
numit "multiflow", caracterizat deci prin procesarea n paralel a mai
multor basic-block-uri dintr-un program. n continuare se prezint
rezultatele unei cercetri bazat pe simulare asupra conceptelor novatoare de
TC i predictor multiplu, integrate ntr-o arhitectur superscalar extrem de
agresiv dezvoltat la Universitatea din Michigan, SUA. n esen,
investigaia subliniaz urmtoarele aspecte:
-creterea gradului de asociativitate a TC de la 0 (mapare direct) la 4
(asociativitate n blocuri de 4 intrri/ bloc) poate duce la creteri ale ratei
medii de procesare a instruciunilor de pn la 15%
-capaciti egale ale TC i respectiv memoriei cache de instruciuni
(64 ko, 128 ko) conduc la performane cvasioptimale
-asociativitatea liniei TC nu pare a conduce la creteri spectaculoase
de performan
-performana global fa de o arhitectur echivalent, dar fr TC,
crete cu circa 24%, iar rata de fetch a instruciunilor a instruciunilor n
medie cu 92%
n continuare se prezint o alt tehnic de procesare, legat tot de
reutilizarea dinamic a instruciunilor deja executate, posibil a fi folosit n
conjuncie cu un trace cache. Principalul scop urmrit const n paralelizarea
execuiei unor instruciuni dependente RAW, bazat pe predicia valorilor

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

202

regitrilor utilizai de aceste instruciuni. Ideea originar aparine colii de


arhitectura calculatoarelor de la Universitatea din Wisconsin Madison, mai
precis cercettorilor A. Sodani i G. Sohi care au introdus n 1997, la
conferina ISCA 97 inut la Denver, SUA, conceptul de reutilizare
dinamic a instruciunilor. Autorii arat n primul rnd c reutilizarea unor
instruciuni sau secvene de instruciuni este relativ frecvent i se datoreaz
modului compact de scriere al programelor precum i caracteristicilor
intrinseci ale structurilor de date prelucrate. Ideea de baz este c dac o
secven de instruciuni se reia n acelai context de intrare, atunci
execuia sa nu mai are sens fiind suficient o simpl actualizare a
contextului de ieire, n concordan cu cel precedent. Dac arhitectura
TC - dup cum am artat - acioneaz asupra depirii unei limitri
fundamentale asupra ratei de fetch a instruciunilor, aceast nou inovaie
arhitectural va aciona asupra limitrii ratei de execuie a instruciunilor.
Reamintim c aceast rat de execuie este fundamental limitat de
hazardurile structurale implicate precum i de hazardurile RAW ntre
instruciuni. Aadar, instruciunile reutilizate nu se vor mai executa din nou,
ci pur i simplu contextul procesorului va fi actualizat n conformitate cu
aciunea acestor instruciuni, bazat pe istoria lor memorat.
n vederea scopului propus, pe parcursul procesrii instruciunilor, se
construiesc n mod dinamic aa-numite seturi de instruciuni. O instruciune
"i" se adaug unui set notat cu S dac "i" depinde RAW de cel puin una
dintre instruciunile setului S. n caz contrar, instruciunea "i" va fi prima
aparinnd unui nou set. Practic, construcia acestor seturi implic generarea
grafului dependenelor de date ataat programului, ca n secvena de mai jos
(vezi figura 4.23).

Figura 4.23. Construcia seturilor n vederea reutilizrii codurilor

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

203

Dup procesarea instruciunilor, seturile rezultate sunt nscrise n


vederea reutilizrii ntr-un buffer special numit TDIS (Table of Dependent
Instruction Sequences). O intrare n TDIS conine 3 pri principale:
- partea IN, care memoreaz valorile operanzilor de intrare, adic
aceia neprodui prin secvena respectiv ci preluai din afara acesteia.
- partea INSTRUCTION, conine adresele instruciunilor inserate n
seturi.
- partea OUT, ce conine numele regitrilor destinaie afereni unui set,
precum i valorile acestora.
Pentru exemplificare, secvena de program anterioar necesit un
buffer TDIS cu dou intrri, ca mai jos (figura 4.24).

Figura 4.24. Structura TDIS la un moment dat

Aadar, la fiecare aducere a unei noi instruciuni, PC-ul acesteia se


compar cu adresa primei instruciuni din fiecare linie a TDIS. Apoi,
coninutul actual al regitrilor procesorului este comparat cu cel al prii IN
a TDIS. n caz de hit, secvena de instruciuni din TDIS poate fi reutilizat
cu succes i cu eludarea tuturor hazardurilor RAW dintre aceste instruciuni.
Execuia acestor instruciuni va nsemna doar actualizarea contextului
procesorului n conformitate cu valorile OUT din TDIS. Prin urmare,
reutilizarea instruciunilor prin acest mecanism va avea un efect benefic
asupra timpului de procesare al instruciunilor. Considernd un procesor
superscalar care poate aduce, decodifica i executa maximum 4 instruciuni /
ciclu, secvena anterioar se proceseaz ca n cele dou figuri urmtoare
(4.25, 4.26).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

204

Figura 4.25. Execuia programului pe un procesor superscalar

Figura 4.26. Execuia programului pe un procesor cu reutilizarea codurilor

Se observ c bufferul TDIS determin execuia secvenei prin


reutilizarea instruciunilor n doar 4 cicli fa de 7 cicli ci ar fi fost necesari
n cazul unei procesri clasice. Dac lrgimea de band a decodorului de
instruciuni ar fi fost de 6 instruciuni n loc de 4, execuia secvenei s-ar fi
redus la doar 3 cicli. Teste efectuate pe benchmark-urile SPEC 95, au artat
c ntre 17% i 26% dintre instruciunile acestor programe au putut fi reluate
cu succes. Conceptul TDIS este eficient ntruct ca i n cazul utilizrii
instruciunilor combinate, se elimin necesitatea secvenierii n execuie a
unor instruciuni dependente RAW. Mai mult, n opinia autorului, dintr-un
anume punct de vedere, conceptul reutilizrii dinamice a secvenelor
dependente de instruciuni, violeaz oarecum celebra lege a lui G. Amdahl
ntruct trece peste secvenialitatea intrinsec a programului i proceseaz
agresiv paralel chiar i n acest caz, prin updating. Este fr ndoial
posibil ca acest concept s se cupleze favorabil cu cel de tip "trace cache"
anterior prezentat i care acioneaz favorabil n special asupra limitrilor
ratei de fetch a instruciunilor.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

205

n contextul urmtoarei generaii arhitecturale de microprocesoare de


nalt performan, cea de a 4-a, se ntrevede de asemenea implementarea
unor mecanisme de aducere de tip Out of Order a instruciunilor, n plus fa
de cele deja existente n execuia instruciunilor. Astfel de exemplu, n cazul
unei ramificaii dificil de predicionat, pe durata procesului de predicie,
procesorul poate s aduc anticipat instruciunile situate ncepnd cu punctul
de convergen al ramurilor de salt. Aceste instruciuni fiind independente
de condiia de salt, pot fi chiar lansate n execuie. Cnd predicia se va fi
realizat sau pur i simplu cnd adresa destinaie a ramificaiei va fi
cunoscut, procesorul va relua aducerea instruciunilor de la adresa
destinaie a ramificaiei.
n viitorul apropiat, unitatea de execuie va trebui s lanseze spre
unitile funcionale ntre 16 i 32 instruciuni n fiecare tact. Evident,
execuia instruciunilor se va face Out of Order, pe baza dezvoltrii unor
algoritmi de tip Tomasulo. Staiile de rezervare aferente unitilor de
execuie, vor trebui s aib capaciti de peste 2000 de instruciuni Pentru a
evita falsele dependene de date (WAR, WAW), procesoarele vor avea
mecanisme de redenumire dinamic a regitrilor logici. Desigur, tehnicile de
scheduling static vor trebui mbuntite radical pentru a putea oferi acestor
structuri hardware complexe suficient paralelism Se estimeaz atingerea
unor rate medii de procesare de 12-14 instr. / tact, considernd c se pot
lansa n execuie maximum 32 instr. / tact. La ora actual, cele mai avansate
procesoare, cu un potenial teoretic de 6 instr. / tact, ating n realitate doar
1.2-2.3 instr. / tact.
Aceste rate mari de procesare, impun execuia paralel a cca. 8
instruciuni Load/ Store. Aceasta implic un cache de date primar de tip
multiport i unul secundar, de capacitate mai mare dar cu porturi mai puine.
Miss-urile pe primul nivel, vor accesa al 2-lea nivel. Pentru a nu afecta
perioada de tact a procesorului, este posibil ca memoria cache din primul
nivel s fie multiplicat fizic. De asemenea, n vederea mbuntirii
performanei, viitoarele microprocesoare vor prediciona adresele de acces
ale instruciunilor Load, asemenea prediciilor salturilor, permind acestora
s se execute nainte de calculul adresei.
Aceste noi arhitecturi, care execut trace-uri ca uniti de procesare,
vor putea permite procesarea mai multor asemenea trace-uri la un moment
dat, ceea ce conduce la conceptul de procesor multithreading. Aadar
paralelismul la nivel de instruciuni (ILP- Instruction Level Parallelism) va
fi nlocuit cu unul mai masiv, constituit la nivelul thread-urilor unei aplicaii
(TLP- Thread Level Parallelism). n acest scop, arhitectura va trebui s
conin mai multe uniti de procesare a trace-urilor, interconectate. La
aceasta, se adaug o unitate de control "high-level", n vederea partiionrii

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

206

programului n thread-uri de instruciuni independente. Se poate ajunge


astfel la o rat de procesare de mai multe trace-uri / tact fa de instruciuni /
tact, metrica de performan obinuit a procesoarelor superscalare actuale.
E posibil ca aceste TLP-uri s acopere "semantic-gap"-ul existent ntre
paralelismul la nivel de instruciuni i respectiv cel situat la nivelul
programelor, mult mai masiv. O alt paradigm nou, oarecum
asemntoare, dar mai ndeprtat probabil ca realitate comercial, o
constituie multiprocesoarele integrate ntr-un singur circuit, ca soluie n
vederea exploatrii paralelismului masiv ("coarse grain parallelism").
Aceasta este ncurajat i de anumite limitri tehnologice care ar putea
afecta dezvoltarea arhitecturilor uniprocesor.
Se estimeaz ca toate aceste idei arhitecturale agresive, s poat fi
implementate ntr-un microprocesor real, abia atunci cnd tehnologia va
permite integrarea "on-chip" a 800 milioane -1 miliard de tranzistori, ceea
ce va fi posibil n jurul anului 2010 (predicie "Semiconductor Industry
Association" n 1996). La acest nivel de dezvoltare tehnologic va fi
posibil de asemenea integrarea "on-chip" a memoriei DRAM, la un timp de
acces de cca. 20 ns. Ideea este atrgtoare pentru c la aceeai suprafa de
integrare, o memorie DRAM poate stoca de cca. 30-50 de ori mai mult
informaie dect o memorie SRAM pe post de cache. Se estimeaz c ntr-o
prim faz, un DRAM integrat de 96 MB va necesita 800 milioane de
tranzistori ocupnd cca 25% din suprafaa circuitului (vezi pentru detalii
http://iram.cs.berkeley.edu/)
n orice caz, se pare c pentru a continua i n viitor creterea
exponenial a performanei microprocesoarelor, sunt necesare idei noi,
revoluionare chiar, pentru c n fond paradigma actual este, conceptual,
veche de circa 15-20 de ani. Ar fi poate necesar o abordare integrat, care
s mbine eficient tehnicile de scheduling software cu cele dinamice, de
procesare hardware. n prezent, dup cum a rezultat din cele prezentate pn
acum, separarea ntre cele 2 abordri este poate prea accentuat. n acest
sens, programele ar trebui s expliciteze paralelismul intrinsec ntr-un mod
mai clar. Cercetarea algoritmilor ar trebui s in seama cumva i de
concepte precum, de exemplu, cel de cache, n vederea exploatrii
localitilor spaiale ale datelor prin chiar algoritmul respectiv. Cunoatem
puine lucruri despre ce se ntmpl cu un algoritm cnd avem implementate
ierarhii de memorii pe maina fizic. Desigur, asta nu nseamn c
programatorul va trebui s devin expert n arhitectura computerelor, dar nu
o va mai putea neglija total dac va dori performan. n noua er post PC
spre care ne ndreptm, centrat pe Internet, fiabilitatea, disponibilitatea i
scalabilitatea vor trebui s devin criterii eseniale alturi de performana n

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

207

sine, ceea ce implic iari necesitatea unei noi viziuni pentru arhitectul de
computere.
De asemenea, se poate prediciona o dezvoltare puternic n
continuare a procesoarelor multimedia. Aplicaiile multimedia spre
deosebire de cele de uz general, nu impun n mod necesar complicate
arhitecturi de tip superscalar sau VLIW. Aceste aplicaii sunt caracterizate
de urmtoalele aspecte care le vor influena n mod direct arhitectura:
-structuri de date regulate, de tip vectorial, cu tendine de procesare
identic a scalarilor componeni, care impun caracteristici de tip SIMD
(Single Instruction Multiple Data), de natur vectorial deci, a acestor
procesoare;
-necesitatea procesrii i generrii rspunsurilor n timp real;
-exploatarea paralelismului la nivelul thread-urilor independente ale
aplicaiei (codri / decodri audio, video, etc);
-localizare pronunat a instruciunilor prin existena unor mici bucle
de program i nuclee de execuie care domin timpul global de procesare.
Avnd n vedere cele expuse anterior, n urmtorul paragraf se
prezint succint caracteristicile procesrii vectoriale, cea care st la baza
acestor procesoare multimedia i a altor procesoare i coprocesoare
specializate.

4.11. PROCESAREA VECTORIAL


Alturi de procesarea pipeline, procesarea vectorial este o tehnic
deosebit de performant nelipsit n implementarea procesoarelor
componente ale supercalculatoarelor actuale. n esen procesarea vectorial
reprezint prelucrarea informaiei numerice sub form de vectori. Ca i
tehnica pipeline pe care o nglobeaz, procesarea vectorial urmrete n
principiu creterea ratei de procesare la nivelul programului, fiind deci o
tehnic de exploatare a paralelismului la nivelul datelor din program. De
multe ori aceste arhitecturi vectoriale se ntlnesc n literatur sub numele de
sisteme SIMD (Single Instruction Multiple Data). n continuare se vor
prezenta pe scurt cteva elemente arhitecturale specifice acestui concept
precum i problemele implicate de ctre acestea. se va insista ca i pn
acum, pe problemele interfeei hardware-software, necesare nelegerii
acestor arhitecturi de ctre utilizator n vederea exploatrii lor prin software.
Dac precedentele modele nu afectau viziunea programatorului HLL,

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

208

modelul vectorial modific acesast viziune "independent de main" ntrun mod agresiv, similar cu cel al sistemelor multiprocesor.
Prin noiunea de vector se nelege un tablou (ir) constituit din
elemente scalare de acelai tip. n general elementele vectorilor sunt numere
reprezentate n virgul mobil (semn, mantis, caracteristic) pe mai muli
octei (de regul pe 4, 8 sau 10 octei conform standardelor IEEE). Prin
lungimea vectorului nelegem numrul de elemente scalare ce formeaz
vectorul. Dup cum vom arta, eficiena maxim a procesrii se obine
atunci cnd numrul unitilor de prelucrare din cadrul unitilor de execuie
specializate, coincide cu lungimea vectorului. O alt caracteristic a unui
vector l constituie pasul vectorului, adic diferena numeric dintre valorile
adreselor de memorie la care se afl dou elemente scalare succesive din
punct de vedere logic (V(i), V(i+1)) ale unui vector. n fine, lungimea
scalarului, adic lungimea n octei a unui element scalar inclus n vector,
are importan ntruct afecteaz performana unitilor scalare de execuie.
n conformitate cu tipul operanzilor pe care i prelucreaz i respectiv
cu tipul rezultatului pe care l genereaz se obinuiete clasificarea
instruciunilor vectoriale (I), n patru categorii de baz i anume:
- instruciuni de tipul I1: V -> V, V= mulimea operanzilor vectori. De
exemplu, o instruciune de complementare a unui vector.
- instruciuni de tipul I2 : V -> S, S= mulimea operanzilor scalari. De
exemplu, determinarea elementului scalar minim / maxim al unui vector.
- instruciuni de tipul I3 : VxV -> V, de exemplu instruciuni
aritmetico / logice cu 2 operanzi vectori
- instruciuni de tipul I4 : VxS -> V, de exemplu nmulirea unui
vector cu un scalar.
De remarcat c o singur instruciune vectorial specific o
multitudine de operaii scalare executate n paralel, fiind deci echivalent cu
o bucl de program executat de un procesor scalar. ntruct o bucl de
instruciuni scalare poate fi nlocuit cu o singur instruciune vectorial,
rezult ca astfel se elimin multe dintre problemele generate de hazardurile
specifice arhitecturilor pipeline (RAW-uri, ramificaii, analiz antialias,
etc.). O alt caracteristic a mainilor vectoriale const n faptul c acestea
pipelinizeaz procesarea pe elemente scalare ale vectorilor. De asemenea nu
este greu de sesizat, c procesarea vectorilor implic arhitecturi de memorie
cu acces ntreesut ("interleaving"), ceea ce implic avantajul c latena
memoriei va afecta la nivel de operare vector i nu de operare scalar. O
astfel de arhitectur este performant de exemplu atunci cnd se citesc mai
multe cuvinte succesive (situate n blocuri de memorie succesive), ncepnd
cu o adres putere a lui 2. ntruct opereaz asupra vectorilor compui din
scalari reprezentai n virgul mobil, performana absolut mainilor

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

209

vectoriale se exprim n general n MFLOPS (Mega FLotant Operation Per


Second), spre deosebire de perfomana procesoarelor scalare exprimat
uzual n MIPS (Mega Instruction Per Second).

Figura 4.27. Structura unei maini vector - registru

Exist maini vectoriale de tip vector - registru i respectiv memorie memorie. Mainile vector - registru au caracteristic faptul c toate operaiile
cu vectori, mai puin cele de LOAD / STORE, se execut ntre regitrii
vectoriali interni. Aceste maini, reprezint deci o arhitectur analoag
arhitecturii LOAD / STORE din cadrul procesoarelor MEM. Mainile
memorie - memorie, mai puin frecvente dect primele, se caracterizeaz
prin faptul c toate operaiile ntre vectori se execut memorie - memorie. O
arhitectur vectorial tipic este prezentat n figura 4.27.
Regitrii vectoriali sunt de lungime fix notat cu M, fiecare registru
coninnd un singur vector. Unitile funcionale, sunt uniti de execuie
pipeline-izate care opereaz concurent asupra operanzilor vectori. Numrul
de astfel de uniti este diferit de la un procesor la altul. Evident c este
necesar i o unitate de control special pentru detecia i controlul
hazardurilor din cadrul unitilor de execuie pipeline. Unitatea LOAD /
STORE, acceseaz vectorii din memoria principal. Se urmrete atingerea
unei rate de transfer CPU memorie de un element / ciclu CPU, dup
depirea latenei iniiale a memoriei principale cu acces ntreesut. n fine,
mai exist i setul de regitri scalari, necesari pentru execuia proceselor
scalare.
Probleme n vectorizarea programelor.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

210

Prin noiunea de vectorizare a unui program scris ntr-un limbaj de


nivel nalt, se nelege posibilitatea ca respectivul program s fie compilat
utilizndu-se instruciuni main vectoriale. Cum instruciunile se preteaz
n general n compilarea buclelor de programe scrise n limbaje de nivel
nalt, se pune indeosebi problema vectorizrii buclelor de program. Aadar,
pentru ca o main vectorial s fie viabil, trebuie ca programul compilator
s recunoasc dac o bucl de program este sau nu vectorizabil i dac este
atunci s genereze codul obiect corespunztor. Este evident c exist bucle
de program nevectorizabile, de ex. buclele recurente, precum secvena de
mai jos :
for i = 1 to 100
X(i+1) = X(i) + X (i+1);
Se pune deci problema, cum poate detecta compilatorul dac o bucl
de program este ori nu este vectorizabil ? Dintre multele posibile
rspunsuri la aceast problem, n continuare prezentm doar unul, deosebit
de simplu. Prin urmare, exist o dependen de date care face o bucl
nevectorizabil dac exist 2 indici de iteraii j i k n limitele buclei aa
nct se scrie un element cu indicele (a*j+b) ntr-un vector i apoi se citete
acelai element din vector, de ast dat cu indicele (c*k+d), unde a, b, c, d
aparin lui Z. Altfel spus, o bucl este nevectorizabil dac c.m.m.d.c. (a, c)
divide (b - d). Prin prisma acestui criteriu de ex., rezult imediat c bucla de
mai jos este vectorizabil (2 nu divide 3):
for i = 1 to 100
X(4i+3) = X(2i) + Y(i);
Lungimea fizic a regitrilor vectori este fix i deci fatalmente
limitat (<=M). De multe ori n soft se lucreaz cu vectori de lungime mai
mare dect M (lungimea regitrilor vectori) sau se lucreaz cu vectori de
lungime necunoscut n momentul compilrii, ca n exemplul buclei
SAXPY (Single Precision A*X+Y) de mai jos:
for i = 1 to n
Y(i) = a * X(i) + Y(i);
n astfel de cazuri, bucla se rescrie utiliznd tehnica "strip mining",
care reprezint o tehnic ce permite generarea de cod program n urma
compilrii astfel nct fiecare operaie vectorial s se efectueze cu vectori
de lungime mai mic dect M. n urma aplicrii acestei tehnici, bucla
SAXPY devine :
start = 1
lungvec = (n mod M) ;
for j = 0 to (n / M) do ; ntreg trunchiat
for i = start, start + lungvec -1 do
Y(i) = a * X(i ) + Y(i);

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

211

enddo
start = start + lungvec;
lungvec = M;
enddo
De remarcat c n prima iteraie (j = 0) se opereaz pe vectori de
lungime (n mod M) iar n celelalte iteraii (j = 1, 2, ...) se opereaz asupra
unor vectori de lungime maxim admis M. Rezult deci c ar fi necesar o
resurs special (registru) care s controleze lungimea vectorilor asupra
crora se opereaz la un moment dat.
S considerm acum o secven de program destinat nmulirii a dou
matrici A = B x C, de ordinul (100x100), ca mai jos.
for i = 1 to 100 do
for j = 1 to 100 do
A(i,j) = 0
for k = 1 to 100 do
A(i,j) = A(i,j) + B(i,k) * C(k,j)
enddo
enddo
enddo

Figura 4.28. Moduri de memorare ale matricilor n memorie

Dup cum se tie, exist dou moduri de memorare a unei matrici n


memoria principal : modul "row major" i respectiv modul "column major"
ca n figura anterioar.
n cazul buclei de program anterioare, n ipoteza memorrii matricilor
dup legea "column major", rezult pas//C//=1 i pas//B//=100. n ipoteza
memorrii dup cealalt lege, ar rezulta pas//C//=100 i pas//B//=1. Oricum,
rezult clar necesitatea unor instruciuni de ncrcare / memorare care pe
lng adresa de baz i lungimea vectorului s aib ca parametru i pasul
acestuia. Vectorii cu pasul diferit de 1 cauzeaz complicaii n accesul la
memoria ntreesut. Pentru exemplificare s considerm 16 module de
memorie cu acces ntreesut avnd timpul de acces ta. Timpul necesar pentru
a ncrca un vector cu 64 elemente avnd pasul 1 este (4Tciclu + 4ta) unde
Tciclu = durata unui ciclu din structura pipeline a procesorului vectorial. La
cealalt extrem, timpul necesar pentru a ncrca un vector de aceeai
lungime avnd ns pasul 32 este (64Tciclu + 64ta), deci mult mai mare.
Pentru eliminarea problemelor implicate de pasul vectorului (latena mare a

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

212

memoriei pentru pasul diferit de 1) se cunosc mai multe soluii bazate pe


mbuntirea arhitecturilor de memorii ntreesute. De exemplu, o matrice
de 8 x 8 poate fi memorat n 8 blocuri de memorie cu acces ntreesut ca n
figura 4.29.

Figura 4.29. Memorarea unei matrici ntr-o memorie cu acces ntreesut

Se observ c pasul unui vector "rnd" este 1, iar pasul unui vector
"coloan" este 9. Cum 2 elemente succesive ale unei coloane se afl
memorate n module succesive de memorie, printr-o proiectare adecvat a
adresrii modulelor bazat pe pasul vectorului accesat, se poate obine n
acest caz o accesare optimal a vectorilor "coloane" (la fel de rapid ca i
accesarea unui vector "rnd" care are pasul =1). n general dac pasul
vectorului este relativ prim cu numrul de module de memorie, se pot
elimina latenele ridicate prin organizri similare. Datorit frecvenei
accesrii n cazul unor algoritmi numerici diveri a vectorilor diagonali, se
impune i optimizarea accesului la aceti vectori. Dac numrul modulelor
de memorie este o putere a lui 2, nu poate fi optimizat simultan accesul la
vectorii coloan i respectiv la cei diagonali . n acest caz se utilizeaz p
module de memorie, unde p este un numr prim. O asemenea arhitectur de
memorie este implementat n cazul supercomputerului BSP (Burroughs
Scientific Processor - compania Unisys). n figura de mai jos (4.30) se
prezint o astfel de structur cu 5 module, avnd memorat o matrice de
4x4. Pasul vectorilor rnd este 1, cel al vectorilor coloan este 6 iar cel al
vectorilor diagonali este 7. De remarcat c accesul optimizat simultan la cele
trei tipuri de vectori este posibil datorit faptului c numrul de module al
memoriei (5) este relativ prim cu paii vectorilor (1, 6, 7).
n acest caz, alinierea ar fi fost efectiv dac s-ar fi accesat de
exemplu vectorul diagonal 00 11 22 33. Evident c selecia elementelor,
citirea i alinierea se fac comandate de un automat, n baza adresei de baz,
lungimii i pasului vectorului accesat (citit n acest caz).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

213

Figura 4.30. Optimizarea memorrii vectorilor linie, coloan i diagonali

S considerm acum o arhitectur vectorial de tip SIMD (Single


Instruction Multiple Data) ca n figura 4.31. Aceast arhitectur SIMD se
mai numete i procesor matricial deoarece este constituit din mai multe
procesoare identice, relativ simple, care execut acelai program simultan,
asupra unor date locale. Putem considera aceste structuri de calcul ca fcnd
trecerea la arhitecturile de tip MIMD (Multiple Instruction Multiple Data).

Figura 4.31. Arhitectur SIMD

De precizat c o astfel de structur de calcul execut un singur


program asupra mai multor operanzi scalari simultan (ALU-uri multiple)
sau acelai program este executat n paralel de mai multe procesoare (UE)
asupra propriilor seturi de date memorate n resursele locale. Nu intrm aici
n amnunte asupra topologiei i caracteristicilor diverselor tipuri de reele
de interconectare, prin intermediul crora se realizeaz schimbul de date
ntre unitile locale de execuie, acestea sunt arhicunoscute i prezentate n
toate crile generale de arhitectura sistemelor de calcul.
S considerm o aplicaie care nsumeaz 128.000 de elemente pe un
sistem SIMD avnd 128 uniti de execuie distincte. Pentru nceput, un
procesor specializat de I/O (front computer) plaseaz cte un subset de 1000
de elemente n memoria local a fiecrei uniti de execuie (UE). Apoi
fiecare UE proceseaz cte o secven de program astfel :

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

214

sum = 0;
for (i = 0, i < 1000; i = i + 1)
sum = sum + Al(i);

Al(i) reprezint o tabel local coninnd 1000 de scalari, cte una n


fiecare UE. Rezult la final faptul c fiecare dintre cele 128 de sume pariale
va fi situat n alt UE. Programul SIMD pentru nsumarea sumelor pariale
distribuite ar fi:
limit = 128;
half = 128;
repeat
half = half/2
if(Pn >= half && Pn < limit) send (Pn-half;sum);
if(Pn < half) sum = sum + receive( );
limit = half;
until (half = = 1);

Funcia send(x,y) are parametrii x = adres procesor destinaie, y =


variabil emis. Precizm c am notat prin Pn numrul unitii de excuie,
deci Pn {0, 1, 2,....,127}. Send / Receive sunt funcii emisie / recepie prin
/ din reeaua de interconectare a unitilor de execuie aferente SIMD. Suma
final se va obine n UE0. Timpul de execuie este de ordinul O(log2N),
unde N=numrul de UE spre deosebire de un sistem convenional tip SISD
care ar realiza adunarea sumelor pariale ntr-un timp O(N). Secvena
anterioar poate fi scris mai elegant, prin eliminarea variabilei half, ca mai
jos
limit = 128;
repeat
if(Pn >= limit/2 && Pn < limit) send (Pn-limit/2;sum);
if(Pn < limit/2) sum = sum + receive( );
limit = limit/2;
until (limit = = 1);

Buclele condiionate implic i ele anumite cerine n procesarea


vectorial. De exemplu s considerm secvena urmtoare :
for i = 1 to 100 do
if(X(i) diferit de 0) then
X(i) = X(i) + Y(i);
endif
enddo

Pentru ca secvena s fie vectorizabil rezult necesitatea existenei


unui registru vector de mascare, de lungime egal cu lungimea regitrilor
vectori. Acest registru va conine elemente pe '0' sau '1', n conformitate cu
testul fcut asupra unui vector pe o anumit condiie. Operaiile vectoriale se

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

215

vor executa numai asupra acelor elemente din vector crora le corespunde
un element pe '1' n registrul de mascare. Considernd adresele de baz ale
vectorilor X i Y memorate n regitrii Rx respectiv Ry, bucla anterioar
este echivalent cu urmtoarea secven de instruciuni main vectorial :
LV V1, Rx;
V1<-MEM/Rx
LV V2, Ry;
V2<-MEM/Ry
LD F0,#0;
instr. scalar F0<-0
SNESV F0, V1;
seteaz elementele reg. de mascare aferent
elementelor V1(i) diferit de 0, i = 1-100
ADDV V1, V1, V2; V1<- (V1)+(V2)
SETVM;
seteaz toate elementele reg. de mascare VM
SV Rx, V1;
V1 -> MEM/Rx
Exist bucle de program nevectorizabile datorate unor dependene de
date "ascunse", generate de existena unor variabile scalare, ca mai jos :
x = 0;
for i = 1 to 100 do
x = x + A(i) * B(i);
enddo

Aceast bucl nevectorizabil se poate transforma n urmtoarea


secven semi-vectorizabil, obinut prin transformarea scalarului n vector
i care paralelizeaz 100 de nmuliri care se executau serial n secvena
anterioar :
y = 0;
for i = 1 to 100 do
X(i) = A(i) * B(i); vectorizabil
enddo
for i = 1 to 100 do
y = y + X(i); nevectorizabil
enddo

Multe dintre supercomputerele actuale reprezint multiprocesoare


formate din mai multe procesoare vectoriale care proceseaz n paralel,
avnd deci un accentuat paralelism spaial. n acest context s considerm
bucla de program :
for i = 1 to n do
X(i) = Y(i) + Z(i); (1)
Y(i+3) = X(i + 4); (2)
enddo

Un compilator inteligent din cadrul unui sistem vectorial


multiprocesor, trebuie s sesizeze potenialul paralelism din cadrul acestei
secvene precum i dependenele de date dintre relaiile (1) i (2). Secvena
de mai jos va fi transformat astfel :
for j=1 to n step 3 do

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

for i=j to j+2 doall


X(i)= Y(i)+Z(i);
Y(i+3)=X(i+4)
enddoall

(1')
;

216

(2')

enddo
Se observ c s-au obinut de fapt 2 bucle vectorizate, deci s-au
eliminat dependenele de date. Instruciunea "doall" determin execuia
paralel, pe procesoare distincte, a secvenelor (1') i (2'), acum perfect
vectorizabile i independente.
Desigur c generarea de cod vectorial sau cod vectorial-paralel prin
intermediul unor compilatoare pe limbaje convenionale, nu poate exploata
optimal procesarea vectorial respectiv multiprocesarea vectorial.
Actualmente, se lucreaz intens, cu deosebire n Statele Unite ale Americii,
pentru elaborarea de noi limbaje specifice programrii vectoriale /
concurente (IBM Parallel Fortran, Cedar Fortran, limbajul VPC - un
supraset vectorial / concurent al limbajului C, etc.). Cert este c odat cu
avansul tehnologiei VLSI, preul acestor microprocesoare vectoriale va
scdea i ele vor ptrunde tot mai masiv pe pia. nc din 1988 firma
Ardent a realizat un CPU n jurul unui microprocesor RISC + un coprocesor
vectorial integrat la preul de numai 180$. Ca i procesarea paralel la
nivelul instruciunilor, ea a produs un impact puternic att asupra proiectrii
hardware ct i asupra compilatoarelor. Oricum, dezvoltarea
compilatoarelor reprezint provocarea esenial i n aceste arhitecturi
paralele.
n concluzie, am prezentat cteva idei relative la procesarea vectorial
ntruct reprezint un concept arhitectural de referin n proiectarea unui
procesor performant (MMX) chiar dac nu intr strict n categoria
arhitecturilor cu paralelism la nivelul instruciunilor care se abordeaz cu
precdere n aceast lucrare.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

217

Lecture Notes in Multiprocessors (LNM)


- Draft -Only for my students useAcest document (LNM) este doar un document de lucru in cadrul
procesului didactic desfasurat de autor. Este destinat exclusiv
studentilor mei, in procesul de invatare
During the period 1986 2002 the microprocessors performance growth with an average
rate of 52% per year. Since 2002 the improvement was less than 20% per year [Hen07]. In
order to keep a significant performance growth, instead of scaling performance by
improving single core performance, performance is scaled during the last years (INTEL,
starting from 2004) by putting multiple cores on a single chip, effectively integrating a
complete multiprocessor on one chip. Actually multicores are parallel computers, mainly
exploiting thread and task level parallelisms.
Some of the most important reasons that justify this sea change in computing (Paul
Otellini, President, Intel, 2005) were the followings:
o
o
o
o

Consumul de putere (Power wall) si disipatia termica; Dynamic


power Pd=kCV2F
Prapastia de comunicare procesor+memorie (Memory wall);
Exploatarea ILP i-a cam atins limitele (ILP wall);
Memory wall + ILP wall + Power wall = Brick wall
Performance = (Cores * F)

Since the total performance of a multi-core is improved without increasing the clock
frequency, multi-cores offer a better performance/Watt ratio than a single core solution
with similar performance.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

218

Figura preluata din cartea autorilor Hennessy si Patterson [Hen07] (v.


bibliografia)
A parallel computer consists in a collection of computers (processing elements) that
communicate and cooperate in order to run large (concurrent) applications fast. It extends
the concepts used in uniprocessors with communication architecture (interconnection
network) that allows processors to inter-communicate. Parallel computers usually exploit
the advantage of using many small, inexpensive, low power processors [Cul99] but they
could contain also heterogenous processors, including out of order superscalars or SMT
(Simultaneous Multithreading) processors.
Desirable attributes of multiprocessor systems:

Scalabilty
Fault tolerant
Higher absolute performance (greater than a single processor)

Performance Metrics for Parallel Computers:


-

Speedup (N processors) = Time (1 processor)/Time (N processors) =


Performance (N processors)/Performance (1 processor)
Latency the time taken for an operation [seconds per operation]

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore


-

219

Bandwidth the rate at which operations are performed [operations per


second]
Cost/Complexity the impact that operations have on the execution time
of the program. In other words, the latency times the number of
operations performed.

Ideal ar fi ca un SMM dotat cu N procesoare s proceseze un program


de N ori mai rapid dect un sistem monoprocesor, cerin numit
scalabilitate complet. n realitate, acest deziderat de scalabilitate nu se
realizeaz, din multiple motive. n privina scalabilitii, aceasta este mai
uor de realizat pe un sistem cu resurse distribuite dect pe unul avnd
resurse centralizate, ntruct acestea din urm constituie un factor de
strangulare a activitii.
Dintre cauzele care stau n calea unei scalabiliti ideale, se amintesc:
1. Gradul de secvenialitate intrinsec al algoritmului executat. Aa de
exemplu, exist n cadrul unui algoritm operaii secveniale dependente
de date i deci imposibil de partajat n vederea procesrii lor paralele pe
mai multe procesoare.
n = y + z;
a = n + b;

scalar secvential dependent de RAW

100% = secvenial

-----------------------------------------------------------------------------------------for i = 1 to 10
A(i) = B(i) + C(i);

paralelizabil pe 10 procesoare

(1-f)100%=paralelizabil
-----------------------------------------------------------------------------------------Accelerarea S (Speed-up) pentru un SMM cu N procesoare este prin
definiie:
S=

Ts
TN

unde:
Ts = timpul de execuie pentru cel mai rapid algoritm secvenial care
rezolv problema pe un monoprocesor (SISD Single Instruction Single
Data according to Flynns taxonomy)
TN = timpul de execuie al algoritmului paralel executat pe un SMM
cu N procesoare.
Dac notm cu f = fracia (procentajul, fractia-ratio) din algoritm care
are un caracter eminamente secvenial, f[0,1], putem scrie:

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

TN = f Ts +

S=

adic

sau:

S=

220

(1 f) Ts
,
N

Ts
(1 f) Ts
f Ts +
N

1
1

Legea lui (Eu)Gene Amdahl, 1SN


(1 f) f
f+
N

(scalabil)
Legea lui G. Amdahl sugereaz c un procentaj (fx100%) orict de
sczut de calcule secveniale impune o limit superioar a accelerrii (1/f)
care poate fi obinut pentru un anumit algoritm paralel pe un SMM,
indiferent de numrul N al procesoarelor din sistem, de tipul acestora, de
topologia de interconectare etc. Un f=0.2
S 5. Functia S(f) este
hiperbolica.
Motive acestei limitari semnificative de performanta sunt urmatoarele:
1. Timpul consumat cu sincronizarea i comunicarea ntre procesele
rezidente pe diversele ()procesoare din sistem.
2. Imposibilitatea balansrii optimale a activitii procesoarelor din
system. Frecvent nu se poate evita situaia n care anumite
procesoare s fie practic inactive sau cu un grad sczut de utilizare.
3. Planificarea sub-optimal din punct de vedere al performantei a
proceselor d.p.d.v. software (activare proces, punere n ateptare a
unui proces, schimbarea contextului n comutarea proceselor etc.)
4. Operaiile de I/O, n cazul nesuprapunerii lor peste activitatea de
execuie a task-ului de ctre procesor.
Un parametru important care influeneaz direct performana unui
SMM, e dat de granularitatea algoritmului de executat, adic dimensiunea
medie (numr de instruciuni, timp de execuie etc.) a unei uniti
secveniale de program (USP). Prin USP se nelege o secven de program
n cadrul algoritmului paralel n cadrul creia nu se execut operaii de
sincronizare sau de comunicare date cu alte procese. Se mai definete i un
alt parametru, numit timp mediu de comunicaie ntre 2 task-uri nerezidente
pe acelai procesor.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

221

MultiCore omogene vs. neomogene


(exemplu preluat din cartea Hennessy si Patterson [Hen07])
Consideram un system multiprocessor cu 100 procesoare omogene simple care accelereaza
corespunzator 90% din programul dynamic. Se considera ca 10% din codul dynamic este
secvential. In acest caz, accelerarea este:

S=

1
(1 f)
f+
N

= 1 / (0.1 + 0.9/100) = 9.2

Accelerarea obinut pe un sistem neomogen de complexitate echivalent, avnd 90 de


nuclee simple i un nucleu complex (superscalar, SMT) care ar reduce la jumatate timpul de
rulare al codului secvential, este superioar:
S= 1 / (0.1/2 + 0.9/90) = 16.7

Din punct de vedere al raportului ntre granularitatea algoritmului (G)


i timpul de comunicaie (C), se citeaz 2 tipuri de algoritmi:
a. Coarse grain parallelism (paralelism intrinsec masiv), caracterizai
de un raport G/C relativ mare. Aceti algoritmi se preteaz cu
bune rezultate la procesoare pe sisteme paralele de tip SIMD
(vectoriale, Single Instruction Multiple Data) sau MIMD
(multiprocesoare, Multiple Instruction Multiple Data).
b. Fine grain parallelism (paralelism intrinsec redus), caracterizai de
un raport G/C relativ mic. n acest caz nu este recomandabil
multiprocesarea din cauza granularitii fine a algoritmului i a
timpilor mari de comunicaie/ sincronizare ntre procesoare
(threads), elemente ce vor reduce dramatic accelerarea SMM. Se
recomand exploatarea paralelismului redus prin tehnici
monoprocesor de tip Instruction Level Parallelism [Vin02].
O problem major, practic deschis la ora actual, o constituie
scrierea de software pentru SMM. Sarcina unui compilator SMM este
dificil ntruct trebuie s determine o metod de a executa mai multe
operaii (programe), pe mai multe procesoare, n momentele de timp
neprecizabile. Apoi, trebuie optimizat raportul G/C printr-o judicioas
partiionare n general static si dinamica a algoritmului de executat.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

222

GRANULARITATE
I
COMUNICARE.
MODELE
ANALITICE DE ESTIMARE A PERFORMANEI
(paragraf facultativ!)
1. Un model pesimist
Se consider pentru nceput un sistem biprocesor care trebuie s
execute un program (aplicaie) ce conine M task-uri. Se presupune c
fiecare task se execut n "G" uniti relative de timp i c oricare 2 task-uri
nerezidente pe acelai procesor consum "C" uniti relative de timp pentru
intercomunicaii (schimburi de date + sincronizri). Se va considera c "K"
task-uri se vor executa pe un procesor iar (M-K) task-uri pe cellalt, ()
k=1,2,...,M.
Pesimismul modelului const n faptul c se va considera c nu e
posibil nici o suprapunere ntre execuia unui task i comunicarea acestuia
cu celelalte task-uri nerezidente pe acelai procesor. n acest caz, timpul de
execuie (ET) aferent aplicaiei este dat de relaia:
ET = G Max(M K,K) + C (M K) K

Particulariznd pentru M=50. G/C=10 (granularitate "mic"), G=1 (un


task se execut ntr-o singur unitate de timp), se obine:
ET = Max (50-K, K) + 0.1 K(50-K)
The first term represents the effective processing time and the second
one the interprocessors communication time. n acest caz rezult Koptim = 0,
adic optim e ca toate cele 50 taskuri s ruleze pe un singur procesor
(monoprocesare!). Dac am considera granularitatea aplicaiei G/C = 50
("mare"), se va obine:
ET = Max (50-K, K) + K(50-K)/40
n acest caz Koptim = M/2 = 25, adic o distribuire uniform a
numrului de task-uri pe cele 2 procesoare ("coarse grain parallelism").
n concluzie, pentru un sistem biprocesor n condiiile date, strategia
optimal n vederea obinerii performanei (ET) maxime este:
a) Dac

G M

Koptim = 0 (monoprocesare)
C 2

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

b) Dac

223

G M
Koptim = M/2 (procesare paralel omogen)
>
C
2

Generalizare pentru N procesoare


Se consider pentru nceput un SMM cu 3 procesoare P1, P2, P3, care
are de executat o aplicaie avnd M task-uri. Se presupune c P1 execut k1
task-uri, P2 execut k2 task-uri iar P3 execut k3 task-uri, k1+k2+k3=M.

Figura. Ansambluri procesor - task

Rezult imediat c timpul de comunicaii (ETc) inter-task-uri va fi:


ETc =

3
C
[(k 2 + k 3 ) k1 + (k1 + k 3 ) k 2 + (k1 + k 2 ) k 3 ] = C k i (M k i )
2
2 i =1

Prin urmare, pentru un sistem cu N procesoare avem:


ET = G Max(k i ) +

ET = G Max(k i ) +

C N
k i (M k i ) sau:
2 i =1

C 2 N 2
M k i , () i = 1, N

2
i =1

n ipoteza - nu neaprat optimal - unei alocri uniforme a task-urilor

pentru toate cele N procesoare, avem: k i =

ET N =

GM CM 2 CM2
+

N
2
2N

Timpul de execuie al algoritmului pe un singur procesor este:


ET1 = GM

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

224

"Punctul critic" se atinge cnd ETN = ET1, adic:


GM CM2 CM2
+
=
+ G M , sau:
N
2
2N
1 CM
1

G 1 =
1 , adic:
N
2
N

G M
=
(condiie de performan identic mono-multi)
C
2

n concluzie:
G M
, este indicat multiprocesare omogen (coarse grain)

C 2
G M
b) Dac < , monoprocesarea e mai indicat (fine grain)
C 2

a) Dac

2. Un model mai "optimist"


S presupunem acum c execuia task-urilor se poate suprapune cu
comunicaia interprocesoare. n acest caz avem:

C N
ET = MaxG Max(k i ), k i (M k i )
2 i =1

Optimul s-ar obine atunci cnd suprapunerea celor 2 componente ar fi


perfect, adic:
GM CM 2 CM2
G CM
1
=

=
1
2
N
2
N
2
N
2N

Pentru un numr "mare" de procesoare (N) avem:


G CM
2 G

N optim =
N
2
N C

Obs. 1. N crete liniar cu granularitatea (G/C) aplicaiei

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

225

Obs. 2. Aparent paradoxal, Noptim este invers proporional cu numrul de


task-uri paralele M n care s-a mprit aplicaia. Actually it is not a
paradox pentru c creterea lui M, determin creterea timpului de
comunicaii interprocesor (ETc).
3. Un model cu costuri liniare de comunicaie
S considerm acum un model de SMM n care costurile de comunicaie
s fie liniare cu numrul de procesoare N i nu cu numrul de task-uri
asigurate fiecrui procesor (Pi), ca n modelul precedent.
n acest caz, putem scrie:
ET N = G Max(k i ) + C N

S determinm n continuare, pn la ce "N", avem ca ETN ETN+1,


adic s determinm n acest caz un numr optim de procesoare ( ETN =0
Nopt) care s proceseze cele M task-uri.
Pentru simplificare, se consider o distribuie uniform de task

uri/procesor k i =

M
N

, adic:

ET N =

GM
+CN
N

1
1
ETN = ETN ETN +1 = G M
C =0, adic:
N N +1
GM
G N ( N + 1)
ETN =
C = 0 =
N ( N + 1)
C
M
Rezult deci N optim

G
M .
C

Aadar Noptim nu crete proporional cu numrul de task-uri M ci


proporional cu M i de asemenea, proporional cu rdcina ptrat a
raportului

G
. Pentru un N > Noptim, performana SMM cu costuri liniare
C

de comunicaie,
interprocesor.

se

degradeaz

datorit

costurilor

comunicaiilor

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

226

Obs. Toate aceste modele sunt simpliste, genernd rezultate discutabile,


chiar i contradictorii. Complexitatea procesrii SMM e prea mare
pentru abordri analitice de referin. Pentru o adecvata evaluare si
optimizare se impun i aici simulrile pe benchmark-uri concurente
specifice.
Specific applications for parallel systems
Scientific computing containing a lot of numerical processing with a significant
concurrency degree. Computational science and engineering problems: modeling global
climate change, evolution of galaxies, the atomic structure of materials, the efficiency of
combustion with an engine, the flow of air over vehicles surfaces, the damage due to
impacts, decoding human genome, ocean circulation, fluid turbulence, computational fluid
dynamics, superconductor modeling, computer vision, multimedia, signal processing,
cryptography, voice processing, etc.
Commercial computing. Computer system speed and capacity translate directly into the
scale of business that can be supported by the system. OLTP (On-Line Transaction
Processing) Benchmarks measures throughput in transactions per minute (tpm) on a typical
workload.
The LINPACK benchmark is the most used metric of performance on numerical
applications (Millions of Floating Point Operations Per Second, MFLOPS). Other parallel
benchs: PARSEC, SPLASH 2 etc.
The programming model (PM) represents the conceptualization of the virtual machine
that the programmer uses in coding applications. The PM specifies how parts of the
program running in parallel communicate and what synchronizations are necessary to
coordinate the global activity. Communication between processes occurs when data
written by one process is read by another one. Therefore, a parallel PM represents a link
between the programmers concurrent application model and its implementation on the
parallel concrete hardware architecture. Usually, the PM is independent by the number of
processors.
Further well present 2 important true parallel PMs or classes of parallel machines:
Shared address it posts information at known shared locations. Individual activities can
be coordinated by taking note of who is doing what task. An important aim is to cause
multiple processors to execute different parts of a single program to complete it faster.
Thus, processors will cooperatively and concurrently execute a parallel program. The
cooperation and exchange of information among processors in shared memory architectures
is done through the read/write of shared memory locations and through the use of
synchronization, to control their access to shared variables.

Cheia sincronizrii proceselor n SMM este data de implementarea unor


aa-zise procese atomice. Un proces atomic reprezint un proces care odat
iniiat, nu mai poate fi ntrerupt de ctre un alt proces. Spre exemplu, s

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

227

considerm ca pe un SMM se execut o aplicaie care calculeaz o sum


global prin nite sume locale calculate pe fiecare procesor, ca mai jos:
LocSum=0;
for i=1 to Max
LocSum=LocSum+LocTable[i]; secvena executat n paralel de
; ctre fiecare procesor!
Proces
LOCK
atomic
GlobSum=GlobSum+LocSum; sectiune critica, Read-Modify-Write
UNLOCK
Procesul LOCK/UNLOCK este atomic, n sensul c numai un
anumit procesor poate executa acest process (thread) la un moment dat
(Make updates to a location appear atomic). n caz contrar s-ar putea
obine rezultate hazardate pentru variabila global "GlobSum". Astfel de
exemplu, P1 citete GlobSum = X, P2 la fel, apoi P1 scrie GlobSum =
GlobSum + LocSum1 iar apoi P2 va scrie GlobSum = GlobSum + LocSum2
= X + LocSum2 (incorect!). Este deci necesar ca structura hardware s poat
asigura atomizarea unui proces software. O soluie const n implementarea
n cadrul procesoarelor actuale a unor instruciuni atomice de tip "Read Modify - Write", neinteruptibile la nivelul unei cereri de bus.
Regiune critic (critical section) - desemneaza o seciune de cod care
poate fi controlat la un moment dat numai de ctre un singur proces.
Message passing the information is send or received using messages, and these events
orchestrate individual activities.
Shared address architectures. Details
All processors (cores) share a single global memory logical address space. The key
property of shared memory multiprocessors is that communication occurs implicitly as a
result of load/store conventional memory access instructions to shared variables. Each
processor can name every physical location in the machine; a process can name all data it
shares with others within its virtual address space. Synchronization is implemented via
locks (hardware) or semaphores (software).
A process (task) represents an instance of an active application (the dynamic execution
sequence of a static program) having a virtual address space and one or more threads of
control that share portions of that address space. This involves that those shared virtual
address space portions are mapped to a common physical location. The OS allocates for
each task memory and CPU resources. Usually shared variables have the same address
and meaning in each thread. Process private segment typically contains the stack and
private data (including code).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

228

Threads are a way for a program to split itself into two or more simultaneously running
sub-tasks (for example, subsets of the iterations of a common parallel loop). They are
natural only in a concurrent programming paradigm. Threads are distinguished from
multitasking operating system processes in that processes are typically independent, carry
considerable state information, have separate data spaces, and interact only through
system-provided inter-process communication mechanisms. Multiple threads, on the other
hand, typically share the state information of a single process, and share memory and
other resources directly. They may interact through the shared memory, and appropriate
synchronization operations must control this interaction. A thread is atomic related to the
OS and sequential. However, from the object code processing point of view the thread is
not necessary sequential. Instruction Level parallelism could be exploited from a thread.
Cooperation and coordination among threads is accomplished by reading (loads) and
writing (stores) shared variables and pointers referring to shared addresses.

Figura preluata din cartea [Cul99] (v. bibliografia)


The shared address space programming model assumes one or more threads of control,
each operating in an address (data) space that contains a region shared between (all) threads
and may contain a region that is private for each thread.
Esena principial a thread-ului este aceea c execut o procedur, n cadrul aceluiai
proces, n paralel cu alte thread-uri. Contextul i zonele de date ale procesului sunt utilizate
n comun de ctre toate thread-urile componente. Contextul procesului conine informaiile
de localizare n memoria intern i informaiile de stare aferente execuiei procesului.
Singurul spaiu de memorie ocupat exclusiv de catre un thread este spaiul de stiv. Fiecare

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

229

thread i ntreine propriul context, cu elemente comune contextului procesului printe al


thread-ului.
Interconnection Networks (Network on Chip - NoC)
Computer power increases by the square of the number of nodes on the network. (Robert
Metcalfs Law)
A typical centralized (global) shared memory multiprocessor scheme is presented
below. The global memory might be physically distributed using many memory modules in
order to exploit parallel transactions.

Figura
The shared memory multiprocessors have a general interconnection network between
processors and memory. Any processor can access any memory location. Due to the
Moores law, in the last years the processors (cores) are interconnected within a single chip
(computer), illustrating the Network on Chip (NoC) concept. Usually NoCs are fine grained
and heterogeneous. In contrast, common networks are coarse grained (computers) and more
homogeneous.
The NoCs job is to transfer information to any source node to any desired destination
node. Performance means: small latency and a large number of concurrent transfers.
The NoC is composed of links and switches. A link is essentially a bundle of wires or
fibers that carries an analog signal [Cul99]. Obviously, there are necessary digital to analog
and analog to digital converters (transmitter receiver). Fiber optics transmits digital data
as pulses of light (LED, laser diode). A full duplex connection requires two fibers. The
diameter of the cable is limited to one wavelength of light. Fiber optics needs opticalelectrical and vice-versa conversions. The transmitter, link and receiver form a
communication channel. The link level protocol segments the stream of symbols crossing
a channel into logical units called messages or packets, useful for the routing algorithms.
Thus, a message represents the information sent between processors through an
interconnection network or a NoC. A switch consists of a set of input ports, a set of output

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

230

ports, an internal crossbar, internal buffering (FIFOs), and control logic to effect the
input/output connection at each point in the time.
The networks are classified in direct and indirect networks. In a direct network each node
has two functions: data processing and communication. In an indirect network each node
has only one function: data processing or data communication.
In order to send/receive messages between two computers it is needed a so-called transfer
protocol. For example, the following essential steps are necessary to send a message:

Copy the data from the memory to a dedicated OS transmission buffer.


The OS calculates a checksum of the useful data and includes it in the tail of the
message. After this it starts a time-out timer.
The OS send the message through the dedicated hardware-software components.

The following essential steps are necessary to receive a message:

The OS copies the message from the network interface to a dedicated reception
FIFO buffer. If this buffer is full the receiver must transmit a corresponding
message to the sender.
The received checksum is compared with the calculated one. If the comparison is
successful the receiver acknowledge to the sender through a special message. As a
consequence, the sender will reset its timer. Otherwise, it deletes the received
message and the sender will send it again when the time-out timer underflows (it
restarts the timer).
If the step 2 successfuly ends, the OS transfers the message to the memory (users
space).

The header may contain the sequence number of the message (in order to permit correctly
assemblation), routing information, etc.
Some of the most important characteristics of an interconnection network are the
followings:

ntrzierea - Latency, adic timpul de transmitere pentru un singur


cuvnt (mesaj)
Lrgimea de band, adic ce trafic de mesaje poate suporta reeaua
n unitatea de timp. The bandwidth (throughput) represents the
maximum rate at which the interconnection network (channel) can
propagate the information (bits/second).
Sender overhead (SO) represents the time for moving the message
from the CPUs memory to the FIFO transmission buffer (before
starting TF; see below).
Time of flight (TF) the time for the first sent bit of the message to
arrive to the receiver

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

231

Transmission time (TT) represents the period between when the


first bit of the message arrives at the receiver and when the last bit of
the message arrives at the receiver.
Receiver overhead (RO) - represents the time for moving the
message from the FIFO reception buffer to CPUs memory.
Total network latency=SO+TF+TT+RO
Gradul de conectivitate, adic numrul de vecini direci pentru
fiecare nod
Costul hardware, adic ce fracie din costul total al hardului
reprezint costul RIC
Fiabilitatea i funcionalitatea (arbitrare, ntreruperi).

An interconnection network or a NoC is characterized by:

The topology is determined by the physical interconnection structure of the


network graph. It may be regular or irregular.

The routing algorithm (RA) determines which routes messages may follow
through the NoCs structure. A RA is non-adaptive if the route taken by a
message is determined by its source and destination regardless of other traffic in
the network; the packet will follow its path regardless of whether a link along the
way is blocked. Minimal route could overload the network. As a consequence,
many adaptive routing algorithms were developed. Adaptive RAs allow the route
for a packet to be influenced by traffic it meets along the way. However, high
congestion degree could involve some problems. Deadlock might occur when a
packet waits for an event that cannot occur and therefore the packets can make no
forward progress (example, the queues are full and each is waiting for another to
make resources available). Sometimes we can have a kind of deadlock called
indefinite postponement meaning that a packet waits for an event that can occur
but never does. Livelock might occur when a packet never leads to its destination
through the routing algorithm. Thus Deadlock
Livelock but the reciprocal
implication is not always true. The solution to congestion problems is to interdict
new packets to enter in the NoC until the traffic reduces.

The switching strategy determines how the data in a message traverses its route.
Switching main aim consists in bandwidth improvement. It permits multiple pairs
of nodes to simultaneously communicate. In circuit switching the path from the
source to the destination is established and reserved until the message is
transferred over the circuit. The alternative is packet switching in which the
message is broken into a sequence of packets. A packet contains data, a header
(destination, routing and sequencing information and control information) and a
trailer (error checking code). Packet switching allows a better utilization of
network resources because links and buffers are only occupied while a packet is
traversing them. In the so called source-based routing the message statically
contains the routing path. In the so called destination-based routing the messages
header contains the destination address. In this case each switch must choose a

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

232

path in order to send further the message. Thus it is necessary a routing table
lookup on every packet in order to decide how to route the packet. There are two
main strategies: store-and-forward and cut-through routing or wormhole routing
([Cul99], pg. 757). In the store-and-forward case the switch waits for receiving
the whole message before to send it to the next switch. Alternatively, in the cutthrough routing case, the message is pipelined through the sequence of switches
belonging to the routing path. Therefore, cut-through strategy achieves lower
latency by choosing the routing path on the first flit (flow control units, dividing a
packet), called head flit, from the message. The tail flit will release the path
(channel) reservation. Also it reduces buffering overhead comparing with storeand-forward. Unfortunately it increases the message blocking probability
especially under high traffic conditions.

The control flow mechanism determines when the packet moves along its route.
It is necessary whenever two or more messages attempt to use the same network
resource at the same time. One of the packets could be stalled in place, shunted
into buffers or detoured to an alternate route. A collision is happen when two or
many nodes send at the same time. The network interface can detect any resulting
collision by listenining the channel (carrier sensing). In this case, each involved
node waits a random time before resending. Another approach consists in passing
a token between the nodes. A node can send a message only when it gets the
token.

The interconnection structures range from a simple bus to highly concurrent multistage
networks capable of performing all possible permutations of its inputs. Topologies of the
interconnection network:

Crossbar switch limited by the cost of scaling. The cost increases as the square
of the number of ports.

Multistage interconnections. The cost increase more slowly with the number of
ports. On the other hand it has an increased latency and decreased bandwidth per
port if all are used at once.

Fat tree represents a tree with increased bandwidth higher in the tree, so
bandwidth between each level is constant (in a normal tree the bandwidth is
reduced in the higher levels)

Fully connected networks, linear arrays and rings, multidimensional meshes


and tori, trees, hypercubes

Bus interconnection obviously it doesnt scale. 32 is the maximum number of


processors that can usefully be connected to a single bus.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

233

Topologii NoC-uri

1. SMM pe bus comun (RIC static)


Caracterizat de faptul c RIC este un simplu bus comun partajat n
timp de ctre procesoare. Este cea mai simpl arhitectur, dar conflictele
poteniale ale procesoarelor (masterilor) pe busul comun, pot fi multiple.
Desigur, exist un singur master activ pe bus la un moment dat. Busul
comun i memoria global (slave) sunt partajate n timp de ctre masteri.
Resursele locale ale masterilor - memorii cache si memorii locale dar si
porturi de I/O - au rolul de a diminua traficul pe busul comun. Accesul pe
bus se face prin intermediul unui arbitru de prioriti, centralizat sau
distribuit.
Arhitectura implic dificulti tehnologice legate de numrul maxim
de masteri cuplabili (n practic pn la 32), reflexii i diafonii ale
semnalelor pe bus. Cum capacitile i inductanele parazite cresc
proporional cu lungimea busului, rezult c acesta trebuie s fie relativ
scurt.
Exist arhitecturi standardizate de SMM pe bus comun (VME
dezvoltat de Motorola pe p MC680X0, MULTIBUS Intel pentru
procesoare I - 80X86).
2. SMM n inel (token ring) reea static

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

234

Reea Token-Ring

Arhitectura este standardizat conform standardelor IEEE 802.5. Este


utilizat cu precdere n sistemele slab cuplate (reele locale). Protocolul de
comunicaie are la baz trimiterea unei informaii binare speciale, numit
jeton (token), de la un procesor la cellalt, n mod secvenial. Un procesor
Pi, nu poate s trimit un mesaj dect dac a recepionat jetonul. Dac un
procesor dorete s trimit un mesaj la un alt procesor, va atepta
recepionarea jetonului, apoi va modifica un bit din jeton iar apoi va
transmite mesajul cu jetonul modificat pe post de antet. Din acest moment,
nu mai circul jeton prin structur i deci toate emisiile de mesaje sunt
inhibate. Dup ce procesorul destinaie a recepionat mesajul (date sau
comenzi), l va trimite mai departe, spre procesorul surs. Conform
standardului, procesorul surs va insera din nou jetonul n structur n
momentul n care i-a terminat de transmis mesajul i a recepionat
nceputul propriului mesaj emis.
Eficiena scade proporional cu numrul procesoarelor din reea.
3. SMM cu interconectare crossbar (reea dinamic)
Aceast arhitectur deine complexitatea cea mai ridicat dintre
arhitecturile de SMM, n schimb conflictele procesoarelor la resursele de
memorie comun partajat sunt minime. Comunicaia ntre orice pereche
procesor memorie este ntrziat n nodul de conexiune aferent. De
remarcat c pot avea loc simultan pn la N accese ale procesoarelor la
memorie, n ipoteza n care nu exist dou procesoare care s acceseze
acelai modul de memorie. Practic se implementeaz N! funcii bijective de
comunicaie definite pe mulimea celor N procesoare, cu valori n mulimea
celor N module de memorie. Pentru evitarea conflictelor de acest gen, se
ncearc atunci cnd este posibil mprtieri favorabile ale informaiei n
modulele de memorie global. De exemplu n aplicaiile pe vectori, dac

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

235

acetia au pasul 1 atunci scalarii succesivi sunt situai n blocuri succesive


de memorie, rezultnd minimizri ale conflictelor.

Reea crossbar

Dei cea mai performant, arhitectura devine practic greu realizabil


pentru un numr N ridicat de procesoare, din cauza costurilor ridicate (N2
noduri).
4. SMM cu reele de interconectare dinamice multinivele
Reprezint un compromis ntre SMM unibus i cele de tip crossbar.
Elementul principal al RIC l constituie comutatorul (complex switch). n
general sunt folosite comutatoare cu dou intrri i dou ieiri. Aceste
comutatoare pot lucra direct sau n cruce, adic (AC, BD) respectiv
(AD, BC).

Figura 8.5. Comutator de reea

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

236

Se prezint mai jos un SMM avnd o reea de interconectare pe trei


niveluri, ntr-o topologie BASELINE, cu opt procesoare (P0, P7) i opt
module de memorie (M0, M7).

Figura 8.6. Interconectare Baseline

Cu precizarea c Ckj = 0 semnific faptul c switch-ul Ckj lucreaz n


linie, iar Ckj = 1 faptul c lucreaz n cruce, k={1,2,3} (coloane) iar
j={1,2,3,4}(rnduri), n continuare se prezint grafurile de comunicare
total procesoare memorii pentru reeaua BASELINE.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

Figura 8.7. Grafuri comunicaie Baseline

237

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

238

Exemplu: F(100) reprezint graful asociat reelei de interconectare


procesoare memorii, considernd c switchurile C0 lucreaz n cruce iar
C1, C2 lucreaz n linie.
Spre deosebire de arhitectura crossbar, n cazul acestor RIC uri, nu
este posibil implementarea oricrei funcii bijective de comunicaie f:{P0,
P1,..., P7}{M0, M1,..., M7}, din cele 8! funcii bijective posibile, ci doar a
celor 8 funcii de mai sus.
De remarcat ns c n acest caz, complexitatea comutatoarelor este
mai mare dect n cazul crossbar, n schimb sunt mai puine. Mai precis,
RIC crossbar are N2 comutatoare elementare n timp ce o astfel de reea are
doar 4 log 2 N

N
= 2Nlog 2 N < N 2 . n schimb, o conexiune procesor2

memorie este ntrziat aici pe 3 nivele de comutatoare elementare i nu pe


unul singur ca n cazul crossbar.
Un dezavantaj important al acestor arhitecturi, zise i arii de
procesoare l constituie posibilitatea unei ci de comunicare procesor
memorie de a bloca alte ci necesare. De exemplu n cazul BASELINE,
calea P0 M7 blocheaz interconectarea simultan a oricrora dintre
urmtoarele conexiuni: P1 M4, P1 M5, P1 M6, P1 M7, P2 M6, P3 M6
etc. Rezult deci c o asemenea RIC este mai puin potrivit pentru
transferuri prin comutare de circuite. n cazul unei reele cu comutare de
pachete, blocarea const n ateptarea pachetului ntr-un buffer asociat
comutatorului, pn cnd se va ivi posibilitatea trimiterii sale spre urmtorul
nivel de comutatoare. Desigur, exist i alte topologii de reele multinivel
(BANYAN, DELTA etc.).
5. SMM interconectate n hipercub (static)

Figura 8.8. Interconectare (hiper)cub

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

239

n hipercubul k dimensional (binary k-cube) exist N = 2k noduri


(procesoare), fiecare de gradul k, adic avnd legturi directe cu k
procesoare. Dac tratm fiecare etichet a nodurilor ca o valoare binar
semnific/nd adresa acestui nod, nodurile conectate direct difer printr-o
singur coordonat (adiacent codificate). Altfel spus, cei k vecini ai unui
procesor Pj au etichete binare adiacente cu cea a lui Pj. Pentru dimensiuni
mai mari dect 3 ale lui k, diagrama de interconectare devine mai laborioas
dar ideea rmne aceeai. Considering a source node having its binary
address S and a destination node having its binary address D it is defined the
relative address as: R(S, D)=S XOR D. This relative address R(S, D)
represents the dimensions that must be crossed to travel from node S to node
D and it defines the routing algorithm. The length of the route is equal with
the number of logical ones in R(S, D). As an example, considering a simple
cube (k=3), source node S=2=0102 and destination node D=7=1112. In this
case R(S, D)=010 XOR 111 = 101. The two logical ones in the obtained
result (101) show which bits need to be changed in order to route the
message from S to D. This means that there are two routing possibilities:
S=010 011 D=111 or S=010 110 D=111. Cteva companii incluznd
INTEL, NCUBE, FPS etc. au studiat i au implementat maini n aceast
reea.
6. Fat tree
Fat tree is a tree with increased bandwidth higher in the tree; so bandwidth between each
level is constant rather than reduced in the top levels, as in a normal tree. For example in a
N-ary normal tree BW(Lk)=N*BW(Lk+1), where BW(Lk) is the bandwidth in the level k. In
a N-ary fat tree BW(Lk)=BW(Lk+1). A (fat) tree has a logarithmic depth. In a fat tree,
adding a new level at the top of the tree doubles the number of nodes. Between any two
nodes (processors) there are multiple communication paths. This is an advantage in order to
avoid congestions and also to implement some fault tolerance facilities. The well known
CM-5 supercomputer (Thinking Machine Co, 1991) interconnected up to 1024 processors
through a fat tree interconnect.
The diameter of a NoC is the length of the maximum shortest path between any two nodes.
The routing distance between a pair of nodes is the number of links traversed en route;
obviously, it is not necessary the shortest path.
Symmetric shared-memory MultiProcessor (SMP) is a shared global memory
multiprocessor where the cost of accessing a memory location is the same for all
processors. Therefore it has uniform access cost (Uniform Memory Access - UMA). In
other words, SMP is a multiprocessor computer architecture where two or more identical
processors are connected to a single shared main memory. Most common multiprocessor
systems today use SMP architecture.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

240

The question is: what is required to scale the design to a large number of processors? An
alternative approach to SMPs is to interconnect complete processors, each with a local
memory. This is a non-uniform memory access - NUMA approach or a distributed
shared-memory architercture (see next Figure); the local memory controller determines,
on the basis of the address, whether to perform a local memory access or a message
transaction with a remote memory controller. In the second case a message is sent to the
controller in the remote memory to access the data. Also, NUMA is easier to scale. The
Figure itself might have two distinct semantics: a shared memory system - if all the
memory modules belong to the same global logical address space - or even a message
passing system, if each memory module is a local memory attached to the
corresponding processor (distributed system, network, where it is not a logically
shared memory.)

Figura: Processor, Memory, biported, Interconnection Network (IN)


Accesses to private data, such code and stack, can be often performed locally. The
bandwidth demand placed on the network is reduced. The NUMA approach has become
more prevalent at a large scale because of its inherent performance advantages.

The cache coherence problem


When a write to a shared data occurs there are necessary to assure the coherence to
ensure that later reads by other processors get the new data rather than the old data that
was replicated into their caches. Replication avoids unnecessary communications.
Cache coherence in multiprocessors basically means that a read shall return the value of
the latest write as defined by the partial order (dependence order) of memory operation in a
valid execution. Cache coherence is maintained if a read always returns the latest write and
the latest write is globally performed (meaning that no processor can access the old data
value). Memory (cache) coherence might be violated in a multiprocessor with private
caches. The problem is caused by shared read-write data structures.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

241

In order to enforce cache coherence in a multiprocessor system it is necessary to make


updates to a location appear atomic.
A Solution: Write-invalidate
All other cache copies are invalidated on a write. Most snoopy cache policies are write
invalidate.
Main idea: invalidate all copies (if any) before updating local copy. Invalidations and
cache misses are broadcast on the bus. Caches and memory snoop the bus and take
appropriate action. Se va considera un exemplu care arat cum 2 procesoare pot "vedea" 2
valori diferite pentru aceeai locaie (X) de memorie global, adic un caz tipic de incoeren a
unei valori globale shared.

Pas Eveniment

Coninut cache Coninut cache Coninut Memorie


CPU1
CPU2
global (X)
1

CPU1 citete X

2
3

CPU2 citete X
CPU1 scrie 0 n X (WT)
WB

1
0
0

1
1
1
1

1
0
1

S-a presupus c iniial, nici una din cele 2 cache-uri nu conine


variabila global X i c aceasta are valoare 1 n memoria global. De
asemenea s-au presupus cache-uri de tip WriteThrough - WT (un cache
WriteBack - WB ar introduce o incoeren asemntoare). n pasul 3 CPU 2
are o valoare incoerent a variabilei X.
Definiie:
Un SMM este coerent dac sunt ndeplinite urmtoarele 3 condiii:
1. Un procesor P scrie variabila X. Dac dup un timp, P va citi
variabila X i dac ntre cele 2 accese la memorie ale lui P nici un
alt procesor nu a scris n X, atunci P va citi aceeai valoare a lui X
cu cea scris.
2. Un procesor Pi scrie variabila X. Dac dup un timp, un alt
procesor Pj va citi variabila X i dac ntre timp nici un alt procesor
nu a scris n X, atunci Pj va citi aceeai valoare ca cea scris de
ctre Pi. Condiia nu e triviala, avnd n vedere exemplul de mai
sus (CPU1 scrie "0", CPU2 citete "1").
3. Scrierile la aceeai locaie (X) trebuie serializate prin arbitrare. De
exemplu dac P1 scrie 1 la adresa X i apoi P2 scrie 2 la aceeasi

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

242

adresa, niciodat un procesor nu va putea citi nti X=2 i apoi


X=1.
O nerespectare a unuia din cele 3 principii enuntate mai sus, poate
conduce la incoerena sistemului de memorie.
Fiecare dintre cache-urile care conine copia unui bloc din memoria
global, conine de asemenea "starea" acelui bloc d.p.d.v. al procesului de
partajare (partajat - "read-only", exclusiv - "read/write", invalid). Aadar, nu
exist o centralizare a informaiei de stare a blocului. Fiecare controller de
cache, monitorizeaz permanent busul comun pentru a determina dac
cache-ul respectiv conine sau nu conine o copie a blocului cerut pe busul
comun (snooping protocol). n cadrul acestui protocol de monitorizare ,
exist 2 posibiliti de meninere a coerenei funcie de ceea ce se
ntmpl la o scriere:
1) Write Invalidate (WI). Procesorul care scrie determin ca toate
copiile din celelalte memorii cache s fie invalidate (se pune bitul
de validare V=0 n cadrul blocului respectiv din cache orice
acces la acel bloc va fi cu MISS), nainte ns ca el s-i modifice
blocul n cache-ul propriu. Respectivul procesor va activa pe busul
comun un semnal de invalidare bloc i toate celelalte procesoare
vor verifica prin monitorizare dac dein o copie a blocului; dac
DA, trebuie s invalideze blocul care conine acel cuvnt. Evident
c un anumit bloc invalidat n cache, nu va mai fi scris n memoria
global la evacuare. Astfel, WI permite mai multe citiri simultane a
blocului dar o singur scriere n bloc la un anumit moment dat. Este
foarte des implementat n SMM.
2) Write Broadcast (Write Update - WBC). Procesorul care scrie
pune data de scris pe busul comun spre a fi actualizate toate copiile
din celelalte cache-uri. Pentru asta, este util s se tie dac un
cuvnt este sau nu este partajat (coninut n alte cache-uri dect cel
al procesorului care scrie). Dac nu e partajat ntr-un anumit cache,
evident c actualizarea (updating) sa n acel cache este inutil. Este
mai puin utilizat n SMM.
Obs. Ambele strategii de meninere a coerenei (WI, WBC) pot fi asociate
cu oricare dintre protocoalele de scriere n SMM (Write Through
respectiv Write Back).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

Pas

Activitate procesor

Activitate
bus comun

pe Loc.X
cache
CPU1

CPU1 citete X

Cache Miss (X)

2
3

CPU2 citete X
CPU1 scrie 1 n X

Cache Miss (X)


Invalidare X

0
1

CPU2 citete X

Cache Miss (X)

Loc.X
cache CPU2

243

Loc. X
Memorie
global
0
0

0
INV.
1

0
0
0

Coerena prin protocol WI

n pasul 4, CPU1 aborteaz ciclul de citire al lui CPU2 din memoria


global i pune pe busul comun valoarea lui X ("1", copie exclusiv). Apoi,
scrie (actualizeaz) valoarea lui X n cache-ul lui CPU2 i n memoria
global iar X devine o variabil partajat. Mai jos, se prezint un exemplu
de protocol de coeren WBC, bazat pe un protocol de scriere n cache de tip
"Write Through":
Pas Activitate procesor

0
1
2
3
4

CPU1 citete X
CPU2 citete X
CPU1 scrie 1 n X
CPU2 citete X
(HIT)

Activitate pe bus Loc.X Loc.X


Loc. X
comun
cache cache CPU2 Memorie
CPU1
global
0

Cache Miss (X)


0
0

Cache Miss (X)


0
0
0
Write update X
1
1
1

Coerena prin protocol WBC

Diferenele de performan ntre protocoalele de coeren WI i WBC,


provin n principal din urmtoarele caracteristici:
a) Dac acelai CPU scrie de mai multe ori la aceeai adres fr
apariia intercalat a unor citiri din partea altor procesoare sunt
necesare scrieri multiple pe busul comun n cazul WBC, n schimb
e necesar doar o invalidare iniial n cazul WI.
b) WBC lucreaz pe cuvinte (deci la scrieri repetate n acelai bloc
acceseaz repetat busul comun), n timp ce WI lucreaz pe bloc (la

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

244

scrieri repetate ntr-un bloc, determin doar o invalidare iniial a


acelui bloc din celelalte cache-uri care l conin).
c) ntrzierea ntre scrierea unui cuvnt de ctre un procesor i citirea
respectivei valori de ctre un alt procesor, este n general mai mic
ntr-un protocol WBC (hit) dect ntr-unul WI (miss).
d) Strategia WI, prin invalidarea blocurilor din celelalte cache-uri,
mrete rata de miss. n schimb, strategia WBC mrete traficul pe
busul comun.
Actualmente, strategia WI este preferat n majoritatea
implementrilor. n continuare, se va considera un protocol de coeren WI
i unul de scriere de tip WB. Pentru implementarea protocolului WI,
procesorul acceseaz busul comun i distribuie pe acest bus, adresa de acces
spre a fi invalidat n toate copiile partajate. Toate procesoarele,
monitorizeaz continuu busul, n acest scop. Dac adresa respectiv este
caat, atunci data aferent este invalidat.
n plus fa de procesele de invalidare, este de asemenea necesar n
cazul unui miss n cache, s se localizeze data necesar. n cazul WT este
simplu pentru ca cea mai recent copie a blocului respectiv se afl n
memoria global. Pentru un cache "Write Back" ns, problema este mai
complicat ntruct cea mai recent valoare a datei respective se afl ntr-un
cache mai degrab dect n memoria global. Soluia const n urmtoarea:
dac un anumit procesor deine o copie a blocului accesat, avnd biii D=1
(dirty) i V=1 (valid), atunci el furnizeaz pe busul comun data respectiv i
aborteaz accesul la memoria global (vezi pasul 4, tabel sus, pagina
anterioar).
n cazul unei scrieri cu MISS (WI, WB), invalidarea blocului n care
se scrie, nu are sens s se fac dac nici un alt cache nu l conine. Rezult
c e necesar s se tie starea unui anumit bloc (partajat/nepartajat) n orice
moment. Aadar n plus fa de biii de stare D i V, fiecare bloc mai poate
deine un bit P (partajat sau nu). O scriere ntr-un bloc partajat (P=1),
determin invalidarea pe bus i marcheaz blocul ca "privat" (P=0), adic
respectivul cache deine copia exclusiv a acelui bloc. Procesorul respectiv
se numete n acest caz, proprietar (owner). Dac ulterior, un alt procesor
citete blocul respectiv, acesta devine din nou partajat (P=1).
Un protocol de coeren (WI,WB) se implementeaz printr-un
controller de tip automat finit, dedicat, plasat n fiecare nod. Controllerul
rspunde att la cererile CPU-ului propriu ct i la cererile de pe busul
comun. Ca urmare a acestor cereri, controllerul modific "starea" blocului
din cache-ul local i utilizeaz busul pentru accesarea sau invalidarea
informaiei. n principiu, un bloc din cache poate fi ntr-una din urmtoarele

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

245

3 stri: invalid, partajat (read only) i exclusiv (read - write). Pentru


simplitate, protocolul implementat nu va distinge ntre un "write hit" i un
"write miss" la un bloc "partajat" din cache; ambele se vor trata ca "write
miss"-uri. Cnd pe busul comun are loc un "write miss", fiecare CPU care
conine n cache o copie a blocului accesat pe bus, o va invalida. Dac
blocul respectiv este "exclusiv" (doar n acel cache), se va actualiza ("write
back"). Orice tranziie n starea "exclusiv" (la o scriere n bloc), necesit
apariia unui "write miss" pe busul comun, cauznd invalidarea tuturor
copiilor blocului respectiv, aflate n alte cache-uri. Apariia unui "read miss"
pe bus, la un bloc exclusiv, va determina punerea lui ca "partajat" de ctre
procesorul proprietar.
Problems: If two processes update a variable alternately, data will continually migrate
between two caches with a high miss rate (this is known as the ping-pong effect.) If one
process updates a data structure which many processes use, write-invalidate will also
perform badly.

A Snooping Protocol (Write Invalidate, Write Back) Exclusive


(Modified), Shared, Invalid ESI, known as MSI protocol, too. Every
cache line is marked with one of the four following states (coded in two
additional bits):

E Exclusive (Modified): The cache line is present only in the current cache.

S - Shared: Indicates that this cache line may be stored also in other caches of the
machine.

I - Invalid: Indicates that this cache line is invalid (after a write).

Source

Request
type

CPU

Read hit*

Read miss

Read miss

State
of
the
addressed cache
block
Shared
(read
only)
or
Exclusive
(Owner,
read/write)
Invalid

Shared (the data


is in other caches)

Function, explanations, comments

Read data from the cache. Obviously, the


block will transit in the same state.

Place Read_miss signal on the bus. The


block will transit in Shared state (even if it
will be loaded from the main memory and not
from a cache). (Activating Read_miss signal
on the bus will transit all the valid block
copies in the Shared state.)

Interference
(conflict)
miss;
place
Read_miss signal on the bus. The block

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

BUS**

Read miss

Exclusive (data in
an other cache)

Write hit*

Exclusive

Write hit*

Shared

Write miss

Invalid

Write miss

Shared

Write miss

Exclusive

Read_miss

Shared

Read_miss

Exclusive

246

(having new data) will transit in the same


Shared state (trivial transition)

Care cache ii da data? Arbitrare


Fiind in Shared state nu e necesara
evacuarea prealabilaasta se va face
numai in starea Exclusive (v.
urmatoarea)
Conflict miss; write back the block in the
main memory if its Dirty_bit=1 (otherwise, it
will be lost; see further the MESI protocol).
After this, place Read_miss signal on the bus.
The block will transit in the Shared state.

Write data in caches block. The block will


transit in Exclusive state (no effective
transition).

Place Write_miss (yes!) signal on the bus


(this signal will invalidate all the valid copies
stored in other caches) The block will transit
in Exclusive state.

Place Write_miss signal on the bus. The block


will transit in Exclusive state (after it will be
allocated from the next level cache or from
the main memory).
Conflict miss; (Eviction); place Write_miss
signal on the bus. The block will transit in
Exclusive state (after it will be allocated
from the next level cache or from the main
memory).

Conflict miss; Write back in the main memory


the addressed bock (this operation might be
avoid in MESI protocol; see further). Then
place Write_miss signal on the bus. The block
will transit (trivial) in the same Exclusive
state.
No action (if it attempts to share data, it will
produce conflicts on the common bus with
other sources
arbitration); allow to the
cache having an Exclusive copy to service
read miss (thus a unique provider);
otherwise permit to main memory to offer
the data The next sate will be the same
(Shared)

See MOESI!
Attempt to share data (unique source); place

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

247

the addressed cache block (momentary in


Exclusive state) on the bus and change its
state to Shared

Write_miss Shared
Attempt to write a shared block; invalidate
the block (V=0)

Write_miss Exclusive
Attempt to write block that is exclusive
elsewhere; write back the cache block in the
main memory and make it Invalid in the
(owner) cache.

*
During a hit access, obviously, the block cant be invalid (V bit=0)
**
Read_miss or Write_miss to an Invalid block No action
All these actions are resumed in the following finite state machine representations.

Figura preluata din cartea Hennessy si Patterson [Hen07] (v.


bibliografia)

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

248

MESI protocol involves also that every cache line is marked with one of
the four following states (coded in two additional bits):

M - Modified: The cache line is present only in the current cache, and it is dirty;
thus it has been modified from the value in main memory. The cache is required to write
the data back to main memory at some time in the future (evicting process), before
permitting any other read of the (no longer valid) main memory state.

E - Exclusive: The cache line is present only in the current cache, but is clean,
thus it matches main memory. This means that when the block will be evicted it will be not
necessary to write it back to the main memory. This represents an advantage comparing
with the previous presented ESI MSI protocol.

S - Shared: Indicates that this cache line may be stored in other caches of the
machine.

I - Invalid: Indicates that this cache line is invalid.


Therefore, a MESI protocol might be equivalent with an MSI protocol if the blocks
belonging to the caches have an associated Dirty bit.

MOESI protocol involves also that every cache line is marked with one of
the five following states (coded in three additional bits):

M - Modified: The cache line is present only in the current cache, and it is dirty; it
has been modified from the value in main memory. The cache is required to write the data
back to main memory at some time in the future (evicting process), before permitting any
other read of the (no longer valid) main memory state.

O - Owned: A cache line in the owned state holds the most recent correct copy of
the data. The owned state is similar to the shared state in that other processors can hold a
copy of the most recent, correct data. However, unlike the shared state the copy in main
memory can be incorrect. Only one processor can hold the data in the owned state
all other processors must hold the data in the shared state. Owned =Modified AND
Non-Shared. States M and O are both Dirty but M is exclusively Dirty. The automata will
transit in O state from M state in a Read_miss case on the bus. (Se ajunge in O din M
cand un alt procesor vrea sa citeasca valoarea. Procesorul care i-o da trece M O iar
cel care o citeste trece in S. Avantajul starii O: se stie clar care procesor furnizeaza
valoarea, fara arbitrare; altfel, nu s-ar sti, celelalte copii, din celelalte cache-uri, fiind
Shared.)
Question: Why the automata transits in S state from E state when a Read_miss occurs
on the bus instead of transiting in O state? Debate!

E - Exclusive: The cache line is present only in the current cache, but is clean,
thus it matches main memory. This means that when the block will be evicted it will be not
necessary to write it back to main memory.

S - Shared: Indicates that this cache line may be stored in other caches of the
machine. The copy in main memory is also the most recent, correct copy of the data (if no
other processor holds it in owned state).

I - Invalid: Indicates that this cache line is invalid.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

249

Livelocks should occur in a snooping protocol if it is not carefully designed. Suppose


multiple processors quite simultaneously write to the same shared memory location and,
initially, no processor has cached a copy of that data. In a defavourable case the following
scenario would be possible: a certain processor (P1) that attempts to write the
corresponding block, firstly brought the block in its cache, put it in the Modified state and
invalidates all the potential copies belonging to other processors. Now, P1 should try to
effectively write the fetched block but, before it completes its writing process, the block is
invalidated by another processor (P2) that attempts to write, too. Now P1s write generates
a miss and the cycle is repeating indefinitely. To avoid such a livelock, after a processor
(P1) obtaines exclusive ownership its write process must be atomic and therefore it must be
allowed to complete the write process before loosing the exclusive ownership.
A Directory based Protocol (Write Invalidate, Write Back)
A snooping protocol requires communication with all caches on every cache miss,
including writes of potentially shared data. The absence of a centralized structure to track
the state of the caches is advantageous because it allows it to be inexpensive. On the other
hand it is not scalable. Therefore it is necessary to develop scalable shared memory cache
coherence protocols, like the so called directory based protocols.
A directory tracks the state of each block that may be cached (which caches have copies of
the block, if the block is dirty or not, etc.). Thus, each memory block has an associate entry
in the directory structure. It seems that the number of entries is proportional to the product
of the number of processors and the number of memory blocks. For more than 200
processors the directory overhead starts to be intolerable. Thus, for larger multiprocessors,
there are needed methods to allow the directory structure to be efficiently scaled. The
methods that have been used either try to keep information for fewer blocks (e.g., only
those in caches rather than all memory blocks) or try to keep fewer bits per entry by using
individual bits to stand for a small collection of processors. To prevent the directory from
becoming the bottleneck, the directory is distributed along with the memory, so that
different directory accesses can go to different directories, just as different memory requests
go to different memory modules. A distributed directory retains the characteristic that the
sharing status of a block is always in a single known location. This property is what allows
the coherence protocol to avoid broadcast. Next Figure shows how the distributed-memory
multiprocessor looks with the directories added to each node. Obviously, a shared block has
always an unique directory entry. A directory protocol also can be used to reduce the
bandwidth demands in a centralized shared-memory machine [Hen07].

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

250

Fig. preluata din cartea Hennessy si Patterson [Hen07] (v. bibliografia)


A directory is added to each node to implement cache coherence in a distributedmemory multiprocessor. Each directory is responsible for tracking the caches that share
the memory addresses of the portion of memory in the node. The directory may
communicate with the processor and memory over a common bus, as shown, or it may have
a separate port to memory, or it may be part of a central node controller through which all
intranode and intemode communications pass. Citat din [Hen07]
Just as with a snooping protocol, there are two primary operations that a directory protocol
must implement: handling a read miss and handling a write to a shared, clean cache block.
(Handling a write miss to a block that is currently shared is a simple combination of these
two.) To implement these operations, a directory must track the state of each cache block.
In a simple protocol, these states could be the following:

SharedOne or more processors have the block cached, and the value in memory
is up to date (as well as in all the caches).
UncachedNo processor has a copy of the cache block.
ModifiedExactly one processor has a copy of the cache block, and it has written
the block, so the memory copy is out of date. The processor is called the owner of
the block.

In addition to tracking the state of each potentially shared memory block, we must track
which processors have copies of that block, since those copies will need to be invalidated
on a write. The simplest way to do this is to keep a bit vector for each memory block. When
the block is shared, each bit of the vector indicates whether the corresponding processor has

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

251

a copy of that block. We can also use the bit vector to keep track of the owner of the block
when the block is in the exclusive state. For efficiency reasons, we also track the state of
each cache block at the individual caches.
The states and transitions for the state machine at each cache are identical to what we used
for the snooping cache, although the actions on a transition are slightly different. The
process of invalidating or locating an exclusive copy of a data item are different, since they
both involve communication between the requesting node and the directory and between
the directory and one or more remote nodes. In a snooping protocol, these two steps are
combined through the use of a broadcast to all nodes. Citat din [Hen07]
Write-update (Write broadcast)
All other cache copies are updated on a write.
Main memory may or may not be updated.
Snoopy cache policies could be modified to write-update.
Problems:
May result in many pointless updates to data structures left behind in
caches by processes that have migrated to other processors.
Particularly a problem with large caches where data may linger for some
time before being flushed.
A multi-core CPU (or chip-level multiprocessor, CMP) combines two or more
independent cores into a single package comprised of a single piece silicon integrated
circuit, called die, or more dies packaged together. A multi-core microprocessor
implements multiprocessing in a single physical package. Cores in a multicore device may
share a single coherent cache at the highest on-device cache level (e.g. L2 for the Intel Core
2) or may have separate caches (e.g. current AMD dual-core processors).
Latentele miss-urilor cache to cache mai mici decat la clasicele SMP, largimea de banda a
bus-urilor de interconectare mai mare etc. The processors also share the same interconnect
to the rest of the system. A system with N cores is effective when it is presented with N
or more threads concurrently.
We need a parallel programming language showing how a parallel algorithm might be
executed by a given parallel processor. Some HLL language extensions (pragmas OpenMP) useful for describing a multiprocessor algorithm are [Jor03]:
-

fork <label>; start a new process executing at <label>. The original process
continues with the statement following the fork.
join <integer>; join <integer> processes into one. The original process will
proceed only after the specified number of processes have all executed join.
shared <variable list>; make the storage class of the variables shared. The
declared variables are shared by all processes.
private <variable list>; make the storage class of the variables private. Each
process has its own private copy of the variable referred to by that name.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

A Parallel Program Example [Jor03]:


N 1

/* C :=AxB,

cij = aik bkj */


k =0

252

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

253

private i, j, k;
shared A[N,N], B[N,N], C[N,N], N;
/* Start N-1 new processes, each one for a different C column. */
for j := 0 step 1 until N-2 fork MULCOL;
/* The original main process reaches this point and works for the last C column. */
j := N-1;
MULCOL:
/* Executed by all N processes, for j = 0 to N-1, each one working asynchronously to a
different C column. SPMD concept */
for i := 0 step 1 until N-1
begin
C[i,j] := 0;
for k := 0 step 1 until N-1
C[i,j] := C[i,j] + A[i,k] * B[k,j];
end
join N; /* Join all the N processes into one. */

Another Parallel Program Example (adapted from [Jor03])


The n-1st order linear recurrence system of n equations (general linear recurrence) has the
following solutions:
x1 = c1
x2 = c2 + a21x1
x3 = c3 + a31x1 + a32x2
x4 = c4 + a41x1 + a42x2 + a43x3, and so on
The current row xk+1 is RAW dependent by the previous one xk. A preliminary parallel
pseudo-code could be the following:
shared n, a[n,n], x[n], c[n];
private i, j;
for i=1 step 1 until n-1 fork DOROW; /* a process to do each row x[i]*/
i=n; /*the initial process works for i=n.*/
DOROW:
x[i] = c[i];//parallelism n threads
for j=1 step 1 until i-1
x[i] = x[i] + a[i,j]*x[j];//paralelism n threads
join n;
Some Problems:

Processes must receive a private copy of i, with distinct values for each process, at
the time they are forked. It is not clear how it should do this.
All processes must proceed together through the loop on j. The final value of an
element x[k] must be available before it is accessed by processes having values of
i>k (RAW conditions). Therefore, it is necessary a data- synchronization (see
below). Otherwise, the program should be incorrectly processed. There is nothing
in the program to guarantee this.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

254

join n, tells how many processes to wait for, without identifying them.
These problems must be clarified in a refined programs version.

The mechanisms of parameter passing for function call in sequential languages can also be
used for process instantiation in parallel languages. The variable i should be passed by
value to the new created process.
Create/Call create starts a new instruction stream executing the procedure in parallel
with the process doing the create while the latter process continues without waiting for a
return. A return in a procedure that can be invoked by either a call or create is interpreted
as quit (create; otherwise the n-1 procedures will inadequately return in the main program)
or sequential return (call). This form of process termination makes it necessary to use an
explicit counter to determine when all processes have completed.
shared n, a[n,n], x[n], c[n], done;
private i;
done = n; /* no. of processes*/
for i=1 step 1 until n-1
create dorow (i, done, n, a, x, c); /*create (n-1) threads.*/
i=n;
call dorow (i, done, n, a, x, c); /*call the n-th thread.*/
while (done 0); /*loop until all n thread instances finished.*/
procedure dorow (value i, done, n, a, x, c)
shared n, a[n,n], x[n], c[n], done;
private i, j;
x[i] = c[i];
for j=1 step 1 until i-1
x[i] = x[i] + a[i,j]*x[j];
done = done -1;
return; /* quit-create or return-call*/
end procedure
Synchronization
Data-based synchronization (Producer/Consumer Synchronization) associates a one
bit full/empty state with each shared variable). It uses synchronized read and write
operations to access the value of the shared variable only when it has a specified state.
Assumed syntaxes for producer/consumer variables:
produce <shared var> = <expression>; it waits for the variable to be empty (consumed),
writes its value, and sets it full (new value!).
consume <shared var> into <private var>; it waits for the variable to be full (produced),
reads its value, and sets it empty (it could be now produced by another write).
copy <shared var> into <private var>; it waits for full and reads, but does not set empty.
void <shared var>; it initializes the shared variables state to empty.
shared n, a[n,n], x[n], c[n], done;
private i;

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

255

done = n; /* no. of processes*/


for i=1 step 1 until n-1
{void x[i];
create dorow (i, done, n, a, x, c); } /*create n-1 procedures.*/
i=n;
void x[i];
call dorow (i, done, n, a, x, c); /*call the n-th process.*/
while (done 0); /*loop until all n procedure instances finished.*/
procedure dorow (value i, done, n, a, x, c)
shared n, a[n,n], x[n], c[n], done;
private i, j, sum, priv;
sum = c[i];
for j=1 step 1 until i-1
{copy x[j] into priv; /*get x[j] when it is available.*/
sum = sum + a[i,j]*priv; }
produce x[i] = sum; /*make x[i] available to others.*/
done = done -1;
return;
end procedure
Atomicity
If the statement done = done -1; may be executed simultaneously by several processes,
there could be some problems. Even if in this concrete program it seems to be not possible
(the n processes seems to sequentially access the statement), in other parallel programs this
fact would be possible.
The statement is not a single operation. If two processes access the value of done variable
in some order the final value could be wrong (done -1 instead of done-2 due to a Read Modify Write hazard). A similar problem consists in the fact that even a read/write
instruction may take more than one bus operation. As a consequence, a program that can
ran correctly on a 64-bit computer when moved to a machine that supports 64-bit
operations with 32 bit instructions.
shared n, a[n,n], x[n], c[n], done;
private i;
done = n; /* no. of processes*/
for i=1 step 1 until n-1
{void x[i];
create dorow (i, done, n, a, x, c); } /*create n-1 procedures.*/
i=n;
void x[i];
call dorow (i, done, n, a, x, c); /*call the n-th process.*/
while (done 0); /*loop until all n procedure instances finished.*/
procedure dorow (value i, done, n, a, x, c)
shared n, a[n,n], x[n], c[n], done;
private i, j, sum, priv;

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore


sum = c[i];
for j=1 step 1 until i-1
{copy x[j] into priv; /*get x[j] when it is available.*/
sum = sum + a[i,j]*priv; }
produce x[i] = sum; /*make x[i] available to others.*/
critical /*lock/
done = done -1; /*decrement shared variable;
synchronization*/
end critical /*unlock*/
return;
end procedure

256

control-based

Mutual exclusion, critical section.


Critical sections of the same name exclude each other but may execute concurrently with
critical sections of different names [ Jor03].
Processes can be created at the beginning of the program, execute a common set of code
that distributes work in parallel loop and terminate at the end of the program - SPMD
process creation and termination. In this style, multiple processes, each distinguished by a
unique identifier, execute a single program simultaneously but not necessary synchronously
[Jor03].
shared P;
private id;
for id=0 step 1 until P-2
create parmain (id, P);
id = P-1;
call parmain (id, P);
call exit ();
Work on automatic parallelizing compilers to speed up the execution of parallel programs
using a multiprocessor architecture is a big difficult challenge. The main problem is not:

Uniprocessor components
Network topologies
Unavailability of appropriate languages

The essential difficulties in writing effective parallel programs are:

Parallel programs are inherently harder to develop


Need to understand the underlying hardware
Programs tend not to be portable
Amdahls law; a very small part of a program that is inherently sequential can
severely limit the attainable speedup.

Consistenta variabilelor partajate

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

257

Un program paralel trebuie s specifice ordinea operaiilor de scriere-citire.


Consistena
secvenial
(CS):
In_Proc[data-flow]
AND
Inter_Pr[ArbitraryN_Expl_Sync]
A parallel program consists of one or more threads of control, operating on data. A
parallel programming model specifies what data can be named by threads, what
operations can be performed on the named data, and what ordering exists among these
operations. The most straightforward ordering is the so called sequential program order,
meaning that, in programmers view, variables are read and modified in the order
specified by the program. In fact, the compiler and hardware preserve the dependence
order.
A parallel program must coordinate the activity of its threads to ensure that the
dependences within the program are enforced. This requires explicit synchronization
operations when the ordering implicit in the basic operations are not sufficient.

Coerena cache-urilor asigur o viziune consistent a memoriei pentru


diversele procesoare din sistem. Nu se rspunde ns la ntrebarea "CT de
consistent?", adic n ce moment trebuie s vad un procesor c o anumit
variabil a fost modificat de un altul?
Exemplu:
(P1)
A=0;
---A=1;
L1: if(B==0)...

(P2)
B=0;
---B=1;
L2: if(A==0)...

n mod normal, este imposibil pentru ambele programe rezidente pe


procesoare diferite (P1, P2) s evalueze pe adevrat condiiile L1 i L2
ntruct dac B=0 atunci A=1 i dac A=0 atunci B=1. i totui, acest fapt sar putea ntmpla. S presupunem c variabilele partajate A i B sunt caate
pe '0' n ambele procesoare. Dac de exemplu, ntre scrierea A=1 n P1 i
invalidarea lui A n P2 se scurge un timp suficient de ndelungat, atunci
este posibil ca P2 ajuns la eticheta L2 s evalueze (eronat) A=0.
Cea mai simpl soluie const n forarea fiecrui procesor care
scrie o variabil partajat, de a-i ntrzia aceast scriere pn n
momentul n care toate invalidrile (WI) cauzate de ctre procesul de
scriere, se vor fi terminat. Aceast strategie simpl se numete consisten
secvenial. Ea impune ca orice simulare a procesrii unui anumit program,

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

258

prin respectarea secvenialitii interne din cadrul unui fir (data-flow order)
i, respectiv, prin ordinea aleatoare de execuie a firelor ntre ele, atunci
cnd nu este specificat una anumit, s conduc la aceleai rezultate finale.
Altfel spus, un program scris corect va duce la aceleai rezultate, indiferent
de ntreeserea firelor. Dei consistena secvenial prezint o paradigm
simpl, totui ea reduce performana, n special pentru sistemele cu un
numr mare de procesoare sau cu reele de interconectare de latene ridicate.
Obs. Consistena secvenial, nu permite de exemplu implementarea unui
"write buffer" la scriere, care pe baza captrii adresei i datei
procesorului, s se ocupe n continuare de procesul de scriere efectiv
a datei n memorie, degrevnd astfel procesorul de acest proces.

ATOMIZRI I SINCRONIZRI (paragraf facultativ)


n cazul proceselor de sincronizare, dac un anumit procesor "vede"
semaforul asociat unei variabile globale pe '1' (LOCK - ocupat), are 2
posibiliti de principiu:
a) S rmn n bucla de testare a semaforului pn cnd acesta
devine '0' (UNLOCK) - strategia "spin lock"
b) S abandoneze intrarea n respectivul proces, care va fi pus ntr-o
stare de ateptare i s iniieze un alt proces disponibil - comutare
de task-uri.
Strategia a) dei des utilizat, poate prelungi mult alocarea unui proces
de ctre un anumit procesor. Pentru a dealoca un proces (variabila aferent),
procesorul respectiv trebuie s scrie pe '0' semaforul asociat. Este posibil ca
aceast dealocare s fie ntrziat - dulce ironie! - datorit faptului c
simultan, alte N procesoare doresc s testeze semaforul n vederea alocrii
resursei (prin bucle de tip Read - Modify - Write). Pentru evitarea acestei
deficiene este necesar ca o cerere de bus de tip "Write" s se cableze ca
fiind mai prioritar dect o cerere de bus n vederea unei operaii tip "Read Modify - Write". Altfel spus, dealocarea unei resurse este implementat ca
fiind mai prioritar dect testarea semaforului n vederea alocrii resursei.
Strategia b) prezint deficiene legate n special de timpii mari determinai
de dealocarea/alocarea proceselor (salvri/restaurri de contexte).
n ipoteza c n SMM nu exist mecanisme de meninere a coerenei
cache-urilor, cea mai simpl implemetare a verificrii disponibilitii unei
variabile globale este urmtoarea (spin lock):

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

test:

li R2, #1; R2 1
lock exchg R2,0(R1)
bnez R2,test

259

; atomic

Dac ns ar exista mecanisme de coeren a cache-urilor, semaforul


ar putea fi ataat local. Primul avantaj ar consta n faptul c testarea
semaforului ('0' sau '1') s-ar face din cache-ul local fr s mai fie necesar
accesarea busului comun. Al 2-lea avantaj - de natur statistic - se bazeaz
pe faptul dovedit, c e probabil ca ntr-un viitor apropiat procesorul
respectiv s doreasc s testeze din nou semaforul (localitate spaial i
temporal).
n vederea obinerii primului avantaj, bucla anterioar trebuie
modificat. Fiecare "exchg" implic o operaie (ciclu) de tip "Write". Cum
secvena anterioar de testare a semaforului poate fi executat n paralel de
mai multe procesoare, se pot genera concurenial mai muli cicli (cereri) de
tip "Write". Cele mai multe, vor conduce la miss-uri, ntruct fiecare
procesor ncearc s obin semaforul ntr-o stare "exclusiv".
Aadar, bucla se va modifica n acest caz ca mai jos:
test:

lw R2,0(R1) ;
bnez R2, test
li R2, #1
lock exchg R2,0(R1)
bnez R2,test

testare pe copia local


; a semaforului
; setare concurenial a
; semaforului de ctre
; procesoare (un singur ctigtor)

S studiem acum implicaiile acestei secvene de program ntr-un


SMM cu 3 procesoare P0, P1, P2 implementnd un protocol de coeren a
cache-urilor de tip WI i un protocol de scriere n cache de tip "Write Back".
Pas Procesor P0
Are Sem = 1
1 (LOCK) pus
chiar de el
Termin
2 proces
i
pune Sem =
0 n cache

Procesor P1

Procesor P2

Stare
semafor

Activitate pe
BUS-ul comun

Testare
Sem=0?
NU!
Recepioneaz
invalidare
n
cache

Testare
Sem=0?
Partajat
NU!
Recepioneaz
Write
invalidare n Exclusiv invalidate
cache
pentru Sem
de la P0

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

Read miss

Read miss

260

Partajat

Arbitru
servete pe P2;
Write back de
la P0
WAIT (acces la Sem = 0
Partajat Read miss-ul
bus)
pentru
P2
satisfcut
Sem = 0
Execut
Partajat Read miss-ul
pentru
P1
exchg

satisfcut
cache miss
Execut
Terminare
Exclusiv P2 servit; Write
invalidate
exchg
exchg.
Primete 0,
Sem
cache miss
scrie Sem = 1
Terminare
Intr
n Partajat P1 servit
seciunea
exchg.
de
Primete 1 critic
program
LOCK!
Testeaz
n
prima
bucl
dac
Sem = 0?
Tabelul 8.4.
Conlucrarea a trei procese ntr-un SMM

Pentru a minimiza traficul pe busul comun introdus de ctre


instruciunea "exchg", secvena anterioar se poate rafina ca mai jos:
test:

ll
R2,O(R1)
bnez R2,test
li
R2,#1
sc R2,O(R1)
begz R2,test

;un singur Pk o va executa cu


; succes, restul, nu scade traficul pe bus

Sincronizarea la barier
Este o tehnic de sincronizare deosebit de utilizat n programele cu
bucle paralele. O barier foreaz toate procesele s atepte pn cnd toate
au atins bariera, abia apoi permindu-se continuarea acestor procese. O
implementare tipic a unei bariere poate fi realizat prin 2 bucle succesive:
una atomic n vederea incrementrii unui contor sincron cu fiecare proces
care ajunge la barier iar cealalt n vederea meninerii n ateptare a

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

261

proceselor pn cnd aceasta ndeplinete o anumit condiie (test); se va


folosi funcia "spin (cond)" pentru a indica acest fapt.
Se prezint implementarea tipic a unei bariere:
LOCK(counterlock)
Proces if(count==0) release=0
atomic
count=count+1

; /*terge release la nceput*/


; /*contorizeaz procesul ajuns
la barier*/
UNLOCK(counterlogic)
if(count==total)
{ /*toate procesoarele ajunse!*/
count=0;
release=1;
}
else
{ /*mai sunt procese de ajuns*/
spin(release=1); /*ateapt pn ce ajunge i ultimul*/
}

total nr. maxim al proceselor ce trebuie s ating bariera


release utilizat pentru meninerea n ateptare a proceselor la barier
Exist totui posibilitatea de exemplu, ca un procesor (proces) s
prseasc bariera naintea celorlalte care ar sta n bucla "spin (release=1)"
i ar rezulta o comutare de task-uri chiar n acest moment. La revenire vor
vedea "release=0" pentru c procesul care a ieit a intrat din nou n barier.
Rezult deci o blocare nedorit a proceselor n testarea "spin".
Soluia n vederea eliminrii acestui hazard const n utilizarea unei
variabile private asociate procesului (local_sense). Bariera devine:
local_sense=!local_sense;
LOCK(counterlock);
count++;
UNLOCK(counterlock);
if(count==total)
{
count=0;
release=local_sense;
}
else
{

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

262

spin(release=local_sense);
}
Dac un proces iese din bariera urmnd ca mai apoi s intre ntr-o
nou instan a barierei, n timp ce celelalte procese sunt nc n barier
(prima instan), acesta nu va bloca celelalte procese ntruct el nu reseteaz
variabila "release" ca n implementarea anterioar a barierei.
Obs. D.p.d.v. al programatorului secvenial, bariera anterioar este
corect.
Message passing architectures
Employs complete computers as building blocks and provides communication between
processors as explicit I/O operations (send/receive). The main message passing architecture
scheme is essentially the same as the NUMA shared memory scheme. The primary
difference is that communication is integrated at the I/O level, like in networks.
Send specifies a local data buffer that is to be transmitted, a receiving process (on a remote
processor) and a tag identifying the sender. Receive specifies a sending process, a local data
buffer into witch the receive data will be stored and a matching rule (tag).
Parallel programs using message passing are usually structured. Frequently, all nodes
execute identical copies of the program, with the same code and private variables. Message
passing models assume a collection of processes each operating in a private address space
and each able to name the other processes. Send/receive operate on the local address space
and the global process space. Each send/receive pair is a specific point-to-point
synchronization operation.
Interconnection network topologies are: ring, grid (2D, 3D), hypercube, fully connected,
etc. In early implementations each processor communicates with its neighbors. For
example, initially, in a hypercube topology each node communicated through two FIFO
buffers (send/receive) with N adjacently codified nodes, for a total of 2N nodes. The direct
FIFO design was soon replaced with DMAs. The use of DMA allowed nonblocking sends
(the sender initiates a send and continues with useful computations while the send
completes). On the receiving end, the transfer is accepted through a DMA transfer by the
message layer into a buffer and queued until the target process performs a matching receive
and data is stored into receiver process address space. In present message layers provide
support for communication between arbitrary processors rather than only between physical
neighbors. So, each node store and forward the message (routing).
A fully connected N processor system has

C N2 =N(N-1)/2

bidirectional links providing

maximum concurrency at a very high cost.


Evolution has blurred the once clear difference between the shared memory and message
passing approaches. Related to the communication operations available to the user process,

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

263

traditional message passing operations (send/receive) are supported on most shared


memory machines through shared buffer storage. Flags or locks are used to control access
to the buffer and to indicate events such as message arrival.
Where the implicit ordering is not sufficient, explicit synchronization operations are
required. Parallel programs require two types of synchronization:

Mutual exclusion ensures that a certain action is performed by only one thread or
process at a time. This is accomplished by locking the programs sequence upon
entry and unlocking it on exit. If several processes arrive simultaneously only one
will get in and the others re waiting. The order in which the processes are allowed
to enter doesnt matter and it may vary from one execution to the next one.

Events are used to inform other processes that some point of execution has been
reached, so they can proceed knowing that certain dependences have been
satisfied. If one process writes a value that another process is supposed to read, an
event synchronization operation must take place to indicate that the value is ready
to be read. Events may be point-to-point, involving pair of processes, or they may
be global, involving all processes or a group of processes.

The idea of PIM (Processing in Memory) is to overcome the bottleneck between the
processor and main memory by combining a processor and memory on a single chip.
In a PIM architecture:

the CPUs are much closer electrically to the memory arrays containing instructions
and data.

the number of bits available from each access can be literally orders of magnitude
greater than can be transferred in a single clock cycle from today's conventional memory
chip to today's conventional (and separate) CPU chip or cache system.
The benefits of a PIM architecture are:

This means that:

reduced memory latency,


increases memory bandwidth,
simplifies the memory hierarchy,
provides multi-processor scaling capabilities
avoids the Von Neumann bottleneck.

much of the expensive memory hierarchy can be dispensed with,


CPU cores can be replaced with simpler designs,
less power is used by PIM,
less silicon space is used by PIM.

Currently there is about an order of magnitude reduction in latency.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

PIM is easily scaled:

of PIM cells,

264

multiple PIM chips connected together forming a network


such scaled architectures are called Cellular architectures.

Cellular architectures consist of a high number of cells (PIM units):

with tens of thousands up to one million processors,

each cell (PIM) is small enough to achieve extremely largescale parallel operations,

to minimise communication time between cells, each cell is


only connected to its neighbours.
Cellular architectures are threaded:

each thread unit is independent of all other thread units,

each thread unit serves as a single in-order issue processor,

each thread unit shares computationally expensive hardware such as


floating-point units,

there can be a large number of thread units (1,000s if not 100,000s of


thousands) therefore they are massively parallel architectures.

Recommendations [Asa06]:

The overarching goal should be to make it easy to write programs that execute
efficiently on highly parallel computing systems
The target should be 1000s of cores per chip, as these chips are built from
processing elements that are the most efficient in MIPS (Million Instructions per
Second) per watt, MIPS per area of silicon, and MIPS per development dollar.
Instead of traditional benchmarks, use 13 Dwarfs to design and evaluate parallel
programming models and architectures. (A dwarf is an algorithmic method that
captures a pattern of computation and communication.)
Autotuners should play a larger role than conventional compilers in translating
parallel programs. Automatic Design Space Exploration
To maximize programmer productivity, future programming models must be
more human-centric than the conventional focus on hardware or applications.
To be successful, programming models should be independent of the number
of processors.
To maximize application efficiency, programming models should support a
wide range of data types and successful models of parallelism: task-level
parallelism, word-level parallelism, and bit-level parallelism.
Architects should not include features that significantly affect performance or
energy if programmers cannot accurately measure their impact via performance
counters and energy counters.
Traditional operating systems will be deconstructed and operating system
functionality will be orchestrated using libraries and virtual machines.
To explore the design space rapidly, use system emulators based on Field
Programmable Gate Arrays (FPGAs) that are highly scalable and low cost.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

265

References
1.

[Asa06] Asanovic K. et al., The Landscape of Parallel Computing Research: A


View from Berkeley, Technical Report No. UCB/EECS-2006-183, December 2006
2. [Cra09] Craeynest K. Van, Eyerman S., Eeckhout L., MLP-Aware Runahead
Threads n a Simultaneous Multithreading Processor, Proceedings of The 4th
HiPEAC International Conference, pp. 110-124, Paphos, Cyprus, January 2009
3. [Cul99] Culler D., Singh J., with Gupta A., Parallel Computer Architecture: A
Hardware/Software Approach, Morgan Kaufmann Publishers, 1999
4. [Des08] Desmet V., Girbal S., Temam O., ArchExplorer.org: Joint
Compiler/Hardware Exploration for Fair Comparison of Architectures, The 6-th
HiPEAC Industrial Workshop, Thales, Paris, Nov. 26th, 2008
5. [Gab98] Gabbay F., Mendelsohn A., Using Value Prediction to Increase the Power
of Speculative Execuion Hardware, ACM Transactions on Computer Systems,
vol. 16, nr. 3, 1998
6. [Gel09] A. Gellert, A. Florea, L. Vintan, Exploiting Selective Instruction Reuse
and Value Prediction n a Superscalar Architecture, Journal of Systems
Architecture, vol. 55, issue 3, Elsevier, 2009
7. [Gio09] Giorgi R., Popovic Z., Puzovic N., Implementing fine/medium grained
TLP support n a many-core architecture, International Symposium on Systems,
Architectures, Modeling and Simulation, Samos, Greece, July 20-23, 2009
8. [Ham04] Hammond L. et al., Transactional Memory Coherence and Consistency,
The 31st Annual International Symposium on Computer Architecture (ISCA),
Munich, 2004
9. [Hen07] Hennessy J., Patterson D., Computer Architecture. A Quantitative
Approach, 4th Edition, Morgan Kaufmann Publishers, 2007
10. [HiPEAC] High-Performance Embedded Architecture and Compilation (HiPEAC)
FP6/FP7 Network of Excellence, Research Challenges n High-Performance
Embedded Architecture and Compilation, http://www.HiPEAC.net, 2008
11. [Jor03] Jordan H., Alaghband G., Fundamentals of Parallel Processing, Pearson
Education, Inc., Prentice Hall, 2003
12. [Liu08] Liu S., Gaudiot J. L., The Potential of Fine-Grained Value Prediction n
Enhancing the Performance of Modern Parallel Machines, The 13th IEEE AiaPacific Computer Systems Architecture Conference (ACSAC 2008), Taiwan,
August 2008
13. [Mar01] Martin M., et al., Correctly Implementing Value Prediction n
Microprocessors that Support Multithreading or Multiprocessing, Proceedings of
the 34-th Annual ACM/IEEE International Symposium on Microarchitecture,
Austin, Texas, December 3-5, 2001
14. [Mog09] Moga A., Dubois M., A comparative evaluation of hybrid distributed
shared-memory systems, Journal of Systems Architecture, vol.55, issue 1, pp. 4352, Elsevier, 2009
15. [Suk07] Sukhun Kang and Rakesh Kumar, Magellan: A Framework for Fast Muticore Design Space Exploration and Optimization Using Search and Machine
Learning, Illinois at Urbana-Champaign, CRHC Technical Report CRHC-07-05,
October 2007

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

266

16. [Uhr07] S. Uhrig, J. Wiese, jamuth an IP Processor Core for Embedded Java
Real-Time Systems, JTRES 07 September 26-88, 2007 Vienna, Austria
17. [Vin00] Vinan L., Arhitecturi de procesoare cu paralelism la nivelul
instructiunilor (in Romanian), Editura Academiei Romne, Bucureti, 2000
18. [Vin07] Vinan L., Prediction Techniques n Advanced Computing Architectures
(in limba engleza), Matrix Rom Publishing House, Bucharest, 2007;
http://www.matrixrom.ro/romanian/editura/domenii/informatica.php?id=867#867
19. [Vin08] Vinan L., Florea A., Gellert A., Random Degrees of Unbiased Branches,
Proceedings of The Romanian Academy, Series A: Mathematics, Physics,
Technical Sciences, Information Science, Volume 9, Number 3, Bucharest, 2008 http://www.academiaromana.ro/sectii2002/proceedings/doc2008-3/13-Vintan.pdf
20. [Wan09] H.C. Wang, C.K. Yuen, Exploiting an abstract-machine-based
framework in the design of a Java ILP processor, Journal of Systems Architecture
55 (2009) 5360
21. [Wat09] Watkins M., McKee S., Schaelicke L., Revisiting Cache Block
Superloading, Proceedings of The 4th HiPEAC International Conference, Paphos,
Cyprus, January 2009
22. [Yi06] Yi J., Lilja D., Simulation of Computer Architectures: Simulators,
Benchmarks, Methodologies, and Recommendations, IEEE Transactions on
Computers, vol. 55, No. 3, 2006

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

267

5. ARHITECTURA MICROCONTROLERELOR [8]

5.1. INTRODUCERE N PROBLEMATIC


Capitolul de fa reprezint o descriere a familiei de microcontrollere
pe 8 bii, bazate pe arhitectura 80C51, realizate de firma Philips
Semiconductors, precum i a altor componente furnizate de ctre respectivul
productor. Un microcontroller este un microprocesor destinat n general
controlului unor procese industriale care conine memorii i diverse porturi
de I/O integrate pe acelai cip. n continuare se vor prezenta modurile de
adresare, setul de instruciuni, partajarea memoriei .a. n cadrul familiei de
microcontrolle 80C51.
Microcontrollere derivate conin i o interfa serial I2C (magistral
de interconectare a circuitelor integrate), care permite conectarea cu uurin
la peste alte 100 de componente integrate, sporind capacitatea i
funcionalitatea microsistemului realizat. Pentru aplicaii industriale i
automate, microcontrollerele sunt nsoite de alt o magistral serial de
control (Control Area Network - CAN).
Familia de microcontrollere pe 16 bii, 90CXXX se bazeaz pe
arhitectura Motorola 68000. n timp ce microcontrollerele sunt pe 16 bii n
exterior, n interior unitatea central a arhitecturii 68000 este pe 32 de bii.
Acest fapt confer utilizatorului o putere de procesare mai mare, n
condiiile creterii necesitilor de proiectare, trecnd de la microcontrollere
pe 8 bii la cele pe 16 bii. Microcontrollerele pe 16 bii ai firmei Philips
Semiconductors sunt compatibile software cu codul procesorului Motorola
68000.

5.2. ARHITECTURA FAMILIEI 80C51


5.2.1. ORGANIZAREA MEMORIEI

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

268

Figura 5.1. Schema bloc a microprocesoarelor 80C51

Toate procesoarele 80C51 au spaii de adrese separate pentru


instruciuni i date implementnd deci o arhitectur de tip Harvard a
memoriei (vezi figura 5.1). Accesarea zonei de date se face pe o magistral
de 8 bii, data citit putnd fi rapid memorat i manipulat de ctre regitrii
pe 8 bii ai CPU. Memoria program este de tip ROM sau EPROM i poate
avea capaciti de pn la 64ko. La dispozitivele 80C51, cei mai puin
semnificativi 4ko de memorie sunt implementai n cip. Memoria de date
este de tip RAM. Cei mai puin semnificativi 128 octei ai memoriei de date
sunt implantai n cip, restul de pn la 64ko regsindu-se extern pe plac.

Memoria program
Figura 5.2 ilustreaz harta memoriei program - partea cea mai puin
semnificativ. Dup resetarea sistemului, CPU (unitatea central de
procesare) ncepe execuia de la adresa 0000H, n conformitate cu
iniializarea PC-ului. Primii trei octei ai Memoriei Program pot codifica de
exemplu, o instruciune de salt necondiionat (JUMP <Adres>)
reprezentnd prima instruciune care se execut imediat dup iniializare. De
fapt are loc un salt la adresa de nceput a programului monitor program
ce realizeaz verificarea configuraiei hardware a microsistemului, teste de
memorie, interfaa cu utilizatorul, etc.
Fiecrei ntreruperi i este asignat o locaie fix n memoria program.
ntreruperea determin CPU s execute salt la locaia respectiv, unde
ncepe execuia rutinei de serviciu (tratare a ntreruperii). Zona de program
aferent rutinelor de tratare a ntreruperii se mparte n intervale de 8 octei:

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

269

0003H - pentru ntreruperea extern 0, 000BH - pentru circuitul Timer 0


(numrtor), 0013H - pentru ntreruperea extern 1, 001BH - pentru
circuitul Timer 1 etc. Dac o rutin de serviciu este suficient de scurt, ea
poate fi inclus n interiorul unui astfel de interval de 8 octei. Rutinele mai
lungi de opt octei vor folosi n general o instruciune de salt codificat pe
maximum trei octei pentru a nu altera zona aferent unei alte ntreruperi
active.

Figura 5.2. Memoria program la procesoarele 80C51

Cei mai semnificativi 4 ko ai memoriei program pot fi implementai


fie n cipul ROM intern fie n memoria ROM extern. Selecia se face prin
conectarea pinului EA la tensiunea de alimentare (Vcc) sau la mas (Vss).
Dac EA este legat la Vcc, accesele de citire din zona de memorie program
cuprins ntre 0000H i 0FFFH sunt direcionate spre memoria ROM
intern implementat. Accesele de citire din zona de memorie program de la
adresa 1000H la FFFFH sunt ndreptate spre memoria ROM extern. Dac
EA se conecteaz la mas atunci toate citirile din memoria program sunt
direcionate spre memoria extern ROM.
Figura 5.3 reprezint configuraia hardware pentru execuia unui
program stocat n memoria program extern. Se observ 16 linii de intrare /
ieire (porturile 0 i 2) avnd funcii de magistral dedicat citirii codului
(datei) din memoria program extern. Portul 0 servete la multiplexarea
magistralei de date / adres. Aceast multiplexare implic desigur o scdere
a vitezei de lucru cu memoria i este datorat unor constrngeri tehnologice

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

270

legate de numrul de pini ai microcontrollerului. n cadrul unui ciclu de


aducere (fetch) a instruciunii el emite octetul cel mai puin semnificativ al
registrului Program Counter (PCL) ca i adres i rmne n stare de
ateptare pn la sosirea octetului de cod din memoria program. n
momentul n care octetul cel mai puin semnificativ al registrului Program
Counter este valid n portul 0, semnalul ALE (Address Latch Enable)
strobeaz acest octet ntr-un latch ale crui ieiri atac memoria. ntre timp,
portul 2 emite cel mai semnificativ octet al registrului Program Counter
(PCH). n final, semnalul de validare a citirii ( PSEN ) se activeaz iar
EPROM-ul emite octetul de cod cerut de ctre microcontroller, prin
intermediul aceluiai port P0, aflat de data aceasta pe post de magistral de
date.

Figura 5.3. Execuia programelor stocate n Memoria Extern

Adresarea memoriei program se face ntotdeauna pe 16 bii, chiar dac


capacitatea memoriei program fizic implementat este mai mic de 64 ko.
Execuia programelor externe sacrific dou din porturile pe 8 bii (P0 i P2)
acordndu-le acestora funcii de adresare a memoriei program.

Memoria de date
n figura 5.4, se prezint o configuraie hardware pentru accesarea de
pn la 2 ko de memorie RAM extern. CPU n acest caz execut
instruciunile din memoria ROM intern. Portul 0 servete ca multiplexor al
magistralei de date respectiv adrese care "atac" memoria RAM, iar cele 3
linii de intrare / ieire ale portului 2 sunt folosite la paginarea memoriei

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

271

RAM (8 pagini). CPU genereaz semnalele de comand RD i WR


(validare citire respectiv scriere) necesare n timpul acceselor la memoria
RAM extern.

Figura 5.4. Accesarea memoriei de date extern

Adresarea memoriei de date externe poate fi fcut pe 8 sau 16 bii.


Adresarea pe 8 bii este deseori folosit n conjuncie cu una sau mai multe
linii de intrare / ieire pentru paginarea memoriei RAM. Adresarea pe 16
bii implic folosirea portului 2 ca emitent al octetului cel mai semnificativ
de adres, aa cum s-a mai artat.

Figura 5.5. Memoria de date intern

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

272

Memoria de date intern este mprit n trei blocuri (vezi figura 5.5),
referite sub numele: cei mai puin semnificativi 128o (inferiori), cei mai
semnificativi 128o (superiori), i SFR (spaiu alocat regitrilor cu funcii
speciale). Adresarea memoriei de date interne se face pe cuvinte de 1 octet
rezultnd un spaiu adresabil de 256o. Folosind un mic artificiu, modurile de
adresare ale memoriei de date interne pot gzdui 384o i nu doar 256o cum
s-ar prea la o prim vedere. Adresarea celor 128o inferiori (00 - 7FH) se
poate face direct sau indirect. Adresarea celor 128o superiori (80 - FFH) se
face doar prin adresare indirect iar accesul la spaiul regitrilor cu funcii
speciale (SFR) se face doar prin adresare direct. Rezult c zona de 128o
superiori i spaiul SFR ocup acelai bloc de adrese, de la 80H la FFH, dei
fizic constituie dou entiti diferite.
Figura 5.6 reflect maparea celor 128o inferiori ai memoriei interne.
Cei mai puin semnificativi 32 de octei sunt grupai n 4 bancuri a cte 8
regitri. Instruciunile programelor apeleaz aceti regitri sub numele
R0R7. Doi bii din registrul de stare program (PSW) selecteaz bancul de
regitri folosit. Aceasta permite o eficientizare a spaiului de cod ntruct
instruciunile cu operare pe regitri ocup mai puin spaiu n memoria
program dect instruciunile care folosesc adresarea direct. Urmtorii 16o,
succesorii bancurilor de regitri formeaz un bloc de memorie adresabil pe
bit. Setul de instruciuni al microcontrollerului 80C51 cuprinde un numr
mare de instruciuni avnd operanzi codificai pe un singur bit.
Maparea spaiului de memorie aferent regitrilor cu funcii speciale
(SFR) este exemplificat n figura 5.7. De remarcat c n spaiul alocat SFR
nu toate adresele sunt ocupate. Adresele libere nu sunt implementate n cip
fiind probabil rezervate pentru mbuntiri ulterioare ale arhitecturii.
Accesele de citire la aceste locaii vor returna date aleatoare, iar accesele de
scriere nu vor avea nici un efect. Dintre regitrii cu funcii speciale amintim:
acumulatorul (A), registrul de stare program (PSW), pointerul de stiv (SP),
pointerul de date (DPTR), registrul tampon (buffer) serial de date (SBUF),
regitrii timer, de control, de validare ntreruperi, cu prioriti de ntrerupere,
4 porturi.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

273

Figura 5.6. Reprezentarea celor 128 octei inferiori ai memoriei RAM intern

Figura 1.7. Maparea spaiului de memorie aferent regitrilor cu funcii speciale

Registrul de stare program (vezi figura 5.8) conine bii de stare care
reflect starea curent a CPU. Conine biii de transport - Carry, Auxiliary
Carry, de depire - Overflow, de paritate, doi bii de selecie ai bancului de
registre i doi bii de stare la dispoziia utilizatorului. Registrul B este folosit
n cadrul operaiilor de nmulire / mprire. Registrul SP este pe 8 bii i

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

274

este incrementat nainte ca data s fie memorat n timpul execuiei


instruciunilor PUSH sau CALL (SP - pointeaz spre ultima locaie ocupat
din stiv). Acest lucru este atipic ntruct n majoritatea procesoarelor
registrul SP este predecrementat la salvarea n stiv i nu preincrementat ca
n acest caz. Dei stiva poate rezida oriunde n memoria RAM, registrul SP
este iniializat cu valoarea 07H imediat dup semnalul Reset. Aceasta
determin ca stiva s nceap practic de la locaia 08H. Registrul DPTR
poate fi folosit ca un registru pe 16 bii sau ca doi regitri independeni pe 8
bii (DPH - octetul superior al registrului DPTR i DPL - octetul inferior al
registrului DPTR). Regitrii pereche (TH0, TL0) i (TH1, TL1) sunt regitri
numrtori pe 16 bii pentru circuitele timer 0 i 1. Registrul TMOD este un
registru de control i specific modul de lucru a celor dou circuite timer.
Ali regitri de control sunt TCON (control al circuitelor timer), SCON
(control al portului serial), PCON (control al sursei de alimentare).

Figura 5.8. Registrul de Stare Program (PSW)

Setarea / resetarea biilor de selecie ai celor patru bancuri de registre


(PSW3, PSW4) se face prin metode software. De exemplu: orice instruciune
care adreseaz spaiul de memorie de date 00H 1FH modific
corespunztor biii de selecie din PSW.

5.2.2. MODURILE DE ADRESARE


Pentru aplicaii de control pe 8 bii, setul de instruciuni al
microcontrollerului 80C51 a fost optimizat. Acesta permite o varietate mare

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

275

de moduri rapide de adresare, pentru accesarea memoriei RAM interne,


facilitnd operaii pe octet asupra structurilor de date de dimensiuni reduse.
Setul de instruciuni permite manevrarea direct a operanzilor la nivel de bit
n sisteme logice i de control care necesit procesare boolean.
a. Adresare direct - operandul este specificat printr-un cmp de
adres pe 8 bii al instruciunii. Doar memoria RAM intern i SFR
sunt adresabile direct.
Exemplu:
ADD A, 7FH ;adunare n mod de adresare direct
memorie
Dup cum s-a artat, registrul Acumulator (adresa E0H n spaiul
SFR) aparine zonei de memorie SFR i poate fi adresat direct. Astfel,
instruciunea de adunare devine:
ADD E0H, 7FH
i s-ar putea crede c respectiva instruciune este codificat pe 3 octei (1
opcode-ul instruciunii; 2,3 cei doi operanzi [adresele de memorie]).
Totui, respectiva instruciune este codificat pe doar 2 octei (1 opcode-ul
instruciunii [ce include i primul operand - acumulatorul] i 2 al doilea
operand [adresa de memorie]). De fapt, arhitectura microcontrollerului fiind
orientat pe acumulator (instruciunile aritmetico logice cu doi operanzi au
acumulatorul implicit ca surs i destinaie), acesta prin excepie fa de
ceilali regitri SFR nu mai este necesar a fi adresat direct prin adresa
E0H, fiind codificat n chiar opcode-ul instruciunii. Astfel, instruciunile
aritmetico logice cu doi operanzi n modul de adresare direct sunt
codificate pe doar doi octei n loc de trei.
b. Adresare indirect - adresa operandului este specificat n mod
indirect prin intermediul unui registru pointer. Pentru adrese pe
octet regitrii folosii sunt R0 sau R1 din bancul de regitri selectat,
sau SP (stack pointer) n cazul acesrii stivei. Pentru adrese pe doi
octei se folosete doar registrul pointer de date (DPTR). Att
memoria RAM intern ct i cea extern sunt adresabile indirect.
Exemplu:
ADD A, @R0
c. Adresarea prin regitri - 3 bii din opcode-ul instruciunii
specific unul din cei 8 regitri (R0R7) care vor fi accesai.
Bancul de regitri este specificat prin cei doi bii dedicai ai
registrului PSW n momentul execuiei instruciunii. Instruciunile
care acceseaz regitrii n acest mod se numesc optimizatoare de
cod ntuct se elimin necesitatea unui octet de adres (de exemplu,

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

276

n modul direct, adresarea R0 R7 mai consum un octet care n


plus trebuie i adus din memoria program).
Exemplu:
ADD A, R7
d. Adresarea prin instruciuni cu regitrii specifici - este cazul
instruciunilor care opereaz asupra registrului acumulator (A) sau
pointer de date (DPTR). Nu e necesar un octet de adres pentru
operanzii respectivi, codificarea operanzilor se face n chiar
opcode-ul instruciunii.
e. Adresarea prin constante imediate - folosit la ncrcarea unei
valori imediate ntr-un registru. Valorile pot fi n sistem zecimal
sau hexazecimal.
Exemplu:
ADD A, #127
f. Adresarea indexat - este folosit la citirea tabelelor de memorie
program. Doar memoria program este adresabil indexat. Registrul
DPTR sau PC reine adresa de baz a tabelului, iar registrul
acumulator reine numrul intrrii n tabel. Adresarea indexat este
folosit i n cazul instruciunilor de selecie de tip "case" din
limbajele de nivel nalt. n acest caz adresa instruciunii destinaie
se calculeaz ca suma dintre un pointer de baz i acumulator.
Exemplu:
MOVC
A, @A+DPTR

5.2.3. TIPURI DE INSTRUCIUNI


a. Instruciuni aritmetice - sunt ilustrate n tabelul 5.1, mpreun cu
modurile de adresare aferente, timpul de execuie, operaia
executat. Timpul de execuie presupune o frecven de ceas de 12
MHz iar instruciunile i datele se presupune c sunt stocate n
memoriile interne 80C51.
Obs. 1. Rezultatul pe 16 bii al nmulirii dintre registrul B i acumulator
(A), este depus n registrul obinut prin concatenarea registrelor B i
A.
Obs. 2. Instruciunea DIV AB realizeaz mprirea dintre A i data din
registrul B i depune ctul n registrul A i restul n B. Instruciunea
DIV AB se folosete mai puin n rutine matematice de mprire dect
n conversii de baz sau operaii de deplasare (shift) - aritmetice.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

277

Obs. 3. Modific flagurile din PSW n concordan cu operaia executat,


astfel: adunarea, scderea (C, OV, AC), mprire / nmulire (C, OV)
iar celelalte instruciuni doar bitul C. Totodat, toate tipurile de
instruciuni (aritmetico logice, de transfer, booleene, etc) altereaz
flagurile PSW3 i PSW4 pentru selecia bancului corespunztor de
registre din spaiul 00H 1FH al memoriei de date, dup cum de altfel
am mai artat.

Tabelul 5.1.
Instruciunile aritmetice aferente microcontrollerului 80C51

b. Instruciuni logice - sunt reprezentate n tabelul 5.2. Instruciunile


care realizeaz operaii booleene (AND, OR, XOR, NOT) asupra
operanzilor octei, execut operaia boolean la nivel de bit.
Operaiile booleene pot fi executate asupra operanzilor octei n
spaiul memoriei interne de date fr a fi necesar transferul acestor
operanzi n acumulator (se salveaz timp i efort necesar salvrii n
stiv).
Obs. Modific flagul C din PSW.

Tabelul 5.2.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

278

Instruciunile logice aferente microcontrollerului 80C51

c. Instruciuni de transfer date


c1) din memoria de date intern
Tabelul 5.3 descrie instruciunile care realizeaz transferuri de date
din sau n spaiul memoriei interne. Instruciunea MOV <dest>, <src>
permite transferuri ntre oricare din spaiile memoriei interne sau SFR fr a
trece operanzii prin acumulator. La dispozitivele 80C51 stiva se afl
implementat n cipul memoriei RAM i crete de la adrese mici la adrese
mari. Instruciunea PUSH incrementeaz nti SP apoi scrie octetul n stiv
iar instruciunea POP preia vrful stivei pentru ca mai apoi s decrementeze
SP-ul. Instruciunile PUSH i POP pot folosi adresarea direct pentru
identificarea octetului salvat sau restaurat, dar uzual stiva este accesat prin
adresare indirect utiliznd registrul pointer de stiv SP. Stiva poate ajunge
pn n cei 128 octei superiori ai memoriei RAM interne, dac acetia sunt
implementai. Instruciunile XCH i XCHD sunt folosite la favorizarea
interschimbrii datelor (reduce numrul de octei de cod folosii i timpul de
execuie; dac n-ar exista aceste instruciuni ar trebui emulate prin 3 MOVuri).

Tabelul 5.3.
Instruciunile de transfer care acceseaz spaiul memoriei interne RAM

Exemplu:
Presupunem c registrul R0 conine adresa 20H i acumulatorul
valoarea 3FH. La locaia RAM intern 20H se afl memorat valoarea 75H.
Atunci, dup execuia instruciunii: XCH A, @R0 la locaia 20H vom
avea memorat valoarea 3FH iar acumulatorul va conine valoarea 75H.
Instruciunea de interschimbare prezentat poate fi nlocuit, bineneles n
mod dezavantajos ca i timp de execuie, cu o secven de trei instruciuni
MOV consecutive.
i. Interschimbare folosind XCH.
MOV
R0, #20H
MOV
@R0, #75H
Iniializare regitri

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

MOV
XCH

A, #3FH
A, @R0

279

Realizare interschimbare

ii. Interschimbare folosind trei instruciuni MOV.


MOV
R0, #20H
MOV
@R0, #75H
Iniializare regitri
MOV
A, #3FH
MOV
30H, A
(30H) A; (30H) 3FH
MOV
A, @R0
A (20H); A 75H
MOV
@R0, 30H
(20H) (30H); (20H) 3FH
c2) din memoria de date extern
Lista instruciunilor care acceseaz memoria de date extern este
prezentat n tabelul 5.4. Singurul mod de adresare al memoriei de date
externe este cel indirect. De observat c, n toate accesele la memoria
extern de date acumulatorul este unul din operanzi (fie sursa, fie
destinaia). Semnalele de citire / scriere sunt activate doar n timpul
execuiei instruciunii MOVX. n mod normal, aceste semnale sunt inactive
i dac ele nu vor fi folosite deloc, pinii afereni (semnalelor) sunt
disponibili ca linii de intrare / ieire suplimentari.

Tabelul 5.4.
Instruciunile de transfer care acceseaz spaiul memoriei externe RAM

d. Instruciuni de citire din tabele de cutare


Tabelul 5.5 red dou instruciuni disponibile pentru citirea din tabele
de cutare (lookup) din memoria program. Tabelele de cutare pot fi doar
citite, nu i actualizate. Tabelele pot avea pn la 256 intrri (de la 0 la 255).
Numrul intrrii dorite este ncrcat n acumulator iar adresa de nceput de
tabel se depune n DPTR sau PC.

Tabelul 5.5.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

280

Instruciuni de citire din tabele de cutare

e. Instruciuni booleene
Dispozitivele 80C51 posed un procesor boolean complet pe un singur
bit. Tabelul 5.6 ilustreaz toate instruciunile booleene existente (salturi
condiionate, instruciuni de setare, tergere, OR, AND, complementare). n
cazul instruciunilor de salt, adresa destinaie este specificat printr-o
etichet sau prin adresa actual din memoria program. Salturilor pot avea
loc de la -128o la +127o n memoria program relativ la primul octet care
urmeaz respectiva instruciune de salt (salturi relative).

Tabelul 5.6.
Instruciunile booleene la microcontrollerul 80C51

Exemplu:
Considerm urmtoarea funcie logic ce opereaz asupra variabilelor
booleene A, B, C, D, astfel:
Q = A.B + C + /D (A and B or C or not D)
Variabilele logice de intrare se vor conecta la circuit prin intermediul
biilor de la 0 la 3 ai portului P1. Bitul 0 al portului P3 reprezint ieirea
funciei logice. Porturile vor fi folosite dup cum urmeaz:
Intrarea A = Bitul 0 al portului P1 (adresa 90H) vezi figura 5.7
(Maparea spaiului de memorie aferent regitrilor cu funcii speciale).
Intrarea B = Bitul 1 al portului P1 (adresa 91H)
Intrarea C = Bitul 2 al portului P1 (adresa 92H)
Intrarea D = Bitul 3 al portului P1 (adresa 93H)

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

281

Ieirea Q = Bitul 0 al portului P3 (adresa B0H)


Valoarea adresei X nu este specificat i poate avea orice valoare
valid din spaiul memoriei program al microcontrollerului 80C51.
Adresa
X
X+3
X+5
X+7
X+9
X+B
X+D

Secvena de instruciuni
MOV P1, #FFH
MOV C, P1.0
ANL C, P1.1
ORL C, P1.2
ORL C, /P1.3
MOV P3.0, C
SJMP X+3

Observaii
Iniializarea Portului P1
Preluarea intrrii A
A and B
A and B or C
A and B or C or not D
Predarea rezultatului
Reluarea bucl

f. Instruciuni de salt
f1) necondiionat
Tabelul 5.7 prezint instruciuni de salt necondiionat, apeluri i
reveniri din subrutin / ntrerupere. Adresa de salt este specificat printr-o
etichet sau o constant pe 16 bii. Dei n tabel se afl o singur
instruciune de salt JMP addr, n realitate distingem trei astfel de
instruciuni:
SJMP (adresa destinaie este un offset relativ la adresa instruciunii
curente) salt relativ la PC (utile n scrierea programelor
relocabile)
LJMP (adresa destinaie este o constant pe 16 bii) salt direct
AJMP (adresa destinaie este o constant pe 11 bii)
Instruciunea Call addr substituie, de asemenea, dou instruciuni
de apel:
LCALL (adresa destinaie este pe 16 bii, rezultnd c subrutina se
poate afla oriunde n spaiul de 64ko ai memoriei program)
ACALL (formatul adresei destinaie este pe 11 bii, subrutina
aflndu-se n blocul de 2ko, succesor instruciunii de apel)
Programatorul specific asamblorului adresa subrutinei fie ca etichet,
fie ca i constant pe 16 bii. Asamblorul are desigur sarcina de a stabili
adresa n formatul corect cerut de instruciune.
Diferena dintre instruciunile RET (revenire din subrutin) i RETI
(revenire din ntrerupere), este aceea c RETI anun sistemul de control al
ntreruperii c ntreruperea n curs s-a ncheiat. Dac nu exist nici o
ntrerupere n curs n momentul execuiei instruciunii RETI, atunci execuia
celor dou instruciuni de revenire este identic i const n preluarea celor
doi octei din vrful stivei i ncrcarea lor n PC astfel nct execuia
programului s continue din punctul din care a fost ntrerupt. Instruciunea

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

282

RETI - spre deosebire de RET - permite unei ntreruperi care a ncercat s o


ntrerup pe cea n curs i avnd acelai nivel de prioritate, s se starteze la
finele rutinei de tratare a ntreruperii curente (altfel, aceast cerere de
ntrerupere nu s-ar mai lua n considerare niciodat). Cu alte cuvinte,
instruciunea de revenire din ntrerupere marcheaz n mod explicit finele
tratrii ntreruperii i permite gestionarea unor noi cereri prin resetarea
bitului aferent din registrul IP (vezi n continuare, figura 5.17).

Tabelul 5.7.
Instruciuni de salt necondiionat la microcontrollerul 80C51

f2) condiionat
Lista instruciunilor de salt condiionat disponibile utilizatorului
dispozitivelor 80C51 este redat de tabelul 5.8. Salturile sunt relative la
adresa PC (urmtoare celei de salt condiionat), ntr-o marj de la - -128o la
+ 127o. Adresa de salt e specificat identic ca la celelalte instruciuni de
salt. ntruct registrul de stare program (PSW) nu conine un bit de Zero,
instruciunile JZ i JNZ testeaz coninutul acumulatorului (A).
Instruciunile DJNZ (decrementeaz i execut salt dac primul operand e
diferit de zero) i CJNE (compar operanzii i execut salt doar dac
operanzii sunt diferii) au fost introduse pentru controlul buclelor de
program.

Tabelul 5.8.
Instruciuni de salt condiionat la microcontrollerul 80C51

Exemplu:
Se consider urmtoarea secven care adaug o ntrziere ntr-un
program, acolo unde este inserat. Regitrii R0, R1 i R2 reprezint
contoarele celor 3 bucle existente. Portul P1 este folosit pe post de

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

283

numrtor binar. Valoarea adresei X nu este specificat i poate avea orice


valoare valid din spaiul memoriei program al microcontrollerului 80C51.
Adresa
X
X+2
X+4
X+6
X+8

Secvena
de
instruciuni
INC P1
MOV R0, #02H
MOV R1, #FFH
MOV R2, #FFH
DJNZ R2, X+8

X+A

DJNZ R1, X+4

X+C

DJNZ R0, X+2

X+E

SJMP X

Observaii
Se incrementeaz numrtorul binar
Seteaz prima constant de ntrziere
Seteaz a doua constant de ntrziere
Seteaz a treia constant de ntrziere
Decremeteaz R2 i execut salt la
adresa specificat dac R2 0
Decremeteaz R1 i execut salt la
adresa specificat dac R1 0
Decremeteaz R0 i execut salt la
adresa specificat dac R0 0
Reluarea bucl

5.2.4. ARHITECTURA INTERN


Figura 5.9 prezint schema bloc de principiu a microcontrollerelor
80C51. Toate resursele interne sunt centrate n jurul unei magistrale care
permite schimbul de date practic ntre toate modulele componente (ROM,
RAM, porturi I/O, ACC, SFR, SP etc.). Astfel de exemplu, n cazul unei
operaii de adunare operanzii surs sunt nscrii n regitrii temporari
TMP1,2 (invizibili pentru programator) iar rezultatul este depus pe
magistrala central de unde apoi este nscris n registrul destinaie (de obicei
n acumulator). Memoriile ROM i RAM sunt adresate prin regitri de
adrese special dedicai, desigur invizibili pentru programator. Toate
resursele sunt comandate de ctre o unitate de control care are relul de a
genera secveniat n timp toate semnalele de comand interne sau externe
necesare desfurrii operaiilor efectuate de ctre microcontroller (aducere
instruciuni / date, scriere rezultate, decodificri instruciuni, achitare
ntreruperi etc.). Registrul de instruciuni, destinaia implicit a oricrui
ciclu de aducere instruciune, este inclus i el n aceast unitate de comand.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

284

Figura 5.9. Arhitectura 80C51. Schema intern

Sursa de ceas a unitii centrale


Toate microcontrollerele familiei 80C51 au ncorporate n cip un
oscilator (circuit basculant astabil), care poate fi folosit dac se dorete, ca
surs de semnal de ceas pentru CPU. n acest sens, se conecteaz cristalul de
cuar sau ceramica ntre pinii XTAL1 i XTAL2 ai microcontrollerului, i
capacitile condensatorilor la mas (vezi figura 5.10). Figura 5.11 conine
exemple de utilizare i a semnalelor de ceas extern pentru microcontroller.
La dispozitivele NMOS, semnalele de la pinul XTAL2 devine generatorul

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

285

de ceas intern. La dispozitivele CMOS, semnalul primit la pinul XTAL1


reprezint sursa de ceas CPU.

Figura 5.10. Utilizarea unui oscilator implantat n cip drept surs de ceas

Figura 5.11. Folosirea unei surse de ceas externe pentru CPU

Accesarea memoriei externe


Distingem dou tipuri de accese la memoria extern: accese la
memoria program extern (vezi figura 5.12) i accese la memoria de date
extern (vezi figurile 5.13 i 5.14). Orice ciclu de acces se constituie dintr-o
secven de 6 stri, fiecare mprit n 2 perioade de tact (P1, P2).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

Figura 5.12. Extragerea instruciunilor din memoria program extern

Figura 5.13. Ciclul de citire din memoria de date extern

286

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

287

Figura 5.14. Ciclul de scriere n memoria de date extern

Semnalul de validare a citirii instruciunilor din memoria program este


PSEN (program store enable). Instruciunea se citete efectiv sincron cu un
front al ceasului, n ultima parte a intervalului n care semnalul PSEN este
activ, perioad n care portul P0 ndeplinete funcia de magistral de intrare
date i nu de magistral de adrese ca pn n acest interval. Accesele la
memoria de date extern folosesc semnalele RD sau WR (funcii alternate
ale pinilor 6 i 7 ai portului P3) pentru a valida citirea / scrierea datelor. i
n acest caz, perioada de activare a acestor dou semnale determin
schimbarea funciei portului P0 din port de adrese n port de date (prin
multiplexare). Desigur c aceast multiplexare n timp a funciilor portului
P0 (adrese date) are repercursiuni negative asupra vitezei de transfer a
microcontrollerului.
Adresarea memoriei externe de program se face ntotdeauna pe 16 bii,
n timp ce, memoria extern de date poate fi adresat fie pe 16 bii (MOVX
A, @DPTR) fie pe 8 bii (MOVX A, @Ri). La adresarea pe 16 bii, octetul
superior de adres este furnizat de portul P2 i este reinut de acesta pe toat
durata ciclului de citire sau scriere. n cazul adresrii pe 8 bii, coninutul
portului P2 rmne disponibil la pinii acestuia pe toat durata ciclului de
citire / scriere a memoriei, una sau mai multe din liniile de intrare / ieire
fiind folosite n conjuncie cu octetul de adres furnizat de portul P0,
facilitnd paginarea memoriei. n ambele cazuri, octetul inferior de adres e
furnizat temporar de ctre portul P0. Semnalul ALE (adrress latch enable)
trebuie s memoreze octetul de adres ntr-un latch extern, ntruct n

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

288

continuare el i va schimba funcia n magistral de date. Octetul de adres


devine valid la tranziia negativ a semnalului ALE, cnd va fi memorat n
acel registru extern. n cazul ciclului de scriere, octetul de date ce va fi scris
va fi disponibil n portul P0 nainte de activarea semnalului WR i rmne
astfel pn la dezactivarea respectivului semnal. n ciclul de citire, octetul
de date citit este acceptat n portul P0 chiar nainte ca semnalul RD s fie
dezactivat.
Reamintim c pentru accesarea memoriei program externe este
necesar cel puin una din condiiile: 1 semnalul EA este activ sau 2
registrul PC conine o valoare mai mare dect 0FFFH. Cnd CPU execut
programe nesituate n memoria program extern, toi cei 8 bii ai portului P2
au funcii dedicate de ieire i nu pot fi folosite drept linii de intrare / ieire.
n timpul extragerii de instruciuni din memoria program extern, portul P2
va conine octetul superior al PC.

Structura de ntreruperi
Microcontrollerele din familia 80C51 precum i cele realizate,
folosind sau nu, circuite ROM sau EPROM au cinci surse de ntrerupere: 2
ntreruperi externe, 2 ntreruperi de timer i ntreruperea pe port serial (vezi
figura 5.15).

Figura 5.15. Sursele de ntrerupere aferente microcontrollerului 80C51

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

289

Cele cinci surse de ntrerupere sunt interne i respectiv externe. Cele 3


ntreruperi endogene sunt prezentate succint n continuare. Prima ar fi cea de
emisie-recepie serial, adic P3.0 = RxD ( ntrerupere la recepia serial de
date, deci buffer de recepie plin) sau P3.1 = TxD (ntrerupere la
transmisia serial de date, deci buffer de emisie gol). Diferenierea ntre
ntreruperea de emisie i cea de recepie se face doar n cadrul rutinei de
tratare prin examinarea unui registru de control care specific explicit cauza
ntreruperii (bit TI=1 sau/i bit RI=1). n general, n caz de conflict, se d
prioritate ntreruperii de recepie. Celelalte 2 ntreruperi interne ar fi cele
provocate de timerele interne comandate cu ceas prin pinii: P3.4 = T0
(ntreruperea de timer 0 - depire) i P3.5 = T1 (ntreruperea de timer 1 depire). Celelalte 2 ntreruperi sunt de natur exogen i anume: pe pinul
P3.2 = INT0 (ntreruperea extern 0), pe pinul P3.3 = INT1 (ntreruperea
extern 1).
Validarea sau invalidarea surselor de ntrerupere poate fi fcut
individual prin setarea sau tergerea unui bit n registrul IE (interrupt
enable) din SFR. Registrul respectiv conine, de asemenea, un bit de
dezactivare global care ters, poate dezactiva toate sursele de ntrerupere n
acel moment (vezi figura 5.16).

Figura 5.16. Registrul de validare al ntreruperii (IE)

Prioritile de ntrerupere
Fiecare surs de ntrerupere poate fi n mod individual programat pe
unul din cele dou nivele de prioritate existente, prin setarea sau tergerea
unui bit ntr-unul din regitrii SFR numit IP (interrupt priority) - vezi figura
5.17. Rutina aferent unui nivel de prioritate sczut (low) poate fi ntrerupt

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

290

de ctre un nivel de prioritate ridicat (high), dar nu de ctre un nivel de


prioritate sczut. Un nivel de prioritate ridicat al unei ntreruperi nu poate fi
ntrerupt de nici una din sursele de ntrerupere, pe nici un nivel de prioritate.
Dac dou ntreruperi, fiecare fiind caracterizate de nivele de prioritate
diferite, sunt recepionate simultan, cea cu nivelul de prioritate ridicat este
deservit mai nti. n cazul n care, cele dou ntreruperi sunt la acelai
nivel de prioritate i sunt recepionate simultan, o secven intern de
interogare (polling) va determina care ntrerupere va fi deservit prioritar.
Astfel, n cadrul fiecrui nivel de prioritate (0 sau 1) exist o structur de
prioriti secundar, determinat de secvena de interogare (polling), dup
cum urmeaz (vezi tabelul 5.9):
Sursa
IE0
TF0
IE1
TF1
RI+TI

Prioritatea n cadrul nivelului


Cea mai ridicat (prioritar)
.
.
.
Cea mai joas (mai puin prioritar)
Tabelul 5.9.

Structura secundar de prioriti de ntrerupere

IE1 / IE0 reprezint al doilea / al patrulea bit al registrului TCON


(registru de control al circuitelor timer). Sunt setai de hardware la detecia
unei ntreruperi externe. Sunt resetai dup tratarea ntreruperii.
TF1 / TF0 reprezint cel mai semnificativ / al aselea bit al
registrului TCON. Sunt setai de hardware la realizarea unei operaii de
depire (overflow) de ctre circuitele timer 1 sau 0. Sunt resetai prin
hardware cnd se trece la execuia rutinei de tratare a ntreruperii.
TI reprezint flagul de ntrerupere pe transmisie de date. Este setat de
hardware la sfritul transmisiei celui de-al 8-lea bit de date (buffer emisie
gol), n modul 0 de lucru al portului serial sau la nceputul transmisiei
bitului de STOP n celelalte moduri de lucru, n orice transmisie serial.
Trebuie resetat prin software. RI reprezint flagul de ntrerupere pe recepie
de date i la fel ca TI aparin registrului SCON (registrul de control al
portului serial). Este setat de hardware la sfritul recepionrii celui de-al 8lea bit de date (buffer recepie plin), n modul 0 de lucru al portului serial
sau la jumtatea trnsmisiei bitului de STOP n celelalte moduri de lucru, n
orice recepie serial. Trebuie resetat prin software.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

291

Exemplu: Dac flagul de validare a ntreruperii este setat pe 1 n


registrul IE (interrupt enable), sistemul de ntreruperi genereaz un apel
LCALL la locaia corespunztoare n memoria program dup activarea
ntreruperii i doar dac alte condiii nu inhib ntreruperea. Exist cteva
condiii de blocare a unei ntreruperi dintre care o amintim pe aceea c o
ntrerupere de prioritate mai mare sau egal se afl n progres n acel
moment. Instruciunea LCALL, generat practic prin hardware, determin
depunerea coninutului registrului PC (program counter) pe stiv i
ncrcarea registrului PC cu adresa de nceput a rutinei de serviciu (tratare a
ntreruperii). Reamintim c, rutinele de serviciu ale fiecrei ntreruperi ncep
la locaii fixate n memoria program (vezi figura 5.2). Doar registrul PC este
salvat automat n stiv, nu i PSW sau orice alt registru. Acest lucru permite
programatorului s decid ct timp s aloce salvrii altor regitri funcie de
numrul regitrilor ce trebuie salvai (cei alterai de ctre rutina de tratare a
ntreruperii). Aceasta determin reducerea timpului de rspuns al
ntreruperilor, programatorul acionnd direct asupra acestui parametru. Ca
rezultat, multe funcii de ntrerupere, care se regsesc n aplicaii de control,
cum ar fi: complementarea, alternana (toggling) unui pin aferent porturilor,
rencrcarea unui numrtor (timer), descrcarea unui buffer serial etc. pot fi
deseori realizate ntr-un timp mult mai scurt dect cel necesar realizrii
respectivelor funcii de ntrerupere pe alte arhitecturi.

Figura 5.17. Registrul cu nivele de prioriti de ntrerupere (IP)

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

292

Simularea unui al treilea nivel de ntrerupere n software


Unele aplicaii necesit mai mult dect cele dou nivele de prioritate
care sunt implementate prin hardware n cip la microcontrollerele 80C51. n
acest caz se realizeaz aplicaii software simple care au acelai efect ca i un
al treilea nivel de prioritate al unei ntreruperi. Pentru asta, mai nti,
ntreruperii care urmeaz s aib prioritatea mai mare dect 1 i se asigneaz
prioritatea 1 n registrul IP (interrupt priority). Rutina de tratare pentru
ntreruperea de prioritate 1, care se presupune posibil a fi ntrerupt de
ntreruperea cu prioritate 2, este scris incluzndu-se i urmtorul cod:
PUSH IE
MOV IE, #MASK ;valideaz exclusiv ntreruperea de nivel 2 n
IE.
CALL LABEL
***************************************************
(Execuia rutinei de serviciu aferent ntreruperii cu nivelul 1 de
prioritate. Aceasta poate fi ntrerupt de o ntrerupere de nivel 2!)
*****************************************************
POP IE
RET
LABEL:
RETI
De ndat ce sunt cunoscute toate prioritile de ntrerupere, registrul
de validare a ntreruperii (IE) este redefinit pentru a dezactiva toate sursele
de ntrerupere mai puin cea de prioritate 2. Apoi, prin apelul CALL la
eticheta LABEL, se execut instruciunea RETI, care ncheie (elibereaz)
ntreruperea de prioritate 1, aflat n progres (RETI spune sistemului de
control al ntreruperii c ntreruperea aflat n progres s-a ncheiat i prin
urmare permite dup execuie luarea n considerare a ntreruperii de nivel 2
pe parcursul execuiei rutinei de tratare aferente ntreruperii de nivel 1). n
acest moment, orice ntrerupere de prioritate 1 care este validat poate fi
deservit, ns doar ntreruperea de prioritate 2 este validat. Dup
execuia rutinei de serviciu aferent ntreruperii de prioritate 2, care poate fi
tratat oriunde n memoria program, are loc restaurarea registrului IE din
stiv cu octetul original de validare a ntreruperilor. Apoi, instruciunea RET
este folosit pentru a ncheia rutina de serviciu aferent ntreruperii de
prioritate 1, cea iniial.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

293

5.3. STRUCTURA INTERFEELOR DE INTRARE /


IEIRE
Microcontrollerele, spre deosebire de microprocesoare, se
caracterizeaz prin includerea n propriul cip a diverselor porturi de I/O
seriale i paralele, a circuitelor timer, memorii, surs de ceas intern, etc. n
compensaie, structura i filosofia lor de funcionare sunt mai simple,
adaptate la cerinele controlului diverselor procese industriale.

Structura porturilor
Toate cele patru porturi ale microcontrollerului 80C51 sunt
bidirecionale. Fiecare const dintr-un latch (P0P3) registre din spaiul
SFR, un driver de ieire i un buffer de intrare. Scrierea unui 1 respectiv 0
ntr-un bit al oricrui port SFR (P0, P1, P2 sau P3) determin comutarea
pinului de ieire al portului corespondent n stare high respectiv low.
Driverele de ieire ale porturilor P0 i P2, i bufferul de intrare al portului
P0 sunt folosite n accese la memoria extern. Aa cum s-a mai artat, portul
P0 emite octetul inferior de adres necesar adresrii memoriei externe,
multiplexat cu octetul de date ce va fi scris sau citit. Portul P2 emite octetul
superior de adres ctre memoria extern, n cazul adresrii pe 16 bii. Altfel
portul P2 indic coninutul registrului din spaiul SFR. Toi pinii portului P3
sunt multifuncionali. Acetia nu sunt doar pini ai portului 3 ci servesc i la
realizarea a diverse funcii (vezi tabelul 5.10).
Pinii portului P3
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Funcia alternativ
RxD (intrare serial a portului)
TxD (ieire serial a portului)

INT0 (ntreruperea extern 0)


INT1 (ntreruperea extern 1)
T0 (intrarea extern a circuitului Timer 0)
T1 (intrarea extern a circuitului Timer 1)

WR (semnal de strobare la scrierea octetului de date


n memoria extern)

RD (semnal de strobare la citirea datelor din


memoria extern)
Tabelul 5.10.
Funciile alternative ale pinilor portului P3

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

294

Funciile alternative pot fi activate doar dac bitul din latch-ul


corespondent din SFR este 1. Rolul driverelor de ieire ale porturilor P0 i
P2 poate comuta ntre magistral de adres a memoriei interne (ADDR) i
rol de magistral de adres / date n cazul acceselor la memoria extern. n
timpul acceselor la memoria extern, registrul P2 din SFR rmne
nemodificat, dar n registrul P0 din SFR este nscris valoarea 1. Fiecare
linie de I/O poate fi folosit n mod independent att ca intrare ct i ca
ieire. Porturile P0 i P2 nu pot fi folosite ca i registre de uz general de I/O
atunci cnd sunt folosite n operaii de accesare a memoriei externe. Toate
latch-urile microcontrollerului 80C51 sunt iniializate cu valoarea 0FFH de
ctre funcia Reset. Dac ntr-un latch al unui port se scrie ulterior un 0,
portul poate fi reconfigurat ca intrare prin scrierea unui 1 n latchul portului
respectiv.
Scrierea n porturi e ilustrat n figura 5.18 fiind similar cu accesele
la memorii prezentate anterior.

Figura 5.18. Scrierea n porturi

n execuia unei instruciuni care modific valoarea ntr-un latch al


porturilor, noua valoare e memorat n latch n timpul fazei a doua din starea
ase a ciclului final al instruciunii (S6P2). Totui, coninutul latchurilor
sunt disponibile la bufferele lor de ieire doar n timpul fazei nti a
perioadei de tact iar n timpul fazei a doua bufferul de ieire reine valoarea
respectiv. n consecin, noua valoare n latchul portului nu va aprea la
pinul de ieire pn n urmtoarea faz P1 din ciclul main urmtor scrierii
n port (S1P1).
Dintre instruciunile care citesc un port distingem instruciuni care
citesc portul propriu zis i respectiv instruciuni care citesc pinii afereni
portului. Instruciunile care citesc porturi se caracterizeaz prin faptul c

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

295

citesc o valoare, o modific posibil, i apoi o rescriu n port. Operandul


destinaie poate fi un port sau un bit al portului respectiv. Aceste instruciuni
se numesc instruciuni citete modific scrie (read-modify-write). n
continuare prezentm cteva astfel de instruciuni:
Instruciunea
ANL P1, A
ORL P2, A
XRL P3, A
JBC P1.1, Label
CPL P3.0
INC P2
DEC P2
DJNZ P3, Label
MOV Px.y, C
CLR Px.y
SET Px.y

Operaia executat
P1 I LOGIC A (Acumulatorul)
P2 SAU LOGIC A
P3 XOR LOGIC A
Dac P1.1 = 1 execut salt i reseteaz bitul
Complementeaz respectivul bit
Incrementeaz latchul portului P2
Decrementeaz latchul portului P2
Decrementeaz P3 i execut salt dac P3<>0
Transfer bitul Carry la bitul y al portului x
Reseteaz bitul y al portului x
Seteaz bitul y al portului x
Tabelul 5.11.
Instruciuni de scriere n porturi

Dei nu sunt evidente, ultimele trei instruciuni sunt de tipul citete


modific scrie. Acestea citesc octetul de date al portului (toi cei 8 bii),
modific bitul adresat i apoi scrii noul octet n port. Motivul pentru care
instruciunile de tipul citete modific scrie sunt direcionate mai mult
ctre porturi dect ctre pini const n evitarea unei posibile interpretri
greite a nivelului electric al pinilor. De exemplu, se consider c un bit al
unui port este folosit la comanda bazei unui tranzistor. Cnd acest bit este
setat pe 1 tranzistorul este pornit. Dac CPU citete apoi acelai bit al
portului la nivel de pin, acesta va citi tensiunea de baz a tranzistorului i va
fi interpretat ca 0. Citind acelai bit din latchul aferent portului respectiv,
vom avea valoarea corect, i anume 1.

Interfaa serial standard


Portul serial este de tip full duplex, ceea ce nseamn c poate
emite i recepiona date simultan. Regitrii de emisie recepie ai portului
serial sunt accesai prin registrul SBUF din spaiul SFR. Bufferul serial
const de fapt din dou registre separate, un buffer de emisie i unul de
recepie. Cnd o dat este depus n SBUF, ea e direcionat spre bufferul de
emisie i reinut pentru transmisie serial. Cnd o dat este mutat din

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

296

SBUF aceasta provine din bufferul de reepie. Portul serial poate opera n
patru moduri asincrone:
a. Modul 0. Intrarea i ieirea serial se face pe linia RxD. La ieirea
TxD vom avea linia de ceas. Sunt transmii / recepionai 8 bii de
date, ncepnd cu cel mai puin semnificativ (LSB). Rata de
transfer a datelor (exprimat n baud) este fixat la 1/12 din
frecvena de oscilaie a generatorului de tact.
b. Modul 1. Sunt transmii 10 bii (pe linia TxD) sau recepionai (pe
linia RxD), n formatul asincron: un bit de start (0), 8 bii de date
(cel mai puin semnificativ - primul) i un bit de stop (1). La
recepie, bitul de stop e nscris n RB8, bit aparinnd registrului
SCON (vezi figura 5.19). Rata de transfer este variabil, funcie de
frecvena de tact.
c. Modul 2. Sunt transmii (pe linia TxD) sau recepionai (pe linia
RxD) 11 bii: bitul de start (0), 8 bii de date (primul LSB), un bit
programabil (al 9-lea bit de date) i un bit de stop (1). La transmisia
datelor, celui de-al 9-lea bit de date (bitul TB8 din SCON vezi
figura 1.19) i poate fi asignat valoarea 0 sau 1. La recepie, cel
de-al 9-lea bit este nscris n RB8 al SCON, iar bitul de stop este
ignorat. Rata de transfer este programabil fie la 1/32 fie la 1/64
din frecvena de oscilaie a generatorului de tact.
d. Modul 3. Este identic cu modul 2 de operare, exceptnd rata de
transfer. n modul 3, rata de transfer este variabil. Util n
comunicaia multiprocesor dup cum se va arta n continuare.
n toate cele patru moduri transmisia este iniiat de ctre orice
instruciune care folosete registrul SBUF (buffer de emisie) ca destinaie.
Recepia este iniiat n modul 0 de ctre condiiile (RI=0) AND (REN=1).
Recepia este iniiat, n celelalte moduri, clasic pentru protocoalele
asincrone, de ctre sosirea bitului de start dac REN=1.
Registrul de stare i control al portului serial SCON (vezi figura
5.19) conine nu doar biii de selecie ai modului de operare ci i al 9-lea bit
de date dintr-o transmisie sau recepie (TB8 i RB8), i biii de ntrerupere
ai portului serial (TI i RI).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

297

Figura 5.19. Registru de control al portului serial (SCON)

Comunicaia n sisteme multiprocesor


Modurile de operare 2 i 3 trateaz special comunicaia n sisteme
multiprocesor. n aceste moduri, sunt recepionai 9 bii de date. Cel de-al 9lea bit este memorat n RB8 al registrului SCON. Apoi urmeaz bitul de
STOP. Portul poate fi programat astfel nct, la recepionarea bitului de
stop, ntreruperea de port serial va fi activat doar dac RB8=1.
Caracteristica de comunicaie multiprocesor e validat dac bitul SM2 din
SCON este setat. O modalitate de a folosi respectiva caracteristic n
sisteme multiprocesor este urmtoarea:
Cnd un procesor master dorete s transmit un bloc de date unuia
din dispozitivele slave, acesta trimite mai nti un cuvnt de adres care
identific slave-ul destinaie. Un cuvnt de adres difer de unul de date prin
aceea c al 9-lea bit este 1 n cuvntul de adres i 0 n cel de date. Cnd
SM2=1, nici un slave nu va fi ntrerupt de ctre un octet de date. Un cuvnt
de adres, totui, va ntrerupe toate dispozitivele slave, astfel nct fiecare
slave s poat examina i detecta dac cuvntul recepionat reprezint adresa
sa. Slave-ul adresat va reseta bitul SM2 i se va pregti s recepioneze
cuvntul de date. Dispozitivele slave care nu au fost adresate las biii SM2
afereni lor setai i i continu activitatea neperturbate, ignornd cuvntul
de date. SM2 nu are nici un efect n modul 0, iar n modul 1 poate fi folosit
s verifice validitatea bitului de stop. n recepia din modul 1, dac SM2=1,
ntreruperea de recepie nu va fi activat dac nu se recepioneaz un bit de
stop valid.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

298

Circuite Timer/Numrtoare
Microcontrollerul 80C51 conine dou registre timere/numrtoare pe
16 bii: Timer 0 i Timer 1. Ambele pot fi configurate s opereze att ca
circuite timer (periodizatoare) ct i ca numrtoare. Avnd funcia de timer,
registrul este incrementat cu fiecare ciclu main. ntruct un ciclu main
const din 12 perioade de oscilaie ale generatorului de tact, rata de
numrare este 1/12 din frecvena oscilatorului. Avnd funcia de numrtor,
registrul este incrementat ca rspuns la o tranziie din 1 n 0 a intrrii externe
corespondente de la pinul T0 sau T1. Noua valoare numeric apare n
registru n timpul fazei P1 a ciclului (S3P1) urmtor celui n care s-a
detectat tranziia. ntruct dureaz doi cicli main (24 perioade de oscilaie)
pentru a recunoate o tranziie din 1 n 0, rata maxim de numrare este 1/24
din frecvena oscilatorului.
Pe lng posibilitatea de selecie ntre funcia de timer sau numrtor,
circuitele Timer0 i Timer1 sunt caracterizate de patru moduri de operare.
Funcia de timer sau numrtor este selectat cu ajutorul biilor C/T din
registrul TMOD din spaiul SFR (vezi figura 5.20). Biii M1 i M0,
aparinnd aceluiai registru TMOD, selecteaz modul de operare. Modurile
0, 1 i 2 sunt aceleai att pentru Timer/Numrtorul 0 ct i pentru
Timer/Numrtorul 1. Modul 3 este diferit funcie de circuit.

Figura 5.20. Registrul de control al modului de funcionare al circuitelor Timer


(TMOD)

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

299

a. Circuitele Timer n modul 0 se comport precum circuitul Timer


8048, care este un numrtor pe 8 bii. n acest mod registrul timer
este configurat ca un registru pe 13 bii. Dac numrul existent n
registru devine din toi biii pe 1 n toi biii pe 0, este setat flagul
de ntrerupere pe Timerul1 (TF1). Intrarea de numrare este
validat cnd TR1=1 i, fie GATE=0 fie INT1 =1. Setnd GATE
pe 1 se permite timerului s fie controlat de intrarea extern INT1 ,
facilitnd msurarea perioadei de tact. TR1 este un bit de control
din registrul TCON aparinnd SFR (vezi figura 1.21). GATE
aparine registrului SMOD. Cei 13 bii ai registrului constau din 8
bii din TH1 i 5 bii din TL1. Cei 3 bii superiori ai TL1 sunt
nedeterminai i trebuie ignorai. Setarea flagului de execuie (TR1)
nu reseteaz coninutul registrului timer.
b. Modul 1 este identic cu modul 0, exceptnd faptul c registrul
timer ruleaz cu toi cei 16 bii ai si.
c. Modul 2 configureaz registrul timer ca un numrtor pe 8 bii
(TL1) cu rencrcare automat. Depirea din TL1 nu doar seteaz
TF1 dar i rencarcTL1 cu coninutul lui TH1, care este presetat
software. Rencrcarea las TH1 nemodificat. Modul 2 opereaz n
acelai mod i asupra Timerului/Numrtorului 0.
d. n modul 3 Timerul 1 reine numrul. Efectul este identic cu
setarea TR1 pe 0. Timerul 0 n modul3 identific pe TL0 i TH0 ca
dou numrtoare separate. TL0 utilizeaz biii de control ai
Timerului 0: C/T, GATE, TR0, INT0 i TF0. TH0 este fixat
(blocat) ntr-o funcie timer (numrare a ciclilor main) ce are ca
argumente pe TR1 i TF1 din Timerul1. Astfel, TH0 controleaz i
ntreruperea de Timer 1. Modul 3 este furnizat pentru aplicaii care
necesit timere/numrtoare ce depesc 8 bii. Cu Timerul 0 n
modul 3 de operare, microcontrollerul 80C51 simuleaz trei
timere/numrtoare. Cnd Timerul 0 este n modul 3, Timerul 1
poate fi pornit/oprit prin comutarea sa n/din modul 3, sau poate fi
folosit de ctre portul serial ca generator de rate de transfer, sau n
orice aplicaie care nu necesit o ntrerupere.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

300

Figura 5.21. Registrul de control al cicuitelor Timer/Numrtor (TCON)

5.4. MAGISTRALA DE INTERCONECTARE I2C


I2C, magistral bidirecional pe dou fire, a fost dezvoltat de ctre
compania Philips, pentru eficientizarea (maximizarea performanei
hardware i respectiv simplitatea circuitelor) controlului interconectrii
circuitelor. Toate dispozitivele compatibile cu magistrala I2C conin o
interfa implementat n cip care permite tuturor dispozitivelor de acest gen
s comunice ntre ele prin respectiva magistral. Acest concept de proiectare
rezolv multe probleme de interfaare ce apar n proiectarea circuitelor de
control digital. El se remarc prin simplitate i eficien, caracteristici
deosebit de apreciate n controlul industrial al proceselor tehnologice.

Caracteristicile magistralei de interconectare


Necesit doar dou linii de magistral (o linie serial de date SDA, i o
linie serial de ceas SCL).
Fiecare dispozitiv conectat la magistral este software adresabil printr-o
adres unic i n fiecare moment exist o relaie simpl de tip master /
slave.
Este o magistral multimaster care include detecia coliziunilor i
arbitrarea acestora pentru a preveni inconsistena datelor n cazul n care

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

301

dou sau mai multe dispozitive master iniiaz simultan transferul de


date.
Pe magistrala serial de date, pe 8 bii, au loc transferuri bidirecionale de
date cu viteze pn la 100kbit / s n mod standard sau pn la 400kbit / s
n mod rapid (fast).
Filtrele implementate n cip elimin zgomotele datorate diafoniilor,
reflexiilor, etc (spike-uri) de pe linia de date pentru pstrarea integritii
datelor.
Numrul de circuite care pot fi conectate la aceeai magistral este limitat
doar de capacitatea maxim a respectivei magistrale, anume de 400pF.
Avantajele proiectantului constau n facilitatea oferit de circuitele
integrate interconectate prin magistrala I2C, privind trecerea rapid de la
organigrama cu blocuri funcionale la prototip. Circuitele integrate (IC
Integrated Circuits) sunt conectate la magistrala I2C fr o interfa
suplimentar extern, permind modificarea sau mbogirea sistemului
prototip simplu prin conectarea sau deconectarea de la magistral (sisteme
de dezvoltare).

Figura 5.22. Aplicaii utiliznd magistrala I2C

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

302

Figura 5.22 ilustreaz n mod intuitiv dou aplicaii utiliznd


magistrala de interconectare I2C.

Caracteristicile circuitelor integrate compatibile cu magistrala I2C


Blocurile funcionale din organigram corespund cu circuitele integrate
actuale.
Nu este necesar proiectarea interfeei la magistral deoarece interfaa
I2C este deja integrat n cip.
Adresarea integrat i protocolul de transfer de date permite sistemului s
fie definit complet din punct de vedere software.
Aceleai tipuri de IC - uri pot fi des folosite n mai multe aplicaii
diferite.
Timpul de proiectare reduce durata procesului de familiarizare a
proiectantului cu cele mai frecvent folosite blocuri funcionale,
reprezentate de circuitele integrate compatibile cu magistrala I2C.
Circuitele integrate pot fi adugate sau nlturate din sistem fr a afecta
celelalte circuite conectate la magistral ( aadar caracteristici de
modularizare i toleran la defectri).
Depanarea disfunciunilor se poate realiza pas cu pas.
Timpul de dezvoltare software poate fi redus prin asamblarea unor
biblioteci cuprinznd module software refolosibile.
Circuitele integrate compatibile cu magistrala I2C, de tip CMOS, ofer
proiectantului proprieti speciale, atractive pentru echipamentele portabile
i sistemele alimentate de baterie. Ele se caracterizeaz prin:
Consum redus de energie electric.
Imunitate ridicat la zgomot.
Suport variaii largi de tensiune.
Suport variaii mari de temperatur.

Avantajele fabricantului de circuite integrate compatibile cu


magistrala I2C
Magistrala I2C este compus din dou fire simple, fapt ce minimizeaz
interconexiunile i fac ca circuitele integrate s aib un numr redus de
pini.
Protocolul de magistral I2C elimin necesitatea unui decodor de adrese.
Capacitatea de multimaster a magistralei I2C permite testarea rapid i
alinierea echipamentului utilizatorului prin conexiuni externe la un
computer printr-un program ( eventual scris n asamblare).
caracteristic a magistralei I2C, apreciat att de ctre proiectani ct i de
ctre fabricani, este aceea c, natura simpl, bazat pe doar dou fire i

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

303

capabilitatea adresrii software, fac din I2C o platform ideal pentru


magistrala ACCESS.bus (vezi figura 5.27). Aceasta reprezint o
alternativ, din punct de vedere cost / performan, pentru interfaa RS
232C de conectare a perifericelor la un calculator gazd printr-un
conector simplu avnd patru pini.

Specificaii privind magistrala I2C


Pentru aplicaii de control digital pe 8 bii, cum sunt cele care necesit
microcontrollere, se stabilesc criterii principiale de proiectare, astfel:
Un sistem complet const, de regul, din cel puin un microcontroller,
memorii i alte dispozitive periferice cum ar fi extensiile de porturi de
intrare / ieire.
Costul interconectrii diverselor dispozitive trebuie s fie minim.
Un sistem care execut o funcie de control nu necesit un transfer rapid
de date.
Eficiena global depinde de dispozitivele alese i de natura structurii
magistralei de interconectare.
Pentru realizarea unui sistem care s satisfac aceste criterii, este
nevoie de o structur de magistral serial. Dei, magistralele seriale nu au
aceleai capabiliti ca cele paralele, ele necesit mai puine fire i mai
puini pini din partea circuitelor integrate ce se vor conecta. O magistral
ns, nu reprezint numai nite srme de interconectare, ci ntruchipeaz
toate formatele i procedurile de comunicare din interiorul sistemului.
Comunicaiile ntre dispozitive prin intermediul magistralei I2C trebuie
realizate prin protocoale clar definite i complete, pentru a se evita toate
posibilitile de confuzie, pierderi de date i blocaje informaionale.
Dispozitivele rapide trebuie s poat comunica cu dispozitivele lente.
Sistemul nu trebuie s fie dependent de dispozitivele conectate la el, altfel
nu ar fi posibile eventuale modificri i mbuntiri. O procedur trebuie s
decid care dispozitiv va controla magistrala, i cnd. n cazul
interconectrii dispozitivelor cu rate de ceas diferite, trebuie specificat sursa
semnalului de ceas al magistralei.

Conceptul de magistral de interconectare


Cele dou fire (SDA - date i SCL - ceas) transport informaie ntre
dispozitivele conectate la magistral. Fiecare dispozitiv este caracterizat de
o adres unic dac este microcontroller, driver LCD, memorie, interfa
pentru tastatur i pot opera fie ca emitor fie ca receptor, dependent de
funcia dispozitivului. Evident c un driver LCD este doar receptor, n timp
ce memoria poate fi fie receptor fie emitor. n timpul realizrii

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

304

transferurilor de date, dispozitivele pot fi considerate ca master sau slave


(vezi tabelul 5.12).

Tabelul 5.12.
Definiii privind terminologia de magistral I2C

Un dispozitiv este considerat master dac iniiaz un transfer de date


pe magistral i genereaz semnalul de ceas pentru a permite transferul. n
acel moment, orice dispozitiv adresat e considerat slave. ntruct magistrala
I2C este de tip multimaster rezult c pot fi conectate la aceasta mai mult de
un dispozitiv capabil de a controla magistrala. Pentru a evita haosul care
se poate instaura n urma unor astfel de evenimente se introduce o
procedur de arbitrare. Aceasta se bazeaz pe conexiunea I LOGIC
(AND) a tuturor interfeelor I2C aferente dispozitivelor conectate la
magistrala I2C. Semnalul de ceas n timpul arbitrrii este o combinaie
sincronizat a semnalelor de ceas generate de dispozitivele master folosind
conexiunea I LOGIC asupra liniei SCL. Firete, generarea semnalelor de
ceas pe magistrala I2C este ntotdeauna responsabilitatea dispozitivului
master. Pentru transferarea datelor pe magistral, fiecare din dispozitivele
master genereaz propriul su semnal de ceas. Acest semnal poate fi alterat
doar datorit unui dispozitiv slave lent, care ntrzie semnalul activ de ceas
sau de ctre un alt dispozitiv master cnd se realizeaz arbitrarea. Un
dispozitiv master poate starta transferul doar dac magistrala este liber.

Transferul datelor
Pe durata unui transfer de date, apar dou situaii unice definite drept
condiii de START i STOP. O tranziie din stare HIGH n stare LOW a
liniei de date (SDA), n timp ce semnalul de ceas (SCL) este n stare HIGH,
indic o condiie de START. O tranziie din LOW n HIGH a liniei de date,
n timp ce semnalul de ceas rmne n stare HIGH, definete o condiie de
STOP. Cele dou condiii de START i STOP sunt generate ntotdeauna de

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

305

ctre dispozitivul master. Magistrala se consider a fi ocupat dup o


condiie de START i liber dup o condiie de STOP. Detecia celor dou
condiii de ctre dispozitivele conectate la magistral este simpl dac ele
ncorporeaz o interfa hardware necesar.
Fiecare dat depus pe linia de date (SDA) a magistralei I2C trebuie s
aib lungimea de 8 bii. Numrul de octei transmii per transfer este
nelimitat. Fiecare octet trebuie s fie urmat de un bit de recunoatere
(Acknowledge). Datele sunt transferate cu cel mai semnificativ bit nti.
Dac receptorul nu poate recepiona complet octetul de date, deoarece se
afl n execuia unui alt proces (ex: deservirea unei ntreruperi), acesta reine
semnalul de ceas SCL n stare LOW fornd intrarea transmitorului n
stare de ateptare (wait). Transferul de date continu de ndat ce receptorul
este gata pentru a primi un alt octet de date i elibereaz semnalul de ceas.
n unele cazuri, este permis folosirea unor formate de date diferite fa de
formatul I2C bus (de exemplu, pentru dispozitive compatibile CBUS). Un
mesaj care starteaz cu o adres CBUS poate fi terminat prin generarea unei
condiii de STOP, chiar n timpul transmisiei unui octet, n acest caz, nefiind
generat nici un bit de recunoatere.
Transferul de date trebuie s cuprind obligatoriu bitul de
recunoatere. Bitul de Acknowledge este transmis de slave (vezi figura
5.23).

Figura 5.23. Dispozitivul Master emitor adreseaz un Slave receptor cu o


adres pe 7 bii

Emitorul master elibereaz linia de date (SDA), aflat n stare


HIGH, pe durata respectivului impuls de tact. Totodat, receptorul trebuie s
determine trecerea liniei de date n stare LOW. Fiecare bit de date este
sincronizat cu un impuls de ceas (vezi figura 5.24).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

306

Figura 5.24. Transferul de date pe I2C

De regul, un receptor care a fost adresat este obligat s genereze bitul


de recunoatere (acknowledge) dup fiecare octet recepionat, excepie
fcnd mesajele care ncep cu o adres CBUS. Cnd un slave receptor nu
recunoate adresa de slave (de exemplu nu poate recepiona deoarece
execut o funcie n timp real), linia de date trebuie lsat n stare HIGH de
ctre slave. Dispozitivul master poate genera atunci o condiie de STOP care
va ntrerupe transferul. Dac un slave receptor recunoate adresa, dar mai
trziu n transfer nu mai poate recepiona nici o dat, dispozitivul master
trebuie s ntrerup din nou transferul. Acest lucru este indicat de ctre slave
prin generarea unui bit de recunoatere negat la finele primului octet ce
urmeaz. Slave-ul las linia de date n stare HIGH iar dispozitivul master
genereaz condiia de STOP.
Dac un master receptor este implicat ntr-un transfer, el trebuie s
semnaleze sfritul octeilor de date emitorului slave, prin faptul de a
nu genera un bit de acknowledge dup ultimul octet trimis de slave. Slave-ul
emitor trebuie s elibereze linia de date pentru a permite dispozitivului
master s genereze condiia de STOP.
Ca dispozitive master, de regul, sunt utilizate microcontrollere.
Presupunem urmtorul exemplu, de transfer de date ntre dou
microcontrollere conectate la magistrala I2C (vezi figura 5.25). Considernd
transferul datelor n format cu 7 bii de adres se vor exemplifica dou
situaii: una n care dispozitivul master este emitor i slave-ul receptor i
alta n care dispozitivul master este receptor iar slave-ul emitor. Dup
condiia de start S, se transmite adresa unui slave pe 7 bii. Aceasta este
urmat de un bit de direcie (R/ W ) (vezi figura 5.23). Dac acesta este 0
indic o scriere de date (WRITE) iar succesiunea de mesaje este urmtoarea:

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

307

Figura 5.25. Configuraie de magistral I2C folosind dou microcontrollere

1. Presupunem c microcontrollerul A dorete s trimit informaie


microcontrollerului B.
Microcontrollerul
A
(master)
apeleaz
(adreseaz)
microcontrollerul B (slave).
Microcontrollerul
A
(emitor)
transmite
data
microcontrollerului B (receptor).
Microcontrollerul A ncheie transferul.
Dac bitul de direcie este 1 el indic o cerere de date (READ),
succesiunea de mesaje fiind (vezi figura 5.26):
2. Presupunem c microcontrollerul A dorete s recepioneze
informaie de la microcontrollerul B.
Microcontrollerul A (master) se adreseaz microcontrollerului B
(slave).
Microcontrollerul A (master-receptor) primete data de al
microcontrollerul B (slave-emitor).
Microcontrollerul A ncheie transferul.

Figura 5.26. Dispozitivul Master-receptor citete datele trimise de Slave-ul emitor imediat dup primul octet

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

308

Chiar i n aceast situaie, dispozitivul master va fi A, care va genera


semnalul de ceas i va ncheia transferul. Transferul de date se ncheie
ntotdeauna printr-o condiie de stop P generat de ctre master. Totui,
dac un dispozitiv master dorete s comunice pe magistral, el poate genera
o condiie repetat de start Sr i adreseaz un alt slave fr a genera nti o
condiie de stop.

5.5. MAGISTRALA ACCESS.BUS


Reprezint magistrala de conectare a dispozitivelor accesorii la un
calculator gazd, un standard introdus de ctre compania Digital Equipment
Corporation (actualmente nglobat n Compaq). Accesoriile sunt
dispozitive periferice, de intrare / ieire, avnd o vitez relativ redus fa de
cea a calculatorului gazd. Ca exemple de dispozitive accesorii amintim:
tastatura, scanere, cititoare de cod de bare, cititoare de cartele magnetice
(card), imprimanta, convertoare de semnal, aplicaii de control n timp real
etc. Topologia de conectare a dispozitivelor accesorii este de tip magistral.
Prin intermediul magistralei ACCESS pot fi conectate pn la 125 de
dispozitive periferice la un calculator gazd. Lungimea cablului de
conectare poate fi pn la 8 m. Viteza maxim de transfer pe magistral este
de 80 Kbit/s.
Magistrala ACCESS ofer avantaje att utilizatorilor ct i
dezvoltatorilor de sisteme i dispozitive periferice. Un calculator gazd
necesit doar un port hardware pentru conectarea la un numr de
dispozitive. Trsturile comune n metodele de comunicare, pentru un
numr mare de diverse tipuri de dispozitive, conduc la economii n
dezvoltarea hardware i software.

Figura 5.27. Magistrala ACCESS.bus o alternativ cost/performan interfeei


RS-232C

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

309

Nivelul hardware al magistralei ACCESS.bus


La nivel hardware, magistrala ACCESS se bazeaz pe principiile
magistralei seriale de interconectare a circuitelor integrate (I2C), prezentat
succint anterior. Mediul fizic pentru magistrala ACCESS este compus dintrun cablu cu patru fire izolate ntre ele: semnalul de date (SDA), semnalul de
ceas (SCL), alimentarea (+5V) i masa (GND). Dispozitivele conectate la
magistral pot fi nlnuite prin intermediul a doi conectori. Dispozitivele
portabile pot avea un cablu de conectare la magistrala principal prin
intermediul unui conector n T. Semnalele seriale de ceas i date (SCL i
SDA) lucreaz mpreun pentru a defini informaia transferat pe
magistral. Calculatorul gazd alimenteaz prin intermediul liniei de +5V,
asigurnd un curent minim de 50 mA, dispozitivele periferice. Totodat
acestea pot fi alimentate i de o surs extern.

Nivelele ierarhice ale protocolului de magistral ACCESS.bus


Protocolul de comunicaie ACCESS.bus e compus din trei nivele:
protocolul I2C, protocolul de baz i protocolul de aplicaie.

Figura 5.28. Nivelele ierarhice ale protocolului de magistral ACCESS.bus

La nivelul cel mai de jos, apropiat de hardware, disciplina de baz a


magistralei ACCESS e definit ca un subset al protocolului de magistral
I2C. Protocolul I2C definete o magistral simetric de tip multimaster, n
care procesul de arbitrare ntre dispozitivele master se efectueaz fr a
pierde datele.
Nivelul de protocol urmtor este protocolul de baz. Acest nivel e
comun tuturor tipurilor de dispozitive conectate prin magistrala ACCESS i

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

310

stabilete natura asimetric de interconectare ntre calculatorul gazd i un


numr de dispozitive periferice. Calculatorul gazd are un rol special ca
manager al magistralei. Comunicaia de date se face ntotdeauna ntre
calculator i dispozitivele periferice, niciodat ntre dou periferice. Dac
protocolul I2C asigur rol de conductor al unei tranzacii pe magistral fie
emitorului fie receptorului, protocolul de comunicaie ACCESS.bus
asigur rol de master exclusiv emitorului, n timp ce rolul de slave e
atribuit exclusiv receptorului. La momente diferite de timp, att calculatorul
gazd ct i dispozitivele periferice pot fi i master / emitor i slave /
receptor.
Protocolul de baz al ACCESS.bus definete formatul mesajului
mpachetat, transferat prin magistrala ACCESS, care reprezint o tranzacie
pe magistrala I2C, nsoit de o semantic suplimentar, incluznd sume de
control. n plus, protocolul de baz definete un set de apte controale i
tipuri de mesaje de stare care sunt folosite n procesul de configurare. Cele
opt mesaje i parametrii afereni care definesc protocolul de comunicaie
ACCESS.bus sunt:
a. Mesaje de la calculatorul gazd la dispozitivele periferice:
1. Reset ().
2. Identificarea cererii ().
3. Asignarea adresei (ID string, new addr) respectivului dispozitiv.
4. Cereri de capacitate (offset) (capabilities request) provenite de
la un dispozitiv.
b. Mesaje de la dispozitivele periferice la calculatorul gazd:
1. Atenionare (status).
2. Identificarea rspunsului (ID string).
3. Rspunsuri de capacitate (offset, data frag).
4. Eroare de interfa ().
Dou caracteristici unice ale procesului de configurare sunt
autoadresarea i conectarea rapid la cald. Autoadresarea se refer la modul
n care dispozitivelor le sunt asignate adrese de magistral unice n procesul
de configurare fr a fi nevoie pentru a seta jumperi sau comutatori ai
dispozitivelor. Conectarea rapid la cald se refer la abilitatea de ataare sau
deconectare a dispozitivelor, n timp ce sistemul funcioneaz fr a fi
nevoie de restartarea acestuia.
Pe nivelul cel mai nalt privind protocolul de comunicaie
ACCESS.bus se afl protocolul aplicaie. Acesta definete semantica
mesajelor specifice tipurilor funcionale particulare de dispozitive. Tipuri
diferite de dispozitive necesit protocoale de aplicaie diferite. Acest tip de
protocol a fost definit pentru trei clase de dispozitive: tastatur, dispozitive
de transfer text i dispozitive de localizare (locators).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

311

Protocolul de tastatur definete mesajele standard generate n urma


apsrii tastelor i mesaje necesare controlului tastaturii. Protocolul ncearc
s defineasc cel mai simplu set de funcii din care poate fi construit
interfaa standard de tastatur.
Protocolul aferent dispozitivelor localizatoare definete un set de
mesaje standard generate n urma micrii acestor dispozitive sau activrii
unor chei ntreruptoare (comutatoare) pentru dispozitivele de poziionare.
Dispozitive mai complexe pot fi modelate ca o combinaie dintre dispozitive
de baz sau pot asigura propriul lor driver.
Protocolul de comunicaie prin dispozitive cu transfer de text
intenioneaz s furnizeze un mod simplu de transmitere a datelor n format
caracter sau binar, la i de la dispozitive orientate fiier, cum sunt cititoare
n cod de bare sau modem-uri. Modelul de fiier secvenial n format
caracter servete ca numitor comun pentru conectarea dispozitivelor
interfa la RS-232C.
Un avantaj major n proiectarea dispozitivelor este acela c ele pot
mpri software-ul specific unui dispozitiv, att la nivel firmware (rezident
n dispozitiv) ct i la nivel software (rezident n driver), necesar sistemului
de operare al calculatorului gazd pentru a permite programelor de aplicaie
s acceseze respectivele dispozitive. Ca i concluzie, toate cele trei nivele de
protocol necesit inteligen la nivel de dispozitiv. Nivelele de protocol
joase ale acestui firmware sunt comune mai multor dispozitive. Nivelele de
protocol ridicate sunt specifice funcie de dispozitiv sau aplicaie.

Kit-ul de dezvoltare ACCESS.bus


ACCESS.bus este un standard industrial deschis ce asigur un mod
simplu i uniform de conectare a maxim 125 de dispozitive la un singur port
al unui computer. Caracteristicile principale ar fi: rata de transfer a datelor
100.000 bii / s, arbitrare hardware, reconfigurare dinamic, suport diverse
drivere de dispozitiv.
Caracteristicile kit-ului de dezvoltare software sunt:
Satisface n ntregime standardul ACCESS.bus.
Pachetul hardware include:
Controller-ul de plac ACCESS.bus 125I PC / AT.
Un mouse ACCESS.bus.
priz extensoare.
Cabluri ACCESS.bus (2 ft picioare lungime i 4 ft picioare
lungime)
Microcontroller Philips 87C751 (n mare parte compatibil 80C51).
Pachetul software complet conine:
Microcod (MC) nscris pe plac aferent controller-ului principal.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

312

Program manager, ce funcioneaz ca un program TSR (terminate and


stay resident) sub DOS.
Program de monitorizare i control al magistralei ACCESS.bus.
Cod surs pentru driver-ele software aferent att calculatorului gazd
ct i dispozitivelor periferice.
Cod surs pentru nivelul aplicaie al protocolului ACCESS.bus.

Figura 5.29. Kit-ul de dezvoltare ACCESS.bus accesorii i software complet

Controller-ul de plac ACCESS.bus 125I PC / AT


Se bazeaz pe microcontrollerul Philips 8xC654 cu interfa I2C.
Interfaa ACCESS.bus controleaz o reea de tip ACCESS.bus. Este
realizat din conectori alimentai la +5V i 0.75A. Dimensiunea reelei
ACCESS.bus este de maxim 125 de dispozitive. Distana fizic dintre
dispozitive este maxim 25 ft (picioare, un picior ~ 0.3m). Interfaa cu
sistemul IBM PC / AT sau compatibil, se face folosind un mecanism PC /
AT de intrare / ieire programabil, pe 16 bii. Adresele de I / O selectabile
de utilizator sunt:
De la 0x250 la 0x25F
De la 0x260 la 0x26F
De la 0x350 la 0x35F.
ntreruperile selectabile de utilizator sunt: IRQ10, IRQ11 i IRQ12. Pe
plac se afl un buffer de memorie de 8 ko SRAM (vezi figura 1.30).

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

313

Figura 5.30. Controller-ul de plac ACCESS.bus schema bloc

Pachetul software aferent kit-ului de dezvoltare ACCESS.bus


Microcodul (MC) nscris pe plac este un pachet de programe n timp
real ce controleaz operaiilor diverselor dispozitive conectate la
ACCESS.bus. Programul manager ruleaz ca un program rezident TSR
(Terminate and Stay Resident) sub sistemul de operare DOS sau
WINDOWS, comunic cu microcodul MC i cu variate drivere de
dispozitiv. El ruteaz mesajele de aplicaie i control ntre dispozitivele
fizice i driverele lor software. Programul monitor, este bazat pe meniuri,
uor accesibile utilizatorului, afieaz mesajele selectate de utilizator i
permite acestuia s controleze dispozitivele specifice. La alimentarea plcii
este realizat un test complet de diagnosticare proprie (memorie, periferice
aferente). Diagnosticarea se realizeaz sub controlul programului monitor.

Protocolul CAN (reea de control)


CAN este un protocol de multiplexare al instalaiilor electrice
dezvoltat de firma Bosch pentru aplicaii industriale automatizate, maini i
utilaje, echipamene medicale, echipamente de control n construcii.
Protocolul este atractiv pentru utilizarea ntr-o varietate de aplicaii deoarece
reprezint un instrument puternic de detecie a erorilor. Poate fi utilizat cu
succes n medii cu nivel de zgomot ridicat sau critic. CAN este foarte
flexibil n termenii transmisiei de date i schemei de conectare i poate fi
uor adaptat la majoritatea aplicaiilor.
Compania Philips ofer o varietate de dispozitive care suport
protocolul CAN, cum ar fi: dispozitive stand-alone (de sine - stttoare)
dar i microcontrollere cu interfa CAN integrat. Dintre acestea amintim:
82C200 controller stand alone, 82C150 (dispozitive periferice legate serial
la CAN) i 82C250 (controller de emisie recepie legat la CAN). Exemple
de microcontrollere care au integrate o interfa CAN sunt 8xC592 i 8x598.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

314

5.6. PLACA DE DEZVOLTARE DB 51


DB-51 este o plac de dezvoltare / proiectare a unui sistem de nalt
performan dedicat familiei de microcontollere Philips 80C51. DB-51
reprezint un instrument flexibil, uor de folosit care permite utilizatorului
s construiasc un prototip primar, s-l analizeze i s-l depaneze, s fac
schimbri asupra sa i s continue depanarea. mbuntirea deciziilor de
proiectare se face folosind DB-51 pentru a verifica i testa avantajele
ctorva microcontrollere diferite. De asemenea, placa de dezvoltare DB-51
reprezint un instrument ideal de antrenare pentru familiarizarea
utilizatorului cu proiectarea, folosind arhitectura 80C51. De remarcat c,
DB-51 nu intenioneaz totui s nlocuiasc un sistem de emulare complet
n proiectarea complex cu microcontrollere.

Figura 5.31. Placa de dezvoltare DB-51

Caracteristici de baz
Suport majoritatea microcontrollerelor derivate ale familiei Philips
80C51 (8x31/51, 8x32/52, 8xC31/51, 8xC32/52, 8xC652, 8xC654,
8xC851, 8xC550, 8xC552, 8xC562, 8xC451, 8xC528 i altele cu
memorie extern adresabil i suport UART).
Se conecteaz prin serial la un calculator IBM PC sau la alte
calculatoare gazd compatibile.
Sistemul de memorie al DB-51 const din 32 ko RAM. n acest spaiu se
ncarc i modific programele utilizator.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

315

Conine puncte de ntrerupere software (breakpoint). Acestea permit


execuia programelor n timp real pn cnd opcode-ul instruciunii, pe
care s-a setat punctul de ntrerupere, este citit de la respectiva adres.
Examineaz i altereaz coninutul regitrilor, memoriei RAM i
porturile.
Conine un debugger simbolic, compatibil cu link-editorul de fiiere
obiect. DB-51 permite depanarea simbolic pas cu pas a programelor,
att n limbaj de asamblare ct i n limbaje de nivel nalt (PLM, C).
Debugger-ul folosete simboluri coninute n fiiere absolute (complete),
generate de majoritatea programelor de relocare i link-editare.
Debuggerul obinuiete s ncarce un program, s-l execute n timp real
sau s simuleze mediul software, s programeze microcontrollerul sau s
execute multe alte funcii. Programele pot fi executate n mod continuu
(run) sau pas cu pas (trace). Depanarea poate fi fcut folosind linii de
program scrise n limbaj de nivel nalt sau instruciuni n asamblare.
Debuggerul trebuie s permit cunoaterea permanent (prin intermediul
unei ferestre) a strii programului din diverse perspective, cum ar fi: a
variabilelor i a valorilor lor, a punctelor de ntrerupere, a fiierului surs,
a registrelor procesorului, a locaiilor memoriei, a registrelor periferice.
Variabilele programului pot fi inspectate, iar valorile aferente lor pot fi
reinute pe toat durata rulrii programului. De asemenea, valoarea
curent a unei variabile poate fi nlocuit cu una specificat. Pentru
depanarea simbolic a programelor surs, trebuie ca acestea s fie
prevzute (pregtite) cu informaia de depanare (numrul fiecrei linii de
cod, referine globale i locale, etichete etc). Pregtirea unui program
pentru depanare se realizeaz n etapele:
1. Scrierea codului surs cu ajutorul unui Editor.
2. Compilarea surselor de ctre un Asamblor sau un Cross-compilator
de limbaje de nivel nalt.
3. Localizarea i link-editarea fiierelor obiect cu programul Intel RL51
sau cu unul asemntor, program care genereaz un format compatibil
cu cel al procesorului Intel.
Reprezint un analizor de performan.
ncarc i descarc fiiere n format ASCII i obiect.
Se furnizeaz mpreun cu un ghid de utilizare, dotat cu exemple i
aplicaii destinate familiarizrii utilizatorului cu arhitectura 8xC51,
programarea i utilizarea plcii de dezvoltare / proiectare DB-51.
Limitri:
Programul monitor folosete partea inferioar a celor 32 ko de
memorie.

Arhitecturi cu executii multiple ale instructiunilor, vectoriale si multicore

316

Standardul UART (Universal Asynchron Receiver / Transmiter) este


folosit la comunicaia cu PC-ul i astfel, nu este n mod normal
disponibil programului utilizator.
Rspunsul la ntreruperi este ntrziat uor prin redirectarea de la
programul monitor la programul uilizator.
Folosirea circuitelor numrtoare de tip watchdog sau powerdown pentru avertizarea mpotriva cderii sursei de alimentare, sau
modurile de operare lente, temporizatoare sunt limitate datorit
interaciunii cu programul monitor.
Software-ul utilizator furnizat de placa DB-51 este caracterizat att de un
program bazat pe meniuri ct i de o interfa software bazat pe linia de
comand. Asamblorul i dezasamblorul sunt furnizate mpreun, cu
posibiliti de ncrcare i descrcare a fiierelor n format ascii sau
obiect.
Setul de comenzi acceptate:
ASM BIT BYTE BREAKPOINT [enable, disable, reset] CHIP
[type] CLS CODE DATA DASM DEFAULT DIR
EVALUATE EXIT GO [from, till] HALT HELP HISTORY
LINES LIST [file] LOAD [code, symbols] LOCALS MODULES
PORTS PROCEDURES PUBLICS RBIT RBYTE
REGISTERS RESET SAVE SOUND STATUS STEP [n] TIME
Caracteristicile calculatorului gazd:
IBM PC / AT / XT sau compatibile n configuraia 512 ko RAM minim,
un disc floppy, o interfa RS 232 pentru PC, cablu, sistem de operare
PC DOS versiunea minim 6.0 .

Figura 5.32. Proiectarea folosind placa DB-51

6. PROBLEME PROPUSE SPRE REZOLVARE [8]


1. Considerm un procesor scalar pipeline cu 5 nivele (IF, ID, ALU, MEM,
WB) i o secven de 2 instruciuni succesive i dependente RAW, n
dou ipostaze:
A.
i1: LOAD R1, 9(R5)
i2: ADD R6, R1, R3
B.

i1:
i2:

ADD R1, R6, R7


LOAD R5, 9(R1)

a. Stabilii cu ce ntrziere (Delay Slot) starteaz a doua instruciune


?
b. Dar dac se aplic mecanismul de forwarding ?
n acest caz, pentru secvena B, ct ar fi fost ntrzierea dac
n cazul celei de a doua instruciuni, modul de adresare nu ar fi fost
indexat ci doar indirect registru ? Comentai.
c. Verificai rezultatele obinute pe procesorul DLX. Determinai
creterea de performan obinut aplicnd mecanismul de
forwarding [(IRCu forwarding - IRFara forwarding) / IRFara forwarding].
Obs. Se consider c operanzii instruciunilor sunt necesari la finele fazei
ID, iar rezultatele sunt disponibile n setul de regitri generali la finele
fazei WB.
2. Scriei o secven de program asamblare RISC care s reprezinte
translatarea corect a programului scris n limbaj C ? Iniial, regitrii Ri,
Rk, Rl, Rj, Rm conin respectiv variabilele i, k, l, j i m.
K = X[i-4]+12;
L = Y[j+5] XOR K;
M = K AND L;
Se consider programul executat pe un procesor scalar pipeline RISC
cu 4 nivele (IF, ID, ALU/MEM, WB) i operanzii instruciunilor sunt
necesari la finele fazei ID, iar rezultatele sunt disponibile n setul de regitri
generali la finele fazei WB. Se cere:
a. Reprezentai graful dependenelor de date (numai dependenele de
tip RAW).

Probleme propuse spre rezolvare

302

b. n cte impulsuri de tact se execut secvena de program


asamblare ?
c. Reorganizai aceast secven n vederea minimizrii timpului de
execuie (se consider c procesorul deine o infinitate de regitri
generali).
d. Aplicnd tehnica de forwarding, n cte impulsuri de tact se
execut secvena reorganizat ?
3. Se consider o arhitectur superscalar caracterizat de urmtorii
parametri (vezi Figura 1: Schema bloc a unei arhitecturi superscalare
L. Vinan, A. Florea Sisteme cu microprocesoare Aplicaii, Editura
Universitii, Sibiu, 1999, pag. 189):
FR = 4 instr. / ciclu; nr. instruciuni citite simultan din cache-ul de
instruciuni sau memoria de instruciuni n caz de
miss n cache.
IRmax = 2 (respectiv 4) instr. / ciclu; nr. maxim de instruciuni
independente
lansate
simultan n execuie.
N_PEN = 10 impulsuri de tact; nr. impulsuri de tact penalizare necesari
accesului la memoria de instruciuni n
caz de miss n cache.
Latena = 2 impulsuri de tact; nr. impulsuri de tact necesari execuiei
pentru orice tip de instruciune, lansat
din buffer-ul de prefetch (uniti de
execuie nepipeline-izate).
IBS = 8 locaii (instruciuni); dimensiunea buffer-ului de prefetch.
RmissIC = 40%; rata de miss n cache-ul de instruciuni (din 5 citiri din
IC, primele 2 sunt cu miss).
Considerm urmtoarea secven succesiv de 20 instruciuni,
caracterizat de hazarduri RAW aferente, executat pe arhitectura dat.
i1 i2 i3 RAW i4 i5 i6 RAW i7 i8 i9 i10 i11
RAW i12 i13 i14 i15 i16 i17 RAW i18 i19 i20. (n
continuare nu mai sunt instruciuni de executat)
Obs. n cadrul unui ciclu de execuie se realizeaz urmtoarele: din partea
inferioar a buffer-ului de prefetch sunt lansate maxim IRmax
instruciuni independente, iar simultan n partea superioar a buffer-

Probleme propuse spre rezolvare

303

ului sunt aduse, dac mai e spaiu disponibil, FR instruciuni din


cache-ul sau memoria de instruciuni.
Determinai creterea de performan (studiu asupra ratei medii de
procesare) prin varierea parametrului IRmax de la 2 la 4 instruciuni / ciclu.
Prezentai n fiecare ciclu de execuie coninutul buffer-ului de prefetch.
4. Considerm un procesor RISC scalar pipeline caracterizat printre altele de
urmtoarele instruciuni:
ADD
LD
ST
MOV
BEQ
BNE
J label
a.
ST
LD

Ri, Rj, Rk al doilea operand poate fi i valoare imediat


Ri, adres
adres, Ri
Ri, Rj
Ri, Rj, label
Ri, Rj, label

Acest procesor execut urmtoarea secven:


(R9), R6
R10, (R9)

Rescriei aceast secven folosindu-v de instruciunile cunoscute


pentru a elimina ambiguitatea referinelor la memorie aprute n secvena
original dat i a le executa mai rapid.
b. Se d secvena de instruciuni de mai jos:
ST
LD

4(R5), R8
R9, 8(R6)

Realizai o nou secven ct mai rapid care s nlocuiasc n mod


corect pe cea de mai sus i care s elimine posibila ambiguitatea a
referinelor la memorie, favoriznd execuia instruciunii LD naintea lui
ST.
5. Dndu-se urmtoarele secvene de instruciuni care implic dependene
reale de date (RAW) s se rescrie aceste secvene, cu un numr minim de

Probleme propuse spre rezolvare

304

instruciuni i folosind doar aceiai regitri (eventual R0 = 0


suplimentar), dar eliminnd dependenele respective.
Obs. Unele instruciuni pot rmne nemodificate.
a)
b)

c)
d)
e)

MOV
ADD
MOV
ADD
LD
MOV
ST
MOV
BNE
ADD
MOV

R6, R7
R3, R6, R5
R6, #4
R7, R10, R6
R9, (R7)
R6, #0
9(R1), R6
R5, #4
R5, R3, Label
R3, R4, R5
R6, R3

6. Se consider o arhitectur superscalar caracterizat de urmtorii


parametri (vezi Figura 1: Schema bloc a unei arhitecturi superscalare
L. Vinan, A. Florea Sisteme cu microprocesoare Aplicaii, Editura
Universitii, Sibiu, 1999, pag. 189):
FR = 4 (respectiv 8) instr. / ciclu; nr. instruciuni citite simultan din cacheul de instruciuni sau memoria de
instruciuni n caz de miss n cache.
IRmax = 4 instr. / ciclu; nr. maxim de instruciuni independente lansate
simultan n execuie.
N_PEN = 10 impulsuri de tact; nr. impulsuri de tact penalizare necesari
accesului la memoria de instruciuni n
caz de miss n cache.
Latena = 2 impulsuri de tact; nr. impulsuri de tact necesari execuiei
pentru orice tip de instruciune, lansat
din buffer-ul de prefetch (uniti de
execuie nepipeline-izate).
IBS = 8 locaii (instruciuni); dimensiunea buffer-ului de prefetch.
RmissIC = 50% (iniial); rata de miss n cache-ul de instruciuni (din 2
citiri din IC, prima se va considera cu miss).
Pe arhitectura dat se proceseaz urmtoarea secven succesiv de 32
instruciuni, caracterizat de hazarduri RAW aferente.

Probleme propuse spre rezolvare

305

i1 i2 i3 RAW i4 i5 i6 RAW i7 i8 i9 i10 i11


RAW i12 i13 i14 i15 i16 i17 RAW i18 i19 i20 i21 i22
RAW i23 i24 i25 i26 i27 RAW i28 i29 i30 i31 RAW
i32.
Obs. n cadrul unui ciclu de execuie se realizeaz urmtoarele: din partea
inferioar a buffer-ului de prefetch sunt lansate maxim IRmax
instruciuni independente, iar simultan n partea superioar a bufferului sunt aduse, dac mai e spaiu disponibil, FR instruciuni din
cache-ul sau memoria de instruciuni.
Determinai creterea de performan (studiu asupra ratei medii de
procesare) prin varierea parametrului FR de la 4 la 8 instruciuni / ciclu. De
menionat c aceast variaie a FR de la 4 la 8 implic diminuarea ratei de
miss n cache-ul de instruciuni cu 50%. Prezentai n fiecare ciclu de
execuie coninutul bufferului de prefetch. n ce const limitarea
performanei n acest caz ?
7. Se consider urmtoarea secven de instruciuni executat pe un procesor
pipeline cu 4 nivele (IF, ID, ALU/MEM, WB), fiecare faz necesitnd un
tact, cu urmtoarea semnificaie:
IF = citirea instruciunii din cache-ul de instruciuni sau din memorie
ID = decodificarea instruciunii i citirea operanzilor din setul de
regitri generali
ALU / MEM = execuie instruciuni aritmetice sau accesare memorie
WB = nscriere rezultat n registrul destinaie
Operanzii instruciunilor sunt necesari la finele fazei ID, iar rezultatele
sunt disponibile n setul de regitri generali la finele fazei WB.
i1:
i2:
i3:
i4:
i5:
i6:
i7:
i8:
i9:
i10:

ADD Ri, R0, #i


ADD Rj, Ri, #4
LOAD R1, (Ri)
LOAD R2, (Rj)
ADD R3, R1, R2
SUB R4, R1, R2
ABS R4, R4
ADD R1, R13, R14
DIV R1, R1, #2
STORE (Ri), R1

Probleme propuse spre rezolvare

306

Se cere:
a. Reprezentai graful dependenelor de date (RAW, WAR, WAW) i
precizai n cte impulsuri de tact se execut secvena? Iniial,
structura pipe de procesare este goal, regitri iniializai cu 0.
b. Reorganizai aceast secven n vederea minimizrii timpului de
execuie (se consider c procesorul deine o infinitate de regitri
generali disponibili). n cte impulsuri de tact s-ar procesa n acest
caz secvena ?
c. Ce simuleaz secvena iniial dac n instruciunea i8 n locul
regitrilor R13 am avea R3 i n locul lui R14 am avea R4. Precizai
formula matematic obinut.
8. Se consider secvena de program RISC:
i1:
i2:
i3:
i4:
i5:
i6:
i7:

ADD R1, R2, #15


ADD R3, R4, #17
ADD R5, R3, R1
ADD R6, R5, #12
ADD R3, R7, #3
ADD R8, R3, #2
ADD R9, R8, #14

Se cere:
a. S se construiasc graful dependenelor de date (RAW, WAR,
WAW) aferent acestei secvene i precizai n cte impulsuri de tact
se execut secvena, tiind c latena de execuie a instruciunii
ADD este de 1 ciclu ?
b. S se determine modul optim de execuie al acestei secvene
reorganizate, pe un procesor RISC superscalar cu 6 seturi de
regitri generali i 3 uniti ALU.
9. Se consider un microprocesor RISC cu o structur pipe de procesare a
instruciunilor, avnd vectorul de coliziune ataat 101011. S se
determine rata teoretic optim de procesare a instruciunilor pentru acest
procesor [instr/ciclu] i s se expliciteze algoritmul dup care trebuie
introduse instruciunile n structur.
10. Fie vectorul de coliziune 1001011 ataat unui microprocesor RISC cu o
structur pipe de procesare a instruciunilor. S se determine rata

Probleme propuse spre rezolvare

307

teoretic optim de procesare a instruciunilor pentru acest procesor


[instr/ciclu] i explicitnd algoritmul dup care trebuie introduse
instruciunile n structur. Determinai creterea de performan
comparativ cu situaia n care s-ar procesa pe o structur CISC
convenional [(IRRISC - IRCISC) / IRCISC].
11.a) n cadrul unui procesor vectorial se consider urmtoarea secven de
program:
x=0
for i = 1 to 100 do
x = x + A[i]*B[i];
endfor
n ci cicli de tact se execut secvena ? Este bucla vectorizabil
? n caz negativ, scriei o nou secven de program care s aib
acelai efect dar care s fie executat mult mai rapid ? Determinai
noul timp de execuie al secvenei ? Concret din ce motive se ctig
timp de procesare ?
b) S se proiecteze un cache de instruciuni cuplat la un procesor
superscalar (VLIW). Lungimea blocului din cache se consider egal
cu rata de fetch a procesorului, n acest caz 8 instruciuni / bloc.
Cache-ul va fi de tipul 4 way set associative (cu 4 blocuri / set).
Explicai semnificaia fiecrui cmp utilizat (necesar) n proiectare.
c) Descriei avantajelor introduse de Tomasulo n cadrul arhitecturii care
i poart numele.
12.a) De ce nu este suficient doar optimizarea unitilor secveniale de
program (basic-blocks), fiind necesar optimizarea global a
ntregului program?
b) Care sunt n opinia dvs. motivele pentru care microprocesoarele
superscalare au un succes comercial net superior celor cu paralelism
exploatat prin optimizri de program (Scheduling static) de
exemplu microprocesoare tip VLIW, EPIC, etc. ?
13. Relativ la gestiunea memoriei n sistemele moderne, tratai ntr-o
manier concis urmtoarea problematic:
a. n ce rezid necesitatea unui sistem de memorie virtual (MV) ?
b. Explicai principiile proteciei n sistemele cu MV ?

Probleme propuse spre rezolvare

308

c. Explicai succint rolul TLB (Translation Lookaside Buffer) n


translatarea adreselor.
d. n ce const dificultile implementrii unui cache virtual ? Care ar
fi avantajele acestuia ?
14.a) Care este semnificaia termenilor:
Arhitectur RISC (Reduced Instruction Set Computer)
Arhitectur CISC (Complex Instruction Set Computer)
Care arhitectur este mai rapid i de ce ?
b) Explicai semnificaia nivelelor pipeline aferente unui microprocesor
(IF, ID, ALU, MEM, WB). Explicai avantajele introduse de
conceptul de procesare "pipeline".
c) Ce este o arhitectur VLIW (Very Large Instruction Word) ? Descriei
asemnrile i deosebirile dintre o arhitectur VLIW i una
superscalar. Subliniai avantajele arhitecturii VLIW fa de o
arhitectur convenional de procesor.
d) Un microprocesor cu 4 nivele pipeline (IF, ID, ALU/MEM, WB)
execut urmtoarea secven de cod:
ADD
; Adunare
BR SUB1 ; Salt necondiionat - apel subrutin
SUB
; Scdere
MUL
; nmulire
.
.
SUB1:
; Intrarea n subrutin - adresa primei
; instruciuni din subrutin
Ce se ntmpl cnd procesorul ntlnete instruciunea de salt
(situaia instruciunilor n "pipe")? Considernd c procesorul primete
o ntrerupere dup ce execut instruciunea de salt, explicai clar
secvena de evenimente petrecute dup recepia ntreruperii.
15. Considerm un procesor pipeline cu 5 nivele (IF, ID, ALU, MEM, WB)
n care condiia de salt este verificat pe nivelul de decodificare,
operanzii instruciunilor sunt necesari la finele fazei ID, iar rezultatele
sunt disponibile n setul de regitri generali la finele fazei WB. Trasai
diagrama ciclului de tact a procesorului incluznd dependenele reale de
date (RAW), reprezentai graful dependenelor de date, la execuia
urmtoarei secvene de instruciuni. Stabilii cu ce ntrziere (Delay Slot)
starteaz a doua instruciune n cazul existenei unui hazard RAW ntre
dou instruciuni; care este timpul total de procesare al secvenei. Explicit

Probleme propuse spre rezolvare

309

subliniai toate tipurile de hazard (de date, de ramificaie) i dac i unde


poate fi aplicat mecanismul de forwarding. Presupunnd c instruciunea
de salt este corect predicionat ca non-taken n ci cicli de tact se va
procesa secvena ?
ADD R1, R2, R3
LD R2, 0(R1)
BNE R2, R1, dest
SUB R5, R1, R2
LD R4, 0(R5)
SW R4, 0(R6)
ADD R9, R5, R4
16.a) n general un microprocesor consum multe impulsuri de tact pentru a
citi o locaie de memorie DRAM, datorit latenei relativ mari a
acesteia. Implementarea cror concepte arhitecturale micoreaz
timpul mediu de acces al microprocesorului la memoria DRAM ?
b) Care este principalul concept arhitectural prin care se micoreaz
timpul mediu de acces al procesorului la discul magnetic ?
17. S se proiecteze un cache de instruciuni cuplat la un procesor
superscalar (VLIW). Lungimea blocului din cache se consider egal cu rata
de fetch a procesorului, n acest caz 4 instruciuni / bloc. Cache-ul va fi de
tipul:
a) semiasociativ, cu 2 blocuri / set (2 way set associative)
b) complet asociativ (full - associative)
c) cu mapare direct (direct mapped)
Ce se ntmpl dac n locul adresrii cu adrese fizice se consider
adresare cu adres virtual?
18.a) De ce este dificil procesarea Out of Order a instruciunilor Load
respectiv Store ntr-un program i de ce ar putea fi ea benefic?
b) Care dintre cele dou secvene de program s-ar putea procesa mai
rapid pe un procesor superscalar cu execuie Out of Order a
instruciunilor? Justificai.
B1.
for i=1 to 100
a[2i]=x[i];
y[i]=a[i+1];

B2.
a[2]=x[1];
y[1]=a[2]+5;
for i=2 to 100

Probleme propuse spre rezolvare

310

a[2i]=x[i];
y[i]=a[i+1]+5;
19. Se consider un procesor scalar pipeline, n 3 faze diferite de
procesare (IF,EX,WR), fiecare faz necesitnd un tact, cu urmtoarea
semnificaie:
IF = aducere i decodificare a instruciunii
EX=selecie operanzi din setul de regitri i execuie
WR=nscriere rezultat n registrul destinaie
Se consider secvena de program:
1: R1<-- (R11)+(R12)
2: R1<-- (R1)+(R13)
3: R2 <-- (R3)+4
4: R2 <-- (R1)+(R2)
5: R1<-- (R14)+(R15)
6: R1<-- (R1)+(R16)
a) n cte impulsuri se execut secvena? (iniial, structura pipe de
procesare este goal) Reorganizai aceast secven de program
n vederea minimizrii timpului de execuie (procesorul deine o
infinitate de regitri generali disponibili). n cte impulsuri de tact
s-ar procesa n acest caz secvena ?
b) n cte tacte (minimum) s-ar procesa secvena dac procesorul ar
putea executa simultan un numr nelimitat de instruciuni
independente? Se consider c procesorul poate aduce n acest caz,
simultan, 6 instruciuni din memorie. Justificai.
20. Se consider o structur pipe de procesare a instruciunilor avnd un
nivel de citire a operanzilor din setul de regitri (RD), situat anterior unui
nivel de scriere a rezultatului n setul de regitri (WR). Creia dintre cele
dou operaii (RD, WR) i se d prioritate n caz de conflict i n ce scop ?
21. Un procesor superscalar poate lansa n execuie simultan maxim N
instruciuni ALU independente. Logica de detecie a posibilelor hazarduri

Probleme propuse spre rezolvare

311

RAW (Read After Write) ntre instruciunile ALU are costul C ($). Ct
va costa logica de detecie dac s-ar dori ca s se poat lansa simultan n
execuie maxim (N+1) instruciuni ALU independente ? (Se vor
considera costurile ca fiind direct proporionale cu complexitatea
logicii de detecie a hazardurilor RAW).
22. Relativ la o memorie cache cu mecanism de adresare tip mapare
direct, precizai valoarea de adevr a afirmaiilor de mai jos, cu
justificrile de rigoare.
a) Rata de hit crete dac capacitatea memoriei crete;
b) dat de la o anumit locaie din memoria principal poate fi
actualizat la orice adres din cache;
c) Scrieri n cache au loc numai n ciclurile de scriere cu miss n
cache;
d) Are o rat de hit net mai mare dect cea a unei memorii complet
asociative i de aceeai capacitate.
23. Se consider secvena de program RISC:
1:
2:
3:
4:
5:

ADD
ADD
ADD
ADD
ADD

R1, R11, R12


R1, R1, R13
R2, R3, R9
R2, R1, R2
R1, R14, R15

a) Reprezentai graful dependenelor de date (numai dependenele de


tip RAW)
b) tiind c ntre 2 instruciuni dependente RAW i succesive e nevoie
de o ntrziere de 2 cicli, n ci cicli s-ar executa secvena ?
c) Reorganizai secvena n vederea unui timp minim de execuie (nu
se consider alte dependene dect cele de tip RAW).
24.a) Considernd un procesor RISC pe 5 nivele pipe (IF, ID, ALU, MEM,
WB), fiecare durnd un ciclu de tact, precizai ci cicli de ntrziere
(branch delay slot) impune o instruciune de salt care determin
adresa de salt la finele nivelului ALU ?
b) De ce se prefer implementarea unor busuri i memorii cache separate
pe instruciuni, respectiv date n cazul majoritii procesoarelor RISC
(pipeline) ?

Probleme propuse spre rezolvare

312

c) De ce sunt considerate instruciunile CALL / RET mari consumatoare


de timp n cazul procesoarelor CISC (ex. I-8086) ? Cum se evit acest
consum de timp n cazul microprocesoarelor RISC ?
25. Considernd un microprocesor virtual pe 8 bii, avnd 16 bii de adrese,
un registru A pe 8 bii, un registru PC i un registru index X, ambele pe
16 bii i c opcode-ul oricrei instruciuni e codificat pe 1 octet, s se
determine numrul impulsurilor de tact necesare aducerii i execuiei
instruciunii memoreaz A la adresa dat de (X+deplasament). Se
consider c instruciunea e codificat pe 3 octei i c orice procesare
(operaie intern) consum 2 tacte. Un ciclu de fetch opcode dureaz 6
tacte i orice alt ciclu extern dureaz 4 tacte.
26. Relativ la o arhitectur de memorie cache cu mapare direct se consider
afirmaiile:
a) Nu permite accesul simultan la cmpul de date i respectiv tag al
unui cuvnt accesat.
b) La un acces de scriere cu hit, se scrie n cache att data de nscris
ct i tag-ul aferent.
c) Rata de hit crete uor dac 2 sau mai multe blocuri din memoria
principal - accesate alternativ de ctre microprocesor - sunt
mapate n acelai bloc din cache.
Stabilii valoarea de adevr a acestor afirmaii i justificai pe scurt
rspunsul.
27. Ce corecie (doar una!) trebuie fcut n secvena de program asamblare
pentru ca translatarea de mai jos s fie corect i de ce ? Iniial, regitrii
Ri, Rk, Rl, Rj conin respectiv variabilele i, k, l, j. Primul registru dup
mnemonic este destinaie. (Rj+offset) semnific operand n memorie la
adresa dat de (Rj+offset).
k = a[i+2]+5;
l = c[j+9] - k;

i1:
i2:
i3:
i4:
i5:
i6:

ADD Rk, #2, Ri


LOAD Rk, (Rk+0)
ADD Rk, Rk, #5
ADD Rl, #9, Rj
LOAD Rl, (Rj+0)
SUB Rl, Rl, Rk

Probleme propuse spre rezolvare

313

28. Se consider un microsistem realizat n jurul unui microprocesor care ar


accepta o frecven maxim a tactului de 20 MHZ. Regenerarea
memoriei DRAM se face n mod transparent pentru microprocesor.
Procesul de regenerare dureaz 250 ns. Orice ciclu extern al procesorului
dureaz 3 perioade de tact. Poate funciona n aceste condiii
microprocesorul la frecvena maxim admis? Justificai.
29. Explicai concret rolul fiecreia dintre fazele de procesare (ALU,
MEM, WB) n cazul instruciunilor:
a) STORE R5, (R9)06h;
surs
b) LOAD R7, (R8)F3h;
dest
c) AND R5, R7, R8.
dest
30. Se consider un procesor scalar pipeline, n 3 faze diferite de procesare
(IF, EX, WR), fiecare faz necesitnd un tact, astfel:
IF = fetch instruciune i decodificare;
EX = selecie operanzi din setul de regitri i execuie;
WB = nscriere rezultat n registrul destinaie.
a) n cte impulsuri de tact se execut secvena de program de mai jos
?
b) Reorganizai aceast secven n vederea minimizrii timpului de
execuie.
1:
2:
3:
4:
5:
6:

ADD R3, R2, #2


ADD R1, R9, R10
ADD R1, R1, R3
ADD R2, R3, #4
ADD R2, R1, R2
STORE R3, (R1)2

Probleme propuse spre rezolvare

314

31. Un procesor pe 32 bii la 50 MHZ, lucreaz cu 3 dispozitive periferice


prin interogare. Operaia de interogare a strii unui dispozitiv periferic
necesit 100 de tacte. Se mai tie c:
a) interfaa cu mouse-ul trebuie interogat de 30 de ori / s pentru a fi
siguri c nu se pierde nici o micare a utilizatorului.
b) floppy - discul transfer date spre procesor n uniti de 16 bii i
are o rat de transfer de 50 ko / s.
c) hard - discul transfer date spre procesor n uniti de 32 bii i are
o rat de transfer de 2 Mo / s.
Determinai n [%], fraciunea din timpul total al procesorului,
necesar interogrii strii fiecrui periferic. Comentai.
32. Considerm 3 memorii cache care conin 4 blocuri a cte un cuvnt /
bloc. Una este complet asociativ, alta semiasociativ cu 2 seturi a cte 2
cuvinte i ultima cu mapare direct. tiind c se folosete un algoritm de
evacuare de tip LRU, determinai numrul de accese cu HIT pentru
fiecare dintre cele 3 memorii, considernd c procesorul citete succesiv
de la adresele 0, 8, 0, 6, 8, 10, 8 (primul acces la o anumit adres va fi
cu MISS).
33. Se consider secvena de program RISC:
1:
2:
3:
4:
5:

ADD
ADD
ADD
ADD
ADD

R3, R2, #2
R1, R9, R10
R1, R1, R3
R2, R3, #4
R2, R1, R2

ntre dou instruciuni dependente RAW i succesive n procesare, e


nevoie de o ntrziere de 1 ciclu de tact.
a) n ci cicli de tact se execut secvena iniial ?
b) n ci cicli de tact se execut secvena reorganizat aceast
secven n vederea unui timp minim de procesare ?
34. Se consider o unitate de disc avnd rata de transfer de 25104 bii/s,
cuplat la un microsistem. Considernd c transferul ntre dispozitivul
periferic i CPU se face prin ntrerupere la fiecare octet, n mod sincron,

Probleme propuse spre rezolvare

315

c timpul scurs ntre apariia ntreruperii i intrarea n rutina de tratare


este de 2s i c rutina de tratare dureaz 10s, s se calculeze timpul pe
care CPU l are disponibil ntre 2 transferuri succesive de octei.
35. a. Dac rata de hit n cache ar fi de 100%, o instruciune s-ar procesa n
8.5 cicli de tact. S se exprime n [%] scderea medie de performan
dac rata de hit devine 89%, orice acces la memoria principal se
desfoar pe 6 tacte i c orice instruciune face 3 referine la
memorie.
b. De ce e avantajoas implementarea unei pagini de capacitate mare
ntr-un sistem de memorie virtual ? De ce e dezavantajoas aceast
implementare ? Pe ce baz ar trebui fcut alegerea capacitii paginii
?
36. Se consider un procesor scalar pipeline, n 3 faze diferite de
procesare (IF, EX, WR), fiecare faz necesitnd un tact, astfel:
IF = fetch instruciune i decodificare;
EX = selecie operanzi din setul de regitri i execuie;
WB = nscriere rezultat n registrul destinaie.
a) n cte impulsuri de tact se execut secvena de program de
mai jos ?
b) Reorganizai aceast secven n vederea minimizrii
timpului de execuie (se consider c procesorul deine o infinitate
de regitri generali).
1:
2:
3:
4:
5:
6:

R1
R1
R2
R2
R1
R1

(R11) + (R12)
(R1) + (R13)
(R3) + 4
(R1) + (R2)
(R14) + (R15)
(R1) + (R16)

37. Se consider un microprocesor RISC cu o structur pipe de procesare


a instruciunii, avnd vectorul de coliziune ataat 01011. S se determine
rata teoretic optim de procesare a instruciunii pentru acest procesor
[instr/ciclu].

Probleme propuse spre rezolvare

316

38. De ce implementarea algoritmului lui R. TOMASULO ntr-o arhitectur


superscalar ar putea reduce din presiunea la citire asupra seturilor de
regitri generali ? Gsii vreo similitudine n acest sens, ntre un CPU
superscalar avnd implementat acest algoritm i un CPU de tip TTA
(Transport Triggered Architecture) ?
39. De ce considerai o instruciune de tip RETURN este mai dificil de
predicionat printr-un predictor hardware ? Putei sugera vreo soluie n
vederea eliminrii acestei dificulti ? n ce const noutatea principial
a predictoarelor corelate pe dou nivele ?
40. Se consider structura hardware a unui microprocesor RISC, precum n
figura de mai jos.

Rspundei la urmtoarele ntrebri.


a) Ce tip de instruciuni activeaz sumatorul sum 2 i n ce
scop ?
b) ntr-un tact, la setul de regitri pot fi necesare 2 operaii
simultane: citire (nivelul RD din pipe), respectiv scriere (nivelul
WB din pipe). Crei operaii i se d prioritate i n ce scop ?
c) Ce rol are unitatea ALU n cazul unei instruciuni de tip
LOAD ?
d) Ce informaie se memoreaz n latch-ul EX/MEM n cazul
instruciunii: ST (R7)05, R2 i de unde provine fiecare informaie ?

Probleme propuse spre rezolvare

317

41. Scriei un program folosind recursivitatea, care citete de la tastatur


dou numere ntregi pozitive i afieaz cel mai mare divizor comun i
cel mai mic multiplu comun al celor dou numere.
42. Scriei un program recursiv care rezolv problema Turnurilor din Hanoi
pentru n discuri (n parametru citit de la tastatur). Enunul problemei
este urmtorul:
Se dau trei tije simbolizate prin A, B i C. Pe tija A se gsesc n
discuri de diametre diferite, aezate n ordine descresctoare a
diametrelor privite de jos n sus. Se cere s se mute discurile de pe tija
A pe tija B, folosind tija C ca tij de manevr, respectndu-se
urmtoarele reguli:
La fiecare pas se mut un singur disc.
Nu este permis s se aeze un disc cu diametrul mai mare peste un
disc cu diametrul mai mic.
43. Realizai un program care citete de la tastatur dou numere naturale n
i k (n>k) i calculeaz i afieaz pe consol valorile urmtoare:
k
k
C n i An

44. S se citeasc un ir de numere ntregi de la tastatur, a crui dimensiune


este citit tot de la tastatur. Sortai irul prin metoda bubblesort,
memorai succesiv datele la adresa 0x10012000 i afiai irul sortat pe
consol.
45. Scriei un program care afieaz primele n perechi de numere prime
impare consecutive (n - numr impar citit de la tastatur). Exemplu:
(3,5), (5,7), etc.
46. (Conjectura lui Goldbach) Scriei un program n limbaj de asamblare
DLX, care citete de la tastatur, prin intermediul modulului Input.s, un
numr n par, n>6. S se determine toate reprezentrile lui n ca sum de
numere prime, sum cu numr minim de termeni. Afiarea se face pe
consol pe fiecare linie cte o soluie.
47. Se consider un procesor cu un cache conectat la o memorie principal
printr-o magistral (bus de date) de 32 de bii; un acces cu hit n cache

Probleme propuse spre rezolvare

318

dureaz un ciclu de tact. La un acces cu miss n cache ntregul bloc


trebuie extras din memoria principal prin intermediul magistralei. O
tranzacie pe bus const dintr-un ciclu de tact pentru trimiterea adresei pe
32 de bii spre memorie, 4 cicli de tact n care are loc accesarea memoriei
(strobarea datelor pe bus) i 1 ciclu pentru transferarea fiecrui cuvnt de
date (32 octei) n blocul din cache. Se presupune c procesorul continu
execuia doar dup ce ultimul cuvnt a fost adus n cache. Urmtorul
tabel exprim rata medie de miss ntr-un cache de 1Mbyte pentru diverse
dimensiuni a blocului de date.
Dimensiunea blocului
(B), n cuvinte
1
4
8
16
32

Rata de miss
(m), n %
4,5
2,4
1,6
1,0
0,75

Se cere:
a) Pentru care din blocuri (pentru ce dimensiune) se obine cel mai
bun timp mediu de acces la memorie ?
b) Dac accesul la magistral adaug doi cicli suplimentari la timpul
mediu de acces la memoria principal (disput pentru ocuparea
bus-ului), care din blocuri determin optima valoare pentru timpul
mediu de acces la memorie ?
c) Dac limea magistralei este dublat la 64 de bii, care este
dimensiunea optim a blocului de date din punct de vedere al
timpului mediu de acces la memorie ?

BIBLIOGRAFIE SELECTIV
1. HAYES J. Computer Architecture and Organization, Third Edition,
McGraw Hill, 1998
2. HENNESSY J., PATTERSON D. - Computer Architecture: A
Quantitative Approach, Morgan Kaufmann (Elsevier), 4-th Edition,
2007 anul 4C, MSc
3. PATT Y., PATEL S. Introduction to Computing Systems: from
Bits and Gates to C and Beyond, McGraw Hill, 2001
4. PATTERSON D., HENNESSY J. - Computer Organization and
Design, The Hardware / Software Interface, Second Edition, Morgan
Kaufmann Publishers, 1998 (traducere romaneasca la Editura ALL,
2000) anul 3C
5. FISHER J., FARABOSCHI P., YOUNG C. Embedded
Computing, Morgan Kaufmann Publishers (Elsevier), 2005 anul
4C, MSc
6. VINTAN L. Arhitecturi de procesoare cu paralelism la nivelul
instruciunilor, Editura Academiei Romne, Bucureti, 2000, ISBN
973-27-0734-8 (Bibl.ULB Sibiu - cota 45.351)
7. VINTAN L., FLOREA A. Microarhitecturi de procesare a
informaiei, Editura Tehnic, Bucureti, 2000, ISBN 973-31-1551-7
(cota bibl. ULB Sibiu 45.797)
8. VINTAN N. LUCIAN Predictie si speculatie in
microprocesoarele avansate, Editura Matrix Rom, Bucuresti, ISBN
973-685-497-3, 2002 (89 pg.), Bibl. Univ. Sibiu - cota 47.697
9. FLOREA ADRIAN, VINTAN N. LUCIAN Simularea si
optimizarea arhitecturilor de calcul in aplicatii practice, Editura

Matrix ROM, Bucuresti, ISBN 973-685-605-4, 2003 (443 pg. + CD


atasat), Bibl. Univ. Sibiu - cota 48.351
10. VINTAN N. LUCIAN Prediction Techniques in Advanced
Computing Architectures (in limba engleza), Matrix Rom Publishing
House, Bucharest, ISBN 978-973-755-137-5, 2007 (292 pg.; 3 ex.
ULBS + 7 schimb interbibliotecar; cota Biblioteca ULBS 52.103);
http://www.matrixrom.ro/romanian/editura/domenii/informatica.php
?id=867#867
11. GELLERT A., VINTAN L. N., FLOREA A. - A Systematic
Approach to Predict Unbiased Branches, ISBN 978-973-739-516-0,
Lucian Blaga University Press, Sibiu, 2007 (111 pg.; 8 ex. ULBS
+ 10 schimb interbibliotecar; cota Biblioteca ULBS 53.048)
12. L. N. VINAN - Direcii de cercetare n domeniul sistemelor
multicore / Main Challenges in Multicore Architecture Research,
Revista Romana de Informatica si Automatica, ISSN: 1220-1758,
ICI
Bucuresti,
vol.
19,
nr.
3,
2009,
http://www.ici.ro/RRIA/ria2009_3/index.html
13. http://webspace.ulbsibiu.ro/lucian.vintan/

CUPRINS
1. O INTRODUCERE N FILOSOFIA MICROSISTEMELOR DE
CALCUL ___________________________________________________ 5
1.1. SCHEMA BLOC A UNUI MICROSISTEM. ROLUL BLOCURILOR
COMPONENTE, FUNCIONARE DE ANSAMBLU. _________________________ 5
1.2. MODURI DE LUCRU NTRE MICROPROCESOR I INTERFEELE I/O ____ 16
1.2.1. MODUL DE LUCRU PRIN INTEROGARE (POLLING)
16
1.2.2. MODUL DE LUCRU PRIN NTRERUPERI HARDWARE _______________ 17
1.2.3. MODUL DE LUCRU PRIN TRANSFER DMA (DIRECT MEMORY ACCESS) 21

2. ARHITECTURA SISTEMULUI IERARHIZAT DE MEMORIE [8]


___________________________________________________________ 26
2.1. MEMORII CACHE_________________________________________________ 26
2.2. MEMORIA VIRTUAL ____________________________________________ 52

3. PROCESOARE PIPELINE SCALARE CU SET OPTIMIZAT DE


INSTRUCIUNI [7] _________________________________________ 61
3.1. MODELUL RISC. GENEZ I CARACTERISTICI GENERALE ___________ 61
3.2. SET DE INSTRUCIUNI. REGITRI INTERNI LA MODELUL
ARHITECTURAL RISC ________________________________________________ 63
3.2.1. DUALITATEA ARHITECTUR APLICAIE: IMPLEMENTAREA GESTIUNII
STIVELOR DE DATE ASOCIATE FUNCIILOR C _________________________ 70
3.2.2. IMPLEMENTAREA RECURSIVITII ______________________________ 74
3.3. ARHITECTURA SISTEMULUI DE MEMORIE LA PROCESOARELE RISC _ 77
3.4. PROCESAREA PIPELINE N CADRUL PROCESOARELOR SCALARE ____ 79
3.4.1. DEFINIREA CONCEPTULUI DE ARHITECTUR PIPELINE SCALAR __ 79
3.4.2. PRINCIPIUL DE PROCESARE NTR-UN PROCESOR PIPELINE ________ 82
3.4.3. STRUCTURA PRINCIPIAL A UNUI PROCESOR RISC _______________ 84
3.4.4. PROBLEMA HAZARDURILOR N PROCESOARELE RISC _____________ 88
3.4.4.1. HAZARDURI STRUCTURALE (HS): PROBLEME IMPLICATE I SOLUII ______ 89

3.4.4.2. HAZARDURI DE DATE: DEFINIRE, CLASIFICARE, SOLUII DE EVITARE


A EFECTELOR DEFAVORABILE ______________________________________ 94
3.4.4.3. HAZARDURI DE RAMIFICAIE (HR): PROBLEME IMPLICATE I
SOLUII __________________________________________________________ 101
3.4.5. PROBLEMA EXCEPIILOR N PROCESOARELE RISC_______________ 121
3.4.6. AMBIGUITATEA REFERINELOR LA MEMORIE ___________________ 124
3.4.7. EXECUIA CONDIIONAT I SPECULATIV _____________________ 126

4.
PROCESOARE
CU
EXECUII
MULTIPLE
ALE
INSTRUCIUNILOR [7] ____________________________________ 127
4.1. CONSIDERAII GENERALE. PROCESOARE SUPERSCALARE I VLIW
(EPIC) _____________________________________________________________ 127
4.2. MODELE DE PROCESARE N ARHITECTURILE SUPERSCALARE ______ 134
4.3. ARHITECTURA LUI R. TOMASULO ________________________________ 136
4.4. O ARHITECTUR REPREZENTATIV DE PROCESOR SUPERSCALAR _ 143
4.5. PROBLEME SPECIFICE INSTRUCIUNILOR DE RAMIFICAIE N
ARHITECTURILE MEM ______________________________________________ 153

MICROPROCESOARE MULTI-MICROTHREAD (adaus!)


4.6. OPTIMIZAREA BASIC-BLOCK-URILOR N ARHITECTURILE MEM ____ 168
4.6.1. PARTIIONAREA UNUI PROGRAM N "BASIC-BLOCK"-URI _________ 169
4.6.2. CONSTRUCIA GRAFULUI DEPENDENELOR DE DATE ASOCIAT ___ 171
4.6.3. CONCEPTUL CII CRITICE ____________________________________ 173
4.6.4. ALGORITMUL "LIST SCHEDULING" (LS) _________________________ 173
4.7. PROBLEMA OPTIMIZRII GLOBALE N CADRUL PROCESOARELOR MEM
___________________________________________________________________ 177
4.7.1. TEHNICA "TRACE SCHEDULING" (TS) ___________________________ 178
4.8. OPTIMIZAREA BUCLELOR DE PROGRAM __________________________ 185
4.8.1. TEHNICA "LOOP UNROLLING" _________________________________ 185
4.8.2. TEHNICA "SOFTWARE PIPELINING" ____________________________ 188
4.9. ARHITECTURI CU TRANSPORT DECLANAT _______________________ 190
4.10. EXTENSII ALE ARHITECTURILOR MEM BAZATE PE REUTILIZAREA
DINAMIC A TRACE - URILOR DE INSTRUCIUNI _____________________ 193
4.11. PROCESAREA VECTORIAL ____________________________________ 207
4.12 LECTURE NOTES IN MULTIPROCESSORS (SISTEME MULTICORE)

5. ARHITECTURA MICROCONTROLERELOR [8] ____________ 267


5.1. INTRODUCERE N PROBLEMATIC _______________________________ 267
5.2. ARHITECTURA FAMILIEI 80C51___________________________________ 267
5.2.1. ORGANIZAREA MEMORIEI _____________________________________ 267
5.2.2. MODURILE DE ADRESARE _____________________________________ 274
5.2.3. TIPURI DE INSTRUCIUNI _____________________________________ 276
5.2.4. ARHITECTURA INTERN ______________________________________ 283
5.3. STRUCTURA INTERFEELOR DE INTRARE / IEIRE _________________ 293
5.4. MAGISTRALA DE INTERCONECTARE I2C_________________________ 300
5.5. MAGISTRALA ACCESS.BUS ______________________________________ 308
5.6. PLACA DE DEZVOLTARE DB 51 _________________________________ 314

6. PROBLEME PROPUSE SPRE REZOLVARE [8] _____________ 241


BIBLIOGRAFIE SELECTIV _______________________ 259

S-ar putea să vă placă și