Documente Academic
Documente Profesional
Documente Cultură
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
10
11
N
N
N
Sel (2 2) = ADR0 * ADR1 * ... * ADR(2 2) * NADR(2 1)
Sel (2 N 1) = ADR0 * ADR1 * ... * ADR(2 N 1)
12
13
14
15
= 10ns
fCLK = 100 MHz TCLK =
fCLK
16
17
18
RBuff este plin, deci conine codul (ASCII, Unicode etc.) al caracterului
tastat.
19
SP (SP) + 1
20
21
22
23
24
25
27
28
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
30
Cache semiasociativ pe 2 ci
31
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:
33
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.
Pas
Activitate procesor
Activitate
bus comun
pe Loc.X
cache
CPU1
Loc.X
cache CPU2
Loc. X
Memorie
global
0
34
CPU1 citete X
2
3
CPU2 citete X
CPU1 scrie 1 n X
0
1
CPU2 citete X
1
0
INV.
1
0
0
1
Tabelul 8.2.
Hit
Aciune n cache
Miss
Citire
Miss
Citire
Scriere
Hit
Miss
Scriere
Hit
35
Niveluri multiple
exclusion, hibrid)
de
cache-uri
(multi-level
inclusion,
Aadar:
Multilevel Inclusion
Multilevel Exclusion
36
37
38
39
40
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
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.
42
43
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.
Cache
Victim
Selective
2-way
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.
R + p Md
M
= clk1 + p d
R
R
(2.1)
45
Tv = clk1 + p v + v
R
R
(2.2)
Ts = clk1 + p s + s
R
R
(2.3)
46
clk 2-way
M
T2 = clk
+ p 2
R
clk
(2.4)
47
48
49
50
51
52
53
54
55
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.
56
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.
58
59
60
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.
62
63
64
65
OPCODE (6)
RS(5)
RT(5)
RD(5)
SHAMT (5)
FUNCT (6)
RS (5)
RT (5)
OFFSET (16)
66
ADRES (26)
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
}
67
L0:
L1:
L2:
L3:
$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,
68
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
70
71
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)
73
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)
2)
74
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)
PCnext:
ld R8, (R6)5;
st R8, (R6)4;
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.
75
76
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;
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)
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
78
79
3.4.
PROCESAREA
PIPELINE
PROCESOARELOR SCALARE
CADRUL
DE
ARHITECTUR
80
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
81
82
83
84
85
86
87
88
89
90
T1
T2
T3
T4
X
X
T5
T6
T7
X
X
Tabelul 3.3.
91
92
93
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
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".
95
ADD
SUB
R1, R2, R3 ;
R4, R1, R5 ;
96
R1 <------ ( R2 ) + ( R3 )
R4 <------ ( R1 ) - ( R5 )
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.
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.
I1:
I2:
Ri <--- ( Rj ) * ( Rk )
Rj <--- ( Rp) + ( Rm )
99
I4
LD R4, A(R6)
I5
LD R2, A(R4)
Graful dependenelor de date corespunztor acestei secvene este
urmtorul (vezi figura 3.25):
100
101
102
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)
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.
104
c)
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:
105
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 %.
107
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.
109
F=
(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
110
111
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
Predicie dac
precedentul salt s-a fcut
NU
DA
NU
DA
Tabelul 3.6.
113
Tabelul 3.7.
Modul de predicionare al unei scheme corelate
114
115
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.
117
118
119
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
120
121
122
123
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.
124
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:
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:
Pe un procesor superscalar:
ET:
126
127
R1, R2, R3
B8, R1, #10
B8, Adr
R7, R8, R1
R10, R7, R4
FB8
128
4.1.
CONSIDERAII
GENERALE.
SUPERSCALARE I VLIW (EPIC)
PROCESOARE
128
129
130
131
Tabelul 4.1.
Execuia instruciunilor pe un procesor VLIW cu 5 uniti de execuie
specializate (corectati eventualele erori din program!)
132
133
134
considerate a face parte din punct de vedere arhitectural, din generaia a IIIa de microprocesoare, adic cea a anilor 1990 - 2000.
Tabelul 4.2.
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
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
Tabelul 4.4.
Exemplu de procesare OUT-OUT
136
137
138
139
Tabelul 4.5.
Situaia staiilor de rezervare n prima instan
Tabelul 4.6.
140
Tabelul 4.7.
Situaia staiilor de rezervare n a doua instan
141
Tabelul 4.8.
Starea regitrilor generali n a doua instan
142
Tabelul 4.9.
143
DE
144
145
146
147
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.
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
150
151
152
153
Tabelul 4.10.
Efectul BDS-ului ntr-un procesor superscalar
154
155
2002, Bibl. Univ. Sibiu - cota 47.697 (10 ex. la Biblioteca ULBS + 10 schimb
interbibliotecar)
156
157
158
159
160
161
Time
162
Time
163
164
165
Superscalar
166
Thread 1
Thread 2
Thread 3
Thread 4
Simultaneous
Multithreading
Thread 5
Idle slot
167
Pipeline (faze)
partajate)
168
4.6.
OPTIMIZAREA
BASIC-BLOCK-URILOR
ARHITECTURILE MEM
169
Tabelul 4.11.
170
171
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.
173
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).
175
Tabelul 4.12.
Tabelul 4.13.
Execuia programului optimizat
176
Tabelul 4.14.
O alt posibil execuie a programului optimizat
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.
178
179
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
180
Tabelul 4.15.
Execuia trace-ului neoptimizat
181
182
Tabelul 4.16.
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
183
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)
184
185
Tabelul 4.17.
186
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:
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.
188
189
iteratia 1
iteratia 1
iteratia 2
PREAMBUL
(n-1)-a iteratie
(n), ultima iteratie
(n)
POSTAMBUL
190
191
R2-->EQ_O, R3-->EQ_T
EQ_R-->B1 (var. boolean)
[B1]Adr-->PC (execuie condiionat)
192
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;
193
194
195
196
197
198
199
200
201
202
203
204
205
206
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.
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
209
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.
210
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
212
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).
213
214
sum = 0;
for (i = 0, i < 1000; i = i + 1)
sum = sum + Al(i);
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
(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.
217
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.
218
Scalabilty
Fault tolerant
Higher absolute performance (greater than a single processor)
219
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:
TN = f Ts +
S=
adic
sau:
S=
220
(1 f) Ts
,
N
Ts
(1 f) Ts
f Ts +
N
1
1
(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.
221
S=
1
(1 f)
f+
N
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
G M
Koptim = 0 (monoprocesare)
C 2
b) Dac
223
G M
Koptim = M/2 (procesare paralel omogen)
>
C
2
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
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
ET N =
GM CM 2 CM2
+
N
2
2N
224
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
C N
ET = MaxG Max(k i ), k i (M k i )
2 i =1
=
1
2
N
2
N
2
N
2N
N optim =
N
2
N C
225
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
G
. Pentru un N > Noptim, performana SMM cu costuri liniare
C
de comunicaie,
interprocesor.
se
degradeaz
datorit
costurilor
comunicaiilor
226
227
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.
229
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
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:
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:
231
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
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)
233
Topologii NoC-uri
234
Reea Token-Ring
235
Reea crossbar
236
237
238
N
= 2Nlog 2 N < N 2 . n schimb, o conexiune procesor2
239
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.)
241
Pas Eveniment
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
242
Pas
Activitate procesor
Activitate
bus comun
pe Loc.X
cache
CPU1
CPU1 citete X
2
3
CPU2 citete X
CPU1 scrie 1 n X
0
1
CPU2 citete X
Loc.X
cache CPU2
243
Loc. X
Memorie
global
0
0
0
INV.
1
0
0
0
0
1
2
3
4
CPU1 citete X
CPU2 citete X
CPU1 scrie 1 n X
CPU2 citete X
(HIT)
244
245
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.
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
Interference
(conflict)
miss;
place
Read_miss signal on the bus. The block
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
See MOESI!
Attempt to share data (unique source); place
247
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.
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.
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).
249
250
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
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.
/* C :=AxB,
252
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. */
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.
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;
255
256
control-based
Uniprocessor components
Network topologies
Unavailability of appropriate languages
257
(P2)
B=0;
---B=1;
L2: if(A==0)...
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.
test:
li R2, #1; R2 1
lock exchg R2,0(R1)
bnez R2,test
259
; atomic
lw R2,0(R1) ;
bnez R2, test
li R2, #1
lock exchg R2,0(R1)
bnez R2,test
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
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
ll
R2,O(R1)
bnez R2,test
li
R2,#1
sc R2,O(R1)
begz R2,test
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
261
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
263
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:
of PIM cells,
264
each cell (PIM) is small enough to achieve extremely largescale parallel operations,
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.
265
References
1.
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
267
268
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:
269
270
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
271
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.
273
Figura 5.6. Reprezentarea celor 128 octei inferiori ai memoriei RAM intern
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
274
275
276
277
Tabelul 5.1.
Instruciunile aritmetice aferente microcontrollerului 80C51
Tabelul 5.2.
278
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
MOV
XCH
A, #3FH
A, @R0
279
Realizare interschimbare
Tabelul 5.4.
Instruciunile de transfer care acceseaz spaiul memoriei externe RAM
Tabelul 5.5.
280
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)
281
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
282
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
283
Secvena
de
instruciuni
INC P1
MOV R0, #02H
MOV R1, #FFH
MOV R2, #FFH
DJNZ R2, X+8
X+A
X+C
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
284
285
Figura 5.10. Utilizarea unui oscilator implantat n cip drept surs de ceas
286
287
288
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).
289
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
290
291
292
293
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)
294
295
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
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).
297
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.
299
300
301
302
303
304
Tabelul 5.12.
Definiii privind terminologia de magistral I2C
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
305
306
307
Figura 5.26. Dispozitivul Master-receptor citete datele trimise de Slave-ul emitor imediat dup primul octet
308
309
310
311
312
313
314
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.
315
316
i1:
i2:
302
303
4(R5), R8
R9, 8(R6)
304
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
305
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:
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
307
308
309
B2.
a[2]=x[1];
y[1]=a[2]+5;
for i=2 to 100
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
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
312
i1:
i2:
i3:
i4:
i5:
i6:
313
314
ADD
ADD
ADD
ADD
ADD
R3, R2, #2
R1, R9, R10
R1, R1, R3
R2, R3, #4
R2, R1, R2
315
R1
R1
R2
R2
R1
R1
(R11) + (R12)
(R1) + (R13)
(R3) + 4
(R1) + (R2)
(R14) + (R15)
(R1) + (R16)
316
317
318
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
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
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