You are on page 1of 240

Sorin Zoican

ARHITECTURA SISTEMELOR
DE CALCUL CU PRELUCRARE
PARALELĂ

BUCUREŞTI 2004
Introducere

Lucrarea "ARHITECTURA SISTEMELOR DE CALCUL CU


PRELUCRARE PARALELĂ" se adresează studenţilor anului IV,
specializarea TELECOMUNICAŢII, din cadrul Facultăţii de Electronică şi
Telecomunicaţii , Universitatea POLITEHNICA Bucureşti .
Întreg materialul oferă informaţii actuale asupra sistemelor de calcul
performante, atât din punct de vedere al arhitecturii cât şi din punctul de
vedere al politicilor de management a resurselor calculatorului.
Parcurgerea acestuia presupune cunoaşterea unor aspecte ce se
referă la arhitectura microprocesoarelor, metode şi limbaje de programare.

Lucrarea este structurată în 8 capitole şi o anexă.

Capitolul 1 descrie principalele caracteristici ale unui sistem de


calcul orientat spre efectuarea prelucrărilor paralele şi clasifică arhitecturile
şi mecanismele de prelucrare paralelă.
Capitolul 2 se referă la o componentă esenţială a unui calculator -
subsistemul de memorie şi intrare - ieşire .
În acest capitol sînt dezvoltate conceptele de memorie virtuală,
paginare şi segmentare ale memoriei, alocare şi management ale memoriei,
controlul încărcării optime a programelor, procesoare şi canale I/O.
Capitolul 3 trece în revistă principalele metode de realizare a unui
sistem de calcul realizat în tehnica pipe-line.
Se prezintă principiul paralelismului temporal, principiile de
proiectare a unei structuri pipe-line şi se face legătura dintre prelucrarea
vectorială şi prelucrarea pipe-line.
Capitolul 4 descrie arhitecturi generale de sisteme multiprocesor.
Sînt ilustrate două clase de sisteme multiprocesor : slab cuplate şi
strîns cuplate, tipuri de interconectări şi algoritmi de arbitrare a bus-ului
comun.
Capitolul 5 se ocupă de implementarea sistemelor de calcul
matriciale şi pipe-line.
2 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Sînt prezentate arhitecturile MPP şi Cray, ca exemple reprezentative


de calculatoare parelele şi respectiv pipe-line.
De asemenea se oferă detalii referitoare la modul de reprezentare a
datelor în calculatoarele paralele şi pipe-line şi la tipurile de instrucţiuni
vectoriale.
Capitolul 6 prezintă arhitecturi evaluate de procesoare şi sisteme de
calcul (arhitectura Pentium, VLIW , precum şi concepte utilizate în
obţinerea unui grad de paralelism ridicat: predicţia salturilor, execuţia
speculativă, redenumirea registreor)
Capitolul 7 ilustrează principalele metode de interconectare pe bus a
componentelor unui calculator ( magistralele ISA, PCI şi AGP).
În capitolul 8 se descriu funcţiunile principale ale unui sistem de
operare cu exemplificarea sistemelor de operare UNIX şi WINDOWS
2000.
Anexa prezintă cîteva tipuri de probleme referitoare la sistemele de
memorie ierarhizată, politici de reamplasare a paginilor de memorie,
structuri pipe-line, prelucrare vectorială.

Sugestiile şi corecturile aduse de cititorii acestei lucrări vor fi


întotdeauna bine venite.

Bucureşti , februarie 2004 Autorul


1
Introducere în prelucrarea paralelă

În acest capitol se prezintă conceptele de bază ale prelucrării


paralele din calculatoarele cu preformanţe înalte.
Structurile de calculatoare paralele se clasifică în : calculatoare
"pipe-line", calculatoare (procesoare) matriciale (array) şi sisteme
multiprocesor.

1.1. Evoluţia sistemelor de calcul

Sistemele de calcul au evoluat şi evoluează odată cu dezvoltarea


tehnologiilor de realizare a circuitelor electronice.
Totuşi performanţele unui sistem de calcul pot fi îmbunătăţite, fără
schimbarea tehnologiei, prin modificarea arhitecturii sistemului.
Arhitectura defineşte modul de organizare, de interconectere a unităţilor
(blocurilor) constitutive ale sistemului, precum şi unităţile înseşi.
Arhitectura reprezintă un concept diferit de acela al schemei bloc; schema
bloc prezintă un mod particular de realizare hardware, în timp ce arhitectura
defineşte doar din punct de vedere funcţional unităţile componente ale
sistemului.
Un sistem de calcul modern este cu adevărat un ansamblu de
procesoare, memorii, unităţi funcţionale, reţele de interconectare,
compilatoare, sisteme de oprerare, dispozitive periferice, canale de
comunicaţie, baze de date.
Proiectarea unui sistem de calcul puternic şi eficient economic
presupune întelegerea algoritmilor de calcul ce vor fi implementaţi şi
cunoaşterea structurilor hardware şi software cu care sistemul va opera.
Rezultă că arhitectura sistemelor de calcul integrează hardware, software,
algoritmi şi limbaje de programare pentru a realiza calcule necesare în
aplicaţii diverse.
6 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

1.2. Generaţii de sisteme de calcul

Clasificarea sistemelor de calcul în generaţii este determinată de


tehnologia utilizată, arhitectura sistemului, modul de prelucrare a datelor şi
limbajele utilizate.
Generaţiile de sisteme de calcul sunt:

- prima generaţie (1938 - 1953) : calculatoare cu relee


electromagnetice şi tuburi interconectate cu fişe , prelucrarea datelor pe biţi
(bit cu bit), utilizarea limbajelor binare de programare.
- a doua generaţie (1952 - 1963) : calculatoare cu tranzistoare şi
diode interconectate pe cablaj imprimat , prelucrarea datelor pe loturi
("batch"), utilizarea limbajelor de programare mai evoluate (FORTRAN,
COBOL).
- a treia generaţie (1962 - 1975) : calculatoare cu circuite integrate
SSI şi MSI, conectate pe circuite imprimate pe mai multe nivele (straturi),
utilizarea limbajelor de programare (compilatoare) evoluate, utilizarea
multiprocesării (separarea programelor în task-uri şi operaţii de intrare -
ieşire , I/O), apariţia sistemelor de operare şi a memoriilor virtuale.
- a patra generaţie (1972 - 1990) : calculatoare cu circuite integrate
LSI caracterizate de un grad înalt de "împachetare", utilizarea limbajelor de
programare de nivel înalt orientate pe prelucrarea vectorilor de date, apariţia
calculatoarelor "pipe-line" şi a sistemelor multiprocesor, apariţia
supercalculatoarelor.
- a cincea generaţie (1990 - ) : utilizarea circuitelor VLSI,
calculatoare caracterizate de un grad mare de modularizare şi densitare
ridicată de integrare şi "împachetare", sisteme multiprocesor, apariţia
procesoarelor specializate pentru o anumită aplicaţie (de exemplu
prelucrarea digitală a semnalelor).

1.3. Tendinţe şi orientări către prelucrarea paralelă

Din punct de vedere al aplicaţiei , utilizarea sistemelor de calcul


este orientată pe patru nivele ascendente:

a) Procesarea datelor
b) Procesarea informaţiei
c) Procesarea cunoştinţelor
d) Procesarea inteligenţei
Introducere în prelucrarea paralelă 7

Relaţiile dintre date, informaţie, cunoştinţe şi inteligenţă sunt


prezentate în figura 1.1.

Cresterea volumului de prelucrare max

4
3

2 4
PROCESAREA
INTELIGENTEI
1 4 3
3
2
PROCESAREA CUNOSTINTELOR
1
2 PROCESAREA INFORMATIEI
1 PROCESAREA DATELOR

max Cresterea complexitatii in prelucrare

Figura 1.1. Spaţiul datelor, informaţiei, cunoştinţelor şi inteligenţei din punct de


vedere al prelucrărilor

Datele reprezintă numere (în diferite formate) sau simboluri


(alfanumerice). Acestea sunt considerate necorelate între ele şi nu au o
anumită semnificaţie sau structură precizată.
Informaţia reprezintă o colecţie de date corelate între ele printr-o
relaţie sau structură sintactică. Prin urmare informaţia reprezintă un
subspaţiu al spaţiului datelor.
Cunoştinţele constituie corelaţii de informaţie la care se adaugă un
înţeles semantic.
Inteligenţa reprezintă corelaţii de cunoştinţe.
Procesarea datelor şi a informaţiei reprezintă încă sarcina majoră a
sistemelor de calcul. Tendinţa actuală este de a utiliza calculatorul pentru
procesarea cunoştinţelor; se crează sistemele de calcul expert ce utilizează
baze de cunoştinţe pentru rezolvarea unor probleme (diagnostic medical,
explorări petroliere, analiza circuitelor electrice, estimarea pagubelor
rezultate din catastrofe).
8 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Totuşi calculatorul , deşi poate fi "cunoscător" ( în sensul că posedă


o bază de cunoştinţe actuală şi densă) este departe de a fi inteligent.
Inteligenţa presupune că pe baza unor cunoştinţe se pot genera altele noi.
Calculatorul nu poate comunica cu subiectul uman prin voce, scris, imagini
şi nu are o gîndire creativă.
Este clar însă că prin crearea unor sisteme de calcul cu un grad mare
de paralelism, calculatorul poate ajunge cu adevărat inteligent (dezvoltarea
nivelelor superioare din figura 1.1)
Din punct de vedere al sistemului de operare, sistemele de calcul au
fost îmbunătăţite , cronologic , în patru etape sau faze:

a) prelucrarea pe loturi (secvenţială)


b) multiprogramarea (operaţii desfăşurate în paralel)
c) împărţirea timpului (task-uri serializate în cuante de timp)
d) multiprocesarea (sisteme multiprocesor)

În aceste patru faze gradul de paralelism a crescut foarte mult de la o


fază la alta.
În continuare termenul de informaţie va fi utilizat cu un înţeles larg
ce cuprinde date, informaţie, cunoştinţe şi inteligenţă.
Din punct de vedere formal, prelucrarea paralelă se defineşte
astfel:

Prelucrarea paralelă reprezintă o formă eficientă a prelucrării


informaţiei care accentuează evenimentele concurente în procesul de calcul.
Concurenţa implică paralelism, simultaneitate şi pipe-
line.Evenimentele paralele pot apare în resursele multiple ale sistemului în
timpul aceluiaşi interval de timp;evenimentele simultane pot apare la
acelaşi moment de timp;evenimentele pipe-line apar la momente de timp
suprapuse ( figura 1.2).
Apariţia evenimentelor concurente în sistemele de calcul determină
necesitatea execuţiei concurente a mai multor programe ( echivalent cu
necesitatea îmbunătăţirii performanţelor sistemului).
Nivelul cel mai înalt de prelucrare paralelă presupune execuţia unor
sarcini (programe) multiple prin multiprogramare, diviziune în timp şi
multiprocesare. Implementarea algoritmilor paraleli (necesari pe acest nivel)
depinde de alocarea eficientă a resurselor hardware şi software limitate către
mai programe în aşa fel încît să se rezolve o problemă de calcul complexă.
Următorul nivel de prelucrare paralelă execută segmente de
programe (proceduri) în interiorul aceluiaşi program. Aceasta implică
Introducere în prelucrarea paralelă 9

divizarea programelor în proceduri ( ce pot fi comune mai multor


programe).
Al treilea nivel de paralelism este dat de concurenţa din interiorul
instrucţiunilor multiple.

t1 t2 t1
RESURSA 1
P1, P2 - procese (task-uri)
P1 t - timpul asociat procesului P1
t1' t2' t' - timpul asociat procesului P2
RESURSA 2
P2
evenimente paralele evenimente simultane

RESURSA 1 RESURSA 2
P1 P1 t
t1
- P2 t'
t1'
evenimente pipe-line

Figura 1.2. Tipuri de evenimente concurente

Figura 1.3. rezumă nivelele prelucrării paralele :

Procesoarele performante ( de exemplu procesoarele specializate) au


instrucţiuni speciale ce efectuează, într-un singur ciclu maşină, mai multe
operaţii ce implică resurse diferite (instrucţiuni multifuncţie).
Rolul hardware-lui creşte de la nivelul superior către nivelul inferior.
Rolul software-lui creşte , invers, de la nivelul inferior către nivelul
superior.
Pentru un sistem de calcul performant există tendinţa de a înlocui cît
mai multe componente software (cu preţ ridicat) cu componente hardware
(al căror preţ este în continuă scădere). De asemenea necesitatea creării unor
sisteme de calcul de timp real, cu fiabilitate ridicată (cu sisteme de rezevare)
sprijină ideea dezvoltării hardware-lui sistemelor de calcul.
10 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

SISTEM DE CALCUL

IMF IMF IMF IMF IMF IMF


Procedura Procedura Procedura

PROGRAME ( SOFTWARE )

HARDWARE

Figura 1.3. Nivelele prelucrării paralele

Prelucrarea paralelă este strîns corelată cu prelucrarea distribuită


(reţele de calculatoare dispersate fizic şi foarte slab cuplate). Utilizarea
tehnicilor distribuite conduce la realizarea unor sisteme cu grad mare de
paralelism.
Distincţia între prelucrarea paralelă şi prelucrarea distribuită devine
din ce în ce mai mică pe măsură ce tehnologia comunicaţiilor de date se
dezvoltă. În sens larg, prelucrarea distribuită poate fi privită ca o formă de
prelucrare paralelă într-un context (mediu) special.
Studiul sistemelor de calcul, din punct de vedere al prelucrării
paralele, presupune:
- proiectarea şi aplicabilitatea calculatoarelor cu prelucrare paralelă
(la nivel de arhitectură)
- analiza şi proiectarea sistemelor de operare
- analiza cerinţelor de programare (structuri de date, limbaje de
programare) şi proiectarea de algoritmi .
- analiza limitărilor performanţelor în calculatoarele cu structură
paralelă.
Există sisteme de calcul cu un singur procesor (sisteme uniprocesor)
şi sisteme de calcul cu mai multe procesoare (sisteme multiprocesor).
Tendinţa este aceea de a se dezvolta sisteme multiprocesor sau sisteme cu
mai multe unităţi funcţionale dedicate şi distribuite, controlate de un sistem
uniprocesor ( de exemplu centralele telefonice digitale).
Introducere în prelucrarea paralelă 11

În cele ce urmează se va studia paralelismul în ambele categorii de


sisteme.

1.4. Paralelismul în sistemele uniprocesor

Această secţiune prezintă metode hardware şi software ce asigură


paralelismul în sisteme uniprocesor.
Din punct de vedere hardware se evidenţiază metode ce constau în
multiplicarea resurselor şi metode de suprapunere în timp a activităţii
diferitelor blocuri hardware.
Este necesar să se echilibreze vitezele de procesare ale diferitelor
subsisteme pentru a evita scăderea vitezei de execuţie globale (gîtuirea -
bottleneck) şi deci de a creşte rata de execuţie globală a sistemului.
Din punct de vedere software se evidenţiază metode specifice unui
sistem de operare care conduc la prelucrări paralele cu o mai bună utilizare
a resurselor sistemului.

1.4.1. Mecanisme de prelucrare paralelă

Există următoarele categorii de mecanisme de prelucrare paralelă :

- multiplicarea unităţilor funcţionale.


- paralelism şi pipe-line în interiorul unităţii centrale de prelucrare
(CPU).
- suprapunerea operaţiilor efectuate de procesor (CPU) cu operaţiile
efectuate de controlerul de intrare - ieşire (I/O).
- utilizarea unui sistem ierarhizat de memorie a sistemului de calcul
- echilibrarea vitezelor de prelucrare a subsistemelor componente ale
sistemului de calcul.
- multiprogramare şi diviziune în timp.

Multiplicarea unităţilor funcţionale

Procesoarele "clasice" au o singură unitate aritmetică şi logică


(ALU). Prin urmare unitatea ALU nu efectuează decît o singură operaţie la
un moment dat de timp. În practică majoritatea funcţiilor ALU pot fi
distribuite în unităţi funcţionale specializate. Aceste unităţi pot fi
multiplicate şi pot funcţiona în paralel (figura 1.4.)
În unele procesoare există două unităţi aritmetice, care pot lucra în
paralel ( una pentru aritmetica în virgulă fixă şi alta pentru aritmetica în
virgulă mobilă).
12 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Ideea specializării funcţionale şi a distribuirii unităţilor funcţionale


poate fi extinsă şi în sistemele multiprocesor sau la alte tipuri de procesoare
în afara celor "clasice" ( de exemplu procesoare matriciale).

Paralelism şi pipe - line în CPU

Primele generaţii de microprocesoare utilizau unităţi aritmetice


(sumatoare) ce operau cu flux de biţi (serial).
Introducerea unor unităţi aritmetice şi logice ce operează în paralel (
de exemplu cu sumatoare cu transport anticipat sau multiplicatoare
matriciale) conduce la mărirea vitezei de prelucrare.
Majoritatea fazelor execuţiei instrucţiunilor procesoruluii sunt
suprapuse temporal (organizate pipe-line). Pentru a facilita suprapunerea
execuţiei instrucţiunilor au fost dezvoltate tehnici de preîncărcare a
instrucţiunilor şi tehnici de stocare a datelor. Metodele şi tehnicile pipe-line
vor fi studiate în capitolul 3.

Unitati Deplasare
P0
functionale Adunare
P1
Inmultire
P2
Inmultire
P3 Impartire
P4 REGISTRE
MEMORIE Increment
P5
Increment
P6 CENTRALA
Boolean
Procese Salt
(canale I/O)
COADA
Subsistem I/O
Control
INSTRUCTIUNI

PROCESOR CENTRAL
Figura 1.4. Multiplicarea unităţilor funcţionale în interiorul procesorului

Suprapunerea operaţiilor CPU cu operaţii I/O

Utilizarea unor controlere I/O separate, permite efectuarea în paralel


a operaţiilor interne ale CPU cu operaţii de transfer de date pe canale I./O.
Exemple de controlere I/O sunt : controlere DMA (Direct Memory Access)
Introducere în prelucrarea paralelă 13

- care permit transferul direct de date memorie - memorie, bazat pe


principiul cererii de magistrală (Bus Request - Bus Grant), procesoare
specializate I/O.

Utilizarea unui sistem de memorie ierarhizată

Un sistem de calcul cu memorie organizată ierarhizat ( mai multe


clase de memorii cu diferite caracteristici) poate echilibra diferenţele de
viteză între componentele sistemului (CPU, module de memorie).
Ierarhia memoriei într-un sistem de calcul este ilustrată în figura 1.5.
Registrele CPU sunt direct adresabile de către unitatea ALU.
Memoria rapidă (cache) reprezintă un tampon între memoria principală şi
CPU. Celelalte trei nivele reprezintă memoria virtuală a sistemului de
calcul ( memorie ce nu este direct adresabilă de către CPU, ci doar prin
intermediul sistemului de operare). Memoria principală reprezintă un
tampon între memoria virtuală şi CPU.
Problemele referitoare la organizarea memoriei vor fi studiate în
capitolul 2.

Echilibrarea vitezelor de prelucrare

Viteza de prelucrare este definită ca număr de operaţii efectuate în


unitatea de timp.
În cazul CPU viteza de prelucrare este dată de durata ciclului de
instrucţiune , tp.
Pentru memoria principală , viteza de prelucrare (bandwidth), Bm,
este definită astfel :

Bm = W / tm [octeţi/ sec] sau [ cuvinte / sec]

unde tm este durata ciclului de acces la memorie, iar W reprezintă numărul


de octeţi (cuvinte) transferate într-un ciclu de memorie.
Conflictele de acces la memorie (datorate utilizării de memorii
dinamice sauu utilizării memoriei ca resursă comună) conduc la apariţia
unei întîrzieri ale unor cereri de acces ale CPU la memorie.
14 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

CPU
Registre
Cache
ns
Cresterea Cresterea

vitezei
capacitatii
Memoria principala sute ns

Disc cu capete fixe, dispozitive


cuplate prin sarcina (CCD) ms

Disc cu capete mobile

Banda magnetica

Figura 1.5. Ierarhia memoriei într-un sistem de calcul

Se defineşte o viteză de prelucrare reală a memoriei (sau de


utilizare), Bmu.. În general Bmu < Bm . Valoarea Bm corespunde situaţiei
ideale - memoria estestatică şi nu reprezintă o resursă comună (partajată
între mai multe CPU).
O formulă aproximativă , practică , de calcul pentru viteza de
prelucrare de utilizare a memoriei , Bmu este :

Bmu = Bm / M

unde M este numărul de module de memorie intercalate în sistem. Unitatea


centrală poate cere accesul în oricare din cele M module de memorie
simultan.
Introducere în prelucrarea paralelă 15

Un exemplu de organizare a memoriei, cu intercalare, este prezentat


în figura 1.6.

Memoria principala

8x8 octeti
transferati
LSU0 LSU1 LSU7
la fiecare
ciclu de acces
la memorie

Controler de memorie

CPU
Figura 1.6. Organizarea intercalată a memoriei ( M=8)

Fiecare unitate de stocare (Logic Storage Unit - LSU) transferă la


fiecare ciclu de acces la memorie cîte 8x8 octeţi = 64 octeţi.
Dacă ciclul de acces la memorie este de 456ns ( pentru transferul
celor 8x8 octeţi), rezultă viteza de prelucrare a memoriei : B m = 8x8
/(456.10-9) = 140 Mo/s , sau Bmu = 140/ 8 = 49,5 Mo/s.
Pentru memoria externă (disc, bandă) şi dispozitivele I/O, conceptul
de viteză de prelucrare este mai complex datorită naturii secvenţiale d
accesului la aceste memorii. Se consideră, în general pentru aceste tipuri de
memorie, viteze de prelucrare medii. Vitezele sunt mici datorită elementelor
mecanice în mişcare din componenţa acestor dispozitive ( de exemplu un
harddisk (cu controler performant) are o viteză de prelucrare cuprinsă între
1-10 Mo/s, o unitate de bandă aproximativ 1,5 Mo/s.
Viteza de prelucrare pentru dispozitivele de intrare ieşire se notează
cu Bd şi este dată de expresia:

Bd = 1/td

unde td reprezintă timpul mediu de acces la dispozitivul periferic.


16 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Viteza de prelucrare a CPU se mai poate măsura prin viteza de


prelucrare de utilizare, Bpu , dată de numărul de rezultate generate la ieşire
(exprimate în cuvinte de memorie) pe unitatea de timp, astfel:

Bpu = Rw / Tp [cuvinte / s]

unde Rw este numărul de rezultate generate (în cuvinte) şi Tp este timpul


total necesar pentru a genera cele Rw cuvinte.
Evident Bp = 1 / tp reprezintă o valoare maximă (de vîrf) şi Bpu <
Bp.
Există următoarea relaţie între vitezele de prelucrare (bandwidth)
asociate CPU, memorie principală, memorie externă şi dispozitive I/O :

Bm > Bmu > Bp > Bpu > Bd

Memoria principală are viteza de prelucrare (bandwidth) maximă;


această viteză de prelucrare trebuie să fie corelată cu vitezele de prelucrare
(bandwidth) asociate CPU şi dispozitivelor I/O, conform sistemului ilustrat
în figura 1.7.

Memorie
CPU
I/O canal I/O principala
Modul
memorie Memorie
I/O canal I/O
cache
(date si
Modul
memorie instructiuni)

I/O canal I/O

Disk, banda
Controler inteligent
B B
B m p
d
(utilizare buffere, multiplexare) (memorie intercalata)

Figura 1.7. Mecanisme de echilibrare între vitezele de prelucrare


(bandwidth) ale memoriei, CPU şi dispozitivelor I/O
Introducere în prelucrarea paralelă 17

Din figura 1.7. rezultă că informaţia primită/generată în/spre exterior


(pe canale I/O) se stochează temporar (pînă la preluarea de către CPU) în
memoria principală; pe de altă patre informaţia primită/generată de CPU se
stocheză tot în memoria principală. In concluzie, este de dorit să existe
relaţia :

Bd + Bpu = Bmu (sistem de calcul echilibrat)

Situaţia ideală corespunde cazului în care Bpu = Bp = 1/tp şi Bmu =


Bm. În acest caz , dacă relaţia anterioară este satisfăcută, sistemul de calcul
este echilibrat şi optim configurat.
Din punct de vedere software se pot organiza prelucrările astfel încît
să se obţină un paralelism al utilizării resurselor sistemului între mai mulţi
utilizatori (programe), chiar dacă în sistem există un singur procesor. Acest
lucru se poate obţine cu ajutorul conceptelor de multiprogramare şi
diviziune în timp a prelucrărilor.

Multiprogramare şi diviziune în timp

Multiprogramarea

În acelaşi interval de timp pot exista mai multe programe (procese)


active în sistemul de calcul, concurînd pentru memorie, I/O şi CPU. Totuşi
unele programe sunt orientate către calcule (utilizează mai mult CPU), în
timp ce altele sunt orientate către citirea / scrierea dispozitivelor I/O.
Se pot astfel organiza (intercala) aceste două clase de programe
pentru a obţine un timp de prelucrare global, al sistemului de calcul, cît mai
bun. Intercalarea programelor permite utilizarea mai eficientă a resurselor
calculatorului prin suprapunerea operaţiilor I/O cu operaţiile CPU. Acest
mod de organizare revine în sarcina sistemului de operare (programului de
supervizare). Intercalarea operaţiilor CPU cu operaţii I/O pentru mai multe
programe se numeşte multiprogramare.

Diviziunea în timp

Diviziunea în timp reprezintă împărţirea timpului de execuţie al CPU


între toate procesele active în sistemul de calcul. Cuantele de timp alocate
fiecărui proces pot fi inegale de la un proces la altul. Viteza de prelucrare
poate creşte mai mult decît în cazul multiprogramării. Diviziunea în timp
revine în sarcina sistemului de operare (sistem de operare cu diviziune în
18 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

timp). Utilizarea diviziunii în timp a programelor(proceselor) în sistemele


uniprocesor crează conceptul de procesor virtual (de exemplu : sisteme de
calcul cu un singur procesor şi mai multe terminale; pentru subiectul uman
răspunsul unicului procesor este suficient de rapid astfel încît să se
considere că fiecare terminal "operează" independent, ca şi cum ar poseda el
însuşi procesor.
Conceptul de diviziune în timp poate fi extins la sistemele
multiprocesor.
În figura 1.8. sunt reprezentate principalele moduri de organizare
(lansare în execuţie) a programelor într-un sistem de calcul.

Observaţii

- În cazul multiprogramării procesele îşi termină faza de calcul (în


CPU); apare suprapunere doar între operaţii CPU şi operaţii I/O;
- În cazul diviziunii în timp procesele nu îşi termină faza de calcul,
înainte săse execute alt proces; procesele pot fi astfel intercalate încît să se
cîştige timp de execuţie în raport cu multiprogramarea; apare suprapunere
între operaţii CPU şi operaţii I/O, respectiv între diferite operaţii I/O.

1.5 Structuri de calculatoare paralele

Calculatoarele paralele se clasifică în trei configuraţii arhitecturale :

- calculatoare pipe-line
- calculatoare (procesoare) matriciale
- calculatoare (sisteme) multiprocesor

Un calculator pipe-line utilizează paralelismul temporal.


Procesoarele matriciale se bazează pe mai multe unităţi ALU sincronizate
pentru a atinge paralelismul spaţial.Un sistem multiprocesor este
caracterizat de paralelism asincron prin intermediul unui set de procesoare
ce interacţionează şi îşi împart resursele (memorii, baze de date).
Aceste trei tipuri de paralelism (temporal, spaţial şi asincron) nu se
exclud reciproc. Majoritatea procesoarelor sunt construite intern astfel încît
utilizează tehnici pipe-line şi multe dintre acestea presupun o structură
matricială sau facilităţi multiprocesor.
Diferenţa fundamentală între un procesor matricial şi un sistem
multiprocesor este aceea că unităţile funcţionale din procesorul matricial
operează sincron , pe cînd procesoarele sistemului multiprocesor operează
asincron.
Introducere în prelucrarea paralelă 19

P1 P2 P3
c1 c2 c3
i1 o1 i2 o2 i3 o3

a) Prelucrare secventiala ( pe loturi - batch )

c1 c2 c3
activitate CPU

c1
P1 i1 o1
c2
P2 i2 o2
c3
P3
i3 o3 timp recuperat

i1 i2 o1 i3 o2 o3 activitate I/O

b) Prelucrare multiprogramata
c31 c21 c11 c32 c22 c12 c33
activitatea CPU
c31 c32 c33
i3
P3 o3 timp recuperat
c21 c22
P2 i2 o2
c11 c12
P1 i1 o1

i3 i2 o2 o3

activitatea I/O
i1 o1

c) Prelucrare cu diviziune in timp

i - citire a intrarii, c - calcule, o - generare a iesirii


P1,P2,P3 - procese active in sistem

Figura 1.8. Modalităţi software de obţinere a paralelismului în sistemele


uniprocesor
20 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Tendinţele de viitor indică utilizarea calculatoarelor controlate prin


flux de date şi cu procesoare algoritmice VLSI; aceste tipuri de calculatoare
sunt caracterizate de o creştere masivă a hardware-lui pentru a atinge
paralelismul.

Calculatoare pipe-line

Execuţia unei instrucţiuni presupune patru faze majore : încărcarea


instrucţiunii (fetch) - IF, decodarea instrucţiunii - ID, încărcarea operanzilor
- OF şi execuţia propriu-zisă - EX. În procesoarele non pipe-line aceste faze
se desfăşoară secvenţial, iar în procesoarele pipe-line se desfăşoară cu
paralelism temporal, ca în figura 1.9.

IF ID OF EX Ik - instructiune
(rez) - rezultat
a) procesor pipe-line
faze faze
(rez) (rez)
EX I1 I2 I3 I4 EX I1 I2
OF I1 I2 I3 I4 I5 OF I1 I2
ID I1 I2 I3 I4 I5 I6 ID I1 I2
IF I1 I2 I3 I4 I5 I6 I7 timp IF I1 I2 timp

1 2 3 4 5 6 7 1 2 3 4 5 6 7 8
b) organizarea in timp a instructiunilor c) organizarea in timp a instructiunilor
(pipe-line) (non pipe-line)

Figura 1.9. Principiul pipe-line şi execuţia instrucţiunilor cu sau fără


paralelism temporal

Pentru procesoare complexe , faza de execuţie a instrucţiunii poate fi


partajată în suboperaţii organizate pipe-line.
Problemele ce apar în calculatoarele pipe-line sunt datorate
conflictelor de acces la memorie, salturilor şi întreruperilor.
Datorită suprapunerii operaţiilor, calculatoarele pipe-line sunt
optimizate pentru a efectua operaţii de acelaşi tip. Ori de cîte ori se modifică
tipul operaţiei (instrucţiunii) registrele pipe-line trebuie şterse şi reîncărcate
- se consumă timp suplimentar.
Introducere în prelucrarea paralelă 21

Proiectarea calculatoarelor pipe-line include :secvenţarea sarcinilor


(job-urilor), prevenirea conflictelor de acces (coliziunilor), controlul
congestiei, controlul salturilor în program (capitolul 3).
O schemă funcţională a unui calculator pipe-line este ilustrată în
figura 1.10.
Există două structuri pipe-line : una pentru date scalare şi una pentru
date vectoriale. Faza de încărcare a operanzilor este împărţită în două
subfaze independente, corespunzătoare operării cu scalari sau cu vectori.
Faza de execuţie se desfăşoară în două procesoare distincte, asociate
scalarilor sau vectorilor.

Calculatoare matriciale

Un procesor matricial tipic este ilustrat în figura 1.11. Există două


unităţi funcţionale distincte: o unitate de control şi sincronizare a
elementelor de procesare ( ce are ca sarcină suplimentară efectuarea
operaţiilor cu scalari) şi o unitate de prelucrare matricială. Fiecare element
de prelucrare (PE) reprezintă un element pasiv fără posibilitatea de a
decodifica instrucţiuni.
Încărcarea instrucţiunilor şi decodarea lor , pentru unitatea de
prelucrare matricială, este efectuată de către unitatea de control, prin
intermediul unei reţele de interconectare între PE.
Fiecare element de prelucrare , PE , este alcătuit dintr-o unitate ALU
cu registre şii memorie locală.
Pentru o sesiune de lucru specifică, unitatea de control stabileşte
funcţia ALU pentru fiecare PE, după care transferă operanzi din exterior
către memoriile locale ale PE şi rezultatele de la un PE către alt PE (utilizînd
reţeaua de interconectare). Programarea procesoarelor matriciale este mult
mai dificilă decît programarea calculatoarelor pipe-line.

Sisteme multiprocesor

O structură de bază a unui sistem multiprocesor este ilustrată în


figura 1.12.
Sistemul este alcătuit din mai multe procesoare ce împart resurse
comune (memorie), dar posedă şi resurse proprii (private). Procesoarele
funcţionează independent (asincron), dar trebuie să comunice între ele.
Structura de interconectare între procesoare şi între procesoare şi
resursele comune determină organizarea sistemului multiprocesor. Există
trei mari categorii de interconectări :
22 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Procesor pentru scalari


Date (scalari) SP1
C Reg. SP2

Memorie scalar
IS
scalar SPn
IF ID
principala OF C Registre pipe-line
vector
pentru scalari
C
Procesor pentru vectori

VP1
Date (vectoriale) Reg.
VP2

IS - sir de instruciuni vector


C - comenzi VPn
Registre pipe-line
pentru vectori

Figura 1.10. Schema funcţională a unui calculator pipe-line

PE - element de prelucrare
Unitate de control CP - procesor de control
I/O CM - controlul memoriei
CP P - procesor, M - memorie
(prelucrare
scalari) CM
control, sincronizare
Bus date
PE1 PE2 PEn

P P P
(prelucrare
matriciala)
M M M

Retea de interconectare a elementelor de prelucrare

Figura 1.11. Procesor matricial


Introducere în prelucrarea paralelă 23

- împărţirea unui bus comun ( Bus Reqest, Bus Grant)


- utilizarea unei reţele de interconectare totală (crossbar)
- utilizarea dememorii multiport ( ca memorie comună , duală)

canale I/O

Memorie Retea de Retea de interconexiune


interconexiune
procesoare - memorie
comuna
I/O

LM - memorie P1 LM1
locala Retea de

P - procesor interconexiune P2 LM2

procesoare
Pn LMn

Figura 1.12 Sistem multiprocesor

Sistemele multiprocesor pot fi centralizate sau distribuite. Sistemele


centralizate conţin toate procesoarele în acelaşi sistem de calcul, spre
deosebire de sistemele distribuite în care procesoarele pot fi fizic plasate în
subsisteme diferite. Pentru sistemele distribuite este necesară o reţea de
comunicaţie între procesoare rapidă, adaptabilă (flexibilă) şi fiabilă.

Performanţele calculatoarelor paralele

Viteza de prelucrare atinsă de un calculator paralel cu n procesoare


identice care lucrează concurent poate fi cel mult de n ori viteza de
prelucrare a unui sistem cu un singur procesor.
În practică, această viteză de prelucrare este mult mai mică datorită :
conflictelor de acces la memoria comună, modului de comunicare între
procesoare, ineficienţei algoritmilor utilizaţi în rezolvarea problemei.
24 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

În literatură se consideră situaţia cea mai defavorabilă în ceea ce


priveşte viteza de execuţie a unui sistem multiprocesor cu n procesoare ca
fiind log2 n , dacă viteza sistemului uniprocesor este unitară.
O conjunctură mai optimistă ( şi mai generală ) presupune că viteza
sistemului cu n procesoare este n / ln n , dacă viteza sistemului uniprocesor
este unitară, după cum urmează :

- se consideră o problemă de calcul ce poate fi rezolvată în timpul


unitar de către sistemul uniprocesor;
- problema de calcul poate fi rezolvată de oricare i procesoare, dintr-
un sistem cu n procesoare;
- încărcarea pentru fiecare din cele i procesoare este egală cu 1/i
unităţii de timp (încărcare egală pentru toate procesoarele)
- probabilitatea de alegere a procesorului i pentru rezolvarea
problemei este 1 / n (procesoarele suntt echiprobabile);
- timpul de execuţie pentru cele i procesoare este suma după numărul
total de procesoare a produselor dintre probabilitatea de selectare a unui
procesor şi încărcarea acestuia, adică :
n n
Tn =  i=1
(1 / n)(1 / i) = (1 / n) i=1
(1 / i)

Creşterea de viteză în raport cu viteza unitară este :


n n
1 / {(1 / n) 
i=1
(1 / i)} = n / 
i=1
(1 / i)  n / ln n

În figura 1.13. se reprezintă grafic cazul ideal, cazul cel mai


defavorabil şi cazul optimist pentru performanţele sistemelor multiprocesor.
Din figura 1.13. rezultă că o creştere masivă a numărului de
procesoare nu conduce la creşterea vitezei sistemului multiprocesor în
eceeaşi proporţie ( de exemplu n = 1000, cazul optimist, viteza este 144,72,
cu un ordin de mărime mai mică decît viteza ideală; pentru n = 4 , cazul
ideal , viteza este de acelaşi ordin de mărime cu viteza ideală). Concluzia
este că sistemul multiuprocesor trebuie să utilizeze mai puţine procesoare,
dar mai puternice, decît mai multe procesoare neperformante.
Măsurarea performanţelor reale ale sistemului de calcul (uniprocesor
sau multiprocesor) trebuie să ţină seama de costul calculelor şi uşurinţa în
programare.
Comparînd tipurile de sisteme de calcul prezentate anterior se pot
trage următoarele concluzii :
- sistemele uniprocesor ( cu procesor pipe-line) domină piaţa
sistemelor de calcul datorită costului mic şi a existenţei unor sisteme de
operare astfel concepute încît să asigure utilizarea maximă a resurselor;
Introducere în prelucrarea paralelă 25

- procesoarele matriciale se utilizează încă în sisteme dedicate unor


aplicaţii specifice (pentru aplicaţii complexe în care raportul cost /
performanţă poate fi acceptat);

viteza de prelucrare
128
cazul optimist
64
32
cazul ideal
16 log 2 n ( cel mai defavorabil)
8
4
2
1
1 2 4 8 16 32 64 128 256 512 1024
(numar de procesoare)

Figura 1.13. Performanţele sistemelor multiprocesor

- programarea procesoarelor matriciale este încă dificilă datorită


arhitecturii rigide a acestora;
- sistemele multiprocesor sunt mult mai flexibile în aplicaţii de uz
general , în raport cu procesoarele matriciale;
- sistemele multiprocesor cu pipe-line au performanţele cele mai
bune în cadrul calculatoarelor paralele, dar sunt încă dificil de proiectat şi
construit.

Modalităţi noi pentru prelucrarea paralelă

Calculatoare controlate prin flux de date (data-flow)

Maşinile von Neumann convenţionale sunt calculatoare controlate


prin flux de instrucţiuni (instrucţiunile se execută secvenţial, controlate de
contorul de program PC).
Pentru a obţine un grad maxim de paralelism s-a propus un model de
calculator controlat prin fluxul de date.
26 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Conceptul de bază, în acest caz, este acela de a valida execuţia


instrucţiunii numai atunci cînd operanzii necesari sunt disponibili. Nu mai
este necesar contorul de program.
Iniţierea execuţiei instrucţiunii depinde de disponibilitatea datelor
independent de poziţia (adresa) instrucţiunii în memorie. Instrucţiunile nu
mai sunt numerotate şi execuţia programului urmăreşte apariţia datelor
(fluxul de date).
Într-un astfel de calculator există numai constrîngerea disponibilităţii
resurselor hardware, deci, în mod teoretic, gradul de paralelism va fi maxim.
Fiecare instrucţiune dintr-un calculator "data-flow" este
implementată printr-o structură ce conţine : operaţia, operanzii şi rezultatul
(figura 1.14.).
Instrucţiunea se execută atunci cînd registrele de operanzi sunt
umplute. Registrul de rezultat poate fi operand de intrare pentru o altă
instrucţiune sau este stocat în memorie.
Mecanismul de bază pentru execuţia unui program controlat prin
fluxul datelor este ilustrat în figura 1.15.
Fiecare instrucţiune are o structură de date asociată, numită
activitate; această structură de date conţine informaţii referitoare la
încărcarea operanzilor (operaţia, sursa operanzilor, dacă operanzii sunt
disponibili şi dacă s-au încărcat, destinaţia rezultatului sunt informaţii ce se
regăsesc în cele două structuri de date asociate instrucţiunii : structura din
figura 1.14. şi activitate). Activitatea fiecărei instrucţiuni are o adresă unică
ce va fi încărcată în coada de instrucţiuni imediat ce instrucţiunea e gata de
execuţie.

x
5
+ * z
2 16
y
3
z=(x+y)*2
+ *
x
[op1] [op1]
y [op2] [op2] 2
z
[rez] [rez]

Figura 1.14. Exemplu de instrucţiuni " data - flow"


Introducere în prelucrarea paralelă 27

Rezultate Unitati de Operatii


efectuare a
operatiilor

Coada
instructiuni
Actualizare
Incarcare
Stocare
activitate
Scriere Citire

Figura 1.15. Mecanismul execuţiei unui program controlat prin fluxul


datelor

Operaţia (instrucţiunea) este executată în unităti speciale. Rezultatul


operaţiei curente va actualiza activităţile instrucţiunilor din program. Datele
şi instrucţiunile sunt preluate (din exterior) prin blocul de încărcare.

Structuri de calcul VLSI

Structurile VLSI reprezintă , în mod practic, implementări directe (în


tehnologie VLSI) a unor algoritmi de calcul.
Aceste structuri sunt utilizate numai pentru aplicaţii specifice.

1.6. Clasificări arhitecturale ale sistemelor de calcul

Sistemele de calcul se pot clasifica, din punct de vedere arhitectural,


astfel:

- după multiplicitatea şirului de instrucţiuni şi date


- după gradul de paralelism
- după gradul de paralelism şi nivelele de pipe-line în
subsistemele componente

Clasificări după multiplicitatea şirului de instrucţiuni şi date

Există următoarele arhitecturi de sisteme de calcul:


28 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

1. Un singur şir de instrucţiuni - un singur şir de date (SISD)


2. Un singur şir de instrucţiuni - şir multiplu de date (SIMD)
3. Şir multiplu de instrucţiuni - un singur şir de date (MISD)
4. Şir multiplu de instrucţiuni - şir multiplu de date (MIMD)

Aceste arhitecturi sunt prezentate în figura 1.16.

Observaţii

- trei module esenţiale sunt implicate în cele patru scheme din figura
1.16. : unitatea de control (decodifică instrucţiunea), unitatea de procesare
(execută instrucţiunea) şi modulele de memorie (instrucţiunile şi datele sunt
încărcate /stocate în aceste module).
- arhitectura SISD este cea clasică şi este realizată în general în
tehnică pipe-line;
- arhitectura SIMD corespunde procesoarelor matriciale (aceeaşi
instrucţiune se aplică unui vector de date);
- arhitectura MISD execută mai multe instrucţiuni (operaţii) asupra
unui flux de date; se crează o structură macro-pipe-line, în care ieşirea unei
PU devine intrare pentru următoarea PU. Soluţia nu este considerată
practică; nu există sisteme de calcul în arhitectură MISD !
- arhitectura MIMD corespunde sistemelor multiprocesor (există
interacţiune între mai multe unităţi de control (procesoare); cuplajul între
aceste procesoare poate fi mai slab sau mai strîns).
Introducere în prelucrarea paralelă 29

DS1
PU1
MM1
CU DS2
IS DS PU2
CU PU MM
MMm
DSn
a) arhitectura SISD
PUn SM
IS

b) arhitectura SIMD
DS

IS1 IS1 IS1 DS1


CU1 PU1 CU1 PU1
MM1 MM1
IS2 IS2 IS2 DS2
CU2 PU2 CU2 PU2

MMm MMm
ISn ISn ISn DSn
CUn PUn SM CUn PUn SM
DS

c) arhitectura MISD d) arhitectura MIMD

Notatii
IS - sir de instructiuni DS - sir de date
CU - unitate de control PU - unitate de prelucrare
MM - modul de memorie SM - memorie partajata

Figura 1.16. Arhitecturi se sisteme de calcul ( clasificare după


multiplicitatea şirurilor de instrucţiuni şi date
30 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Clasificări după gradul de paralelism

Gradul maxim de paralelism, P, este definit ca numărul maxim de


digiţi (biţi) ce pot fi prelucraţi pe unitatea de timp de către sistemul de
calcul.
Gradul mediu de paralelism , Pa , este definit de formula :
T
Pa = {  Pi } / T
i=1

unde Pi este numărul de biţi ce pot fi prelucraţi în ciclul i al procesorului, iar


T este numărul de ciclii de procesor.
Rata de utilizare a sistemului de calcul,
procesor este dată de :
T
 = Pa / P = {  Pi } / T.P < 1
i=1
Gradul maxim de paralelism , P , poate fi calculat astfel :

P = n.m

unde n reprezintă lărgimea bus-ului de date al procesorului , iar m reprezintă


numărul de cuvinte (exprimate, în general, în biţi sau ca număr abstarct) ce
se prelucrează pe ciclu.
Există patru tipuri de arhitecturi , după gradul de paralelism :

- n=1, m=1 (Word Serial and Bit Serial - WSBS) : se prelucrează un


singur bit pe ciclu; arhitectura aceasta nu mai este utilizată.
- n=1, m>1 (Word Paralel and Bit Serial - WPBS) ; prelucrare pe
"felii" de biţi (bit slice); se prelucrează un cuvînt de m>1 biţi cu procesor
serial de 1 bit.
- n>1, m=1 (Word Serial and Bit Paralel - WSBP) : prelucrare pe
"felii" de cuvinte (word slice); un cuvînt de n biţi este prelucrat într-un ciclu.
- n>1, m>1 (Word Paralel and Bit Paralel - WPBP) : prelucrare
paralelă sau complet paralelă; se prelucrează o matrice n.m biţi se
prelucrează într-un ciclu.

Clasificări după paralelism şi numărul de nivele pipe-line

Se consideră prelucrarea paralelă şi gradul de pipe-line la


următoarele nivele ale subsistemelor sistemului de calcul:
Introducere în prelucrarea paralelă 31

- unitatea de control a procesorului (Procesor Control Unit -PCU)


- unitatea aritmetică şi logică (ALU)
- logica combinaţională necesară efectuării unei operaţii ALU de 1
bit (CLC)

Un sistem de calcul poate fi caracterizat de tripletul


T = < k x k' , D x D', W xW' >, unde k este numărul de unităţi de control ale
procesorului (PCU), k' este numărul de PCU realizate cu pipe-line, D -
numărul de unităţi ALU, D' - numărul de unităţi ALU realizate cu pipe-line,
W este lungimea cuvîntului în ALU, iar W' este numărul de nivele pipe-line
în unităţile ALU.

1.7. Aplicaţii ale prelucrării paralele

O problemă ştiinţifică (de complexitate medie sau mare ) presupune


implicarea următorilor factori: baza teoretică, experimente şi calcule
numerice.
Baza teoretică oferă modelul problemei, iar experimentele şi
calculele numerice verifică modelul şi pot sugera noi modele.
Simulările pe calculator au următoarele avantaje :

- sunt mai ieftine şi mai rapid de realizat în raport cu experimentele


- pot rezolva probleme cu un grad de complexitate mai mare decît
experimentele
- nu sunt limitate decît de sistemul de calcul (viteză de prelucrare ,
capacitate de memorie) spre deosebire de experimente care prezintă şi alte
constrîngeri.
Aplicaţiile ale sistemelor de calcul pot fi :

-modelarea predictivă şi simularea sistemelor complexe


(meteorologie, sisteme sociale, sisteme ecologice)
- automatizări şi proiectare industrială
- inteligenţă artificială
- cercetare (în numeroase domenii)
2
Subsisteme de memorie şi intrare - ieşire (I / O)

2.1. Ierarhizarea memoriei

Memoria unui sistem de calcul este ierarhizată cu scopul de a realiza


transferuri de date între procesor şi memorie astfel încît prelucrările
efectuate de sistem să se realizeze la o viteză cît mai apropiată de viteza
procesorului . Se obţine astfel egalizarea vitezelor de prelucrare între diverse
subsisteme de memorie ( vezi capitolul 1).

Memoria poate fi clasificată (ierarhizată) după mai multe criterii :


metoda de accesare a informaţiei ( memorii RAM - cu acces aleator,
memorii SAM - cu acces secvenţial şi memorii (dispozitive de stocare) cu
acces direct (DASD - Direct Acces Storage Devices), timpul de acces - ca
timp de întîrziere între comandă şi preluarea efectivă a informaţiei .

Memoria este organizată pe nivele astfel : nivelul i este ierarhic


superior nivelului i+1 (nivelul i se va numi superior, iar nivelul i+1 se va
numi inferior). Dimensiunea memoriei este mai mare pe nivelele inferioare
şi mai mică spre nivelele superioare.
Timpul de acces este mai redus către nivelele superioare şi mai mare
spre nivelele inferioare.
Costul memoriilor scade pe măsură ce nivelul ierarhic este mai jos
(scade de la nivelele superioare către nivelele inferioare).
Memoriile se mai pot clasifica în memorii private (accesibile doar de
către un procesor anume) sau memorii comune (partajate).
În mod uzual, un sistem de calcul are trei nivele ierarhice de
memorie, ca în figura 2.1.
Subsisteme de memorie şi intrare - ieşire (I / O) 33

Memorie locala Retea de Memorie


Procesor (cache) interconectare principala
harddisk
P1 M11 M21
canale de
M22 comunicatie

P2 M12 M23 harddisk

Nivel 1 2 3
Timp de acces t1 t2 t3
Capacitate s1 s2 s3
memorie
Cost c1 c2 c3

Figura 2.1 Ierarhizarea memoriilor într-un sistem de calcul

Există trei nivele ierarhice : memoria locală, memoria principală


(sau primară) şi memoria secundară. Cu notaţiile introduse în figura 2.1, se
pot scrie relaţiile : t1 < t2 < t3 ; s1 < s2 < s3 ; c1 > c2 > c3 .

Relaţia între cost şi timpul de acces este ilustrată în figura 2.2.

cost

cache (bipolar)

memoria principala
harddisk (floppy disk)

timp acces

Figura 2.2 Relaţia cost - timp de acces

Structura ierarhică a memoriei este organizată astfel încît spaţiul de


adrese al nivelului i reprezintă un subspaţiu al spaţiului de adrese al
34 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

nivelului i+1. Această afirmaţie este adevărată în sensul următor: adresa Ak


din nivelul i nu este în mod obligatoriu adresa Ak din nivelul i+1, dar
informaţia (oricare informaţie) din nivelul i poate exista şi în nivelul
inferior, i+1. Totuşi informaţia de pe nivelul i poate fi mai actuală decît
informaţia de pe nivelul i+1.
Se crează astfel problema coerenţei datelor între nivele adiacente,
deoarece acestea conţin copii diferite ale aceleiaşi informaţii (actualizate
doar la nivelul superior).
Problema trebuie rezolvată de către sistemul de operare (care trebuie
să actualizeze toate copiile, pe toate nivelele). În caz contrar pot apare
situaţii de execuţie incorectă a programelor ce împart variabile (resurse
comune de memorie).
Modelarea performanţelor într-un sistem cu memorie ierarhizată este
realizată printr-o funcţie numită funcţia de succes (rata de atingere), H, care
reprezintă probabilitatea găsirii (atingerii) informaţiei cerute în memoria de
pe un anumit nivel.
Funcţia de succes, H , depinde de : granularitatea informaţiei
transferate (lărgimea cuvîntului ), capacitatea memoriei pe acel nivel,
politica de administrare (management) a memoriei.
Se consideră totuşi că funcţia H depinde foarte mult de mărimea
memoriei, s, deci se va scrie H ca fiind H(s).
Se defineşte rata de pierderi , F(s) = 1- H(s).
Deoarece s-a presupus că există copii ale informaţiei de pe nivelul i
pe toate nivelele inferioare (mai mari decît i), se poate defini funcţia de
acces pe nivelul i, hi , astfel :

hi = H(si) - H(si-1)

unde si reprezintă dimensiunea memoriei pe nivelul i.


Funcţia de acces pe nivelul i se mai poate scrie :

hi = F(si-1) - F(si)

Semnificaţia relaţiei de calcul a funcţiei de acces , hi , este aceea că


informaţia căutată nu se află pe nivelele superioare 1,2, ... , i-1 , dar nu
lipseşte de pe nivelul i ( se află pe nivelul i).
Funcţia hi indică numărul relativ de accese la memoria de pe nivelul
i, realizate cu succes.
Subsisteme de memorie şi intrare - ieşire (I / O) 35

Frecvenţa de acces fără atingerea informaţiei este f i = 1 - hi (pentru


nivelul i).

2.2. Optimizarea ierarhiei memoriei

Scopul proiectării unui sistem ierarhizat de memorie, cu n nivele,


este atingerea unor performanţe cît mai apropiate de acelea ale memoriei de
pe nivelul 1 (cache) şi a unui cost cît mai apropiat de acela al nuvelului n
(memoria de masă).
Atingerea acestor performanţe depinde de o multitudine de factori,
printre care se pot enumera : modul în care programul accesează variabilele
din memorie, timpul de acces şi dimensiunea memoriilor pe fiecare nivel,
mărimea blocului de informaţie transferat, politicile de management al
memoriei.
O măsură a performanţelor este timpul efectiv de acces la memorie,
Ti , (de la procesor la nivelul i de memorie ) definit astfel :
i
Ti = 
k=1
tk

( sumă a timpilor de acces mediu, tk , pentru fiecare nivel de memorie k =


1,i ).
Timpul mediu de acces include timpii de aşteptare datoraţi
conflictelor de acces între modulele de memorie de pe nivelul k şi timpii de
întîrziere datoraţi reţelei de interconectare (comutare) între nivelele de
memorie k-1 şi k.
Conflictele de acces ce pot apare depind de numărul de procesoare,
de numărul de module de memorie şi de tipul reţelei de interconectare între
procesoare şi memorii.
Timpul efectiv de acces la memorie, asociat sistemului de calcul cu
memorie ierarhizată, este dat de relaţia :
n
T =  hi .Ti
i=1

unde n este numărul de nivele de ierarhizare, iar hi este frecvenţa de acces


pe nivelul i.
Înlocuind hi cu expresia indicată anterior se obţine :
n
T =  [ H(si) - H(si-1) ] . Ti
i=1
36 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Înlocuind pe Ti cu expresia sa se obţine în continuare :


n i
T=  i=1
{ [ H(si) - H(si-1) ] . k=1
tk } =
n n-1
= [ H(sn) - H(sn-1) ]. k=1
tk + [ H(sn-1) - H(sn-2) ]. 
k=1
tk + ... =
n
= i=1
[ H(sn) - H(si-1) ]. ti

(s-a tinut cont că H(s0) = 0 - nivelul 0 nu există ).


Pe de altă parte H(sn) =1 ( probabilitatea de atingere a informaţiei pe
nivelul cel mai de jos este 1). În continuare 1- H(si) = F(si) de unde rezultă :
n n
T= 
i=1
[ H(sn) - H(si-1) ]. ti = 
i=1
[ 1 - H(si-1) ]. ti

În final :
n
T= 
i=1
F(si-1) . ti

O altă măsură a performanţelor sistemului de calcul (din punct de


vedere al sistemului de memorie) poate include utilizarea
procesorului.Utilizarea procesorului implică sistemul de memorie deoarece
procesele executate (de procesor) pot să împartă zone de memorie comună.
O a treia măsură a performanţelor este costul pe unitatea de memorie
(octet).
Optimizarea performanţelor înseamnă minimizarea timpului efectiv
de acces ,
n n
T= i=1
F(si-1) . ti , ţinînd cont de constrîngerile C = i=1
c(ti) . si  c0 , cu

si >0 , ti > 0 pentru i = 1,n; C reprezintă costul total al sistemului de


memorie, iar c(ti) este costul pe unitatea de memorie (octet) la nivelul i
exprimat funcţie de timpul de acces pe nivelul i.
În toate sistemele de memorie discutate anterior o locaţie de
memorie este accesată (referită) printr-o adresă.
Există un alt tip de memorie (memorie asociativă) pentru care datele
stocate pot fi accesate prin specificarea conţinutului sau a unei părţi a
conţinutului. Memoriile asociative se mai numesc memorii adresabile prin
conţinut sau memorii cu căutare paralelă. Aceste memorii au proprietatea
Subsisteme de memorie şi intrare - ieşire (I / O) 37

că pot efectua operaţii de căutare paralelă şi comparaţii (necesare în multe


aplicaţii : tabele de căutare, stocare de informaţii cu actualizare rapidă,
inteligenţă artificială).
Dezavantajul memoriilor asociative este complexitatea hardware în
raport cu memoriile "clasice".

2.3. Scheme de adresare pentru memoria principală

Există două scheme principale de adresare a memoriei primare : cu


intercalare de ordin superior şi cuu intercalare de ordin inferior. Se
presupune că memoria principală are N = 2n cuvinte.
Adresarea cu intercalare de ordin superior distribuie adresele în M =
m
2 module, asfel că fiecare modul i, i =0,M-1, conţine adrese consecutive
de la i.2n-m la (i+1).2n-m - 1 .(figura 2.3.a).
Adresarea cu intercalare de ordin inferior diistribuie adresele astfel
încît adresele consecutive să fie localizate în module consecutive (figura
2.3.b). Adresa A este localizată în modulul A mod M.

MSB LSB MSB LSB


m biti n-m biti n-m biti m biti

Modul Adresa in modul Adresa in modul Modul

m adrese adrese n-m m


DCD n-m DCD
CS
CS
M0 M 2 m- 1 M0 M 2 m- 1
CS
CS

a) intercalare de ordin superior b) intercalare de ordin inferior

DCD - decodificator de adrese


CS - semnal de validare modul memorie

Figura 2.3. Scheme de adresare a memoriei principale


38 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Schema din figura 2.3.a permite extinderea simplă a memoriei prin


adăugarea a noi module ( pînă la maxim M module). Totuşi plasarea unei
zone continue de memorie într-un modul poate genera conflicte de acces în
cazul UCP organizate pipe-line (vectorial sau matricial) deoarece datorită
secvenţării instrucţiunilor (datelor) în program se poate ajunge în situaţia ca
instrucţiuni (date) consecutive să fie plasate în acelaşi modul. Deoarece
ciclul memoriei este mult mai mare decît ceasul "pipe-line" (de efectuare a
operaţiilor pipe-line) se pot cauza întîrzieri în prelucrarea informaţiilor din
acelaşi modul.
În aceste cazuri schema de adresare din figura 2.3.b este mai
potrivită - operanzii pot fi referiţi (accesaţi) în paralel , din module diferite.
Fiabilitatea sistemului de memorie este mai bună pentru intercalarea
de ordin superior, deoarece modulul defect poate fi izolat; pentru
intercalarea de ordin inferior un modul defect produce deteriorarea
catastrofală a performanţelor întregului sistem.
În practică se pot utiliza scheme de adresare a memoriei mixte (între
cele două variante extreme din figura 2.3.).

2.4. Memoria virtuală

Pentru foarte multe sisteme de calcul există programe ce nu se pot


încadra în limitele memoriei principale (datorită lungimii acestora sau
utilizării partajate a memoriei principale).
Soluţia uzuală constă în utilizarea unor tehnici de management a
memoriei astfel încît fiecărui utilizator să i se aloce suficientă memorie din
întregul sistem de memorie ierarhizată ( memorie principală + memorie
secundară).
Managementul memoriei ţine seama de structura programului
(structuri de date, variabile, funcţii, proceduri , etc.); faza de compilare a
programului asociază un identificator unic pentru fiecare entitate, iar faza
de editare a legăturilor (link-editare) asociază locaţii de memorie, în
memoria sistemului, pentru fiecare identificator.
Setul de identificatori reprezintă spaţiul de memorie virtuală , iar
setul locaţiilor de memorie din memoria principală defineşte spaţiul
memoriei fizice.
Sistemele de calcul mai puţin recente utilizau tehnica "overlay"
pentru a rezolva alocarea memoriei în cazul programelor mari. Această
tehnică constă în încărcarea în memoria principală a unor părţi ale
programului peste alte părţi ale aceluiaşi program, ce nu mai erau necesare
la momentul curent.
Subsisteme de memorie şi intrare - ieşire (I / O) 39

Totuşi , pentru unele programe mari , cerinţele de memorie pot fi


impredictibile. Pe de altă parte utilizarea multiprogramării (programarea mai
multor procese "simultan") face dificilă utilizarea tehnicii "overlay".
Se notează cu Vj = {0,1, ... , n-1} spaţiul memoriei virtuale şi cu
M = { 0,1, ... , m-1 } spaţiul memoriei fizice. Evident există relaţia n >> m.
Se defineşte mulţimea {} ca fiind mulţimea situaţiilor de excepţie.
La fiecare moment de timp t, trebuie găsită o asociere între Vj şi M U {},
dată de funcţia de corespondenţă f j (x,t) : Vj --> M U {} cu expresia :

y, dacă la momentul t elementul x


 Vj este în locaţia y M
f j (x,t) =
, în caz contrar ( x nu are o
locaţie în M)

Funcţia de corespondenţă f j (x,t) , asociază unui identificator al


programului o locaţie de memorie( în memoria principală).
Apariţia unei situaţii de excepţie ( fj (x,t) =  ) determină încărcarea
elementului x (cerut) de pe nivelul imediat inferior şi actualizarea funcţiei
de corespondenţă.
Cu alte cuvinte un element cerut este căutat începînd de la nivelul
cel mai de sus către nivele inferioare, pînă cînd este găsit. Această căutare
este efectuată de către sistemul de operare. Elementul astfel găsit trebuie
transferat de pe nivelul inferior, unde a fost localizat, pe un nivel dorit
(superior).
Există trei politici de control al acestui transfer (ce se vor detalia
ulterior) : politica de plasare (selectarea unei locaţii de memorie, pe nivelul
dorit, unde va fi depus elementul), politica de reamplasare (selectarea
elementului care trebuie să fie deplasat pe alt nivel pentru a face loc
elementului curent) şi politica de încărcare (ce decide momentul de timp
cînd elementul va fi adus (incărcat) de pe nivelul inferior).
Datorită caracteristicilor unui program (bucle, structuri de control),
numai un subset al setului de identificatori (memorie virtuală) este referit
într-un interval de timp limitat , . Secvenţa referinţelor, pe acest interval de
timp , poate fi localizată.
Această localizare poate fi : temporală (identificatorii sunt localizaţi
în timp în ordinea în care apar în execuţia programului de exemplu : bucle,
conţinutul stivelor), spaţială ( identificatorii sunt localizaţi într-o zonă de
memorie (de adrese), secvenţială (dacă un identificator a fost localizat la
40 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

adresa Ai ,atunci se decide că următorul identificator va fi localizat la adresa


Aj , ca de exemplu : secvenţă de instrucţiuni, vectori de date).
Localizarea temporală permite identificarea numărului de blocuri
necesare la fiecare nivel de memorie (la un moment dat ); localizarea
spaţială permite determinarea dimensiunii blocului de memorie pentru
fiecare nivel; localizarea secvenţială permite distribuirea de identificatori
unici pe fiecare modul de memorie pentru situaţiile de accese concurente la
memorie.
Intervalul de timp limitat , , numit spaţiu de lucru , reprezintă o
mărime critică a sistemului de calcul.
Variabilele (identificatorii) accesate pe durata spaţiului de lucru tind
rapid să se acumuleze în memoria principală (nivelul superior) pentru a se
micşora timpul de acces la memorie.
Proprietatea de localizare, foarte utilă în accesarea datelor, nu există
decît dacă spaţiul de lucru este redus.
În anumite situaţii este necesară relocarea programelor pentru a crea
zone de memorie liberă continuue. Relocarea poate fi statică (se efectuează
înaintea execuţieii programelor) sau dinamică (se efectuează în timpul
execuţiei programelor).
Relocarea constă în modificarea funcţiei de corespondenţă fj(x,t).
Funcţia de corespondenţă fj(x,t) poate fi implementată în mai multe
moduri:
- corespondenţă directă (tabelă cu n intrări ce conţine y ori de cîte ori
f(x) = y şi  în caz contrar). Avantajul metodei constă în simplitate.
Dezavantajul metodei de implementare prin corespondenţă directă constă în
faptul că valoarea lui n poate fi mare şi tabela este ineficient utilizată -
pentru n >> m majoritatea elementelor tabelei vor fi egale cu  .
Crearea unei tabele cu m intrări (ca alternativă în situaţiile cînd
n>>m, poate genera probleme datorită variaţiei timpului de căutare a
elementului x.
- corespondenţă asociativă : se utilizează memorii asociative
(adresabile prin conţinut).

Implementările de mai sus nu sunt practice datorită dimensiunii mari


a memoriei virtuale. Memoria virtuală trebuie organizată în blocuri de
dimensiune mai mică , pentru care se implementează o funcţie de
corespondenţă cu una din metodele anterioare. Spaţiul virtual de adrese
poate fi organizat în pagini sau segmente .
Subsisteme de memorie şi intrare - ieşire (I / O) 41

Sistemul de memorie paginată

Spaţiul virtual de memorie este partiţionat în pagini, de lungime fixă.


Fiecare adresă virtuală (generată de un program în execuţie) constă în două
cîmpuri : un număr de pagină virtuală, ip şi un deplasament iw în interiorul
paginii.
În figura 2.4. se ilustrează translatarea adresei virtuale în adresă reală
(fizică) pentru un sistem de memorie paginată.

PTBR (Page table base register) Adresa virtuala


Registru de baza S/U RWX Numar pagina ip Offset cuvint w
i

tip acces
Tabela de pagini

(page table entry) PTE : F C RWX M P PFA


.
F - bit de validare
C - bit de modificare (change)
S/U - bit supervizor/utilizator
M - bit memory / disk PFA iw
RWX - Read/Write/eXecute
PFA - adresa de pagina (Page frame address)
- corespunde paginii "fizice" Adresa fizica
P - bit "private"

Figura 2.4. Translatarea adresei virtuale în adresă fizică pentru sistemul cu


memorie paginată

Există următoarele relaţii formale asociate figurii 2.4. :

PTE(ip).F = 1/0 - pagină existentă / non existentă


PTE(ip).RWX - tip acces (Citire/ Scriere/ Execuţie)
PTE(ip).M = 1/0 - PTE(ip).PFA se află în memorie/pe disc
PTE(ip).P =1 - pagină privată
42 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Fiecare locaţie din tabela de pagini conţine un bit de validare, F, un


cod de acces , RWX, un bit "memory - disk" şi o adresă de pagină "fizică"
în memoria principală.Memoria principală este împărţită în zone , numite
pagini , de dimensiune fixă, fiecărei zone asociindu-se o adresă de pagină
"fizică" (o adresă pagină cadru).
Bitul F indică (F=1) dacă pagina există (este activă); în caz contrar
(F=0) pagina va fi creată (activată) atunci cînd va fi referită. O pagină este
activă (creată) în raport cu un proces dacă procesul este rezident în
memoria principală. Bitul M indică (M=1) faptul că procesul asociat paginii
utilizează adrese (şi cîmpul PFA conţine adrese) din (în) memoria principală
şi nu pe disc (M=0).
Tipul accesului (RWX şi S/U) este util pentru cazul
multiprogramării; se poate proteja memoria între procese (RWX) sau între
procese şi sistemul de operare (S/U).
Schema de adresare din figura 2.4. nu este foarte eficientă deoarece
sunt necesare două accese la memorie pentru referirea unui identificator ( un
acces pentru citirea PTE şi al doilea acces propriu-zis , conform conţinutului
PTE).
Schema din figura 2.4. poate fi îmbunătăţită pe baza proprietăţii de
localizare a programelor ; se utilizează o memorie asociativă (Translation
Lookahead Buffer - TLB) ce conţine cele mai recente N numere de pagini
virtuale accesate anterior şi cîmpurile PFA corespondente acestor pagini ( de
fapt întreaga informaţie asociată unei intrări PTE).
Această îmbunătăţire este ilustrată în figura 2.5.

Există următoarele relaţii formale asociate figurii 2.5. :

PME(x).C =1 - PFA a fost modificată


PME(x).P =1 - pagina privată
PME(x).pid - identificator al procesului asociat paginii

Când un proces în execuţie generează o adresă virtuală, schema de


translatare din figura 2.5. realizează o comparaţie între numărul paginii
virtuale, ip , şi toate intrările în tabela de căutare TLB (PME) ce conţin
acelaşi identificator de proces, pid. Dacă nu există corespondentă se
generează o excepţie şi se va localiza pagina (mai mult, excepţii se pot
genera şi în sitaţiile în care tipul accesului cerut nu corespunde cuu tipul
accesului acordat).
Subsisteme de memorie şi intrare - ieşire (I / O) 43

Adresa virtuala

S/U RWX pid Numar pagina ip Offset cuvint w


i

tip acces

TLB
Page Map Entry (PME)
Politica
de reamplasare
pid F C RWX M P PFA

pid - identificator proces

PFA iw

Adresa fizica

Figura 2.5. Sistem de memorie paginată cu memorie asociativă TLB

Cînd o pagină referită este modificată este setat bitul C


corespunzător. Acest bit poate fi utilizat în politica de reamplasare şi
actualizare a memoriei asociative TLB.
Avantajul (sau necesitatea) paginării este acela de a rezolva
problema implementării funcţiei de corespondenţă.Memoria asociativă TLB
este mai rapidă decît memoria uzuală (unde este implementată tabela de
pagini din figura 2.4.; se efectuează un singur acces la memorie , pentru
schema din figura 2.5.
Dezavantajele paginării sunt:

- sistemele de memorie paginată pot deveni ineficiente dacă spaţiul


virtual de adrese este mare; dimensiunea tabelei de pagini poate deveni
excesiv de mare. De exemplu : pentru o adresă virtuală de 32 biţi şi
lungimea unei pagini de 1024 octeţi , rezultă 22 biţi pentru cîmpul ip
(adresarea se face pe octet). Deci tabela de pagini are 222 intrări ! Spaţiul
total consumat de tabela de pagini este 222.25 = 227 biţi = 224 octeţi !
(presupunînd dimensiunile următoare : cîmpul F - 1 bit, ciîmpul C - 1 bit,
44 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

cîmpul M - 1bit, cîmpul RWX - 2 biţi , cîmpul PFA 13 biţi - 27 biţi ( pentru
8 Mocteţi de memorie principală există 223 / 210 = 213 pagini (cadre), iar
pentru 128 Gocteţi de memorie principală există 237 / 210 = 227 pagini
(cadre)).
- paginarea nu reprezintă un mecanism pentru implementarea
rezonabilă a partajării memoriei. Dimensiunea programelor nu reprezintă
întotdeauna un număr întreg de pagini (cadre), deci se pot pierde ultimele
porţiuni ale paginilor (care nu pot fi folosite de către alte procese). Acest
fenomen se numeşte fragmentare internă.
- o parte a memoriei fizice este ocupată de tabela de pagini şi această
porţiune este inutilizabilă pentru asignarea paginilor virtuale (fragmentare
datorată tabelei de pagini).

Sistemul memoriei segmentate

Pentru programe cu grad mare de structurare pe blocuri (funcţii,


proceduri) se utilizează segmente de memorie ce conţin elemente ale
programului (blocuri). Segmentele pot creşte sau deşcreşte, pentru procese
diferite, (au lungime variabilă) spre deosebire de pagini.
Segmentarea reprezintă o tehnică pentru managementul alocării
memoriei virtuale , spre deosebire de paginare, care este orientată către
managementul alocării memoriei fizice.
Într-un sistem de memorie segmentată se poate defini un spaţiu logic
de memorie foarte mare. Adresarea segmentată este ilustrată în figura 2.6.
Există următoarele relaţii formale asociate figurii 2.6. :

STE(s).F =1 - segment fault (segmentul nu există în memorie ,


identificatorul asociat adresei virtuale se afă pe disc)
STE(s).L < i - adresă în afara domeniului ( se va genera o excepţie)

În situaţia în care un segment este adus din memorie trebuie să existe


o zonă liberă în memorie. Există mai mulţi algoritmi de plasare a unui
segment în memorie.
Dacă s1, s2, ... sn sunt lărgimile zonelor de memorie liberă astfel
încît s1 < s2 < ... < sn , şi s este lărgimea segmentului atunci se pot defini
următorii algoritmi :
Subsisteme de memorie şi intrare - ieşire (I / O) 45

Adresa virtuala Registru baza petru tabela de segmente

Numar segment Index cuvint Adresa Lungime


s i

Adresa RWX L F STE(s)


segment [s]
(Segment Table Entry)
i

Tabela de segmente

F - bit de validare
L - limita dimensiunii segmentului

Figura 2.6. Adresarea segmentată

1.Algoritmul celei mai bune corespondenţe : se alege cel mai mic


indice i pentru care s < si; se actualizează lista zonelor de memorie liberă.
2.Algoritmul celei mai nepotrivite corespondenţe : zonele de
memorie sunt listate în sens descrescător al mărimii şi segmentl se încarcă
în prima zonă; se actualizează lista.
3.Algoritmul primei corespondenţe : zonele de memorie sunt listate
în ordinea crescătoare a adreselor iniţiale; se alege cel mai mic i pentru care
s < si ;
4.Algoritmul "buddy"; se presupune că s = 2k , k<n ( n numărul de
zone de memorie libere). Se crează n liste de zone libere, cîte una pentru
fiecare dimensiune de zonă liberă 21, 22, ..., 2n. O zonă liberă poate fi
scoasă din lista (i+1) prin divizare la 2 ( se crează două zone libere de
dimensiune 2i care sunt adăugate la lista i ). Invers, o pereche de zone libere
din lista i poate fi scasă din această listă şi inclusă în lista (i+1) prin
concatenare.
Urmînd această schemă se pot crea zone libere de dimensiune 2k ,
dacă acestea nu există, pentru a se încărca segmentul.
46 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Algoritmii cei mai eficienţi sunt algoritmii 1 şi 4.

Dezavantajele segmentării sunt :

- apariţia zonelor libere, între segmente succesive (aceste zone pot


cauza ineficienta managementului de memorie). Fenomenul se numeşte
fragmentare externă .
- întregul segment trebuie adus în memorie , chiar dacă numai o
parte din spaţiul său de adrese este necesar; efectul este mai puţin neplăcut
ca la paginare.
- fragmentarea datorată tabelei de segmente ( similar paginării).

Aceste probleme pot fi ameliorate combinînd segmentarea cu


paginarea.

Sisteme de memorie cu segmente paginate

Sistemul este prezentat în figura 2.7.


Există trei nivele de indirectare ( citirea tabelei de segmente, citirea
tabelei de pagini asociată segmentului şi accesarea opreandului) . Tehnica
utilizării memoriilor asociative (TLB) se poate aplica şi în acest caz ca în
figura 2.8. ( se aplică pentru fiecare proces în parte).
Tabela de căutare este mult mai complexă. Apar probleme în situaţia
proceselor cu multiprogramere; în funcţie de numărul de procese existente
în sistem trebuie create mai multe tabele TLB sau implementat un mecanism
de comutare a contextului.

Alegerea mărimii paginii

Pentru sistemele pur segmentate fragmentarea externă poate fi


evitată prin paginare. Mărimea paginii trebuie aleasă pentru a reduce
efectele negative ale paginării (fragmentare internă, fragmentare datorată
tabelării).
Dacă s reprezintă mărimea segmentului şi z mărimea paginii în
segment, atunci numărul de pagini în cadrul segmentului este

n(s,z) = Q [ s / z ]

unde Q [ ] reprezintă operatorul de rotunjire, iar s şi z sunt exprimate în


cuvinte.
Subsisteme de memorie şi intrare - ieşire (I / O) 47

Adresa virtuala STBR


s ip iw Adresa Lungime

Tabela de segmente

Tabela de pagini Adresa RWX L F STE(s)


pentru segmentul
s
s - nr. segment
ip i p - nr. pagina
i - nr. cuvint
w
Adresa F
Pagina ip a
STBR - registru baza tabele segmente
segmentului s

iw

cuvint dat de adresa virtuala

Figura 2.7. Adresarea cu segmente paginate

TLB

RWX Segment Pagina Adr. pagina


Adresa
de baza
RWX
a pag.
pid
s (s , i p )
ip

iw iw

Adresa virtuala Adresa fizica

Figura 2.8. Memorie cu segmente paginate cu memorie asociativă


48 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Spaţiul de memorie I(s,z) - fragmentarea internă - este dat de :

I(s,z) - n(s,z).z - s

şi reprezintă un spaţiu neutilizabil în ultima pagină a segmentului (datorită


rotunjirii introduse de operatorul Q[ ] pentru z > 1)
Tabela de pagini are alocate T(s,z) cuvinte cu :

T(s,z) = c.n(s,z) , c = constant

(c reprezintă lărgimea tabelei).


Fracţiunea de memorie "pierdută" datorită paginării în cadrul
segmentului este:

n(s,z).z -s + c.n(s,z)
w = -----------------------------
s

Media statistică a numărătorului este :

E[n(s,z).z -s + c.n(s,z)] = (c+z).E[n(s,z)] - E[s]

iar media statistică a numitorului este E[s]. ( E[ ] reprezintă operatorul de


mediere statistică ).
Se notează cu w* raportul celor două medii :

(c+z).E[n(s,z)] - E[s]
w* = -----------------------------
E[s]

Fie E[s] = s*; rezultă E[n(s,z)] = s*/z+1/2 ; (în cazul cel mai
defavorabil).
Rezultă valoarea lui w* :

(c+z).(s*/z +1/2)
w* = ------------------------ - 1
s*

Optimul mărimii paginii z0 , se obţine pentru dw* / dz = 0. Efectuînd


calculele se obţine :
Subsisteme de memorie şi intrare - ieşire (I / O) 49

d(cs*/z + c/2 + s* + z/2)/dz = -cs*/z2 + 1/2 = 0 de unde rezultă :

z0 = 2cs*

Spaţiul de memorie "pierdută" , minim , w*0 , este :

(c + 2cs* ) ( s*/ 2cs* + 1/2 )


w*0 = ---------------------------------------- - 1 =
s*

= 2c / s* + c/2s*

Exemplu : s* = 8192 octeţi , c = 4 octeţi

z0 = 2cs* = 2.4.8192 = 256 octeţi

În practică valoarea mărimii paginii depinde mai mult de eficienţa


hardware-lui care realizează paginarea.

2.5. Alocarea şi managementul memoriei

Clasificarea politicilor de management al memoriei

Managementul de memorie trebuie să rezolve următoarele probleme:

- cîte pagini de memorie sunt alocate unui proces ?


- cum se decide care procese vor fi rezidente în memorie

Politica de management al memoriei trebuie să îmbunătăţescă


(micşoreze) rata de generare a excepţiilor (page fault ) în situaţiile în care o
pagină nu se află în memoria principală, să crească viteza de prelucrare a
sistemului şi să micşoreze timpul de răspuns.
Evident politicile de management al memoriei se referă la sistemele
cu multiprogramare ( sau împărţire a timpului ). Sistemele cu un singur
proces nu ridică probleme de dimensionare şi alocare a memoriei.
Există două clase de politici pentru managementul memoriei : cu
partiţionare fixă şi cu partiţionare variabilă .
În continuare se vor da cîteva definiţii.
50 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Se notează cu A = { p1, p2, ..., pd }procesele active pe un interval de


timp dat ( de analiză) şi se presupune că nivelul de multiprogramare este fix,
d.
Pentru fiecare proces pi , la momentul de timp t din intervalul
considerat , se asociază un set rezident de pagini , pe care procesul le
utilizează în memorie , Zi(t) .
Seturile Zi(t) pot fi suprapuse între mai multe procese.
Fiecare set Zi(t) conţine un număr de zi(t)  1 de pagni.
Setul total de pagini utilizate de cele d procese este :

Z(t) = [ Z1(t), ...., Zd(t) ] (vectorul de partiţionare)

Se defineşte vectorul de mărime

z(t) = [ z1(t), ...., zd(t) ]

Numărul total de pagini împărţite de r procese la momentul de timp


t, se notează cu Nr(t).
Numărul de pagini de memorie neutilizate de nici un proces activ se
numeşte resursa de memorie , R(t) şi este dată de :
d
R(t) = M -  (-1)r+1 Nr(t)
r=1

unde M este numărul total de pagini din memoria sistemului.


Politica de management a memoriei include o metodă de estimare a
localizării programelor (proceselor) - se estimează paginile care conţin
referinţele procesului pe intervalul de timp considerat. În acest mod se
determină (estimează) fiecare set Zi(t).
Dacă numărul de pagini asociat fiecărui set rezident Zi(t) este
constant, zi(t) = zi , pe durata cît procesul pi , este activ, pentru orice i,
atunci z(t) = z ; managementul de memorie este cu partiţionare fixă. În caz
contrar managementul de memorie este cu partiţionare variabilă.
Deşi partiţionarea fixă pare mai avantajoasă, datorită simplităţii
implementării, politica partiţionării variabile este mai bună în situaţia în care
localizarea programelor variază mult în timp (în acest caz partiţionarea fixă
conduce la utilizarea ineficientă a memoriei).
Politicile de management de memorie pot fi locale (se iau în
considerare seturile Zi la momentul curent) sau globale ( se iau în
Subsisteme de memorie şi intrare - ieşire (I / O) 51

considerare seturile Zi şi de la momente de timp anterioare momentului


curent).
Un program în execuţie generează o secvenţă de referinţe (asociată
informaţiei din spaţiul virtual de adrese). Se defineşte şirul de referinţe
asociat procesului pi :

Ri(T) = ri(1) ri(2) ... ri(T)

unde ri(k) este numărul paginii ce conţine referinţa (ca adresă virtuală)
procesului pi la momentul k =1,2,.. T (timp virtual). Setul de pagini existent
în memorie înainte de momentul k este Zi(k-1) , iar mărimea sa (în pagini)
este zi(k-1). O excepţie "page-fault" va apare la momentul virtual de timp k
dacă ri(k) nu există în Zi(k-1).
În momentul apariţiei unei excepţii de tip "page-fault" există două
posibilităţi de încărcare a paginii : preîncărcare la cerere sau încărcare la
cerere. Preîncărcarea la cerere presupune căun număr de pagini (incluzînd
pagina cerută, care a generat excepţia), sunt încărcate anticipînd cererile
viitoere ale proceselor. Încărcarea la cerere realizează numai preluarea în
memorie a paginii cerute. Analitic, utilizînd notaţiile anterioare, procesul
de tratare a excepţiei " page-fault" poate fi scris astfel :

Zi(k) = Zi(k-1) + ri(k) - yi


zi(k)  zi(k-1) +1
(pentru încărcare la cerere sau preîncărcare la cerere)

ri(k) este pagina cerută (sau pagina cerută şi paginile anticipate)


yi - paginile care trebuie reamplasate ( scoase din memorie)

Există două probleme puse în evidenţă de relaţiile de mai sus :

- alegerea paginilor anticipate (dacă este cazul)


- alegerea paginilor (paginii) care trebuie reamplasate (reamplasată).

Rezolvarea acestor probleme se bazează pe proprietatea de localizare


a programelor.
Localizarea programelor se aplică , în mod uzual, fazelor de
execuţie ale programelor; deşi există o legătură strînsă între diferite faze ale
programelor tranziţiile dintre faze nu respectă întotdeauna proprietatea de
52 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

localizare (se modifică foarte mult , brusc, setul de pagini (referinţe) cerute
de program).
Există mai multe modele pentru localizarea programelor. Aceste
modele pot fi utilizate în politica de amplasare/deplasare a paginilor în
memorie.

Modelul independenţei referinţei


(Independent Reference Model) - IRM

Acest model presupune că şirul referinţelor Ri(T) este o secvenţă de


variabile aleatoare independente cu o distribuţie cunoscută (de exemplu
uniformă). Probabilitatea ca referinţele conţinute în pagina virtuală ri(k) să
existe în pagina fizică j (din memoria principală) este :

Pr[ ri(k) = j ] = aj pentru orice moment de timp t

Politica de management de memorie ce utilizează modelul de


localizare IRM înlocuieşte (reamplasează) din memorie paginile fizice j cu
valoarea aj cea mai mică din întreg setul rezident de pagini (setul total - ca
reuniune a seturilor rezidente pentru fiecare proces în parte).

Modelul celei mai puţin recent utilizate stive


(Least Recently Used Stack Model ) - LRUSM

Se defineşte un vector (stivă ) a celor mai puţin recent utilizate


pagini fizice, din memorie care conţin referinţa cerută, ( în ordinea
descrescătoare : pagina cea mai recent utilizată în vîrful stivei). Se defineşte
o distantă, g(t) , asociată fiecărei referinţe cerute şi care se găseşte în pagina
fizică r(t).
Distanţa g(t) reprezintă poziţia în stivă a lui r(t) imediat după r(t-1)
(distanţă relativă la ultima referire a paginii fizice r(t) ).
Modelul LRUSM presupune că distanţele gi(t) (asociate paginilor
fizice ri(t)) reprezintă variabile aleatoare cu o distribuţie cunoscută.
Probabilitatea de referire a unei pagini fizice în stivă la distanţa j este
:

Pr[ g(t) = j ] = bj pentru orice moment de timp t


Subsisteme de memorie şi intrare - ieşire (I / O) 53

Se înlocuiesc paginile fizice cu valoarea bj cea mai mică ( sunt cele


mai puţin recent utilizate).
Modelul LRUSM este puţin mai bun decît modelul IRM.
Modelul LRUSM este similar modelului IRM, dar aplicat la nivelul
unui set de pagini fizice mai puţin utilizate şi nu la nivelul întregului set de
pagini fizice.
Cele două modele de mai sus nu sesizează esenţa comportării unui
program : modificările cerute în memorie la tranziţia de la o fază de execuţie
la alta.
Se pot utiliza modele ale localizării unui program mai complexe care
constau dintr-un macromodel şi un micromodel. Macro modelul este
constituit dintr-o secvenţă de seturi de pagini delocalizare (corespunzătoare
fazelor de execuţie). Micromodelul poate fi IRM sau LRUSM.

Se defineşte frecvenţa apariţiei excepţiilor page-fault (sau pe scurt


rata de excepţii ), fi(A,s), ca fiind numărul de excepţii "page-fault" generate
în unitatea de timp virtual, atunci cînd un şir de referinţe Ri este procesat cu
ajutorul unei politici de management de memorie , A, în condiţiile unui set
de pagini rezident în memorie , s.
Funcţia fi(A,s) este relativ independentă de şirul de referinţe Ri.
În general există relaţia :
d
s = (1/d) 
k=1
zi(k)

zi(k) este mărimea setului Zi(k) , d este numărul de procese .


Mărimea s reprezintă dimensiunea medie a setului rezident de pagini
(considerat la nivel global).
Se defineşte rata de excepţii globală , f :
d
f= 
i=1
fi(A,s)

(suma ratelor de excepţii pentru fiecare proces activ în parte). Mărimea f


trebuie să fie minimizată prin politica de management aleasă.
O altă măsură a ratei de excepţii este funcţia duratei de viaţă , ei(zi) ,
care reprezintă intervalul de execuţie mediu (în timp virtual) între două
excepţii "page-fault" succesive pentru procesul pi care are zi pagini în
memorie.
Este de dorit ca durata de viată , ei(zi)., să fie cît mai mare. Durata de
viată este reprezentată în figura 2.9. (curbă ridicată experimental).
54 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

e (z )
i i
inflexiune primara

inflexiune secundara

zi
Figura 2.9. Durata de viaţă a unui proces funcţie de numărul de pagini

Din figura 2.9. se observă că pe măsură ce creşte numărul de pagini


alocate procesului pi în memorie, durata de viaţă creşte pînă la o stabilizare
relativă ( ce apare după inflexiunea primară ). Curba din figura 2.9. poate fi
aproximată prin diferite modele , dar în mod uzual se ridică experimental.
Dacă timpul de transfer al unei pagini este S , atunci rata de excepţii
se poate exprima funcţie de ei(zi) astfel :

fi = 1/ (ei(zi) + S )

O altă măsură pentru determinarea performanţelor sistemelor de


memorie este produsul spaţiu - timp , ST , definit după cum urmează :
T k
ST = 
t=1
z(t) + D i=1
z(ti)

unde T reprezintă intervalul de timp de analiză (pentru care procesul activ se


execută sau aşteaptă aducerea unei pagini în memorie), z(t) - mărimea
setului rezident la momentul t, ti - momentul de apariţie a excepţiei pentru
pagina i, D - întîrziere.
Cu alte cuvinte produsul spaţiu-timp integrează dimensiunea setului
rezident peste timpul în care procesul se execută sau aşteptă aducerea unei
pagini în intervalul de timp T (primul termen consideră situaţiile în care nu
se generează excepţii, al doilea termen consideră apariţia a k excepţii la
momentele de timp ti , asociate paginilor i=1,...,k ce pot lipsi din setul
rezident pe durata de analiză T ).
Relaţia anterioară se poate simplifica astfel (dacă z(ti) = s) :
Subsisteme de memorie şi intrare - ieşire (I / O) 55

k
ST = sT + D i=1
z(ti) = sT + Dsk

dacă s este setul rezident mediu.


În continuare sk = s(k/T)T = sf(s)T, f(s) este rata de excepţii - k
excepţii în durata de timp T). În final rezultă produsul spaţiu - timp :

ST = Ts [ 1 + Df(s) ]

Controlul încărcării optime a programelor

Memoria principală constituie principala resursă a sistemului de


calcul ce este utilizată dinamic de către procesele active într-un mediu de
multiprogramare.
În mod uzual numărul de procese active (gradul de
multiprogramare) este mai mare decît numărul de unităţi de procesare
(procesoare); acest fapt conduce la suspendarea unor procese pentru a utiliza
procesorul asociat lor pentru execuţia altor procese.
Din punct de vedere practic rezultă că memoria principală trebuie să
fie capabilă să reţină paginile proceselor active pentru a micşora timpul de
comutare a contextului între procesele active (în execuţie şi suspendate).
Sistemele de calcul trebuie să ţină seama de faptul că creşterea
gradului de multiprogramare limitează posibilitatea de a menţine în
memorie pagini ale majorităţii proceselor active (sistemul se poate bloca
dacă apar excepţii în momentul tratării unei alte excepţii - de exemplu). Pe
de altă parte "overhead-ul" (prelucrarea suplimentară) datorat comutării
contextului trebuie micşorat la minimum.
Modelul unui sistem de calcul multiprocesor şi care utilizează
multiprogramarea este ilustrat în figura 2.10.
56 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

CPU Pagina I/O


(fisiere)

CPU
Pagina I/O
(fisiere)
cozi de asteptare (dimensiune = gradul de multiprogramare)
CPU Retea activa

Coada proceselor Retea pasiva


si controlul
incarcarii

Figura 2.10. Modelul unui sistem de calcul multiprocesor cu


miltiprogramare

Modelul din figura 2.10. constă în două secţiuni principale : reţeaua


activă (procesoarele, memoria, discul magnetic ) şi reţeaua pasivă (coada
de aşteptare şi controlul încărcării). Controlul încărcării programelor
defineşte politicile de admitere a unor procese în starea activă (implicit
controlul gradului de multiprogramare). Fiecare proces activ este în
aşteptare sau execuţie într-una din cele trei categorii de resurse din reţeaua
activă. Fiecare categorie din reţeaua activă posedă cozi de aşteptare de
lunime egală cu gradul de multiprogramare.
În continuare sunt definite cîteva noţiuni ce vor fi utilizate la
prezentarea unor criterii de încărcare optimă a proceselor :

a) timpul mediu total de servire a unei excepţii "page-fault" pentru


fiecare proces care accesează dispozitivul de paginare i , D i ; (reprezintă
cererea asociată dispozitivului de paginare i egală cu produsul dintre
numărul mediu de cereri per proces şi timpul mediu de servire a unei cereri).
Valoarea lui Di depinde de gradul de multiprogramare ,d.
b) timpul mediu de execuţie (totală, globală) a unui proces , E;
c) numărul mediu de excepţii "page-fault" , E/L(d); L(d) reprezintă
timpul de viată mediu al unui proces.
Subsisteme de memorie şi intrare - ieşire (I / O) 57

d) timpul mediu de transferare a paginii cerute , S (fără întîrzierea


datorată cozii de aşteptare).
Cererea pentru dispozitivul de paginare i, Di este dată de :
Di = ES / L(d) = (numărul mediu de excepţii) .(timpul mediu de
tratare a excepţiei)
Di reprezintă timpul mediu global de tratare a excepţiilor.
Estimarea valorii lui L(d) se face , uzual, prin relaţia L(d) = e i(M/d) ,
unde ei(x) reprezintă timpul mediu între două excepţii "page-fault", iar M
este numărul maxim de pagini în memoria principală.
Cu alte cuvinte L(d) este durata de viaţă exprimată pentru un set de
pagini mediu per proces , M/d ( vezi figura 2.9.).
Din expresia lui Di se observă că Di creşte dacă gradul de
multiprogramare creşte (deoarece L(d) scade cu creşterea lui d).
Utilizarea sistemului (a CPU în principal) este limitată de L(d) -
apare saturarea dispozitivului de paginare. (Di devine prea mare o dată cu
creşterea lui d sau echivalent cu scăderea lui L(d) ). În figura 2.11. este
ilustrată grafic dependenţa dintre utilizarea CPU şi gradul de
multiprogramare ( curbe ridicate experimental).

utilizare CPU
100%
(2)
(1) (L(d) /S )
(1) (2)
(L(d) /S )

gradul de multiprogramare , d
(1) - sistem cu memorie de capacitate mica
(2) - sistem cu memorie de capacitate mare

Figura 2.11. Dependenţa utilizării CPU de gradul de multiprogramare

Pentru sisteme cu memorie mare timpul de viată L(d) creşte pentru d


constant; în această siţuaţie pentru d1 mai mare decît d2 avem L(d1) =
58 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

L(d2). Curba L(d) se depalsează spre dreapa , în figura 2.10. (s-a presupus
că S este constant). Utilizarea sistemului este limitată de curba timpului e
viaţă mediu al proceselor.
Situaţia limită admisă este L(d) = S ( timpul de viaţă mediu este egal
cu timpul de servire a excepţiei page-fault). Pentru L(d) < S sistemul nu mai
operează eficient.

Există mai multe criterii pentru controlul încărcării proceselor


(practic pentru controlul parametrului d = d(t) ) astfel :

1. criteriul L = S ; se încarcă un număr de procese (programe), d


pînă cînd L(d) = L = S.
2. criteriul L = aS , a constantă supraunitară.
3. limitarea gradului de multiprogramare la d = dmax ( în mod
apriori). Valoarea dmax este ajustată în mod adaptiv, funcţie de contextul de
lucru.
În acestă situaţie utilizarea sistemuluii rămîne la o valoare constantă ,
acceptabilă (nu scade prea mult). Procesele refuzate (ce depăşesc numeric
valoarea dmax ) sunt blocate (nu intră în coada de aşteptare , limitatăîn acest
caz). Controlul încărcării va conţine, în acest caz, şi un dispecer ce planifică
procesele - aduce procese din starea pasivă în sarea activă, determină
dimensiunea setului rezident pentru fiecare proces şi ajustează valoarea
dmax.
În figura 2.12. este reprezentată utilizarea siatemului pentru acest
criteriu (al limitării factorului d).

Politici de management al memoriei

Fie setul de referinţe r(1) r(2) ... r(t).


Se introduc următoarele definiţii :

- distanţa înainte (forward) , dt(x) :


dt(x) = k , dacă r(t+k) este prima referire a paginii x după momentul t
, dacă pagina x nu apare în setul de referinţe

- distanţa înapoi (backward) , bt(x) :


bt(x) = k ,dacă r(t-k) este cea mai recentă referire a paginii x înainte
de momentul t
, dacă pagina x nu apare în setul de referinţe
Subsisteme de memorie şi intrare - ieşire (I / O) 59

Utilizarea CPU

100%
cu limitare (Q limitata)

fara limitare (Q infinita)

grad de multiprogramare , d
d
max

Observatie : Q - coada de asteptare a proceselor active

Figura 2.12. Utilizarea sistemului pentru criteriul limitării gradului de


multiprogramare

Fie Q(Z) pagina înlocuită din setul rezident Z, atunci cînd apare o
excepţie "page-fault".
Există următoarele politici de management al memoriei :

1. Least recently used (LRU) - se înlocuieşte pagina cea mai puţin


utilizată , relativ la momentul de timp curent , t (cu cea mai mare distanţă
înapoi) :

Q(Z(t)) = y dacă şi numai dacă bt(y) = max { bt(x) } cu x  Z(t)

2. Algoritm optimal al lui Belady (MIN) - se înlocuieşte pagina ce


va fi referită cel mai tîrziu, relativ la momentul de timp curent, t (cu cea mai
mare distanţă înainte)

Q(Z(t)) = y dacă şi numai dacă dt(y) = max { dt(x) } cu x  Z(t)

Acest algoritm minimizează numărul de excepţii.

3. Least frequently used (LFU) - se înlocuieşte pagina care a fost


referită cel mai puţin frecvent.
60 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

4. First In First Out (FIFO) - se înlocuieşte pagina care a stat în


memorie cel mai mare interval de timp.
5. Algoritmul CLCK - variantă a algoritmului FIFO , ce
aproximează algoritmul LRU. Se asociază un bit de utilizare pentru fiecare
intrare în coada FIFO (circulară). Iniţial toţi biţii de utilizare sunt 1 logic. La
apariţia unei excepţii " page-fault" se scanează coada circulară FIFO şi se
resetează bitul de utilizare al paginilor deja folosite. Se alege pentru
înlocuire prima pagină cu bitul de utilizare egal cu 1 logic.
6. Last In First Out (LIFO) - se înlocuieşte pagina care a stat în
memorie cel mai puţin.
7. Random (RAND) - se alege, în mod aleator , o pagină ce va fi
înlocuită.

Algoritmii LRU,LFU,LIFO,FIFO şi RAND sunt algoritmi


realizabili. Algoritmul MIN este nerealizabil practic, dar este utilizat pentru
comparaţie cu ceilalţi algoritmi ( ca referintă deoarece este algoritmul
optimal).
Pentru un algoritm de reamplasare a paginilor dat , A, din cei
prezentaţi anterior, o dimensiune a setului rezident, s, se defineşte rata
execpţiilor "page-fault" , f(A,s) ilustrată în figura 2.13.

f(A,s)

RAND

LRU, LFU, LIFO, FIFO


MIN s

Figura 2.13. Rata "page-fault" în raport cu algoritmul de management

Fie Sj(A,s,R) setul de pagini de memorie în cadrul setului rezident de


dimensiune s, la momentul de timp j, cînd se prelucrează referinţa R.
Se defineşte proprietatea de incluziune astfel :

Sj(A,s,R)  Sj(A,s+1,R)
Subsisteme de memorie şi intrare - ieşire (I / O) 61

Proprietatea de incluziune apare ca fiind naturală (creşterea


dimensiunii setului de referinţă (de bază) conduce la includerea setului de
pagini definite anterior).
Totuşi algoritmul FIFO nu posedă proprietatea de incluziune; de
exemplu fie şirul de referinţe R = 1,2,3,1,4. Se consideră două cazuri s = 2 şi
s = 3.

(momente de timp)

S1 S2 S3 S4 S5

R= 1 2 3 1 4

1 1 2 3 1 \
2 3 1 4 / s=2

1 1 1 1* 2 \
2 2 2 3 - s=3
3 3 4 /

* indică faptul că nu a apărut excepţie deoarece pagina cerută , 1, era deja


încărcată.

Se observa că S5(FIFO,2,R)  S5(FIFO,3,R) .

Există şi algoritmi complexi de alocare a memoriei. În aceşti


algoritmi regula de reamplasare a paginilor se aplică la nivel global, pentru
toată memoria principală, fără a se identifica procesul care utilizează pagina.
În mod evident trebuie să existe un bloc de încărcare a programelor,
adecvat.
Un alt exemplu este acela al algoritmului setului de lucru
( Working Set - WS ). Acest algoritm mentţine în memorie acele pagini ale
fiecărui proces, care au fost referite cu un interval de timp (prestabilit) în
urmă. Dacă nu există loc în memorie, o parte din procese vor fi dezactivate.
Algoritmul WS poate fi îmbunătăţit astfel : fie t şi t', cu t > t' , două
momente succesive de apariţie a excepţiei "page-fault". La momentul t se
cere pagina r(t). După momentul de timp t, setul rezident este R(t,) . Acest
set poate fi definit astfel (W(t,t-t') reprezintă setul de lucru ) :
62 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

R(t = W(t,t-t') , t-t' 


R(t',) (t) , în caz contrar

Dacă intervalul de timp între două excepţii succesive este suficient


de mare ( mai mare decît  ) se menţine setul de lucru - pagina cerută nu
mai încape. În caz contrar setul rezident este completat cu pagina cerută.
Acest algoritm se numeşte : page-fault frequency - PFF . Algoritmul PFF
protejează , prin factorul , modificarea setului de lucru W dacă intervalul
de timp între două excepţii este mic.

Memoria cache

În general memoria cache (memorie rapidă, adresabilă prin conţinut)


este constituită din : cache directory (CD) şi o memorie RAM (cu acces
aleator).
Directorul CD constă în cîmpuri (tags) de adrese de blocuri de
memorie şi biţi de control (de exeemplu de protecţie). Cîmpurile de adrese
"tags" conţin adresele blocurilor ce sunt la momentul de timp curent în
memoria cache.
Operaţiile cu memoria cache sunt prezentate în figura 2.14.

Organizarea memoriei cache

Există patru politici de bază pentru plasarea blocurilor din memoria


principală în memoria cache (denumite asocieri sau mapări) : mapare
directă, mapare asociativă (fully associative) mapare asociativă pe seturi (set
associative) şi mapare de sector.
Pentru simplificarea figurilor ce ilustrează organizarea memoriei
cache (în aceste patru cazuri) se consideră dimensiunea memoriei cache de
2k cuvinte şi dimensiunea blocului de 16 cuvinte. Memoria principală se
alege de 256k cuvinte.
Adresa fizică va fi reprezentată pe 18 biţi (256k = 28 . 210 = 218) .
Exista 256k / 16 = 218/24 = 214 = 16384 blocuri în memoria principală şi
2k/16 =2.210 /24 =128 blocuri în memoria cache.
Subsisteme de memorie şi intrare - ieşire (I / O) 63

Adresa virtuala
Nr. pagina Index in pagina

octet

Cautare in TLB bloc

da
Pagina in
Actualizeaza
Adresa bloc Octet in bloc
TLB ? starea de
nu reamplasare
a intrarilor
Trimite adr. TLB
Selecteaza
intrare in TLB virtuala la Cautare in Actualizeaza
pentru translatorul directorul CD starea de
reamplasare
inlocuire de adrese a intrarilor CD
da

nu Adresa
bloc Preluare bloc
Preluare bloc din memoria existenta ? din cache
principalafolosind adresa
reala a blocului; selecteaza
intrare in CD pentru
inlocuire Selecteaza
octetul din
bloc

Stocheaza blocul
in memoria cache Trimite octetul
catre CPU

Figura 2.14. Operaţiile cu memoria cache (fetch din cache)

Maparea directă

Este ilustrată în figura 2.15.


64 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Cache Memoria principala


7 biti
Tag Bloc 0
Bloc 0
Bloc 1
Tag
Bloc 1 Bloc 127
Bloc 128

Tag Bloc 4096


Bloc 127

Adresa in memoria principala Bloc 16383


Tag Bloc Cuvint
7 7 4

Figura 2.15. Organizarea cu mapare directă a memoriei cache

În acest caz blocul i din memoria principală este asociat cu blocul (i


mod 128) din memoria cache. Fiecare bloc din cache are asociat un cîmp
"tag" (primii 7 biţi mai semnificativi ai adresei fizice în memoria
principală).
Cîmpul tag din adresa memoriei principale se compară cu fiecare
cîmp "tag" al memoriei cache. După găsirea corespondenţei dintre cîmpurile
tag se alege cîmpul "bloc" din adresa memoriei principale şi cîmpul "cuvînt"
din aceeaşi adresă pentru selectarea octetului ce va fi transferat din blocul
memoriei cache (dat de tag) în blocul memoriei principale (dat de cîmpul
bloc şi cîmpul cuvînt al adresei în memoria principală).
Avantajul acestei mapări directe este accesul simultan la datele
dorite şi la cîmpul tag (nu se face o căutare asupra cîmpului tag). Dacă
cîmpul tag nu există în memoria cache , datele vor fi suprimate.
Un dezavantaj al mapării directe apare atunci cînd două sau mai
multe blocuri din memoria principală, utilizate alternativ, sunt asociate
aceluiaşi bloc din cache. Această situaţie are probabilitate mică în sistemele
uniprocesor, dar probabilitatea creşte pentru sistemele multiprocesor cu
memorie cache comună.
Subsisteme de memorie şi intrare - ieşire (I / O) 65

Maparea asociativă (fully associative)

Este ilustrată în figura 2.16.

Cache Memoria principala


14 biti
Tag Bloc 0
Bloc 0 Bloc 1
Tag
Bloc 1
Bloc 127
Bloc 128

Tag Bloc 127 Bloc 4096

Adresa in memoria principala Bloc 16383


Tag Cuvint
14 4

Figura 2.16. Organizarea cu mapare asociativă a memoriei cache

În acest caz orice bloc din memoria principală poate fi asociat cu


orice bloc din memoria cache.
Metoda este cea mai bună, dar şi cea mai scumpă.
Maparea asociativă elimină conflictele de acces între blocuri, dar
timpul de acces creşte datorită faptului că este necesară o căutare asociativă.

Maparea asociativă pe seturi

Este ilustrată în figura 2.17.


Această mapare reprezintă un compromis între maparea directă şi
maparea asociativă. Memoria cahe este împărţită în S seturi . Blocul i , din
memoria principală, poate corespunde cu orice bloc din memoria cache
aparţinînd setului (i mod S).
Numărul de seturi , S, determină costul căutării (specifice mapării
asociative). Setul se determină direct din adresă, apoi se caută cîmpul tag
corespunzător adresei în set.
66 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Maparea de sector

În această situaţie atît memoria cache cît şi memoria principală sunt


împărţite în sectoare, iar sectoarele în blocuri.
Unui sector din memoria principală îi este asociat un sector (oricare)
din memoria cache.
Maparea de sector este ilustrată în figura 2.18.

8 biti Cache Memoria principala


Tag Bloc 0
Bloc 0
Set 0 Bloc 1
Tag
Bloc 1
Bloc 63
Bloc 64
Bloc 65

Tag Bloc 4095


Set 63 Bloc 126

Tag
Bloc 127
Bloc 16383

Adresa in memoria principala


Tag Set Cuvint
8 6 4

Figura 2.17. Organizarea cu mapare asociativă pe seturi a memoriei cache


Subsisteme de memorie şi intrare - ieşire (I / O) 67

10 biti Cache valid bit Memoria principala


Tag Bloc 0
Bloc 0
Sector 0
Sector 0

Tag Bloc 15 Bloc 15

Tag
Sector 7 Bloc 112
Bloc 16368
Sector 1023
Tag Bloc 127
Bloc 16383
Adresa in memoria principala
Sector (tag) Bloc Cuvint
10 4 4

Figura 2.18. Organizarea cu mapare de sector a memoriei cache

Numai blocul (din memoria principală ) ce a generat excepţia este


adus în cache, iar restul blocurilor din sectorul memoriei cache sunt marcate
"invalid" (prin valid bit).

Observaţii

- dimensiunea blocului în memoria cache este aleasă în raport cu


proprietatea de localizare a programelor
- memoria cache este adresată cu adrese fizice şi nu cu adrese
virtuale (se elimină etapa de translatare a adresei virtuale în adresă fizică)
- algoritmii de reamplasare a blocurilor din memoria cache sunt
similari cu algoritmii de reamplasare discutaţi anterior la managementul
memoriei principale.
68 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Strategia la scriere în memoria cache

Există următoarele metode de scriere în memoria cache:

- Write through (WT) —Informaţia este scrisă atât în blocul din memoria
cache, cât şi în blocul din memoria principală
- Write back (WB) — Informaţia este scrisă numai în blocul din memoria
cache.
Conţinutul blocului modificat este scris în memoria principală numai în
cazul înlocuirii lui în memoria cache.

Avantajele/dezavantajele pentru WT si WB

Metoda WT are avantajul că nivelul inferior conţine informaţia


actualizată (pentru I/O, alte procesoare). Dezavantajul metodei constă în
necesitatea unei benzi mari (capacitate de transfer) la interfaţa dintre
memoriile cache şi principală.
Metoda WB necesită bandă redusă. Totuşi pot apare situaţii de
inconsistentă (incoerentă) a datelor (în cache şi în memoria principală).

Metodă WT este întotdeauna combinată cu buffere pentru scriere( figura


2.19).

Figura 2.19. Utilizarea bufferelor pentru metoda WT

Buffer-ul plasat între memoria cache şi memoria principală.


Procesorul va scrie datele in memoria cache şi in buffer, iar controlorul
memoriei scrie conţinutul buffer-ului în memorie. Buffer-ul de scriere este o
coadă FIFO cu un numarul tipic de intrări egal cu. 4.
Metoda funcţionează daca frecventa scrierilor în memorie este mult
mai mică decât ciclul de acces la memorie. În caz contrar poate apare
saturarea buffer-ului de scriere. Dacă trecvenţa scrierilor este mai mare decît
timpul de acces atunci buffer-ul de scriere se va satura indiferent de
capacitatea lui.
Subsisteme de memorie şi intrare - ieşire (I / O) 69

Solutia pentru cazul saturării buffer-ului de scriere este utilizarea


metodei WB sau instalarea unui nivel 2 de memorie cache (L2 cache) ca în
figura 2.20.

Figura 2.20 Nivelul 2 cache

În acest caz timpul de acces la L2 cache este suficient de redus


pentru ca bufferul de scriere să nu se umple char dacă frecvenţa scrierilor
este mare.

2.6. Subsisteme de intrare - ieşire (I / O)

Caracteristici ale subsistemului I/O

Subsistemul de intrare - ieşire constă în interfeţe de intrare- ieşire


(I/O) şi dispozitive periferice. (Practic distincţia între interfaţă şi dispozitiv
nu se mai face, aceste două entităţi putînd să coexiste în acelaşi circuit
electronic).
Funcţiile interfeţei I/O sunt de a separa exteriorul de bus-urile CPU,
a stoca datele şi a realiza conversia datelor la formatul de lucru al CPU.
Setul de comenzi care controlează o operaţie I/O se numeşte driver
I/O (device driver, device software ).
Interfaţa poate interoga, porni sau opri dispozitivul periferic sau
poate interoga CPU pentru a transfera datele.
După modul în care CPU este implicată în operaţia de întrare ieşire
aceste operaţii (şi implicit subsistemele I/O se pot clasifica în :

a) operaţii I/O controlate prin program (CPU controlează prin


instrucţiuni specifice operaţia I/O )
b) operaţii I/O cu acces direct la memorie (DMA) ( Cpu iniţiază
transferul I/O prin programarea unor circuite speciale - controlere DMA;
transferul se realizează în ciclurile CPU care nu utilizează bus-urile externe
de adresă şi date).
c) operaţii I/O controlate de circuite specializate ( o unitate specială -
procesor I/O , cu canale de date independente, controlează transferurile de
70 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

date cu periferia, fără a implica CPU; se pot realiza transferuri de date între
două dispozitive I/O sau dispozitive I/O şi memorie).

Pentru operaţiile I/O controlate prin program apare , ca dezavantaj,


aşteptarea eliberării dispozitivului periferic, ca în figura 2.21. Acest
dezavantaj poate fi înlăturat prin folosirea întreruperilor de la dispozitivele
periferice (pentru transmisia sau recepţia de date).

Procesoare I/O şi canale I/O

Figura 2.22 ilustrează schema generală a unui subsistem I/O


inteligent. Procesorul I/O este conectat direct pe bus-urile sistemului de
calcul şi este responsabil pentru selectarea dispozitivelor periferice şi
realizarea transferurilor de intrare - ieşire. Canalul I/O , într-o formă
simplificată, reprezintă un procesor simplificat care efectuează transferul
DMA (pentru cazul în care canalul este separat).

Selecteaza dispozitiv periferic

Citeste starea dispozitivului

NU Dispozitiv
pregatit

DA
Realizeaza transferul I/O

Figura 2.21. Principiul operaţiei I/O controlată prin program


Subsisteme de memorie şi intrare - ieşire (I / O) 71

CPU CPU CPU MEM MEM

Bus sistem

Canal I/O Canal I/O Canal I/O


1 n
Procesor I/O
Dispozitiv Controler
periferic
lent I/O

Controler Comutare Controler


I/O multicanal I/O
Dispozitiv Controler
periferic
lent I/O
Dispozitiv Controler Dispozitiv
periferic periferic
Bus canale I/O rapid I/O rapid

Dispozitiv Dispozitiv
periferic periferic
lent lent

Figura 2.22 Arhitectura unui subsistem I/O inteligent

Pentru cazul în care canalul I/O este inclus în procesorul I/O , atunci
canalul I./O este o componentă pasivă fără capacitatea unor prelucrări logice
proprii.
Există două tipuri de canale : selector şi multiplexor . Un canal
selector efectuează o singură operaţie (tranzacţie) I/O la un moment dat de
timp. Din momentul selectării dispozitivului periferic operaţia I/O se încheie
complet pînă la efectuarea următoarei tranzacţii (ca de exemplu în cazul
controlerul de hard-disk).
Figura 2.23. prezintă arhitectura unui canal selector .
Schema din figura 2.23. poate fi completată cu întreruperi generate
atunci cînd buffer-ul de intrare este plin, buffer-ul de ieşire este vid, cînd
apar erori de pariate.
Efectuarea unei tranzacţii I/O este iniţiată de CPU. care generează
adresa dispozitivului periferic şi un semnal de start .
În continuare canalul citeşte un cuvînt (channel address word -
CAW) din memorie; acest cuvînt a fost iniţializat înainte de generarea
72 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

semnalului de start al CPU şi conţine adresa de start a programului de


transfer I/O ce va fi executat de canal (programul canalului ).
Programul canalului este constituit dintr-o succesiune de cuvinte de
control (instrucţiuni); aceste instrucţiuni indică tipul transferului , durata
blocului de date, operaţii speciale (de exemplu poziţionarea capetelor hard-
disk-ului, testare dispozitiv, derulare bandă magnetică la început, salturi ,
bucle ).
În decursul execuţiei programului canalului registrele DAR , BCR ,
şi MAR sunt actualizate corespunzător.
Viteza maximă de transfer, tipică unui canal selector este de 1-3
Mocteţi / sec.
Un canal multiplexor este un procesor I/O ce poate controla cîteva
tranzacţii I/O diferite. Transferurile de date sunt multiplexate în timp printr-
o interfaţă unică cu CPU.
Există două tipuri de canal multiplexor : canal multiplexor orientatt
pe blocuri şi canal multiplexor orientat pe caracter . Un canal multiplexor
orientat pe caracter este constituit dintr-un set de subcanale , fiecare
subcanal acţionînd ca un canal selector de viteză mică.
Arhitectura unui canal multiplexor orientat pe caracter este
prezentată în figura 2.24.
Fiecare subcanal constă într-un buffer , registru de adresă a
perifericului , flag de cerere de transfer I/O , flag-uri de control şi stare.
Totuşi subcanalele împart logica pentru controlul global al canalului. Logica
de control a canalului scanează ciclic flag-urile de cerere de transfer ale
fiecărui subcanal; subcanalele ce au flag-ul de cerere de transfer setat vor
efectua o tranzacţie I/O , conform logicii de stare proprie subcanalului
(logică citită de blocul de control general); după încheierea tranzacţiei I/O
curente se scanează următorul subcanal.
Viteza maximă de transfer , tipică, pentru un canal multiplexor este
de 100 - 200 koteţi/sec.
Subsisteme de memorie şi intrare - ieşire (I / O) 73

date de iesire
Bus de date WDR Control (catre dispozitivul
sistem paritate
periferic)
Buffer Adresa
DAR
catre dispozitivul
Control periferic
BCR intrerupere transfer
si complet
stare
MAR Adresa catre memorie

date de intrare
WAR Control
paritate (de la dispozitivul
periferic)

WAR - Word assembly register controlul formatului


WDR - Word disassembly register
DAR - device address register - adresa dispozitivului periferic
BCR - block count register - contor numar de blocuri
MAR - memory address register - adresa in memorie pentru transfer

Figura 2.23. Canal I/O selector

Exemplu : presupunem trei tranzacţii I/O succesive X,Y şi Z, după


cum urmează : X este o secvenţă de caractere x0 , x1 ,.... , xn-1 , Y este o
secvenţă de caractere y0 , y1 ,.... , yn-1 , iar Z este o secvenţă de caractere
z0 , z1 ,.... , zn-1 .
Dacă aceste trei tranzacţii sunt iniţiate pe un canal selector , atunci
transmisia ( recepţia ) apare ca secvenţa : x0 , x1 ,.... , xn-1 , y0 , y1 ,.... ,
yn-1 , z0 , z1 ,.... , zn-1 .
Utilizînd un canal multiplexor , orientat pe caracter, cu cel puţin trei
subcanale secvenţa de transmisie (recepţie ) este : x0 , y0 , z0 , x1 , y1 , z1
,.... , xn-1 , yn-1 , zn-1 .
74 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Subcanalul 1
Bus intern
Bus date
Buffer
sistem Buffer si caracter
control
paritate Cerere date
Registru
flag-uri

Control
Scanare si stare

Linii de
control Control si
pentru CPU stare
(stare, intrruperi) Subcanalul n

Figura 2.24. Arhitectura canalului multiplexor

Pentru un canal multiplexor , orientat pe blocuri de k caractere, k < n


, secvenţa este : x0, x1, ..., xk-1, y0, y1, ..., yk-1, z0, z1, ..., zk-1, xk, xk+1,
..., x2k-1, yk, yk+1, ..., y2k-1, zk, zk+1, ..., z2k-1 ,.... ş.a.m.d.

Un canal multiplexor orientat pe blocuri este mai eficient, în general,


decît un canal multiplexor orientat pe caracter, datorită overhead-urilor
generate de comutarea prea frecventă a canalelor (pentru canalul
multiplexor orientat pe caracter).

Conectarea subsistemelor I/O cu memoria şi / sau CPU


în sistemele cu memorie cache

Există două configuraţii de conectare a subsistemelor I/O cu


memoria şi cu CPU, în cazul sistemelor de calcul cu memorie cache (figura
2.25).
Pentru configuraţia a) canalul concurează cu CPU pentru a accesa
memoria cache. Datorită faptului că sistemul I/O este mai lent (în general)
decît CPU , nu se îmbunătăţeşte sensibil, prin utilizarea cache-ului, viteza de
transfer I/O (procesorul va accesa mai des cache-ul).
Subsisteme de memorie şi intrare - ieşire (I / O) 75

Memorie Memorie

Cache Control

Control Cache Canal I/O

CPU Canal I/O CPU

a) b)

Figura 2.25. Configuraţii de conectare a subsistemului I/O cu memoria şi


CPU în sistemele uniprocesor cu memorie cache

Pe de altă parte localizarea referinţelor transferate prin canal I/O este


mică, deci va creşte traficul dintre memorie şi cache, ceea ce va conduce la
performanţe slabe ale CPU (care manevrează programe cu referinţe
caracterizate de localizare mare).
Pentru configuraţia b) canalul concurează cu memoria cache pentru a
accesa memoria principală. Apare o problemă de coerenţă a datelor ; de
exemplu CPU modifică referinţa X în cache, dar nu şi în memoria
principală, înainte ca sistemul I/O să ceară aceeaşi referinţă X (pe care o va
prelua neactualizată, din memorie).
Soluţia este introducerea unui flag de modificare a referinţei ( pentru
fiecare referinţă în parte); acest flag va fi citit la fiecare cerere de transfer
I/O; în cazul în care referinţa a fost modificată în cache, canalul I/O va
prelua referinţa tot din cache.
3
Principiul pipe-line şi procesare vectorială

3.1. Prelucrarea "pipe-line"

Prelucrarea pipe-line realizează un paralelism temporal şi este


similară unei linii de asamblare, într-o uzină.
Principiul prelucrării pipe-line constă în subîmpărţirea task-urilor
într-o secvenţă de subtask-uri , fiecare dintre ele urmînd să fie executat într-
unul din nivelurile structurii pipe-line (ce constituie o unitate hardware
specializată). Task-uri succesive sînt orientate prin structura pipe-line, iar
execuţia lor este efectuată cu suprapunere în timp ( paralelism temporal ).
Problemele referitoare la structurile pipe-line sînt : împărţirea task-
urilor în subtak-uri şi egalizarea timpilor de execuţie pentru fiecare nivel în
parte.
Structurile pipe-line pot fi fără reacţie (pipe-line liniar) sau cu reacţie
) pipe-line general).
Pentru un task T se pot defini subtask-urile { T1, T2, ... , Tk };
evident există relaţia de precedenţă : Tj nu poate începe execuţia pînă cînd
nişte taskuri Ti ( i < j ) nu şi-au terminat execuţia.
Pentru o structură pipe-line liniară subtask-ul Tj nu poate începe
execuţia pînă cînd toate subtask-urile Ti ( i < j ) nu s-au terminat.
Structura pipe-line liniară este ilustrată în figura 3.1.
O structură pipe-line poate fi caracterizată prin : perioada ceasului ,
viteza de prelucrare , eficienţa , rata de prelucrare.
Principiul pipe-line şi procesare vectorială 77

Perioada ceasului

Fiecare nivel al structurii pipe-line , Si , (stage) , are un timp de


propagare (întîrziere) , i . Se notează cu l întîrzierea asociată fiecărui latch
din schema prezentată în figura 3.1.
Pentru o structură pipe-line liniară se defineşte perioada cesului , ,
astfel :
= max { i , i = 1,k } + l = m + l
cu m - timpul de propagare maxim.

Se poate defini frecvenţa , f =1/, procesorului pipe-line.


În mod ideal, o structură pipe-line liniară, cu k niveluri, poate
procesa n task-uri în Tk = k + ( n-1 ) perioade de ceas ( k ciclii sînt utilizaţi
pentru "a umple " structura pipe-line şi a termina execuţia primului task, iar
următoarele ( n-1 ) tacte sînt utilizate (cîte unul) pentru a efectua task-urile
rămase.
Acelaşi număr de task-uri se execută în T1 = n.k perioade de ceas ,
de către un procesor non pipe-line.

Viteza (viteza de prelucrare)

Se defineşte viteza sau creşterea de viteză (speedup), sk , unui


procsor pipe-line cu k niveluri în raport cu echivalentul său non pipe-line
astfel :

sk = T1 / Tk = nk / [ k + (n-1) ]

Viteza maximă este sk,max = k şi se obţine pentru n foarte mare ( în


practică n>>k ). Viteza maximă nu exte atinsă niciodată în mod practic
datorită interdependenţei dintre instrucţiuni, întreruperi , salturi în program ,
etc.
78 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

L L L L L

Out
In S1 S2 Sk

ceas

L - latch, Si - nivele de prelucrare (stage), i = 1, k

a) Structura de baza (pipe-line liniar)

Spatiu (nivele pipe) i


T j - subtask-ul j al task-ului i

1 2 3 4 5
S4 T4 T4 T4 T4 T4
1 2 3 4 5
S3 T3 T3 T3 T3 T3
1 2 3 4 5
S2 T2 T2 T2 T2 T2
1 2 3 4 5
S1 T1 T1 T1 T1 T1

0 1 2 3 4 5 6 7 8 Timp (ciclii)

b) Diagrama spatiu - timp (operatii suprapuse in timp)

Figura 3.1. Structura pipe-line liniară

Eficienţa

Se introduce următoarea definiţie :

Definiţie : Produsul (aria) dintre intervalele de timp şi nivelurile


(spaţiul nivelurilor pipe-line) din diagrama spaţiu - timp ( figura 3.1.) se
numeşte produsul spaţiu - timp .
Un element dat al produsului spaţiu - timp ( aria cuprinsă între două
momente succesive de timp ti şi ti+1 şi două niveluri succesive Si, Si+1 ,
poate fi ocupat (structura efecuează prelucrări) sau liber (structura pipe -
Principiul pipe-line şi procesare vectorială 79

line nu efectuează prelucrări ci aşteaptă operanzi ), dar nu şi ocupat şi liber


în acelaşi interval de timp.
Eficienţa structurii pipe-line este măsurată ca raport procentual al
elementelor produsului timp-spaţiu ocupate şi al numărului total de
elemente timp-spaţiu.
Dacă n, k, reprezintă respectiv numărul de task-uri, numărul de
niveluri ale structurii pipe-line şi perioada cesului atunci eficienţa  este:

nk n sk
= ------------------------- = --------------- = ----
k [ k + (n-1) ] k + (n-1) k

S-a considerat un timp de observaţie de k + (n-1) ciclii de ceas;


există 2.[k(k-1)/2] elemente libere. Numărul total de elemente este k [ k +
(n-1)], iar numărul de elemente ocupate este k [ k + (n-1)] - k [ k-1 ] = kn.
Dacă n este foarte mare ( numărul de task-uri este mare ) atunci
tinde către 1.
Se observă de asemenea că pentru n mare creşterea de viteză (viteza)
se apropie de viteza teoretică , absolută.

Rata de prelucrare (productivitatea)

Numărul de rezultate (task-uri) ce pot fi încheiate de către structura


pipe-line se numeşte productivitate (rata de prelucrare).
Productivitatea , , este definită astfel :

n   eficienta


= -------------------- = ---- = -----------------------
k+ (n-1  perioada ceasului

unde n este numărul total de task-uri ce se procesează pe durata de


observaţie k + (n-1) .

Clasificarea procesoarelor pipe-line

În conformitate cu nivelul prelucrărilor la care apare structurarea


pipe-line s-a propus următoarea clasificare a procesoarelor pipe-line (figura
3.2.).
80 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Conform figurii 3.2 procesoarele pipe-line se clasifică în :

- procesoare cu pipe-line aritmetic (în interiorul procesorului


unităţile ALU sînt organizate după principiul pipe-line)
- procesoare cu pipe-line de instrucţiuni ( execuţia instrucţiunilor
procesorului este suprapusă cu încărcarea, decodificarea, încărcarea
operanzilor pentru următoarea instrucţiune). Această tehnică se mai numeşte
" instruction lookahead".

Figura 3.2. Clasificarea procesoarelor pipe-line

- procesoare cu pipe-line de prelucrari (procesare) : această schemă


prelucrează acelaşi şir de date printr-o cascadă de unităti hardware
(procesoare);; fiecare unitate execută o prelucrare specifică. Rezultatele
intermediare sînt depuse în memoriile M1,M2,...., Mn.

Primele două scheme (a şi b) apar în orice procesor de uz general


performant, făra ca acesta să fie denumit procesor pipe-line. Schema c)
reprezintă un procesor pipe-line propriu-zis.
Principiul pipe-line şi procesare vectorială 81

În raport cu configuraţia structurii pipe-line şi a strategiei de control


a acesteia se poate face următoarea clasificare :

 Structuri pipe-line unifuncţie sau multifuncţie

O structură pipe-line cu funcţie fixă (dedicată) se numeşte pipe-line


unifuncţie. O structură pipe- line multifuncţie poate efectua mai multe
funcţii, la momente de timp diferite sau nu, prin interconectarea unor
subniveluri (sub - stages) între ele ( este o structură pipe-line
reconfigurabilă).

 Structuri pipe-line statice sau dinamice

O structură pipe-line statică presupune o singură configuraţie


funcţională la un moment dat de timp. Structura pipe-line poate fi unifuncţie
sau multifuncţie.
O structură pipe-line dinamică permite cîteva configuraţii
funcţionale ce există simultan. Reconfigurarea structurii pipe-line se
efectuează in timpul prelucrării (de exemplu funcţie de natura operanzilor).
O structură pipe-line dinamică este , în mod evident , multifuncţie.
Structurile pipe-line dinamice necesită mecanisme de control şi
secvenţare mai elaborate decît în cazul structurilor pipe-line statice.

 Structuri pipe-line scalare sau vectoriale

O structură pipe-line scalară prelucrează o secvenţă de scalari (datele


sînt scalare şi instrucţiunea este scalară).
Structura pipe-line vectorială prelucraeză vectori ( date vectoriale,
instrucţiune vectorială). Procesoarele cu pipe-line vectorial se numesc
procesoare vectoriale.
Structura pipe-line scalară este controlată preponderent prin
software, iar structura pipe-line vectorială este controlată mai mult prin
hardware (pentru a avea o viteză de lucru corespunzătoare).

Pipe-line general

În cazul unei structuri pipe-line liniare, intrarea şi ieşirea sînt


complet independente. Totuşi pentru multe aplicaţii ieşirea poate constitui
intrare pentru operaţiile ulterioare. Apare o reacţie inversă (feedback) .
82 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

În cazul cel mai general o structură pipe-line cu reacţie poate avea


reacţie înainte (feedforward). O astfel de structură este reprezentată în figura
3.3.
Se defineşte o conexiune înainte (feedforward) între nivelurile Si şi
Sj dacă j  i+2 (nivelurile sînt numărate în ordine de la intrare).
Se defineşte o conexiune înapoi (feedback) între nivelurile Si şi Sj
dacă j < i .
Evident timpul d răspuns al căilor de reacţie inversă (înainte) este
esenţial (critic) pentru funcţionarea corectă şi eficientă a structurii pipe-
line. Pentru timpi de răspuns necorespunzători structura poate pierde
avantajele paralelismului temporal.
Este necesară o modalitate de caracterizare a interconectării
nivelurilor (stage) structurii pipe-line şi a organizării fluxurilor de date (în
principal controlul selecţiei multiplexoarelor din figura 3.3).
Se utilizează o tabelă de rezervare. Fie exemplul de structură pipe-
line generală din figura 3.3. Această structură poate efectua două funcţii A şi
B.
Un exemplu de tabelă de rezervare pentru funcţiile A şi B este
ilustrat în figura 3.4. Se defineşte cîte o tabelă de rezervare pentru fiecare
funcţie în parte.
Numărul total de perioade de ceas din tabela de rezervare se
numeşte timp de evaluare pentru funcţia căreia îi corespunde tabela.
O structură pipe-line unifuncţie se poate descrie printr-o singură
tabelă de rezervare. O structură pipe-line multifuncţie trebuie descrisă
printr-un număr de tabele de rezervare egal cu numărul funcţiilor.
Tabela de rezervare indică fluxul datelor ce se prelucrează (figura
3.5.).
În figura 3.5 nivelurile dublu haşurate sînt ocupate la mementul de
timp curent, iar liniile îngroşate arată căile de propagare alese pentru a se
respecta tabela de rezervare.
Principiul pipe-line şi procesare vectorială 83

- multiplexor
Si - nivel (stage) S1
- latch
Conexiuni de reactie inversa
(feedback)
Reactie inainte
(feedforward) S2

Iesire A
S3

Iesire B

Figura 3.3. Pipe-line cu reacţie (general)

Organizarea memoriei pentru structurile pipe-line

Exemplu

Fie un calculator pipe-line ce operează cu patru structuri pipe-line


independente , fiecare pe 32 de biţi. Fiecare pipe-line necesită încărcarea a
doi operanzi de 32 biţi la fiecare perioadă de ceas de 40ns, pentru a produce
un rezultat pe 32 de biţi. Se presupune că trebuie încărcată şi o instrucţioune
de 32 de biţi la fiecare perioadă de ceas.
Conform cu acest exemplu trebuie încărcaţi 3 x 4 x 32 de biţi (adică
2 operanzi + 1 instrucţiune , pentru 4 pipe-line-uri , fiecare cuvînt de 32 biţi)
la fiecare 40 ns şi stocaţi 4 x 32 biţi (adică cele 4 rezultate) în aceleaşi 40 ns.
În total trebuie transferaţi (accesaţi) 512 biţi în 40 ns.
84 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

t t t t t t t t
Timp 0 1 2 3 4 5 6 7

S1 A A A

S2 A A

S3 A A A

a) tabela de rezervare pentru functia A ( timp de evaluare = 8)


t t t t t t t
Timp 0 1 2 3 4 5 6

S1 B B

S2 B B

S3 B B B

a) tabela de rezervare pentru functia B ( timp de evaluare = 7)

Figura 3.4. Exemplu de tabele de rezervare pentru pipe-line general

Aceasta reprezintă rata de cerere a calculatorului pipe-line (pentru


sistemul de memorie) pentru ca structurile cu paralelism temporal să
funcţioneze corect. Rata de cerere nu trebuie confundată cu viteza de
prelucrare definită în capitolul 1.
Lărgimea busurilor de date şi instrucţiuni poate fi aleasă 32 x 4 =
128 biţi ( în general lărgimea bus-urilor de memorie este m x n , unde m este
numărul de biţi pe care lucrează fiecare structură pipe-line, iar n este
numărul de structuri pipe- line).
Principiul pipe-line şi procesare vectorială 85

S1 S1 S1 S1

S2 S2 S2 S2

S3 S3 S3 S3

S1 S1 S1 S1

S2 S2 S2 S2

S3 S3 S3 S3

Figura 3.5. Fluxul datelor prin structura pipe-line generală , pentru funcţia A

Numărul de module de memorie este ales ca fiind M = tacc / tCLK ,


cu tacc - durata ciclului de memorie ( ca timp total în care sînt accesate toate
modulele de memorie), iar tCLK - perioada caesului pipe-line.
86 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Organizarea memoriei pentru exemplul considerat este reprezentată


în figura 3.6.

128
M0 Pipe-line 1
128 32
128
M1
128
UCS 128
UCF Pipe-line 2 32

128
MM-1 Pipe-line 3
32

UCS - unitate de control a stocarii Pipe-line 4


32
UCF - unitate de control a incarcarii
(fetch)
M - modul de memorie Decodificator
i
instructiuni
128

Figura 3.6 Organizarea memoriei pentru procesoare pipe - line

Există mai multe moduri de organizare a acesului la memorie ( care


determină ce modul de memorie va fi accesat la un moment dat).

Accesul de tip S

Se consideră M = 2m module de memorie.


Schema de acces la memorie de tip S este ilustratăîn figura 3.7.
Toate modulele de memorie sînt selectate simultan (de aceea se numeşte
acces de tip S). În continuare , prin utilizarea a m biti de adresă inferiori se
selectează 1 cuvînt dintr-un modul particular, dintre cele 2m module.
Accesul de tip S se utilizează pentru transferul a k cuvinte în
secvenţă (cîte unul din fiecare modul). Dacă accesul nu se face în secvenţă,
performanţele siatemului de memorie sînt scăzute ( se accesează întreg setul
de module de meorie doar pentru a citi un cuvînt izolat).
Pentru transferul în secvenţă a k cuvinte, timpul de transfer este Ta +
k (Ta - timpul de acces la module - selecţia tuturor modulelor, iar  -
întîrzierea latch-urilor) dacă cuvintele se citesc începînd din modulul i cu
i+k  M şi 1< k < M. Dacă citirea începe cu modulul i şi i + k > M ,
Principiul pipe-line şi procesare vectorială 87

atunci timpul de transfer creşte cu Ta ( deoarece trebuie accesate din nou


toate modulele; cele k cuvinte nu se află la acceaşi adresă , internă a
modulelor , ci la adrese diferite ).
Este necesar să fie îndeplinită condiţia :

M < Ta (conform reprezentării din figura 3.7.)

Latch-uri
Modul
acces la un singur
0 Multiplexor
cuvint

Modul
m biti de adresa mai putin
1
semnificativi

Acces 1 Acces 2
Modul M-1
wi - cuvint transferat
Modul
asociat modulului i
m
2 -1 Modul 0
Acces 1 Acces 2
wM-1 wM-1
Read/ Write
w0 w1 w0 w1
(n-m) biti de adresa Iesire

cei mai semnificativi de la accesul 1 de la accesul 2

(comuni pentru toate modulele)



a) accesul de tip S b) diagrama de timp pentru accesul de tip S

Figura 3.7. Accesul de tip S la memorie

Accesul de tip C

În această schemă modulele de memorie sînt adresate concurent .


Biţii de adresă mai puţin semnificativi selectează modulul, iar ceilalţi (n-m)
biţi de adresă (mai semnificativi) selectează elementul în interiorul modului.
Schema accesului de tip C este ilustrată în figura 3.8.
88 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Apare o concurenţă în accesarea modulelor, datorită modului de


selecţie. Timpul cît modulul de memorie este selectat este mai mic decît
timpul cît întreg setul de module este selectat (datorită adresei de rand
inferior utilizată în selecţia modului, ce variază mai repede decît adresa de
rang superior implicată în selecţia setului de module de memorie).
Accesul de tip C se utilizează pentru transferul secvenţelor de
cuvinte, cu timpul de transfer Ta + k a + Ta /M , indiferent de
modulul de unde se începe citirea.

Bus date
Bus de date

R /W Controler
m m
de M 2 -1 M 2 -2 M0
An-1,m An-1,m
memorie latch adrese
A0,m-1 A0,m-1

a) accesul de tip C la memorie

Modulul M-1 Acces M

Acces 3
Modulul 2 b) diagrama de timp pentru accesul de tip C
Modulul 1 Acces 2
Modulul 0 Acces 1 Acces M+1
Ta 1 2 3
Iesire

T /M
a

Figura 3.8. Accesul de tip C la memorie


Schema este mai complicată din punct de vedere hardware, dar mai
performantă (timp de transfer mai scăzut).
În practică se pot utiliza scheme de memorie miste cu acces C/S
(concurent / simultan).
Schemele de memorie pentru procesoarele pipe-line diferă faţă de
schemele "clasice" de memorie datorită caracterului structurii pipe-line :
Principiul pipe-line şi procesare vectorială 89

încărcarea în flux continuu a unei secvenţe de operanzi şi nu încărcarea de


la adrese aleatoare a unor date.
Schemele din figurile 3.7 şi 3.8 sînt utilizate în procesarea vectorilor
(care are o strînsă legătură cu prelucrarea pipe-line).

3.2. Principiile proiectării procesoarelor pipe-line

Această secţiune studiază principalele probleme ce apar într-un


procesor pipe-line (controlul salturilor,conflicte de acces la
memorie,secvenţarea sarcinilor, coliziuni). Se va considera , pentru
simplificare, o structură pipe-line statică. Principiile prezentate se pott însă
extinde şi pentru structuri pipe-line dinamice.

Preîncărcarea instrucţiunilor şi manevrarea salturilor

Unele operaţii (instrucţiuni) pot cauza efecte nedorite asupra


performanţelor structurii pipe-line. Cînd instrucţiunea I este în curs de
execuţie, apariţia unei întreruperi amînă execuţia instrucţiunii I+1 pînă cînd
întreruperea a fost servită.
Există două tipuri de întreruperi : întreruperi precise - ce apar ca
urmare a detectării unui cod de instrucţuine ilegal (aceste întreruperi pot fi
detectate la nivelul de decodificare în structura pipe-line) şi întreruperi
imprecise - care pot apare la nivelul de încărcare a operanzilor sau la
nivelul de execuţie propru-zisă.
Deoarece nivelul de decodificare este amplasat la intrarea în pipe-
line, în cazul unor întreruperi precise, instrucţiunea I+1 nu mai este
acceptată la încărcare. Totuşi instrucţiunile I-1, I-2, ... (care sînt deja în pipe)
se vor executa (fără a se mai încărca altele) apoi se va servi întreruperea.
Cînd apare o întrerupere imprecisă nu se mai admit instrucţiuni în
pipe pînă la servirea întreruperii, toate instrucţiunile aflate deja în pipe sînt
executate înainte de servirea întreruperii, dar este posibil ca printre aceste
instrucţiuni să se afle şi instrucţiuni care trebuiau să se execute (urmau din
punct de vedere logic) după servirea întreruperii.Aceasta este o situaţie de
eroare.
Situaţia trebuie corectată cu ajutorul unui mecanism hardware ce
salvează starea curentă a procesorului la apariţia întreruperii (fără a o servi
însă); după execuţia instrucţiunilor din pipe (execuţie posibil eronată,
datorită faptului că rutina de servire a întreruperii trebuia executată mai
întîi) se serveşte întreruperea apoi se reface starea anterioară a procesorului
(tot hardware).
90 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Efectele salturilor în program asupra performanţelor pipe-line-lui


sînt descrise luînd ca exemplu o structură liniară cu 5 segmente (încărcarea
instrucţiunii, decodificare, încărcare operanzi, execuţie şi stocare rezultate).
Sînt ignorate posibilele conflicte de acces datorate operaţiilor de
încărcare (a instrucţiunilor sau operanzilor) suprapuse şi se consideră că
memoria cache (pentru stocarea instrucţiunilor) este suficientă.
Figura 3.9. ilustrează efectul salturilor într-o structură pipe-line.
Apariţia unei instrucţiuni de salt (condiţionat sau necondiţionat) în
fluxul de instrucţiuni deja încărcat în pipe-line determină modificarea
contextului programului, ceea ce face ca instrucţiunile din urmă să devină
nefolositoare. Următoarea instrucţuine nu poate fi iniţiată decît după
terminarea instrucţiunii de salt. Se introduce un timp suplimentar necesar
golirii (ştergerii) structurii pipe-line; fluxul de instrucţiuni este temporar
întrerupt datorită prezenţei instrucţiunii de salt.
În continuare se va face o setimare a efectului salturilor într-o
structură pipe-line.
Se consideră :

- ciclul instrucţiunii de n ciclii pipe-line


- p - probabilitatea ca o instrucţiune să fie condiţională
-q - probabilitatea ca saltul să se producă (condiţia de salt să fie
îndeplinită)

Presupunem că există m instrucţiuni ce aşteaptă să intre în structura


pipe-line.
Numărul de instrucţiuni care produc salturi este de m.p.q. Pentru
fiecare instrucţiune de salt (cu succes) sînt necesari (n-1) ciclii pipe-line sau
(n-1)/n instrucţiuni, pentru a se şterge structura pipe-line. În total rezultă un
timp suplimentar de prelucrare egal cu m.p.q.(n-1)/n (exprimat în
instrucţiuni).
Sînt necesari (n-1) ciclii pipe-line pentru a se introduce toate
instrucţiunile necesare umplerii structurii (timpul iniţial de întîrziere) , apoi
m ciclii pentru execuţia a instucţiunilor.
Rezultă un timp de prelucrare, pentru m instrucţiuni, exprimat în
ciclii de instrucţiune de :

(m+n-1) / n + m.p.q(n-1) / n

Performanţele structurii pipe-line se măsoară ca raport între numărul


de ciclii de instrucţiune corespunzător unui procesor non-pipe-line şi
Principiul pipe-line şi procesare vectorială 91

numărul de ciclii de instrucţiune corespunzător unui procesor pipe-line


(pentru acelaşi număr de instrucţiuni) adică :

m
---------------------------------------
(m+n-1) / n + m.p.q(n-1) / n

Pentru m mare acest raport devine :

m n
lim --------------------------------------- = -----------------------
m-> (m+n-1) / n + m.p.q(n-1) / n 1 + p.q.(n -1)

Relaţia de mai sus exprimă efectul apariţiei salturilor asupra


procesoarelor pipe-line.
O soluţie pentru evitarea scăderii masive a performanţelor structurii
pipe-line la apariţia salturilor este ilustrată în figura 3.9 d).
Structura pipe-line din figura 3.9 d) conţine 2 buffere de
preîncărcare a instrucţiunilor : un buffer de preîncărcare secvenţială (de
dimensiune s) - unde se încarcă instrucţiunile ce se execută secvenţial
şi un buffer de preîncărcare ţintă - unde se încarcă instrucţiunile de la
adresa (ţinta) asociată saltului condiţional. Dacă saltul condiţional se
efectuează (condiţia de salt este îndeplinită) atunci se invalidează bufferul
secvenţial timp de n ciclii pipe-line şi se încarcă instrucţiuni în bufferul
ţintă.
Nici o instrucţiune nu se mai decodifică pînă la execuţia instrucţiunii
de salt (pentru a se decide dacă saltul se efectuează sau nu). Dacă saltul nu
se efectuează execuţia continuă din buffer-ul secvenţial, în caz contrar
execuţia se face din bufferul ţintă. Cele două buffere îşi inversează rolurile.
92 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

S1 S2 S3 S4 S5 Rezultate
I
IF ID OF E SR

a) structura pipe-line (IF- incarcare instructiune, ID- decodificare, OF- incarcare operanzi
E - executie, SR - stocare rezultate, I - instructiuni)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

timp
I1
I2
I3
I4
I5 b) executia cu suprapunere temporala fara salturi
I6
I7
I8
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

I1 timp

I2
I3
I4 c) executia cu suprapunere temporala cu salturi
I5 (I5 instructiune de salt)
I6
I7
I8

Figura 3.9. Efecul salturilor în structura pipe-line


Principiul pipe-line şi procesare vectorială 93

Memoria sistemului

Buffer de preincarcare Buffer de preincarcare


secventiala (s cuvinte) tinta (t cuvinte)

Decodificator
de instructiuni

1 Unitati de executie pipe-line

Figura 3.9 d) Structura pipe-line cu preîncărcarea instrucţiunilor

Tehnica de preîncărcare a instrucţiunilor îmbunătăţeşte


performanţele structurii pipe-line, dar nu elimină complet efecul apariţiei
salturilor. Există un timp de aşteptare, dar în acest timp se încarcă noi
instrucţiuni din memoria sistemului (spre deosebire de o structură pipe-line
fără preîncărcarea instrucţiunilor în care pe durata aşteptării nu se încărcau
instrucţiuni - deci timpul de aşteptare era mai mare).

Utilizarea bufferelor de date şi a bus-urilor structurate

Viteza de prelucrare a segmentelor (nivelurilor) structurii pipe-line


poate fi neuniformă. Prin urmare apar "gîtuiri" (bottleneck). Fenomenul este
ilustrat în figura 3.10.
.
94 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

S2

S1 S2 S3 S1 S3

T1 T2 T3 T T T T T

T1 = T3 = T ; T2 = 3T

a) segmentul S2 produce o gituire b) subdiviziunea segmentului S2

S2

S1 S2 S3

S2

c) multiplicarea segmentului S2

Figura 3.10 Metode pentru evitarea fenomenului de gîtuire în structurile


pipe-line

Gîtuirea poate fi evitată prin : subdiviziunea segmentului cu timp de


prelucrare mare (uneori dificil de realizat datorită specificului prelucrărilor
asociate segmentului) sau multiplicarea segmentului de viteză redusă (apar
probleme la realizarea unor comutatoae sincrone).
O altă metodă de netezire a fluxului de instrucţiuni prin structura
pipe-line este utilizarea bufferelor de date (instrucţiuni) pentru a compensa
diferenţele de viteză de prelucrare între segmente.
Utilizarea bufferelor permite evitarea întreruperii funcţionării
blocurilor din structura pipe-line (trecerea acestora în satre de aşteptare) în
general datorită conflictelor de acces la memorie.
În mod ideal subfuncţiile efectuate de fiecare nivel pipe-line trebuie
săfie independente în raport cu celelalte niveluri; în caz contrar nişte
prelucrări din pipe-line trebuie oprite pînă cînd dependenţa dispare.
Principiul pipe-line şi procesare vectorială 95

Această situaţie de dependenţă este reflectată de utilizarea în comun


a unui registru (sau memorie) de către două structuri de prelucrare ale pipe-
line-lui. Una dintre aceste structuri trebuie să aştepte pînă cînd cealaltă
termină accesul la resursa comună ( în situaţia în care există doar o cale de
acces la resursă).
Prin utilizarea unei structuri de bus-urii se pot defini rute distincte de
acces pentru accesarea cu întîrziere minimă a informaţiei dorite.
Structura bus-urilor asigură transferul eficient al datelor în interiorul
pipe-line-lui.

Îmbunătăţirea performanţelor calculatoarelor cu unităţi de


prelucrare pipe-line multiple

Pentru calculatoare cu unităţi de prelucrare pipe-line multiple există


posibilitatea ca între 2 unităti de prelucrare conectate pe un bus comun să
apară situaţii de conflict sau situaţii în care unităţile îşi transferă date.
Transferul datelor între unităţi se realizează prin memorie sau
registre. Este de dorit să se minimizeze , pe cît posibil, accesele la memorie
(care sînt lente şi pentru care pot apare conflicte de acces).
Tehnica de evitare (scurtcircuitare) a acceselor la memorie, utilizînd
registre, se numeşte "internal forwarding" şi este prezentată în figura 3.11.
În această figură Mi - reprezintă locaţia i din memorie, (Mi) -
cuvîntul din locaţia i de memorieRj - reprezintă registrul j, iar (Rj) - este
conţinutul lui Rj.
Tehnica "internal forwarding" simplifică secvenţa de prelucrări şi
accese la memorie ca în următorul exemplu:

1. R0 <--- (M1) fetch


2. R0 <--- (R0) + (M2) add
3. R0 <--- (R0) * (M3) multiply
4. M4 <--- (R0) store

După aplicarea tehnicii de scurtcircuitare se ajunge la secvenţa :

M4 <--- [ (M1) + (M2) ] * (M3) , ca în figura 3.11. a).

Situaţiile de conflict între prelucrări se pot evita prin rezervarea


resurselor ( marcarea registrelor sau unităţilor funcţionale).
96 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Fiecare registru sau unitate funcţională va avea ataşate un bit de


"ocupat" ( busy ) şi un "marcaj" ( tag ) ce identifică resursa.
Se consideră structura din figura 3.12 şi următorul exemplu :

ADD F, B1 ( F <--- ( F ) + ( B1 )
MPY F, B2 ( F <--- ( F ) * ( B2 )

M <--- ( R )
Mi Mi i 1
R2 <--- ( M i )

R R R R M i <--- ( R1 )
1 2 1 2
R <--- ( R )
2 1

a) store - fetch forwarding

R <--- ( M )
Mi Mi 1 i
R <--- ( M )
2 i

R <--- ( M )
R R R R 1 i
1 2 1 2
R <--- ( R )
2 1

b) store - store forwarding

M <--- ( R )
M M i 1
i i
M <--- ( R )
i 2

R R R2 M i <--- ( R2 )
1 2

c) supra scriere store -store

Figura 3.11. Tehnica "internal forwarding"


Principiul pipe-line şi procesare vectorială 97

La execuţia instrucţiunii de adunare ADD , se setează bitul busy


asociat lui F, se transmit operanzii F şi B1 către unitatea de adunare ADD,
apoi se setează cîmpul Ident al lui F la valoarea cîmpului Id al unităţii ADD
şi se începe execuţia adunării.
Între timp decodificarea instrucţiunii de înmulţire MPY indică faptul
că registrul F este ocupat (se cere un operand ce va fi actualizat mai tîrziu).
Cu alte cuvinte operaţia de multiplicare MPY depinde de operaţia de
adunare ADD. Totuşi execuţia instrucţiunii MPY nu va fi stopată.

M
.
1 .M 2

1 2a 2b
3a
R0 . 3c *
. 3b
.M 3
+
.
4
. 2c
M4
a) secventa originala
M M
.
1
1, 2a
2

2b

R . . 3b .M 3 .
0 3c, 4 * +

M
. 2c ,3a
4

a) secventa dupa scurtcircuitare

Figura 3.11.a) Tehnica "internal forwarding" aplicată unei secvenţe de


operaţii
98 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 3.12. Rezervarea resurselor

Cîmpul Ident al registrului F va fi transmis către cîmpul Id al unităţii


MPY apoi cîmpul Ident al lui F va fi modificat la valoarea cîmpului Id al
lui MPY şi conţinutul lui B2 va fi transmis la MPY.
Cînd adunarea se încheie, rezultatul va fi transmis la MPY ( în loc să
fie stocat în F) iar cînd înmulţirea se termină rezultatul va fi depus în F
(datorită cîmpurilor de identificare - rezervare pregătiţi corespunzător).
În acest mod se reduce din timpul de execuţie (chiar dacă există
totuşi un timp de aşteptare datorat dependenţei între operaţii).

Detecţia hazardului

Hazardul este datorat conflictului de utilizare a resurselor în timpul


execuţiei intrucţiunilor prin pipe-line.
Există situaţii în care 2 niveluri ale pipe-line-lui necesită accesul la
aceeaşi locaţie de memorie. Există 3 clase de hazard ( data dependent
hazard ) :

- write after read ( WAR ) - scriere după citire


- read after write ( RAW ) - citire după scriere
- write after write ( WAW ) - scriere după scriere

Se definesc drept resurse : registrele şi memoria. Conţinutul acestor


resurse se numeşte data. Se consideră că fiecare instrucţiune reprezintă o
corespondenţă între un set de date şi alt set de date. Domeniul D(I) al unei
instrucţiuni I este setul de resurse ale căror date pot afecta execuţia
instrucţiunii I.
Principiul pipe-line şi procesare vectorială 99

Gradul (rangul) , R(I) , asociat instrucţiunii I reprezintă setul de


resurse ale căror date pot fi modificate de execuţia instrucţiunii.
Hazardul datorat dependenţei datelor apare în situaţiile :

R(I)  D(J) # - pentru RAW ( execuţia instrucţiunii J este


afectată de date ce pot fi modificate de instrucţiunea I)
R(I)  R(J) # - pentru WAW ( instrucţiunea I modifică
rezultate ale instrucţiunii J, sau invers)
D(I)  R(J) # - pentru WAR ( execuţia instrucţiunii I este
afectată de date ce pot fi modificate de instrucţiunea J)

Situaţiile posibile de apariţie a hazardului sînt ilustrate în figura 3.13.

Hazardul pote fi detectat prin testarea condiţiilor anterioare (asupra


domeniului şi rangului instrucţiunilor).
Considerînd secvenţa de instrucţiuni { ..., I I+1, ..., J, J+1, ... } unde
hazardul apare între instrucţiunea curentă J şi cea anterioară I, o modalitate
directă de rezolvare ar putea fi oprirea execuţiei instrucţiunilor J, J+1, J+2 ,
.. pînă cîd instrucţiunea I a trecut de punctul confictului.

Instructiunea I
D(I) R(I)
scriere Instructiunea J
D(J) citire R(J)
a) hazard RAW
Instructiunea I R(I)
D(I) scriere
R(J)
Instructiunea J
scriere
b) hazard WAW D(J)

Instructiunea J
D(J) R(J)
scriere Instructiunea I
D(I) R(I)
citire
a) hazard WAR

Figura 3.13. Situaţii posibile de hazard dependent de date


100 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Secvenţarea sarcinilor şi prevenirea coliziunilor

În situaţia în care în sistemul de calcul pipe-line există mai multe


procese (sarcini) utilizarea unităţilor funcţionale ale structurii se va face cu
posibile coliziuni ( dacă mai multe procese vor să ocupe simultan unitatea
funcţională).
Intervalul de timp, în ciclii pipe-line, dintre două iniţieri ale unor
procese, se numeşte latenţă . Secvenţa de latenţe, între două procese
consecutive, este în general periodică şi se numeşte ciclu de latenţă .
Procedura ( metoda ) de algere a secvenţei de latenţe se numeşte
strategie de control . Strategia de control trebuie să minimizeze latenţa
dintre procesul iniţiat la momentul curent şi cel mai recent proces iniţiat
anterior.
Coliziunea între procese apare în momentul în care două procese
sînt iniţiate cu o latenţă ce conduce la concurenţă asupra unităţilor
funcţionale. Dacă se utilizează tabela de rezervare (pentru a descrie
funcţionarea pipe-line-lui) atunci coliziunea apare cînd latenţa este egală cu
distanţa (în ciclii pipe-line) dintre 2 coloane marcate pe nişte linii oarecare
ale tabelei ( figura 3.14.).

starea initiala
c
s 0 1 2 3 4 5 6 7 8
7
7
1 x x
10110001
7
2 x x x 7
3
7
4 2
3 x
10110111 10111101
4 x x
3 4 2
5 x x
10111011 10111111
c - ciclii pipe-line, s - nivele pipe-line

Setul interzis F = { 1,5,6,8 }


Vectorul de coliziune C = ( 10110001 )
b) diagrama de stare
a) Tabela de rezervare

Figura 3.14. Tabela de rezervare şi daigrama de stare pentru o structură


pipe-line unifuncţie
Principiul pipe-line şi procesare vectorială 101

Setul interzis de latenţe conţine toate latenţele posibile care cauzează


coliziuni între 2 iniţieri de procese .
Se defineşte vectorul de coliziune , C, astfel :

C = ( Cn , ..., C2,C1 ) , unde Ci = 1 , dacă i  F


Ci = 0 , altfel .

( n reprezintă latenţa maximă din şirul interzis de latenţe ). C n este


întotdeauna 1.

Se reprezintă o diagramă de stare ce indică momentele de timp


pentru iniţierea proceselor, în aşa fel încît să nu apară coliziuni.
Faptul că procesele nu pot fi iniţiate oricînd, conduce la degradarea
performanţelor pipe-line-lui în raport cu o situaţie teoretică, dar evident de
preferat situaţiei de coliziuni între procese.
Diagrama de stare se construieşte astfel :

- starea iniţială este starea în care vectorul de coliziuni C corespunde


setului interzis de latenţe
- tranziţiile posibile din starea iniţială sînt cele corespunzătoare
latenţelor permise din vectorul C ( poziţiile cu 0 din acest vector )
- starea următoare se obţine prin deplasarea la dreapta a stării curente
cu un număr de poziţii determinat de tranziţie, după care se efectuează un
SAU logic cu starea iniţială (vectorul de coliziune)

De exemplu (figura 3.14. b) ) : starea iniţială este 10110001,


tranziţiile permise sînt 2,3,4,7. Pentru tranziţia 2 (adică iniţierea unui proces
cu latenţa 2 ) se găseşte starea următoare astfel : se deplasează şirul
10110001 cu 2 poziţii la dreapta şi se obţine : 00101100; se efectuează SAU
cu 10110001 şi se obţine 10111101 - starea următoare.
Diagrama de stare previne coliziunile ce ar putea să apară în
desfăşurarea viitoare a prelucrărilor.
Prelucrările se pot efectua ciclic între 2 sau mai multe stări. Se alege
ciclul cu latenţa medie cea mai mică (media latenţelor ce apar pe arce ) .
Pentru figura 3.14. b) latenţa medie este 3,5.
Strategia de control prezentată poate fi extinsă pentru structuri pipe-
line multifuncţie.
102 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

3.3. Cerinţele prelucrării vectoriale

Un operand de tip vector este un set ordonat de n elemente (n este


lungimea vectorului). Instrucţiunile ce operează asupra vectorilor pot
produce un rezultat scalar sau vector ; de asemenea aceste instrucţiuni pot
opera asupra produselor carteziene V x V sau V x S ( V reprezintă o
mulţime de vectori isr S este o mulţime de scalari).
În genaral operaţiile potrivite pentru a fi executatede o structură
pipe-line trebuie să aibă următoarele caracteristici :

a) procese (funcţii ) identice se repetă de foarte multe ori, iar fiecare


proces se poate subdivide în subprocese (subfuncţii).
b) operanzii succesivi alimentează stryctura pipe-line astfel încît
necesită minimum de buffere sau control local (pe cît posibil).
c) operaţiile efectuate în structuri pipe-line rebuie să fie capabile să-
şi împartă o gamă extinsă de resurse (memorii şi bus-uri).

Aceste caracteristici explică de ce majoritatea calculatoarelor


vectoriale au structuri pipe-line. Instrucţiunile vectoriale trebuie să efectueze
aceeaşi operaţie pe seturi de date diferite, în mod repetat. Se elimină
prelucrarea suplimentară ( overhead-ul ) cauzată de mecanismul de control
al buclelor (spre deosebire de prelucrarea scalară ).
Eficienţa prelucrării vectoriale, în raport cu prelucrarea scalară, este
ilustrată de următorul exemplu .
Într-un procesor scalar (convenţional) bucla DO :

DO 100 I = 1, N
A(I) = B(I) + C(I)
100 B(I) = 2 * A(I+1)

(scrisă în FORTRAN) este implementată prin secvenţa de operaţii scalare :

INITIALIZE I = 1
10 READ B(I)
READ C(I)
ADD B(I) + C(I)
STORE A(I) <--- B(I) + C(I)
READ A(I+1)
MULTIPLY 2 * A(I+1)
STORE B(I) <--- 2 * A(I+1)
INCREMENT I <--- I+1
Principiul pipe-line şi procesare vectorială 103

IF I  N GO TO 10
STOP

Pentru un procesor vectorial se utilizează instrucţiunile vectoriale :

A(1:N) = B(1:N) + C(1:N)


TEMP (1:N) = A(2:N+1)
B(1:N) = 2 * TEMP(1:N)

unde A(1:N) reprezintă vectorul de N elemente A(1), A(2), ... , A(N).


Execuţia buclei scalare repetă overhead-ul mecanismului de control
al buclei (incrementarea lui I şi instrucţiunea IF) la fiecare iteraţie.
În procesarea vectorială care utilizează structuri pipe-line , overhead-
ul este redus prin introducerea unor mecanisme de control hardware.
Îmbunătăţirea performanţelor prelucrării vectoriale se realizează
prin:

- un set bogat de instrucţiuni vectoriale


- instrucţiuni combinate (scalare şi vectoriale)
- alegerea unui algoritm de prelucrare potrivit (exprimat în formă
vectorială sau matricială)
- utilizarea unoui compilator orientat către prelucrarea vectorială
(compilator cu vectorizare).

Paralelismul se atinge prin 4 direcţii astfel :

- utilizarea unui algoritm paralel (A)


- utilizarea unui limbaj de nivel înalt paralel (L)
- generarea unui cod obiect eficient (O)
- utilizarea unei maşini de calcul cu cod eficient (M)

Algoritmul rezolvă problema într-o manieră paralelă (vetorială).


Limbajul este de obicei secvenţial (operează cu instrucţiuni scalare).
Generarea codului obiect poate să fie inadecvată pentru o maşină de calcul (
se face o translatare de cod ceeea ce poate degrada performanţele).
Sarcina compilatorului cu vectorizare este aceea de a reface
paralelismul distrus de utilizarea limbajului secvenţial ( nu există un limbaj
paralel unanim acceptat).
104 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Planificarea structurilor pipe-line pentru task-uri vectoriale


independente

Vom presupune că sistemul de calcu execută mai multe taskuri


vectoriale organizate ca în figura 3.15.

Figura 3.15. Sistemul de task-uri vectoriale

Arcele orientate din figura 3,15 indică faptul că un task produce


rezultate pentru un alt task (de exemplu T1 produce rezultate pentru T5 , T5
produce rezultate pentru T7 , T7 produce rezultate pentru T9 etc. ).
Prelucrarea vectorială se va face cu o structură pipe-line multiplă (un
sistem cu 4 structuri pipe-line independente P1,P2, P3, P4 pentru exemplul
din figura 3.15).
În general se consideră un sistem cu m structuri pipe-line; se notează
cu i timpul de prelucrare al task-ului i, cu t0 timpul de încărcare a
structurilor pipe-line cu operanzi (overhead-ul pipe-line-lui ).
Problema care se pune este aceea de a planifica taskurile pentru
execuţie într-una dintre structurile pipe-line, astfel încît ocuparea acestor
structuri să fie maximă (altfel spus se planifică structura pipe-line pentru a
executa un task).
Nu există o soluţie exactă ( analitică ) pentru planificare, ci numai
soluţii aproximative .
Algoritmul de planificare este următorul :
Principiul pipe-line şi procesare vectorială 105

- se partiţionează task-urile în grupe (partiţii) , Ei, după modul în


care aceste task-uri produc rezultatele (de exemplu în figura 3.15. , partiţia
E1 conţine task-urile care nu necesită rezultate de la celelalte task-uri,
partiţia E2 conţine task-urile ce aşteaptă rezultate de la E1 ş.a.m.d.).
- se defineşte un timp mediu de execuţie într-o structură pipe-line :
n
ta = 
i=1
(i + t0) / m , dacă n > 1

sau
ta = i / m , dacă n=1

(n este numărul de task-uri din partiţia de lucru)

- momentul de timp pentru comutarea către următoarea structură


pipe-line este definit de condiţia :

ti  ta - t0 / 2

- momentul de timp pentru divizarea task-ului curent şi actualizarea


timpului mediu este definit de condiţia :

tj  ta + t0 / 2

Actualizarea timpului mediu este efectuată prin operaţia :

ta <--- ta + t0 / m

Planificarea task-urilor (şi deci a structurilor pipe-line) se face pe


partiţii; algoritmul de mai sus se aplică separat pentru fiecare partiţie
definită.
Vom exemplifica acest algoritm de planificare pe exemplul din
figura 3.15.
Planificarea începe cu partiţia E1, apoi E2, E3 şi E4.

Se cunosc : t0 = 1; 1 = 2 ; 2 = 4 ; 3 = 6 ; 4 = 8 ; 5 = 8 6 = 2;
7 = 6 ; 8 = 4 ; 9 = 4 ; şi m = 4;
Partiţiile sînt următoarele : E1 = { T1, T2, T3, T4 }, E2 = { T5, T6,
T8 }, E3 = { T7 } , E4 = { T9 }.
106 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Structurile pipe-line sînt P1, P2, P3 şi P4.

Pentru partiţia E1 se obţine succesiv prin aplicarea algoritmului de


planificare :

ta = [(2+1) + (4+1) + (6+1) + (8+1) ] / 4 = 6

Se alocă lui T1 un timp de execuţie , în P1, care să nu depăşească


valoarea ta - t0 / 2 = 5.5
Se poate aloca lui T1 un timp de execuţie 1 = 2 < 5.5.
Algoritmul de planificare continuă cu T2 (următorul task din partiţia
E1).
Momentul de timp pentru comutarea la pipe-line-ul următor este
6 + 0.5 = 6.5. Task-ului T2 i se poate aloca intervalul de timp de la 4 pînă la
6.5 (s-a ţinut seama de timpul t0) adică 21 = 2.5 , după care se comută la
pipe-line-ul P2.
Se actualizează timpul mediu : ta = 6 + 0.25 = 6.25 .
Pentru task-ul T2 se alocă restul de timp , 2 - 21 = 4 - 2.5 = 1.5 <
ta -t0 /2 = 5.75 .
Pentru T3 avem 3 = 6 ; se alocă intervalul de timp pînă la ta + t0 / 2
= 6.75; rezultă 31 = 6.75 - 3.5 = 3.25.
Se actualizează ta = 6.25 + 0.25 = 6.5.
Se comută la P3.
Se termină T3 ( se alocă 32 = 3 - 31 = 6 - 3.25 = 2.75 < 6.5 -0.5.
Comutarea la P4 se va face la momentul de timp 6.5 + 0.5 = 7.
Se alocă task-ului T4 intervalul de timp (în P3) 41 = 7 - 4.75 = 2.25
Se comută la P4; se actualizează ta = 6.5 + 0.25 = 6.75 .
Se alocă lui T4 restul de timp : 42 = 4 - 41 = 8 - 2.25 = 5.75 <
6.75 - 0.5 .

În figura 3.16. se ilustrează planificarea task-urilor pentru partiţia


E1, pentru fiecare pipe-line. Zonele haşurate reprezintă intervale de timp în
care structura pipe-line nu este utilizată.
Principiul pipe-line şi procesare vectorială 107

E1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7

P1 t0 1 = 2 t0  21 = 2.5

P2 t0 22 = 1.5 t0  = 3.25


31

P3 t0 32 = 2.75 t0  = 2.25


41

P4 t  = 5.75
0 42

Figura 3.16. Alocarea pipe-line pentru E1

Se reia algoritmul pentru partiţiile E2, E3 şi E4 . Planificarea pipe-


line pentru aceste partiţii este ilustrată în figura 3.17.

E2 E3 E4
7 7.5 8 8.5 9 10 10.5 11 11.5 12 12.5 13 13.5 14 14.5 15 15.5 16 16.5 17

P1 t  = 3.75 t  = 1.5 t  = 1
0 51 0 71 0 91

P2 t0  52 = 4 t0  72 = 1.5 t0  92 = 1

P3 t t0  = 2 t  = 1.5 t  = 1
0 6 0 73 0 93

P4 t  = 4 t  = 1.5 t  = 1
0 8 0 74 0 94

 53 = 0.25

t a = 4.25 t a = 1.5 ta =1
t a = 4.5
t = 4.75
a

Figura 3.17. Alocarea pipe-line pentru E2, E3 şi E4


108 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Metode de prelucrare vectorială cu pipe -line

Se clasifică metodele de procesare vectorială în trei categorii :

- prelucrare orizontală
- prelucrare verticală
- prelucrare mixtă ( orizontală şi verticală , combinate )

Se consideră operaţia elementară :

y = a1 x1 + a2 x2 + ... + an xn

unde { ai }i = 1,..., n sînt scalari , { xj }j= 1, ..., n sînt vectori cu


m elemente , iar y este un vector cu m elemente.

Prelucrarea poate fi scrisă extins :

y1 = a1 x11 + a2 x21 + ... + an xn1


y2 = a1 x12 + a2 x22 + ... + an xn2
.
.
.
ym = a1 x1m + a2 x2m + ... + an xnm

Pentru prelucrarea orizontală se calculează pe rînd yi , i = 1, .., m .


Pentru prelucrarea verticală se calculează sumele parţiale :

(a1 x1i + a2 x2i ) = yi12 pentru i = 1, ... , m


apoi
( yi12 + a3x3i ) = yi13 ş.a.m.d.

(se acumulează pe fiecare componentă yi cîte un produs , la fiecare pas) .

Metodele de prelucrare orizontală sau verticală diferă între ele prin


numărul de ciclii pipe-line necesari pentru efectuarea adunărilor implicate în
Principiul pipe-line şi procesare vectorială 109

operaţia vectorială (numărul de ciclii pipe -line pentru înmulţiri este


acelaşi).
Să considerăm o structură pipe - line cu ciclul 5t - adică 5 niveluri ,
ceasul pipe-line este t (pentru fiecare adunare sau înmulţire ).

Pentru prelucrarea orizontală - pentru obţinerea unui singur yi - sînt


necesari 10t ciclii pentru iniţializare (5 niveluri pipe line şi doi operanzi de
adus la zero), prima adunare se efectuează în 5t , iar restul de (n-1) adunări
se efectuează cîte una la fiecare t. În total, pentru prelucrarea orihontală,
rezultă timpul de prelucrare - numai adunare ( pentru m componente yi ):

Tha = m [ 10t + (n-1)t +5t ] = mnt + 14mt

Pentru prelucrarea verticală sînt necesari 10t ciclii pentru iniţializare


5t ciclii pentru efectuarea primei sume, apoi se efectuează (n-1) adunări de
m ori cîte una la fiecare t , deci rezultă :

Tva = 10t + 5t + m [ (n-1)t ] = mnt - mt + 15t


Iniţializarea pipe-lui nu se mai face pentru fiecare componentă yi , ci
doar la început.

Diferenţa timpilor de prelucrare este Tha - Tva = 15t (m -1). Pentru


m mare creşterea de vitezăeste mare. Pentru m = 1 (prelucrare scalară ) nu
apare nici o diferenţă.

Pentru efectuarea celor nm înmulţiri este necesar un timp de execuţie


de:

Tm = 5t (stergere ) + 5t (prima înmulţire) + (nm-1)t (restul înmulţirilor)


= nmt + 9t
4
Arhitectura sistemelor multiprocesor

Această secţiune descrie principalele arhitecturi de sisteme


multiprocesor. Pentru un sistem multiprocesor există limitări atît din punct
de vedere hardware (interconectarea electrică între mai multe procesoare )
cît şi din punct de vedere software (sincronizarea activităţilor procesoarelor
sistemului).
Sistemul de memorie trebuie proiectat astfel încît să răspundă unor
cerinţe mai mari (comparativ cu un sistem uniprocesor).

4.1. Structuri funcţionale ale sistemelor multiprocesor


Sistemele multiprocesor pot fi descrise prin două atribute specifice :
- existenţa , într-un singur sistem de calcul, a mai multe procesoare
fizic distincte şi posibil diferite ca tip 4
- necesitatea comunicării şi cooperării pe diferite nivele pentru
rezolvarea unei probleme date.

Deşi există similarităţi cu retelele de calculatoare , sistemele


multiprocesor se deosebesc de acestea. O reţea de calculatoare (sau sistem
multicomputer) constă din mai multe calculatoare autonome interconectate
care pot să comunice sau nu între ele; există un program de supervizare
pentru a controla accesul la resursele comune (la server ); acest supervizor
nu înlocuieşte însă sistemul de operare propriu al fiecărui calculator în parte.
Un sistem multiprocesor constă din mai multe procesoare
interconectate, care împart resurse comune şi care comunică în mod necesar
între ele; un sistem de operare unic controlează toate procesoarele la un loc
precum şi accesul al resursele comune.
Există două modele (arhitecturi) pentru sistemele multiprocesor:

- sisteme multiprocesor slab culpat (loosely coupled)


Arhitectura sistemelor multiprocesor 111

- sisteme multiprocesor strîns cuplat (tightly coupled)

Sisteme multiprocesor slab cuplate

În figura 4.1. este ilustrat un sistem multiprocesor slab cuplat,


neierarhizat.
Procesorul, memoria locală (privată ) şi interfetele I/O constituie un
modul de calculator (computer module). Comunicaţia între diferite module
de calculator (deci şi dintre diferite procesoare) se efectuează prin
intermediul unui sistem de transfer al mesajelor (MTS). Task-urile efectuate
de fiecare procesor schimbă mesaje (informaţii) prin intermediul MTS.
Interfaţa între modulele de calculator este asigurată de blocul CAS
(Channel and Arbiter Switch); acest modul efectuează transferul fizic de
date ( asigură un canal de comunicaţie între MTS şi modulul de calculator)
şi coordonează fluxul de informaţie (efectuează comutarea de mesaje ).
Totodată CAS rezolvă şi conflictele de acces la MTS ( în situaţia de
cereri simultane la aceeaşi informaţie din MTS generate de două sau
maimulte module de calculator).
Sistemul de transfer al mesajelor poate fi implementat prin
împărţirea bus-urilor sau poate fi o memorie partajată .
Pentru MTS cu împărţirea bus-urilor , performanţele vor fi limitate
de : rata de apariţie a mesajelor pe bus , lungimea mesajelor şi
capacitatea bus-ului ( în biţi pe secundă).
Pentru MTS implementat ca memorie partajată factorul de limitare îl
constituie problemele legate de implementare reţelei de interconectare dintre
procesoare şi memorie.
Pentru sistemul multiprocesor slab cuplat , din figura 4.1. ,
comunicaţia între task-uri se desfăsoară prin intermediul unor porturi logice
de comunicţie ca în figura 4.2.
Fiecărui task (asociat unui procesor din sistem) i se va rezerva o
zonă de memorie (numită port logic de comunicaţie) în memoria privată a
procesorului care execută task-ul. În memoria partajată se rezervă cîte o
zonă de memorie (port logic de comunicaţie) pentru fiecare procesor din
sistemul multiprocesor.
112 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Memorie
I/O
locala (LM)

Bus local
Procesor
(P)

CAS - Canal si circuit de arbitrare(switch)


CAS

a) modul de calculator

Modul 0 LM I/O Modul (N-1) LM I/O

P P

CAS CAS

Sistem de transfer al mesajelor (MTS)

b) Sistem multiprocesor slab cuplat

Figura 4.1. Arhitectura unui sistem multiprocesor slab cuplat

Comunicaţia între task-uri se efectuează prin transferul de date în


(din) aceste porturi logice.

De exemplu , în figura 4.2. se asociază task-urile A şi C procesorului


1şi task-urile B şi D procesorului 2. Task-ul A comunică cu task-ul C (a) în
interiorul modulului ce conţine procesorul 1 , iar task-ul A comunică cu
task-ul B ( b1 şi b2) prin intermediul MTS ( memorie partajată) .
Arhitectura sistemelor multiprocesor 113

Figura 4.2. Comunicaţia între task-uri prin porturi logice

Sisteme multiprocesor slab cuplate ierarhizate

În figura 4.3. se ilustrează configuraţia unui sistem multiprocesor


slab cuplat ierarhizat.
Blocul de control local ,S, trebuie să asigure în mod suplimentar faţă
de blocul CAS din figura 4.1, translatarea adresei virtuale în adresă fizică ,
dacă adresa virtuală corespunde unei adrese fizice din alt modul de
calculator (conectat pe acelaşi bus local).
Modulele de calculator sînt conectate pe un bus comun - numit bus
"map" ( de corespondenţă) . Un bus "map" interconectează un cluster
(chiorchine) de module de calculator.
Accesele pe acest bus sînt controlate de un contreler de bus .
Controlerul de bus permite interconectarea mai multor clustere între
ele prin intermediul unuia sau mai multor bus -uri "intercluster".
Structura unui controler de bus este ilustrată în figura 4.4.
114 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 4.3. Organizarea ierarhizată sistemelor multiprocesor slab cuplate

Controlerul de bus se compune din 3 blocuri :

- un arbitru de bus ( ce arbitrează accesele pe busul "map"


comun modulelor de calculator).
- o interfaţă de comunicaţie cu bus-urile intercluster ( ce
realizează legătura între mai multe controlere de bus , asociate mai multoe
clustere de module de calculator).
- un procesor de mapare ( ce asigură interconectarea dintre
arbitru de bus şi interfaţa de comunicaţie şi rezolvă cererile de acces -
translatarea adreselor - de la arbitrul de bus).
Arhitectura sistemelor multiprocesor 115

Figura 4.4. Structura controlerului de bus din figura 4.3.

În structura controlerului de bus există mai multe cozi de aşteptare ,


necesare pentru uniformizarea vitezelor de prelucrare între blocurile
constituente :
- o coadă de servire - unde aşteaptă cererile (mesajele) destinate
arbitrului de bus asociat clusterului , primite de la un alt cluster prin
intermediul bus-ului "intercluster".
- o coadă de reurnare (răspuns) - în care aşteaptă mesje de răspuns
destinate arbitrului de bus.
- o coadă de execuţie - pentru mesajele care se prelucrează (
decodifică) de către procesorul de mapare.
- o coadă de ieşire - pentru rezultatele prelucrării efectuate de
procesorul de mapare.
- una sau mai multe cozi de transmitere - în care aşteaptă mesaje ce
vor fi transmise de la procesorul de mapare la interfaţa de comunicaţie.
Există două tipuri de accese la memorie : accese la memorie în
interiorul aceluiaşi cluster şi accese la memorie intercluster.
Modurile în care sînt rezolvate fiecare dintre aceste două accese la
memorie sînt ilustrate în figurile 4.5. şi 4.6.
116 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 4.5. Etapele unui acces la memorie în interiorul unui cluster

Sisteme multiprocesor strîns cuplate

Datorită unei largi variaţii a timpilor de acces pentru module de


calculator diferite, viteza de prelucrare într-un sistem multiprocesor slab
cuplat poate fi scăzută în raport cu cerinţele aplicaţiei.
În asemenea cazuri se utilizează sisteme multiprocesor cuplate
strîns.
Arhitectura unui sistem multiprocesor cu cuplaj strîns este ilustrată
în figura 4.7.
Procesoarele sistemului sînt interconectate cu memoria prin
intermediul unei reţele de interconectare. Există un modul special - modul
de mapare - care asociază unei adrese logice o adresă fizică corespunzătoare
unuia din modulele de memorie partajată.
Pe de altă parte fiecare procesor posedă memorie locală (ce conţine
nucleul sistemului de operare pentru fiecare procesor şi care poate fi
utilizată pentru prelucrări rapide, deoarece nu se mai utilizează reţeaua de
interconectare).
Arhitectura sistemelor multiprocesor 117

Figura 4.6. Etapele unui acces la memorie "intercluster"

O altă reţea de interconectare asigură legătura cu dispozitivele de


intrare - ieşire (discuri, bandă magnetică etc.).
Semnale exterioare de întrerupere pot fi interconectate cu
procesoarele sistemului.
O cerere de întrerupere poate fi redirectată către oricare dintre
procesoarele sistemului.
Uzual, pentru a evita conflictele de acces la memorie, numărul de
module de memorie partajată este mai mare decît numărul de procesoare din
sistem.
Schema din figura 4.7. poate fi completată cu blocuri de memorie
cache pentru fiecare procesor în parte.
Procesoarele pot fi sau nu identice ca tip.
118 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 4.7. Sistem multiprocesor strîns cuplat

Dispozitivele de intrare - ieşire pot fi conectate, în cadrul sistemului


multiprocesor , în mod asimetric sau simetric (figura 4.8.).
Aceste moduri de interconectare sînt importante pentru fiabilitatea
sistemului multiprocesor în eventualitatea defectării unor procesoare.
În situaţia unei conectări asimetrice a dispozitivelor I/O , defectarea
unui procesor are ca efect pierderea datelor I/O ce erau transferate prin
canalele I/O conectate cu procesorul defect. Chiar dacă procesoarele rămase
în sistem pot prelua sarcinile procesorului defect (datorită interconectării
interprocesor) canalele I/O asociate procesorului defect nu mai sînt
disponibile.
Conectarea simetrică a dispozitivelor I/O asigură faptul că la
defectarea unui procesor, canalele I/O asociate, sînt disponibile pentru alte
procesoare funcţionale (datele I/O nu se pierd).
Arhitectura sistemelor multiprocesor 119

Figura 4.8. Subsistem I/O asimetric (a) şi simetric (b) în sistemul


multiprocesor

4.2. Reţele de interconectare în sistemele multiprocesor

Performanţele sistemului multiprocesor sînt datorate nu numai


procesoarelor ci si modului în care se realizează conectarea acestora cu
memoriile, dispozitivele I/O şi între procesoarele înseşi.
Există trei categorii principale de reţele de interconectare :

- conectare prin bus comun ( sau cu împărţirea timpului )


- conectare prin reţea crossbar
- conectare cu memorii multiport

4.2.1. Interconectarea prin bus comun

Este cea mai simplă dintre posibilităţile de interconectare.


Structura unui sistem multiprocesor cu bus comun este prezentată în
figura 4.9.
120 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 4.9. Structura unui sistem multiprocesor strîns cuplat cu un singur


bus

Operaţiile de transfer sînt controlate în totalitate de către interfaţa de


bus a fiecărui bloc conecatat pe bus.
Un bloc care doreşte accesul pe bus trebuie să verifice mai întîi dacă
bus-ul este disponibil (nu este utilizat de alt bloc) după care ocupă bus-ul
informînd despre aceasta celelalte blocuri.
Blocul ( procesor sau procesor I/O) care ocupă bus-ul devine în mod
temporar master în sistem.
Viteza de transfer între blocurile constitutive ale sistemului este
limitată de mecanismul de ocupare a bus-ului .
Conectarea unui număr prea mare de procesoare pe acelaşi bus poate
avea ca efect apariţia unor conflicte de acces (datorită aglomerării bus-ului).
Deşi simplu, acest mod de interconectare are dezavantajul că o
defectare a unui bloc conectat pe bus-ul comun poate conduce la
deteriorarea funcţionării întregului sistem.
Sistemul din figura 4.9. poate fi extins la un sistem cu două bus-uri
unidirecţionale , ca în figura 4.10.

Figura 4.10. Structura unui sistem multiprocesor strîns cuplat cu bus- uri
unidirecţionale
Arhitectura sistemelor multiprocesor 121

Structura cu bus-uri unidirecţionale rezolvă parţial problema


aglomerării bus-ului comun din figura 4.9.
O altă extindere a schemei cu bus comun presupune creşterea
numărului de bus-uri comune, bidirecţionale, ca în figura 4.11.

Figura 4.11. Structura unui sistem multiprocesor strîns cuplat cu bus-uri


multiple

Aglomerarea pe bus scade , dar complexitatea hardware-lui creşte


destul de mult.
Factorii care influenţează caracteristicile schemei de interconectare
cu bus comun sînt :

- numărul de blocuri (procesoare) active


- algoritmul de arbitrare de bus
- tipul controlului de bus (centralizat sau distribuit)
- lărgimea datelor
- sincronizarea între procesoare
- detecţia situaţiilor de eroare

Algoritmi de arbitrare de bus

1.Algoritmul cu priorităţi statice (daisy chain)

Este ilustrat în figura 4.12.


122 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 4.12. Interconectarea pe bus comun de tip static (daisy chain)

Procesoarele care concură la ocuparea bus-ului au priorităţi fixe


(prioritatea maximă pentru procesorul conectat fizic cel mai aproape de
blocul de control al bus-ului).
Un procesor (sau mai multe ) generează o cerere de bus (Bus
Request - BR/) . Cererile BR/ sînt conectate pe o linie comună. Procesorul
care va ocupa bus-ul va fi cel care va recepţiona primul semnalul de
acceptare Bus Grant (BG/).
Procesorul care a ocupat bus-ul va emite u semnal de recunoaştere -
Signal Acknoledge - SACK); la recepţionarea lui SACK controlerul de bus
inhibă semnalul BG/. Semnalul BG/ este generat numai dacă SACK este
inactiv.
O variantă a acestui algoritm este aceea de a se aloca fiecărui
procesor un interval de timp (slot) în care bus-ul îi este oferit. Fiecărui
procesor i se oferă bus-ul, în mod ciclic, un interval de timp prestabilit;
dacă procesorul nu utilizează bus-ul în intervalul acordat trebuie să aştepte
următorul ciclu.
Algoritmul cu priorităţi fixe este bun pentru o încărcare relativ mică
pe bus. Este destul de simplu de implementat.

2.Algoritmul cu priorităţi dinamice ( rotating daisy chain)

Este prezentat în figura 4.13.


Arhitectura sistemelor multiprocesor 123

Figura 4.13. Interconectarea pe bus comun cu rotirea priorităţilor (rotating


daisy chain)

Pentru algoritmul cu priorităţi dinamice nu mai există blocul de


control al bus-ului centralizat . Acest bloc este divizat în sub- blocuri ,
descentralizate.
Semnalul BG/ este conectat în buclă închisă între sub-blocurile de
control al bus-ului.
Sub-blocul conectat cu procesorul care a preluat bus-ul devine
master modificînd astfel "distanţa" dintre procesoare şi sub - blocul de
control de bus.
Procesorul care a preluat bus-ul va avea , la următoarea cerere de bus
, prioritatea minimă.
Sub-blocurile de control al bus-ului comunică între ele pentru a
arbitra cererea de bus (semnalele BR/ şi SACK); de asemenea există legături
electrice . pentru "dialog" , între fiecare sub-bloc de control al bus-ului şi
procesorul asociat.

3.Algoritmul cu interogare ciclică (polling)

Este ilustrat în figura 4.14.


Linia BG/ este înlocuită prin log 2 m linii de interogare ( m este
numărul de procesoare din sistem) conectate la fiecare procesor printr-un
circuit de decodare.
În momentul cînd un procesor îşi recunoaşte codul de interogare ,
atunci activează semnalul SACK şi ocupă bus-ul.
124 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Blocul de control al bus-ului întrerupe ciclul de interogare pînă cînd


procesorul ce a ocupat bus-ul îşi încheie operaţiile pe bus.
Prioritatea procesorului este dată de codul său de interogare.

4.Algoritmul cu cereri independente

Schema acestui algoritm este ilustrată în figura 4.15.


Fiecare procesor emite o cerere de bus independentă care este
procesată de blocul de control al bus- lui. Acest bloc răspunde cu semnale
BG/ independente. Este schema de arbitrare a bus-ului comun cea mai
generală. Complexitatea hardware este ridicată.

Figura 4.14. Interconectarea pe bus comun prin polling


Arhitectura sistemelor multiprocesor 125

Figura 4.15. Interconectarea pe bus comun cu cereri independente

5.Algoritmul FCFS (First Come First Served)

Acest algoritm nu preferă nici un procesor : prima cerere de bus


sosită este acceptată şi servită.
Este algoritmul optim, dar greu de implementat din următoarele
motive :

- prespune existenţa unui mecanism de înregistrare ordinii cererilor


de bus
- este posibil ca două cereri de bus să sosească suficient de apropiate
în timp , pentru ca ordinea relativă a acestora să nu fie corect înregistrată.

Algoritmul FCFS este utilizat ca etalon pentru ceilalţi algoritmi de


arbitrare ( mai uşor de realizat practic dar cu performanţe mai slabe).

4.2.2. Interconectarea cu reţele crossbar

Acest mod de interconectare asigură conectarea fără blocaj între


procesoare , memorii şi dispozitive I/O.
126 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Schema de interconectare cu reţele crossbar este ilustrată în figura


4.16.

Figura 4.16. Interconectarea crossbar

Numărul maxim de transferuri simultane este limitat de numărul de


module de memorie şi de viteza acestora (timpul de acces) şi nu de numărul
de căi disponibile.
Elementul esenţial al reţelei crossbar este punctul de interconectare .
Acesta trebuie să asigure : rezolvarea cererilor multiple de acces, acordarea
unei priorităţi fiecărei cereri şi transferul propriu - zis al informaţiei.
Structura unui punct de interconectare este prezentată în figura 4.17.
Arhitectura sistemelor multiprocesor 127

Figura 4.17. Structura funcţională a unui punct de interconectare din reţeaua


crossbar

Fiecare procesor ce doreşte interconectarea cu o resursă (de exemplu


memoria) trimite către punctele de interconectare : adresa, datele şi
semnalele de comandă RD/WR, precum şi un semnal de cerere (REQ).
Punctul de interconectare constă în : blocul multiplexor şi modulul
de arbitrare a cererilor multiple.
Modulul de arbitrare a cererilor multiple rezolvă cererile REQ şi
informează procesoarele prin activarea semnalului ACK.După recepţionarea
semnalului ACK procesorul poate să efectueze accesul la resursa cerută.
Reţeaua crossbar , deşi oferă rezultate foarte bune în ceea ce priveşte
interconectivitatea, este destul de costisitoare din punt de vedere al realizării
hardware.

4.2.3. Interconectarea prin memorii multiport

Dacă blocurile constituente ale punctelor de interconectare din


reţeaua crossbar sînt distribuite la interfaţa cu modulele de memorie , atunci
se crează un sistem de interconectare cu memorii multiport , ca în figura
4.18.
Schema de interconectare din figura 4.18. este mai ieftină datorită
distribuirii complexităţii hardware la fiecare modul de memorie în parte.
128 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Fig 4.18. Sistem multiprocesor cu memorii multiport

Circuitele de memorie multiport sînt compuse din : un circuit de


memorie RAM clasic şi un circuit de arbitrare a acceselor multiple.
Memoriile multiport pot fi realizate într-un singur chip sau în chip-
uri separate (RAM + circuit de arbitrare).
Pentru structura din figura 4.18. memoriile multiport constituie atît
elementul de interconectare cît şi un element de stocare a informaţiei
transferate.
4.3. Comparaţie între modurile de interconectare pentru sistemele
multiprocesor strîns cuplate

În continuare se prezintă o comparaţie între modurile de


interconectare a sistemelor multiprocesor cu cuplaj strîns :

Interconectare cu bus comun :

- structură simplă şi ieftină


- modificări hardware simplu de efectuat ( eliminare sau adăugare de
componente)
- eficientă scăzută pentru rate mari de transfer pe bus
- defectarea unei componente poate conduce la nefuncţionalitatea
întregului sistem
- metodă potrivită pentru sisteme mici
Arhitectura sistemelor multiprocesor 129

Interconectare cu reţea crossbar

- cea mai complexă metodă


- oferă rata de transfer potenţială cea mai mare
- unitătile funcţionale sint simple datorită faptului că " inteligenţa "
necesară comutării este localizată la nivelul punctelor de
interconectare
- punctele de interconectare sînt foarte complexe , din punt de vedere
hardware

Interconectare cu memorii multiport

- necesită module de memorie cu " inteligenţă" pentru arbitrarea


acceselor multiple
- structură hardware mai ieftină decît reţeaua crossbar
- necesită multe elemente de conectică
5
Implemetarea sistemelor de calcul matriciale şi
pipe-line

5.1. Sisteme de calcul matriciale (array processors)

Sisteme de calcul cu grad mare de paralelism

În ultimele decade au apărut o serie de aplicaţii ( de exemplu în


domeniul multimedia, prelucrării de imagine, meteorologie ş.a.) care
necesită o putere de calcul foarte mare. Două probleme s-au ridicat pentru
rezolvarea acestor aplicaţii : costul ridicat al hardware-lui şi existenţa unor
compilatoare pentru limbaje de nivel înalt care să poată permite manevrarea
eficientă a resurselor .
Clasa de sisteme de calcul care oferă posibilitatea de rezolvare a
acestor aplicaţii foarte complexe este constituită din calculatoarele
matriciale (array processors).
Aceste calculatoare utilizează utilizează, în special, tehnologia RISC,
pentru a constitui sisteme flexibile, scalabile şi cu o putere de calcul foarte
mare.
Există mai multe tipuri de calculatoare matriciale după modul în care
resursele sistemului sînt partajate :
- sisteme cu multiprocesare simetrică (Symmetric Multiprocessing) - SMP
- sisteme cu grad masiv de paralelism (Massively Parallel Processing ) -
MPP
- sisteme scalabile cu procesare paralelă (Scalable Parallel Processing) -
SSP
Tipurile de calculatoare matriciale (cu paralelism spaţial, fizic) sînt
ilustrate în figura 5.1.
Arhitecturile din figura 5.1. se aseamănă cu sistemele multiprocesor;
totuşi elementele de prelucrare PE constituie structuri mai simple decît un
modul de calculator.
Implemetarea sistemelor de calcul matriciale şi pipe-line 131

Toate structurile din figura 5.1. trebuie completate cu un modul de


control. Arhitecturile din figura 5.1. ilustrează doar modul de interconectare
a elementelor de prelucrare (reţeaua de interconectare a PE ).
În cazul sistemelor SMP elementele de prelucrare îşi împart un bus
comun şi o memorie comună. Arhitectura SMP permite proiectarea relativ
simplă a aplicaţiilor - programatorul nu ia în considerare natura paralelă a
sistemului de calcul atunci cînd efectuează managementul memoriei.
Sistemul de operare al sistemului realizează împărţirea task-urilor către
fiecare element de prelucrare.
Dificultatea utilizării sistemelor SMP apare atunci cînd numărul de
elemente de prelucrare creşte; apare gîtuirea datorată busului comun dintre
blocurile PE şi memoria partajată fizic.
Evitarea acestei probleme se face prin utilizarea arhitecturii MPP.
Pentru această arhitectură de calculator matricial nu există o zonă de
memorie partajată fizic. Coordonarea dintre diferitele memorii (asociate
fiecărui PE) se realizează de către sistemul de operare al sistemului printr-o
interfată de comunicare - Message Pasing Interface (MPI) similară
comutării pachetelor într-o reţea de comunicaţie.
Sistemele MPP au o structură hardware mult mai complexă decît
sistemele SMP. Utilizatorul trebuie să ia în considerare paralelismul
arhitecturii: programul de aplicaţie realizează şi managementul de memorie
(care este memorie locală).
Pentru aplicaţii cu foarte multe task-uri separate (sau cu o
dependenţă slabă) ca funcţie şi date utilizate, sistemele MPP devin puternice
şi eficiente.
Programele de aplicaţie pentru calculatoarele MPP sînt nu numai
dificil de conceput, dar pot să fie neportabile de la un sistem MPP la alt
sistem MPP .
Arhitecura SPP reprezintă o combinare a arhitecturilor SMP şi MPP.
Există mai multe hipernoduri, interconectate pe un bus comun .
Fiecare hipernod are o memorie locală. Partajarea memoriilor fiecărui
hipernod se realizează din punct de vedere logic prin intermediul sistemului
de operare printr-o interfată de comunicare similară arhitecturii MPP.
Comparativ avantajele şi dezavantajele fiecărei arhitecturi de
calculator paralel sînt ilustrate în tabelul 1.
Majoritatea aplicaţiilor (în proporţie de 99%) pot fi implementate pe
o arhitectură SMP.
Arhitectura MPP se aplică pentru aplicaţii care necesită mai mult de
500 de elemente de prelucrare.
132 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

PE PE PE PE PE PE
bus comun

RAM RAM RAM

RAM partajat bus comun

a) Sistem SMP a) Sistem SMP

PE PE PE

RAM

hipernod

RAM partajat logic

PE PE PE

RAM

hipernod

a) Sistem SSP

Figura 5.1. Tipuri de calculatoare cu paralelism spaţial


Implemetarea sistemelor de calcul matriciale şi pipe-line 133

Tabelul 1

ARHITECTURA AVANTAJE DEZAVANTAJE

SMP - Hardware şi - Adăugarea mai multor


programare simple elemente de prelucrare
(Cray CS6400 - 64 - Datorită unei singure conduce la saturarea
PE, memorii sistemul de bus-ului comun şi la
SGI Power Challenge - operare poate asocia blocarea sistemului
18 PE,HP T, HP S, task-urile in PE diferite
HP D - 14/4/2 la momente de timp
PE) diferite
- Exită programe de
generare a codului
pornind de la o sursă
simplă ce nu ţine cont
de paralelismul maşinii

- Accesarea unei zone


MPP - Evită "gîtuirea" de memorie "nelocale"
datorată partajării fizice implică o schemă de
( IBM SP2 RS/6000 -  a memoriei comunicare cu transfer
512 PE, ASCI - 9000 - Permite un grad foarte de mesaje
PE) mare (masiv) de (comunicarea este
paralelism lentă)
- Permite o extindere - Programare foarte
simplă (arhitectura este dificilă (datorită, în
scalabilă) principal a necesităţii
introducerii comenzilor
de transfer de mesaje)
- Codul aplicaţiei este
dependent de hardware
(*)
134 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

SPP -Reduce traficul pe - Implică o schemă


busul comun lentă de comunicare, cu
(Convex SPP 1200 CD, - Programare simplă transfer de mesaje, între
Convex SPP 1200 XA (similar SMP) hipernoduri
- - Scalabilitate (similar
16/128 PE) (MPP)

(*) - Utilizarea unor mecanisme de comunicaţie evoluate ( ca de exemplu


Parallel Virtual Machine - VPM ) se poate rezolva această problemă.

Exemple de calculatoare MPP

În figura 5.2. este prezentată structura unui calculator matricial


(MPP) dezvoltat pentru aplicaţii sapţiale de către NASA. Sistemul din figura
5.2. reprezintă un calculator paralel SIMP cu 16.384 elemente de prelucrare
ce pot fi utilizate în paralel.
Sistemul de calcul MPP poate efectua operaţii aritmetice de tip bit-
slice pentru diferite lungimi ale operanzilor.
Unitatea de control a acestui sistem este microprogramată şi permite
execuţia unui set flexibil de instrucţiuni pentru vectori , scalari şi operaţii
I/O. Structura sistemului MPP a fost implementată cu circuite integrate
VLSI,
Matricea de prelucrare (Array Unit - ARU ) este constituită din 128 x
128 elemente de prelucrare PE. Fiecare element PE are asociată o memorie
RAM de capacitate 1024 biţi.
Un element de prelucrare reprezintă un procesor bit-slice
interconectat cu cei mai apropiaţi vecini ai săi în matricea de prelucrare.
Se pot conecta elementele PE marginale fie pe verticală fie pe
orizontală.
Pentru a îmbunătăţi fiabilitatea sistemului unitatea ARU este
realizată fizic cu 132 de coloane şi 128 de linii. Erorile hardware sînt
mascate de către un circuit special care înlocuieşte coloana în care cel puţin
un PE este defect cu una din coloanele redundante. Din punct de vedere
logic programatorul poate lucra cu 128 de coloane (4 coloane sînt
rezervate).
Implemetarea sistemelor de calcul matriciale şi pipe-line 135

Interfata
Interfata
Matrice de
intrare 128 biti iesire 128 biti
prelucrare
SW SW
(Array unit- ARU)

Stare
Control
Control
Registre Registre
SW
intrare extern iesire
PMDU PMDU
ARU ARU
Control ARU
(ACU)
Date Control Stare

Management program si date


de la calculator la calculator
(PDMU)
gazda gazda

DISPOZITIVE PERIFERICE
(Banda magnetic, HDD, LPT, CRT)

SW - switch-uri

Figura 5.2. Structura sistemului MPP - NASA

Fiecare element PE utilizează efectuează calculele aritmetice în mod


serial; se utilizează un sumator serial şi un registru de deplasare pentru
recircularea operanzilor.
Această manieră de efectuare a calculelor aritmetice măreşte viteza
de execuţie pentru operaţii de multiplicare, împărţire şi de virgulă mobilă.
Un element de prelucrare lucrrează cu un ciclu de ordinul zecilor de
nanosecunde (30- 100ns funcţie de implementare).
Unitatea de control a matricei de prelucrare (Array Control Unit -
ACU) este realizată microprogramat. ACU supervizează elementele PE din
136 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

ARU, efectuează operaţii aritmetice scalare şi deplasează datele prin


matricea ARU (realizează comunicaţia între PE).
Unitatea de management a programului şi a datelor ( Progarm and
Data Managenent Unit - PDMU ) controlează fluxul de date prin ARU,
încarcă programele, execută rutine de test şi diagnoză, oferă facilităţi de
dezvoltare a programelor.
Interfeţele I/O (registre de intrare PDMU şi registre de ieşire PDMU)
sînt realizate ca memorii cu acces multidimensional (MDA) . Aceste
memorii au următoarele funcţii : bufferare a datelor, manipularea datelor
între PE şi calculatorul gazdă, reformatarea datelor.

Sistemul MPP din figura 5.2. are trei moduri de lucru :

- stand - alone : dezvoltarea programelor, execuţia acestora, testarea


şi dapanarea lor se efectuează în interiorul sistemului MPP şi este controlată
prin comenzi ale operatorului date de la un terminal CRT. Sistemul MPP
transferă date cu dispozitivele periferice şi prin interfaţa de 128 biti.
- on - line : calculatorul extern (gazdă) poate introduce date
programe sau cereri de execuţie a unor programe şi poate prelua informaţii
de stare de la sistemul MPP (asupra sistemului sau a programului în
execuţie).
- high - speed : sistemul transferă date cu exteriorul prin interfaţa de
128 biţi (la viteză ridicată : 320 Mo/s).

În figura 5.3 este ilustrat modul în care este controlată unitatea ARU.

Elementele de prelucrare PE sînt procesoare bit-slice ce pot opera cu


lungimi ale operanzilor arbitrare. Fiecare dintre cele 16384 de elemente PE
poate opera independent; gradul de paralelism este foarte ridicat ca în
tabelul 2 :
Implemetarea sistemelor de calcul matriciale şi pipe-line 137

128 Matricea de 128


registre prelucrare registre
128 intrare iesire 128

32 32 Bus de date
si control PDMU
adr, enable, CLK RD,WR Decodificator
PE marginal

 OR Modul Registru
"fan-out" PE marginal
16
Calcul  OR
adrese
semnale de control de la ACU

Figura 5.3. Controlul matricei de prelucrare ARU


Tabelul 2
Viteza maximă (mops *)
Adunări de matrici
8 biţi (virgulă fixă) 6553
12 biţi (virgulă fixă) 4428
32 biţi (virgulă 430
mobilă)
Multiplicări de matrici
(element cu element)
8 biţi (virgulă fixă) 1861
12 biţi (virgulă fixă) 910
32 biţi (virgulă 216
mobilă)
Multiplicări marice cu scalar
8 biţi (virgulă fixă) 2340
12 biţi (virgulă fixă) 1620
32 biţi (virgulă 373
mobilă)
* Milioane de operaţii pe secundă , la frecvenţa de tact de 100ns
138 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Elementele PE efectuează operaţiile aritmetice şi logice şi operaţiile


de rutare.
Blocul
de biţi (plan de biţi) asociaţi elementelor PE ( un element PE lucrează pe 1
bit; semnalele e şi este implicat în calcului adreselor
de memorie.
Toate semnalele de control de la ACU sînt distribuite către ARU prin
modulul fan-out.
Decodificatorul de element PE marginal selectează cele 16 PE
marginale (de colţ) şi le conectează cu unitatea de control.
Caracteristicile hardware ale unităţii ARU sînt rezumate astfel:

- memorie RAM 1024 biţi per PE


- bit de paritate pentru toate memoriile RAM
- 4 coloane de PE suplimentare pentru reparaţii on-line
- interconectarea elementelor PE marginale (de colţ) controlată prin
program
- circuit hardware pentru izolarea elementelor defecte

Fiecare element de prelucrare poate comunica cu cei mai apropiaţi 4


vecini ai săi : sus,jos,dreapta şi stînga.
Prelucrările se pot face pe orizontală (conectare stînga - dreapta pe
aceeaşi linie, fară elementele marginale), pe verticală (conectare sus - jos pe
aceeaşi coloană, fară elementele marginale), cilindric (conectare stînga -
dreapta/ sus - jos, cu elementele marginale), în spirală deschisă (conectare
stînga - dreapta pe linii succesive, fară elementele marginale) sau în spirală
închisă (conectare stînga - dreapta, pe linii succesive cu elementele
marginale).
Structura de principiu a unui element de prelucrare PE este descrisă
în figura 5.4.
Implemetarea sistemelor de calcul matriciale şi pipe-line 139

Sumator 1 bit C
cu carry

B Shifter N biti A
E
G* P Logica de control
Bus de date (D)

de la PE la PE Adresa
S RAM
din stinga din dreapta
* G = 1 element PE activ G = 0 element Pe inhibat

Figura 5.4. Structura funcţională a unui element de prelucrare PE

Un element PE se compune din mai multe flag-uri de 1 bit (A -


conţine bitul curent al primului operand , B - conţine bitul curent al
rezultatului, C - bitul de transport (carry), P - conţine bitul curent al celui
de al doilea operand şi S - utilizat pentru deplasarea datelor pe coloană de la
stînga la dreapta) un registru de deplasare cu număr progarmabil de paşi, N
= 2,30, o memorie RAM, un bus de date D şi un bloc de control.
Registrul P este utilizat pentru operaţii logice şi de rutare. O operaţie
logică va combina starea registrului P şi starea busului de date D (de un bit)
pentru a genera noua stare a registrului P.
O operaţie de rutare deplasează starea registrului P în regidtrul P al
elementului de prelucrare vecin (sus, jos, stînga sau dreapta). Din motive de
simplitate a realizării interconectării între PE s-a ales o metodă de trasfer
serială.
O operaţie aritmetică de adunare (scădere) se realizează cu ajutorul
sumatorului de 1 bit, a registrului de deplasare şi a registrelor A, B şi C .
Pentru a aduna doi operanzi biţii unui operand se încarcă secvenţial
în registrul A, începînd cu bitul cel maipuţin semnificativ; biţii
corespunzători ai celui de al doilea operand sînt încărcaţi în registrul P.
Sumatorul adună conţinutul registrului A şi P cu conţinutul registrului C
generînd un bit al rezultatului, care este stocat în registrul B şi bitul curent
de transport înscris în regaistrul C pentru a fi adăugat în ciclul următor.
140 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Rezultatul sumei poate fi stocat (din B) în memoria RAM sau în registrul de


deplasare.
Multiplicarea se realizează printr-un algoritm secvenţial ce implică
adunări şi deplasări.
Operaţia de împărţire se realizează cu ajutorul unui algoritm fără
restaurarea restului.
Operaţiile de virgulă mobilă implică calculul exponentului (în
registrul E) şi normalizarea operanzilor.
Datele prelucrate pot fi deplasate de la stînga la dreapta, pe coloană,
utilizînd registrul S. Se pot reaziza transferuri de date din memoria RAM în
S (deci din memoria RAM asociată unei coloane în memoria RAM asociată
altei coloane) . Transferurile pe coloană se realizează într-un singur ciclu -
sînt mai eficiente decît transferurile prin registrul P.
Deşi toate operaţiile se desfăşoară la nivel de bit (din motive de
simplificare a interconectării elementelor PE în ARU şi de realizare
hardware simplă a unui PE) matricea de prelucrare oferă, la nivel global, o
viteză de prelucrare foarte ridicată, datorită numărului mare de elemente PE
ce pot lucra în paralel.
Unitatea de control ACU este realizată microprogramat. Structura
acestei unităţi este ilustrată în figura 5.5.
Unitatea ARU poate efectua operaţii aritmetice scalare şi generează
secvenţa de comenzi necesare funcţionării elementelor PE. Unitatea de
control a PE furnizează toate comenzile către PE; este prevăzută o coadă de
aşteptare între unitatea de comandă principală şi unitatea de control a PE
care să memoreze comenzile noi în timp ce se transferă comanda curentă.
De asemenea operaţiile de intrare - ieşire sînt controlate prin unitatea
de control I/O.
Toate secvenţele de comandă sînt generate ca urmare a decodificării
instrucţiunilor furnizate de unitatea de management a programului şi datelor
PDMU.
Instrucţiunile sînt stocate separat în două memorii ale ACU :
memoria de control a PE (care conţine numai instrucţiuni pentru PE -
instrucţiuni de lucru cu vectori) şi memoria de control principală (care
conţine instrucţiunile cu scalari şi I/O).
Implemetarea sistemelor de calcul matriciale şi pipe-line 141

PDMU Memorie Unitate


de control de control la unitatea ARU
a PE a PE

Coada

PDMU Memorie Unitate


de control de control
principala principala

Unitate
de control la unitatea ARU
I/O

Figura 5.5. Structura unităţii de control ACU

Instrucţiunile sînt codate în microinstrucţiuni de 64 biţi. Majoritatea


instrucţiunilor sînt citite şi se efectuează într-un singur ciclu. O instrucţiune
poate executa mai multe operaţii PE, operaţii asupra mai multor registre şi
un salt condiţional.
Unitatea de control a PE conţine registre pentru memorarea unor
scalari şî registre index pentru memorarea adreselor planelor de biţi.
Memoria de control a PE conţine şi o serie de rutine de test pentru
lucrul cu vectori de date (rutine sistem) utile în testarea sistemului MPP.
Setul de înstrucţiuni al MPP poate fi împărţit în trei subseturi :

- instrucţiuni secvenţiale
- instrucţiuni paralele
- instrucţiuni pentru interfaţă

Instrucţiunile secvenţiale sînt de tipul : load, store, add, substract,


compare, branch, operaţii logice. Aceste instrucţiuni - executate de unitatea
ACU, nu de elementele PE - sînt utilizate pentru controlul fluxului
142 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

programului şi pentru calcului parametrilor individuali şi a constantelor care


vor fi transmişi către toate elementele PE.
Instrucţiunile paralele sînt similare celor secvenţiale : load, store,
add, substract, compare, operaţii logice cu excepţia instrucţiunii de salt care
nu apare. Aceste instrucţiuni sînt stocate în memoria de control principală;
în momentul în care la decodificare se decide că instrucţiunea este paralelă,
aceasta este transferată în memoria de control a PE de unde este executată în
paralel de către toate elementele PE din ARU active ( registrul G - validează
elementul PE). Această manieră de funcţionare oferă o putere de calcul
foarte ridicată structurii MPP.
Instrucţiunile de interfaţă permit transferul de date între secţiunile
secvenţiale şi paralele ale sistemului MPP. Parametrii scalari pot fi
transferaţi simultan către toate elementele PE cu ajutorul părţii secvenţiale a
ACU folosind o versiune specială de instrucţiune paralelă. Transferul invers,
de la un anume PE, în secţiunea secvenţială a ACU, se realizează prin
activarea temporară a unui singur PE (cel care trebuie să furnizeze datele).

Organizarea datelor în sistemele MPP

Pentru sistemele MPP se pot reprezenta date scalare sau vectoriale.

Reprezentarea datelor de tip întreg

Datele de tip întreg sînt reprezentate ca un grup continuu de biti , în


complement de 2, în memoria fiecărui PE. Mai mulţi întregi pot fi stocaţi în
memoria fiecărui PE. Pentru fiecare întreg se defineşte o adresă de stocare,
ce corespunde primului bit (MSB), ca în figura 5.6.
Trebuie să se specifice şi numărul de biţi pe care se reprezintă datele
(prin formatul instrucţiunii).

Reprezentarea datelor de tip real (float)

Se reprezintă separat mantisa şi exponentul numărului reprezentat în


virgulă mobilă.
Mantisa şi exponentul sînt reprezentate în acelaşi mod ca datele
întregi.

Oparaţiile scalare nu se execută totuşi, în general, în elementele PE


datorită utilizării ineficiente a matricii ARU. O operaţie scalară se poate
executa în elementele PE, în mod mai eficient, operanzii se împart, pe biţi,
Implemetarea sistemelor de calcul matriciale şi pipe-line 143

în mai multe elemente PE, fiecare din acestea efectuînd o operaţie asociată
unui bit.

adresa 1023

0
0
1 Valoarea intregului de 4 biti de la adresa
adresa 250 1 250 este 1100 = ( - 4 )

1
1
0 Valoarea intregului de 4 biti de la adresa
adresa 200 0 200 este 0011 = 3

adresa 0

Figura 5.6. Reprezentarea întregilor în memoria PE

Reprezentarea vectorilor

Presupunem că vectorii au componente de tip întreg.


Fie un vector oarecare x[].j , j = 0, M-1, unde M este numărul de
vectori .
Dacă notăm cu x[i].j elementul i al vectorului j cu i = 0, N-1, unde N
este numărul maxim de componente ale vectorului atunci există două
moduri de reprezentare a vectorilor:

a) - dacă N este mai mic sau egal cu numărul de elemente PE ( de


exemplu 16384)
b) - dacă N mai mare decît numărul de elemente PE ( de exemplu
16384)
144 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

În situaţia a) se reprezintă fiecare componentă a fiecărui vector, în


memoria unui PE.
În situaţia b) se continuă reprezentarea componentelor fiecărui
vector după ce s-a reprezentat un număr de elemente egal cu numărul de PE.
Cele două situaţii sînt ilustrate în figurile 5.7. şi 5.8.
În figura 5.7. s-au reprezentat 4 vectori x[].0, x[].1, x[].2 şi x[].3 de
lungime maximă N, iar în figura 5.8. s-au reprezenat 4 vectori x[].0, x[].1,
x[].2 şi x[].3 de lungime maximă 2N.

adresa 1023

adresa 250

x[0].3 x[1].3 x[N-2].3 x[N-1].3


x[0].2 x[1].2 x[N-2].2 x[N-1].2
x[0].1 x[1].1 x[N-2].1 x[N-1].1
adresa 200 x[0].0 x[1].0 x[N-2].0 x[N-1].0

adresa 0
PE 0 PE 1 PE N-2 PE N-1

Figura 5.7. Reprezentarea vectorilor în sistemele MPP (a)


Implemetarea sistemelor de calcul matriciale şi pipe-line 145

adresa 1023

x[N].3 x[N+1].3 x[2N-2].3 x[2N-1].3 urmatoarele


x[N].2 x[N+1].2 x[2N-2].2 x[2N-1].2
x[N].1 x[N+1].1 x[2N-2].1 x[2N-1].1 N componente
x[N].0 x[N+1].0 x[2N-2].0 x[2N-1].0
x[0].3 x[1].3 x[N-2].3 x[N-1].3
x[0].2 x[1].2 x[N-2].2 x[N-1].2 primele
x[0].1 x[1].1 x[N-2].1 x[N-1].1 N componente
adresa 200 x[0].0 x[1].0 x[N-2].0 x[N-1].0

adresa 0
PE 0 PE 1 PE N-2 PE N-1

Figura 5.8. Reprezentarea vectorilor în sistemele MPP (b)

Performanţa sistemelor MPP

Performanţele calculatoarelor MPP depind de tipul operaţiilor


efectuate şi de tipul calculatorului gazdă.
În general performanţele MPP sînt mult mai ridicate pentru operaţiile
vectoriale decît pentru operaţiile scalare. Acest lucru este adevărat datorită
faptului că overhead-ul datorat încărcării instrucţiunilor vectoriale şi
decodarea acestora este mai mic în raport cu execuţia instrucţiunilor
vectoriale comparativ cu instrucţiunile scalare.
Dacă sistemul MPP este mai rapid decît calculatorul gazdă atunci
performanţele sistemului global pot fi limitate de viteza calculatorului gazdă
(dacă acesta este implicat în operaţii de calcul). Din acest motiv calculatorul
gazdă este utilizat cu precădere pentru transferul de date şi modificarea
contextului de lucru.
146 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

5.2. Sisteme de calcul pipe - line

Această secţiune prezintă exemple de calculatoare vectoriale (pipe-


line) accectuînd elementele specifice sistemelor pipe-line prezentate în
capitolele 1 şi 3.

Arhitectura Cray

Arhitectura unui calculator vectorial Cray 1 (arhitectura de bază a


supercomputerelor Cray) este prezentată în figura 5.9.

Registre vectoriale
Shift
V7
Logic
V6 Unitati
Add functionale
V0
vectoriale
de virgula fixa

1/x
Mpy
VM Unitati
Add functionale
B, T, VL ,F
vectoriale
Mem. de virgula mobila

Registre scalare Bit


S7 Shift
S6 Logic Unitati
functionale
Add
scalare
S0 de virgula fixa

Registre de adresare
Mpy
A7
Unitati
Add
A6 de adresare

A0

P NIP CIP
Buffer instructiuni

Registre I/O LIP


control executie
I/O
Figura 5.9. Arhitectura calculatorului pipe-line Cray-1
Implemetarea sistemelor de calcul matriciale şi pipe-line 147

Arhitectura din figura 5.9. conţine 64 x 4 buffere de instrucţiuni şi


peste 800 de registre cu duferite utilizări.
Există 12 unităţi funcţionale realizate în tehnică pipe-line cu 2-14
stagii.
Operaţiile aritmetice se pot realiza cu numere întregi (virgulă fixă pe
24 de biţi) şi cu numere reale (virgulă mobilă - pe 64 de biţi ).
Numărul mare de registre de mare viteză contribuie la o viteză de
prelucrare vectorială şi scalară ridicată. Rata ceasului pipe-line este de 12.5
ns.
Există registre de adresă (A), registre scalare (S) şi registre vectoriale
(V). Aceste adrese sînt accesibile în mod direct de către unităţile funcţionale
şi se numesc registre primare.
Arhitectura Cray introduce încă un set de registre, numite registre
intermediare, care acţionează ca buffere între memorie şi registrele primare.
Registrele intermediare sînt : B - care conţine adrese şi T - care
conţine scalari.
Există 8 de registre de adresare, pe 24 biţi, fiecare fiind implicat în
adresarea memoriei sau a dispozitivelor I/O, controlul buclelor , indexare,
controlul deplasărilor ş.a.
Datele pot fi încărcate direct în registrele de adresare sau pot fi
plasate în registrele B şi apoi mutate în registrele de adresare. Există 64 de
registre B fiecare de 24 de biţi. În registrele B se stochează adresele des
utilizate în program (ca de exemplu în execuţia buclelor, diferite adresări
bazate ).
Există 8 registre scalare de 24 de biţi utilizate pentru stocarea
operanzilor sursă şi destinaţie pentru instrucţiunile aritmetice şi logice
scalare.
Datele pot fi încărcate direct în registrele scalare sau pot fi plasate în
registrele T şi apoi mutate în registrele scalare. Există 64 de registre T
fiecare de 24 de biţi. În registrele T se stochează datele des utilizate în
program (ca de exemplu în execuţia instrucţiunilor de citire/scriere pe
blocuri de date ).
Există 8 registre vectoriale; fiecare registru vectorial poate stoca un
vector cu maxim 64 de componente. Lungimea vectorilor este dată de un
registru special, VL. Vectorii cu lungimi mai mari decît 64 sînt prelucraţi în
mai multe etape ( pe subvectori de maxim 64 de componente).
Conţinutul registrelor vectoriale este transferat în/din memorie cu
ajutorul unor instrucţiuni de lucru pe blocuri (codul acestor instrucţiuni
indică adresa primului cuvînt, modul de incrementare a memoriei şî
lungimea vectorului).
148 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Instrucţiunile (care pot fi de 16 sau 32 de biţi) sînt încărcate mai întîi


din memorie în nişte buffere de instrucţiuni (registre temporare); există 64
de astfel de registe de 16 biti.
Programul se execută din aceste buffere exitînd posibilitatea de
efectuare a salturilor înainte şi înapoi prin bufferele de instrucţiuni. Dacă
instrucţiunea curentă dorită nu se află în buffer atunci se face o încărcare din
memorie (se încarcă un nou bloc de instrucţiuni) .
Controlul instrucţiunilor se realizează prin următoarele registre :

- P - registru numărător de instrucţiuni (de 22 biţi); acest registru


indică următoarea zonă de instrucţiuni ce va fi executată (next parcel ).
Registrul P este înscris cu o nouă valoare ori de cîte ori se modifică
contextul programului
- NIP (next instruction parcel ) - este încărcat cu valoarea lui P .
Este un registru de 16 biţi reţine instrucţiunile, adresate de P, înainte de a fi
preluate în registrul CIP.
- CIP (current instruction parcel ) - conţine instrucţiunea curentă
care aşteaptă execuţia. Este un registru de 16 biţi. Dacă instrucţiunea are 32
de biţi atunci CIP conţine partea mai semnificativă.
- LIP (lower instruction parcel) - conţine partea mai puţin
semnificativă a instrucţiunilor de 32 biţi.

Există şi alte registre pentru controlul procesorului pipe-line ca de


exemplu :

- VM (vector mask) - mascarea (validarea ) vectorilor


- BA ( base address) - adresare bazată
- LA ( limit address) - conţine o adresă limită ce este testată de
instrucţiuni
- XA (exchange address ) - utilizat în instrucţiuni de interschimbare
de informaţie
- F - registru de flag-uri
- M - registru de mod de lucru

Unităţile funcţionale ale arhitecturii Cray-1 se împart în patru grupe :

- unităţi funcţionale pentru calculul adreselor


- unităţi funcţionale pentru operarea cu scalari
- unităţi scalare pentru operarea cu vectori
- unităti funcţionale de virgulă mobilă
Implemetarea sistemelor de calcul matriciale şi pipe-line 149

Modul de utilizare a registrelor de către unităţile funcţionale,


funcţiile acestora şi numărul de niveluri pipe-line pentru fiecare unitate sînt
descrise în tabelul 3 :
Tabelul 3
Unităţi funcţionale Registre utilizate Stagii pipe - line
Unitătile de adresare
Unitatea de sumare de adresare 2
Unitatea de multiplicare de adresare 6
Unitătile scalare
Unitatea de sumare scalare 3
Unitatea de deplasare scalare 2/3 (dubla precizie)
Unitatea operaţii logice scalare 1
Unitatea de lucru pe biti scalare 3
Unitătile vectoriale
Unitatea de sumare vectoriale / scalare 3
Unitatea de deplasare vectoriale / scalare 4
Unitatea operaţii logice vectoriale / scalare 2
Unitătile de virgulă mobilă
Unitatea de sumare scalare / vectoriale 6
Unitatea de multiplicare scalare / vectoriale 7
Unitatea 1/x scalare / vectoriale 14

Fiecare unitate funcţională operează în mod independent de toate


celelalte unităţi.
Mai multe unităţi funcţionale pot opera în paralel, cu condiţia să nu
apară un conflict de acces la registrele procesorului.
Unităţile de adresare (concepute în structură pipe-line) efectuează
operaţii aritmetice cu numere întregi de 24 de biţi în complement de 2
asupra unor operanzi de intrare din registrele de adresă (A) şi livrează
rezultatele tot în registrele de adresă (A).
Există două unităţi de adresare : o unitate de sumare (scădere) şi o
unitate de multiplicare. Se pot implementa moduri de adresare complexe.
Unităţile funcţionale scalare sînt : de adunare (scădere), de deplasare
logică, de efectuare a operaţiilor logice şi de lucru pe biţi. Aceste unităţi
operează asupra registrelor scalare pe 64 de biţi şi în majoritatea cazurilor
livrează rezultatele tot în registrele scalare.
Unitatea de lucru pe biţi contorizează numărul de biţi de "1" logic
din operand sau contorizează numărul de biţi de "0" logic ce preced un bit
"1" logig din oparandul de intrare. Rezultatele unităţii de lucru pe biţi sînt
stocate într-un registru de adresă.
150 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Unitatea de deplasare efectuează operaţii de deplasare aritmetică sau


logică pe maxim 64 sau 128 de biţi (două registre scalare concatenate).
Unitatea pentru operaţii logice efectuează mascări şi toate operaţiile
boolene.
Unităţile vectoriale includ : unitatea de adunare a vectorilor, unitatea
de efectuare a operaţiilor logice asupra vectorilor şi unitatea de deplasare a
vectorilor.
Aceste unităţi obţin operanzii de intrare din registrele vectoriale şi
registrele scalare. Rezultatele sînt stocate în registrele vectoriale.
Unităţile de virgulă mobilă includ : unitatea de adunare în virgulă
mobilă, unitate de multiplicare în virgulă mobilă,asupra vectorilor şi
unitatea de calcul a funcţiei 1/x..
Aceste unităţi obţin operanzii de intrare din registrele scalare sau
registrele vectoriale. Rezultatele sînt stocate în registrele scalare sau
vectoriale.
Unităţile scalare şi vectoriale de adunare operează cu numere întregi
în complement de 2 pe 64 de biţi. Multiplicarea numerelor fracţionare se
realizează prin intermediul unitătii de multiplicare în firgulă mobilă după
care se realizează o conversie la numere întregi (exponent nul). Împărţirile
se realizează utilizînd unitatea de calcul a funcţiei 1/x. Pentru împărţirea
numerelor întregi este necesară o conversie la virgulă mobilă a operanzilor.
Formatul reprezentării în virgulă mobilă implică 48 de biţi pentru
mantisă şi 15 biţi pentru exponent.

Performanţele calculatoarelor pipe-line Cray-1

Arhitectura din figura 5.9. poate fi completată cu blocuri de interfaţă


între calculatorul Cray şi subsisteme de memorie şi I/O ca în figura 5.10.
Performanţele calculatoarelor pipe-line Cray sînt prezentate pe scurt
în tabelul 4 :
Implemetarea sistemelor de calcul matriciale şi pipe-line 151

Calculator pipe-line CRAY

Sectiunea de calcul
- registre
- unitati functionale
- buffere de instructiuni

Sectiunea de memorie
- 0.25 - 1 M cuvinte
- cuvinte de 64 biti

Sectiunea I/O
- 12 canale intrare
- 12 canale iesire

Memorie de masa Dispozitive I/O, Unitate de intretinere


alte calculatoare (detectie erori)

Figura 5.10. Interfaţarea calculatorului Cray cu subsisteme de memorie şi


I/O

Memoria calculatoarelor Cray-1 este organizată în 8 sau 16 bancuri


cu cîte 72 de module de memorie per banc. Fiecare modul contribuie cu 1
bit la cuvîntul de date (64 biţi date + 8 biţi ce corecţie). Se utilizează o
schemă de adresare cu intercalare inferioară.
Grupurile de cîte 6 canale I/O sînt deservite în mod egal de către
toate bancurile de memorie. Pot opera simultan pînă la 4 canale de intrare
sau 4 canale de ieşire.
Unitatea de întreţinere ( Maintenance Control Unit) iniţializează
calculatorul pipe-line şi monitorizează performanţele acestuia.
152 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Tabelul 4
Secţiunea de calcul
- cuvinte de 64 biţi
- ceas pipe-line de 12.5 ns
- aritmetică în complement de 2
- moduri de procesare pentru vectori şi scalari
- 12 unităţi funcţionale pipe-line
- 8 registre de adresă (pe 24 biţi)
- 64 de registre intermediare (pe 24 biţi)
- 8 registre scalare (pe 64 de biţi)
- 8 registre vectoriale cu 64 de componente fiecare pe 64 de biţi
- 4 buffere de instrucţiuni cu cîte 64 de registre (de 16 biţi) fiecare
- aritmetică în virgulă fixă sau virgulă mobilă
- set de 128 de instrucţiuni
Secţiunea de memorie
- maxim 1.048.576 cuvinte de memorie
- cuvîntul de memorie pe 64 de biţi plus 8 biţi de corecţie
- 8 sau 16 bancuri de 64K fiecare
- ciclul de memorie de 50 ns ( 4 ciclii pipe-line) pentru un banc
- transfer cu registrele vectoriale, B şi T într-un singur ciclu
- transfer cu registrele de adrsare şi scalare în 2 ciclii
- transferă 4 instrucţiuni pe ciclu în bufferele de instrucţiuni
- detecţie 2 erori şi corecţie 1 eroare
Secţiunea I/O
- 12 canale de intrare şi 12 canale de ieşire
- canale I/O grupate cîte 6
- canale I/O cu priorităţi în cadrul grupului
- 16 biţi de date, 3 biţi de control şi 4 biţi de paritate pentru fiecare canal
- detecţia pierderii datelor

Execuţia instrucţiunilor vectoriale în calculatoarele pipe-line


Cray

Există două moduri de prelucrare a vectorilor în calculatoarele pipe-


line: scalar şi vectorial. Prelucrarea pe mod scalar (prin iteraţii succesive)
este rapidă dacă lungimea vectorilor este mică (pînă la 3 componente).
Pentru vectori de lungime mai mare este mai eficientă prelucrarea pe mod
vectorial (timpul de iniţializare a vectorilor este relativ mic în comparaţie cu
timpul de prelucrare iterativă).
Implemetarea sistemelor de calcul matriciale şi pipe-line 153

Instrucţiunile vectoriale se clasifică în 4 tipuri (figura 5.11):

- tip 1 : operanzii de intrare sînt preluaţi din 1 sau 2 registre


vectoriale, iar rezultatul este depus în alt registru vectorial.
- tip 2 : operanzii de intrare sînt preluaţi din 1 registru scalar şi 1
registru vectorial, iar rezultatul este depus în alt registru vectorial.
- tip 3 : operanzii de intrare sînt preluaţi din memorie, iar rezultatul
este depus într-un registru vectorial.
- tip 4 : operanzii de intrare sînt preluaţi dintr-un registru vectorial,
iar rezultatul este depus în memorie.
Execuţia unei instrucţiuni vectoriale presupune rezervarea unei
unităţi funcţionale pipe-line şi a unor registre (scalare sau vectoriale).
Instrucţiuni vectoriale ulterioare unei instrucţiuni ce a rezervat nişte resurse
nu se pot executa pînă cînd rezervarea expiră.
Două sau mai multe instrucţiuni vectoriale pot fi executate în acelaşi
timp dacă nu necesită aceleaşi resurse şi dacă alte resurse sînt disponibile.
Instrucţiunile vectoriale pot fi :

- independente (figura 5.12. a)


- să necesite rezervarea unităţilor funcţionale pipe-line (figura 5.12.
b)
- să necesite rezervarea registrelor de operanzi (figura 5.12. c)
- să necesite rezervarea unităţilor funcţionale pipe-line şi a registrelor
de operanzi (figura 5.12. d)
Pentru situaţia b) a doua instrucţiune de adunare este întîrziată,
deoarece unitatea de adunare a fost rezervată de prima instrucţiune.
Pentru situaţia c) instrucţiunea de înmulţire este întîrziată deoarece
registrul V1 a fost rezervat de instrucţiunea de adunare.
Ca şi registrele de operanzi şi registrele de rezultat trebuie rezervate,
un anumit numă de ceasuri pipe-line, determinat de lungimea vectorului şi
numărul de stagii în unitatea funcţională ce produce rezultatul.
Un registru de rezultat poate deveni registru de operand pentru
instrucţiunea imediat următoare. Această tehnică este denumită înlanţuirea
unităţilor pipe-line şi reprezintă o extindere a tehnicii de scurcircuitare
(internal forwarding) prezentată în capitolul 3.
154 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

V S
j j

1 1
Vk 2 unitate Vk 2 unitate
functionala functionala
pipe-line pipe-line
n n

Vi Vi

a) Instructiune vectoriala tip 1 b) Instructiune vectoriala tip 2


Vk

1 1
2 unitate 2 unitate
functionala functionala
pipe-line pipe-line
Memorie n n

Vi

Memorie
c) Instructiune vectoriala tip 3 d) Instructiune vectoriala tip 4

Figura 5.11. Tipuri de instrucţiuni vectoriale


Implemetarea sistemelor de calcul matriciale şi pipe-line 155

V0 V1 + V2 V3 V1 + V2

V3 V4 * V5 V6 V4 + V5
a) instructiuni independente b) rezervarea unitatii de adunare

V3 V1 + V2 V0 V1 + V2
V6 V1 * V5 V3 V1 + V5

c) rezervarea registrului V1 d) rezervarea registrului V


1
si a unitatii de adunare

Figura 5.12. Rezervarea unităţilor funcţionale şi a registrelor

Tehnica de înlănţuire a unităţilor pipe-line este ilustrată în exemplul


următor (figura 5.13.)
Se consideră următoarea secvenţă de instrucţiuni :

V0 <-- Memorie (fetch din memorie)


V2 <-- V0 + V1 (adunare vectori)
V3 <-- V2< A3 (deplasare logică)
V5 <--V3 ^ V4 (AND logic)

În figura 5.13. notaţiile sînt următoarele (timpii în ciclii pipe-line) :

a=1 - timpul de tranzit de la memorie la unitatea pipe-line fetch


b=7 - timpul de prelucrare al unităţii fetch
c=1 - timpul de tranzit de la ieşirea unităţii fetch la registrul V0
d=1 - timpul de tranzit de la registrul V0 (V1) la unitatea pipe-line
add
e=3 - timpul de prelucrare al unităţii add
f =1 - timpul de tranzit de la ieşirea unităţii add la registrul V2
g=1 - timpul de tranzit de la registrul V2 la unitatea pipe-line shift
h=4 - timpul de prelucrare al unităţii shift
i=1 - timpul de tranzit de la ieşirea unităţii shift la registrul V3
j=1 - timpul de tranzit de la registrul V3 (V4) la unitatea pipe-line
and
156 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

k = 2 - timpul de prelucrare al unităţii and


l = 1 - timpul de tranzit de la ieşirea unităţii and la registrul V5

Figura 5.13. ilustrează modul în care unităţile pipe-line fetch,


add,shift şi and sînt înlănţuite pentru a forma o unitate pipe-line cu mai
multe stagii.
Figura 5.14. indică diagrama de timp asociată prelucrărilor. Prima
componentă a vectorului rezultat, V5, apare după 24 ciclii apoi
componentele rezultatului sînt calculate cîte una la fiecare tact. Trebuie
remarcat faptul că înlănţuirea unităţilor pipe-line conduce la un pipe-line
virtual cu un număr de stagii mai mare decît suma numărului de stagii a
structurilor pipe-line constituente, datorită timpilor de tranzit între unităţi şi
registre.
Într-o operaţie vectorială, în mod normal rezultatul nu este stocat în
acelaşi registru utilizat de operanzi. Totuşi uneori este posibil să se impună
ca rezultatul să fie stocat într-unul din registrele de operanzi (ca de exemplu
în operaţiile recursive ).
Pentru astfel de situaţii se utilizează un contor asociat fiecărui
registru vectorial (component counter). La începutul instrucţiunii vectoriale
contorii registrelor implicate sînt egali cu zero.
În mod normal, transmiterea unui operand dintr-un registru la o
unitate pipe-line produce incrementarea contorului asociat registrului.
În mod similar, transmiterea unui rezultat de la o unitate pipe-line
către un registru produce, de asemenea, incrementarea contorului asociat
registrului.
În cazul unei intrucţiuni vectoriale recursive ( V0 <-- V0 +V1 ), cînd
un registru are rol şi de operand şi de rezultat, contorul nu se incrementează
decît atunci cînd primul rezultat a fost generat.
Atît timp cît contorul este zero se transmite către unitatea pipe-line
acelaşi operand.
Implemetarea sistemelor de calcul matriciale şi pipe-line 157

a 1
Memorie 2
3 pipe-line
V0 4 fetch
d 5
6
7
c
1 d V1
pipe-line 2 g
vector add 3
A3
1
V 2
pipe-line
f 2
3
shift
4

V
3
j i

V
4
pipe-line 1
j
vector AND 2
V5
l

Figura 5.13. Tehnica de înlănţuire a unităţilor pipe-line


158 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

0 23
1 7 1 1 3 1 1 4 1 1 2 1
V
50
V
51
V
52
V
53

a b c d e f g h i j k l

Figura 5.14. Diagrama de timp asociată figurii 5.13.

Îmbunăţăţiri ale calculatoarelor pipe-line

Structura calculatoarelor pipe-line prezentată în secţiunile anterioare,


poate fi îmbunătăţită prin:

- realizarea unor sisteme multiprocesor cu procesoare pipe-line (ca


de exemplu sistemele Cray X-MP)
- eliminarea registrelor vectoriale şi utilizarea unui pipe-line
memorie-memorie (ca de exemplu în arhitectura calculatoarelor Cyber 205)
- realizarea unităţilor funcţionale cu reacţii înapoi, ceea ce permite ca
un pipe-line să poată fi utilizat pentru funcţii multiple (statice sau dinamice)
- minimizarea timpului de iniţializare a structurilor vectoriale
- implementarea unor instrucţiuni vectoriale speciale

Eliminarea registrelor vectoriale este ilustrată în figura 5.15. Blocul


de transfer al datelor între unităţile pipe-line şi memorie, XCHG, realizează
încărcarea datelor direct în structura de calcul specificată de instrucţiune.
Pentru obţinerea unor performanţe superioare este necesară utilizarea
unor buffere de intrare şi de ieşire între memorie şi unităţile pipe-line (figura
5.16). În acest mod se compensează diferenţa de viteză dintre memorie (mai
lentă) şi structura pipe-line (mai rapidă). Această tehnică poartă numele de
pipe-line memorie-memorie.
Un calculator pipe-line cu structura din figura 5.15. posedă o
capacitate de memorie mai mare şi cu timpi de acces mai mici.
Utilizarea structurilor pipe-line cu reacţii înapoi este exemplificată
pentru o unitate pipe-line de adunare în virgulă mobilă (figura 5.17.)
Implemetarea sistemelor de calcul matriciale şi pipe-line 159

Implementarea unor instrucţiuni speciale (pentru lucrul pe biţi ) este


ilustrată în figura 5.18.

rezultat final
operanzi
(la memorie sau I/O )
pipe-line
Bloc add
pentru
transfer pipe-line
date mpy
MEMORIA (XCHG)
pipe-line
shift

instructiune
CONTROL

Figura 5.15. Structura unui calculator pipe-line fără registre vectoriale

Buffere de intrare
Unitate
Memorie functionala
pipe-line

Buffer de iesire

Figura 5.16. Pipe-line memorie - memorie


160 AHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

operand A

rezultat
Control Compara Aliniere ADD Normalizare
semn exponenti rezultat

operand B (poate fi un rezultat partial obtinul anterior) reactii inapoi


(feedback)

Figura 5.17. Pipe-line pentru adunarea în virgulă mobilă (cu feedback)

Instrucţiunea merge combină doi vectori A şi B sub controlul unui


vector C, rezultatul fiind vectorul R care are componetele R(k) egale cu
A(k) dacă C(k) = 1 şi are componentele R(k) = B(k) dacă C(k) = 0.
Instrucţiunea compress comprimă vectorul A în vectorul R sub
controlul vectorului de compresie B. Vectorul R conţine numai
componentele A(k) pentru care B(k) =1 . Instrucţiunea este utilă pentru
lucrul cu matrici rare (cu număr foarte mare de zerouri).
Timpul de iniţializare a vectorilor este proporţional cu numărul
maxim de componente ale acestuia şi depinde tipul structurii pipe-line (cu
registre vectoriale sau cu pipe-line memorie -memorie). Dacă se utilizează
registre vectoriale timpul de iniţializare poate fi mai scurt .
Utilizarea memoriei în locul registrelor vectoriale necesită un timp
de iniţializare mai mare, dar oferă avantajul că se elimină manevrarea
ineficientă a informaţiei între registre şi memorie în situaţia în care numărul
de registre devine insuficient.
Implemetarea sistemelor de calcul matriciale şi pipe-line 161

A
A(0) A(1) A(2) A(3) A(4) A(5) A(i)

R R(0) R(1) R(2) R(3) R(4) R(5) R(n)

B B(0) B(1) B(2) B(3) B(4) B(5) B(j)

0 1 1 0 1 0 1
C

a) instructiunea MERGE

B 1 0 1 1 0 1 1

A A(0) A(1) A(2) A(3) A(4) A(5) A(i)

R R(0) R(2) R(3) R(5) R(n)

b) instructiunea COMPRESS

Figura 5.18. Instrucţiuni vectoriale speciale :


a) instructiunea MERGE b) instrucţiunea COMPRESS
6
Arhitecturi evoluate de sisteme de calcul

6.1. Microarhitectura PENTIUM


Arhitectura Pentium a fost introdusă de firma Intel pentru
procesoarele IA-32. Acest tip de arhitectură se regăseşte în procesoarele
Pentium III ( arhitectura P6) şi în procesoarele Pentium IV ( arhitectura P4).
Arhitectura Pentium este o arhitectură superscalară şi pipe-line.
Se utilizează tehnici de prelucrare paralelă astfel încît, în medie,
procesoarele Pentium sînt capabile să execute complet 3 instrucţiuni într-o
perioadă de tact.
Arhitectura Pentium utilizează o structură pipe-line cu 12 stagii.
Principalele caracteristici ale arhitecturii P6 sînt următoarele:
1. Structura pipe-line a arhitecturii este divizată în 4 secţiuni :
memoria cache (primul şi al doilea nivel), încărcare/decodificare
(fetch/decode), unitatea de execuţie (inclusiv execuţia
instrucţiunilor “out of order” – adică a instrucţiunilor care nu
urmează ordinea de la încărcare ci se execută înainte de
instrucţiuni încăcate anterior, dar care aşteaptă eliberarea
anumitor resurse pentru a fi încheiate) şi secţiunea de asteptare
(retirement) pentru instrucţiunile ce aşteaptă eliberarea unor
resurse de calcul sau registre.
2. Există două nilele de memorie cache. Primul nivel ( 8ko de
instrucţiuni şi 8 ko de date) este imediat lîngă structura pipe-line.
Al doilea nivel (de dimensiune 256ko pînă la 1Mo) este conectat
direct cu procesorul printr-un bus de 64 de biţi.
3. Partea centrală a arhitecturii P6 este dată de mecanismul
performant de execuţie a intrucţiunilor ( inclusiv a intrucţiunilor
“out of order”) numit şi execuţie dinamică. Execuţia dinamică
încorporează trei concepte de procesare a datelor:
- predicţia salturilor
- analiza dinamică a fluxurilor de date şi instrucţiuni
- execuţia speculativă
Arhitecturi evoluate de sisteme de calcul 163

Predicţia salturilor reprezintă o tehnică modernă pentru obţinerea


unei performanţe ridicate în structurile pipe-line. Aceastătehnică permite
procesorului să decodifice instrucţiuni în afara buclelor de program pentru a
ţine ocupată tot timpul structura pipe-line. Arhitectura P6 implementează un
algoritm optimizat de predicţie a direcţiei salturilor.
Analiza dinamică a fluxului de date şi instrucţiuni se realizează în
timp real; se determină dependenţa dintre date şi registre şi se detectează
oportunităţile pentru execuţia instrucţiunilor “out of order”.
Unitatea de execuţie poate monitoriza simultan mai multe
instrucţiuni şi va executa instrucţiunile în ordinea în care se optimizează
utilizarea multiplă a unităţilor de execuţie ale procesorului, evident cu
menţinerea integrităţii datelor şi a corectitudinii programului. În acest mod
se menţin unităţile de execuţie ocupate cît mai mult timp chiar atunci cînd
apar dependenţe între instrucţiuni şi situaţii de cache miss (negasire a
informaţiei dorite în memoria cache).
Execuţia speculativă se referă la abilitatea procesorului de a executa
instrucţiuni în afara unei bucle condiţionale care nu a fost încă rezolvată şi
în final de a produce rezultatele în ordinea execuţiei originale a fluxului de
instrucţiuni.
Pentru a face execuţia speculativă posibilă, arhitectura P6 decuplează
fazele de transmitere şi execuţie în raport cu faza de producere a rezultatelor
finale.
Unitatea de execuţie va analiza fluxul de date şi instrucţiuni şi va
executa toate instrucţiunile pregătite pentru aceasta ( cu toate resursele şi
datele disponibile). Rezultalele vor fi stocate în registre temporare urmînd
ca ulterior să fie asamblate în mod corespunzător ordinii originale de
execuţie a fluxului de instrucţiuni.
Unitatea de aşteptare (retirement ) va conţine toate instrucţiunile
care datorită unor depeendenţe a datelor (operanzilor) sau a faptului că
unităţile de calcul necesare nu sînt disponibile (sînt ocupate de alte
instrucţiuni) nu pot fi executate sau completate.
Prin combinarea predicţiei salturilor, analizei dinamice a fluxului de
date şi instrucţiuni şi a execuţiei speculative, arhitectura P6 înlătură
constrîngerea unei secvenţări lineare a instrucţiunilor între fazele
tradiţionale de încărcare (fetch) şi execuţie. Procesorul poate continua să
decodifice şi să execute instrucţiuni chiar dacă există mai multe nivele de
salturi în program. Implementarea predicţiei salturilor şi a decodificatoarelor
de instrucţiuni performante menţin structura pipe-line plină. Pe de altă parte
execuţia speculativă permite utilizarea, în paralel, a tutiror unităţilor de
calcul ale procesorului. În final rezultatele temporare vor fi asamblate în aşa
fel încît să se menţină integritatea datelor şi coerenţa programului.
164 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Arhitectura P6 de bază este prezentată în figura 6.1.


În figura 6.2 este prezentată arhitectura P6 cu adaugarea nivelului 2
al memoriei cache.

Figura 6.1 Microarhitectura P6


Arhitecturi evoluate de sisteme de calcul 165

Figura 6.2 Microarhitectura P6 cu 2 nivele de memorie cache

Arhitectura P6 utilizează tehnica pipe line cu 14 stagii de prelucrare după


cum urmează:

Stagiu Descriere
l pipe
line
1 - determină valoare pointer-ului de instrucţiuni
- predicţia dinamică a salturilor (se utilizeaza un algoritm
adaptive cu 2 niveluri : primul nivel pe 4 biti al doilea nivel cu
contor cu saturare pe 2 biti – figura 1)
2-4 - încărcarea instrucţunii din mamoria cache ( maxim 2
instrucţiuni de 32 biti fiecare)
- determinarea limitelor fiecărei instrucţiuni
- transferul instrucţiunilor către decodorul de instrucţiuni (în
cuvinte de 16 biţi)
5-6 - decodificarea instrucţiunilor într-o serie de micro-operaţii
- pregătire pentru execuţia “out-of order”
- trei decodificatoare operează în paralel :
166 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

- 2 decodificatoare simple ( pentru majoritatea operaţiilor pe


întregi)
- 1 decodificator complex ( pentru instrucţiuni complexe)
- rezultatul final este o secvenţă de micro-operaţii
- fiecare micro-operaţie conţine 3 operanzi: 2 operanzi sursă şi 1
operand destinaţie
- micro-operaţiile au lungime mai mare decît în cazul arhitecturii
RISC deoarece trebuie să acopere şi cazul operaţiilor de virgulă
mobilă
- majoritatea instrucţiunilor sînt translatate în 1 pînă la 4 micro-
operaţii
- dacă sînt necesare mai mult de 4 micro-operaţii atunci
instrucţiunea este transferată la secvenţorul de microinstrucţiuni
(Microcode Instruction Sequencer)
- se efectuează predicţia salturilor statice (figura 6.3)
7-8 - reasignarea registrelor logice cu registre fizice cu ajutorul unei
tabele de asociere
- procesorul are doar 8 registre de întregi şi 8 registre de virgulă
mobilă ca register de uz general, vizibile de către programator
- redenumirea registrelor adaugă 40 de registre de uz general
- micro-operaţiile sînt transferate în buffer-ul de reordonare
(Reorder Buffer)
- buffer-ul de reordonare (ROB) este o memorie adresabilă prin
conţinut organizată după o politică FIFO
- micro-operaţiile sînt stocate în ROB în diferite stadii de
execuţie (în aşteptarea rezolvării dependenţei între instrucţiuni
sau a eliberării resurselor necesare)
- micro-operaţiile sînt transferate unităţii de rezervare
(“reservation station”)
9-10 - unitatatea de rezervare are 20 de intrări
- unitatea de rezervare distribuie micro-operaţiile către 1 pînă la 5
unităţi de execuţie:
- două unităţi aritmetice pentru întregi
- două unităţi de adresare a datelor ( pentru instrucţiuni
load / store)
- o unitate aritmetică de virgulă mobilă
- unitatea de rezervare poate distribui micro-operaţiile într-o
perioadă de ceas pîna la 3 perioade de ceas ( dacă unităţile de
calcul sînt ocupate)
- distribuţia micro-instrucţiunilor către unităţile de calcul este
Arhitecturi evoluate de sisteme de calcul 167

determinată de biţii de stare din ROB


- dacă mai mult de o singură micro-operaţie este gata pentru
transfer în unitatea de rezervare, se vor allege acele micr-operaţii
care sînt generate în secvenţă
11 - se execută micro-operaţiile
12-14 - se semnalizează ( printr-un flag) completarea micro-operaţiile
- cînd unitatea de aşteptare (“retirement unit”) găseşte o micro-
operaţie completată
atunci unitatea de aşteptare stochează rezultatele în RRF
(Retirement Register File); RRF reprezintă un set de 8 registre de
întregi şi 8 registre de virgulă mobilă
- unitatea de aşteptare rearanjează micro-operaţiile în ordinea
originală şi monitorizează apariţia întreruperilor, excepţiilor,
punctelor de întrerupere şî a salturilor prezise în mod eronat

Figura 6.3 Predicţia salturilor cu algoritm adaptive cu 2 niveluri

Arhitectura P4 (NetBurst Micro-architecture) reprezintă îmbunătăţire


a arhitecturii P6 ( IA-32).
Elementele principale ale arhitecturii P4 sînt :
- unitatea de execuţie în ordine (“in order front end”)
- unitatea de execuţie în afara ordinii (“out of order
execution core”)
- unităţile de calcul pentru întregi şi virgulă mobilă
168 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

- subsistemul de memorie

Arhitectura de bază P4 este ilustrată în figura 6.4:

Figura 6.4 Arhitectura P4 ( NetBurst Micro-architecture)

Unitatea de execuţie în ordine conţine următoarele blocuri


funcţionale:

- ITLB ( Instruction Translate Lookahead Buffer) –


memorie cache nivel 2 (level 2 - L2) pentru instrucţiuni
- Blocul pentru predicţia salturilor ( predicţia statică şi
dinamică a salturilor; se utilizează un algoritm
îmbunătăţit de predicţie a salturilor în raport cu algoritmul
de predicţie utilizat în arhitectura P6)
- Decodorul de instrucţiuni
Arhitecturi evoluate de sisteme de calcul 169

- Memorie cache nivelul 1 (level 1 - L1). Această


memeorie stochează instrucţiunile cele mai recente.
Posedă un predictor de salturi propriu.
- Memorie de microinstrucţiuni ( micro-operaţii) – necesară
pentru instrucţiuni complexe cu mai mult de 4 micro-
operaţii

Unitatea de execuţie în afara ordinii are ca principale funcţiuni


alocarea resurselor, reasignarea registrelor şi planificarea execuţiei. Se
utilizează buffere de dimensiuni mai mari ca la arhitectura P6.
Există un bloc de alocare în buffer-ul de reordonare (ROB) care
urmăreşte starea fiecărei micro-operaţii în decursul desfăşurării ei. Blocul de
alocare alocă registrele necesare şi o intrare în coada de aşteptare a
planificatorului execuţiei micro-operaţiilor.
Se realizează o redenumire (reasignare) a registrelor logice ale
arhitecturii IA-32. Această redenumire realizează o corespondenţă (mapare)
între registrele logice şi registrele fizice ale procesorului. Se utilizează o
tabelă de mapare (RAT – Register Alias Table). Alocarea se realizează
diferit fată de arhitectura P6. Figura 6.5.a. ilustrează modul de alocare a
registrelor pentru arhitectura P4 ( Pentium III) şi arhitectura P4 (Pentium 4).

Figura 6.5.a. Alocarea registrelor în arhitectura Pentium


170 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

În arhitectura P6, rezultatele parţiale şi intrările în ROB sînt stocate


ca singură entitate ce conţine atît date cît şi informaţie de stare. După decizia
de completare a micro-operaţiei rezultatul final este stocat în RRF
(Retirement Register File).
În arhitectura P4, intrările în ROB şi rezultatele sînt stocate separat.
În bufferul ROB sînt stocate doar informaţiile de stare, iar în RF (Register
File) sînt stocate datele. Există 2 tabele de alocare RAT : pentru
instrucţiunile în curs de execuţie şi pentru instrucţiunile în aşteptare.

Redenumirea registrelor

Procesoarele cu grad mare de paralelism în prelucrare necesită mult


mai multe register decât cele strict necesare efectuării programului. Aceasta
se întâmplă din cauza faptului că registrele sunt allocate prea devreme şi
eliberate prea târziu. Fiecare instrucţiune alocă un registru fizic pentru
rezultat cu mult înainte ca rezultatul să fie disponibil ( se alocă registrul în
faza de decodificare a instrucţiunii). Figura 6.5.b ilustrează numărul mediu
de registre fizice utilizate de procesor - scrise (written) + ne-scrise(non-
written) – si numărul de registre care de fapt nu sunt utilizate (non-written).
Se tratează separat cazul registrelor de întregi (integer register) şi cazul
registrelor de virgulă mobilă ( FP register). Se consideră ca procesorul are
160 de registre fizice din fiecare categorie.

Figura 6.5.b. Utilizarea registreor fizice funcţie de programul testat


(reprezentat pe orizontală)

Se observă că în urma alocării în faza de decodificare a registrului


fizic necesarul de registre poate creşte în medie cu 40%.
Arhitecturi evoluate de sisteme de calcul 171

În practică se utilizează o metodă – numită redenumirea registrelor


(register renaming) – care va reduce presiunea cererilor pentru registrele
fizice.
Se definesc un set de registre logice ( logical register) care va fi
utilizat de setul de instrucţiuni şi un set de registre fizice (physical register).
Numărul de registre fizice este mult mai mare decât numărul de registre
logice.
Redenumirea registrelor realizează o corespondenţă între registrele
logice şi registrele fizice. Se introduce o nouă categorie de registre numită
virtual-physical (VP) register.
Există două tabele de mapare: general map table (GMT) şi physical
map table (PMT). Tabela GMT este indexată prin numărul registrului logic
şi are următoarele câmpuri:
- VP reg – ultimul registru VP asociat cu registrul logic
- P - ultimul registru fizic asociat cu registrul VP şi cu registrul
logic (dacă există)
- V – 1 bit care indică dacă câmpul P este valid

Tabela PMT ( organizată ca o memorie adrsabilă prin conţinut) este


indexată de câmpul VP din tabela GMT şi conţine registrul fizic asociat cu
registrul logic care indexează tabela GMT. Organizarea tabelelor GMT şi
PMT este prezentată în figura 6.5.c..

Figura 6.5.c. Redenumirea registrelor cu ajutorul registrelor VP

Pentru fiecare instrucţiune decodificată se citeşte tabela GMT


corespunzător registrului logic sursă utilizat în instrucţiune. Dacă bitul V = 1
atunci registru logic este redenumit ( asociat) cu registrul fizic indicat în
câmpul P al tabelei GMT. În caz contrar registrul logic este redenumit
(asociat) cu un registru VP. Pentru registrele destinaţie intrarea în tabela
GMT este actualizată astfel: câmpul VP reg este modificat astfel încât să
reflecte noua asociere ditre registrul logic şi registrul VP, iar bitul V este
172 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

resetat. Veche valoare a câmpului VP este menţinută în bufferul de


reordonare pentru a putea restaura starea anterioară în situaţia predicţiei
greşite a unei instrucţiuni de salt sau a apariţiei unei excepţii.
Instrucţiunile sunt transferate în coada de instrucţiuni şi apoi în
bufferul de reordonare (Reorder buffer) în aşteptarea rezolvării dependenţei
dintre instrucţiuni şi a eliberării resurselor.Coada de instrucţiuni (instruction
queue) conţine intrucţiunile care aşteaptă execuţia. Fiecare instrucţiune are
următorul format:
- Op code – codul operaţiei
- D – registrul VP destinaţie
- Src1, Src2 – registrele sursă ( VP sau fizice)
- R1, R2 (Ready) – biţi care indică dacă Src1 şi Src2 sunt registre
fizice (valoarea 1) sau registre VP (valoarea 0).

Bufferul de roordonare are următoarea structură:


- L – registrul logic de destinaţie
- C – bit care indicădacă instrucţiunea s-a executat
- VP reg – identifică registru VP asociat ultimei instrucţiuni care a
avut ca destinaţie acelaşi registru logic.

Alocarea registrului fizic se efectuează numai atunci când


instrucţiunea are rezultatul disponibil, prin intermediul tabelei PMT. Această
tabelă va fi actualizată corespunzător în situaţia în care este necesar un nou
registru fizic.
Unitatea de execuţie are ca element central o unitate de planificare a
execuţiei. Aceasta permite reordonarea instrucţiunilor astfel încît execuţia
instrucţiunilor să se desfăşoare cît mai curînd posibil după ce operanzii de
intrare şi resursele necesare prelucrării sînt disponibile.
Unitatea de planificare are în componenţă cozi de micro-operaţii şi
palnificatoare de micro-operaţii. Există cozi pentru operaţii cu memoria şi
cozi pentru operaţii care nu utilizează memoria. Toate cozile sînt cozi FIFO.
Planificatoarele de micro-operaţii se referă la operaţii cu memoria,
opearţii ALU rapide, operaţii ALU lente şi operaţii generale de virgulă
mobilă. Există 4 porturi de distribuţie ( dispatch ports) ca în figura 6.6.
Arhitecturi evoluate de sisteme de calcul 173

Figura 6.5 Porturi de distribuţie în arhitectura P4

Unităţile de calcul utilizează tehnica pipe line ( usual cu 3 stagii de


prelucrare). Se lucrează pe 32 de biţi pentru întregis şi pe 64-128 de biţi
pentru numerele în virgulă mobilă.
Operaţiile cu memoria utilizează tehnici pentru mărirea vitezei de
prelucrare:
- execuţia speculativă a încărcării din memorie
- rearanjarea operaţiilor de încărcare şi stocare
- utilizarea buffere-lor pentru scriere
- tehnica “forwarding” ( scurtcircuitării) pentru încărcările
de date dependente
La încheierea execuţiei instrucţiunii se vor re-executa instrucţiunile
executate în mod incorect datorită tehnicilor de execuţie speculativă sau
instrucţiunile dependente.
Arhitectura P4 are 2 nivele de memorie cache; metoda de mapare
este asociativă pe seturi ( 4 sau 8 seturi) iar politica de reamplasare este
pseudo-LRU ( Least Recentlly Used).
Structura pipe line a arhitecturii P4 are 20 de stagii de prelucrare
după cum urmează:

Stagiu Descriere
174 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

l pipe
line
1–2 - determină valoare pointer-ului de instrucţiuni
- predicţie salturi
3-4 - încărcarea instrucţunii din memoria cache
5 - transmiterea micro-operaţiilor la alocator
6 - alocarea resurselor pentru fiecare micro-operaţie
7-8 - reasignarea registrelor
9 - plasarea în cozile de aşteptare
10-12 - planificarea micro - operaţiilor
13-14 - distribuţia micro- operaţiilor către unităţile de calcul
15-16 - citirea registrelor de date ( a operanzilor de intrare)
17 - execuţia micro-operaţiilor
18 - actualizarea flagurilor de stare a micro-operaţiilor
(instrucţiunilor)
19 - verificarea corectitudinii execuţiei salturilor
20 - stocarea rezultatului

Performanţele arhitecturii P4 sînt comparate cu performanţele


arhitecturii P6 în figura 6.6.

Figura 6.6. Performanţele arhitecturii P4 comparativ cu performanţele


arhitecturii P6
Arhitecturi evoluate de sisteme de calcul 175

6.2. Arhitectura VLIW


Primele proiecte VLIW (“Very Long Instruction Word”) au fost
inspirate din arhitecturile CDC 6600, CRAY-1, IBM 360/91 şi MIPS. Multe
dintre sistemele masive de procesoare şi dintre procesoarele de prelucrare
dedicatăde semnale foloseau instrucţiuni lungi în memoria ROM, pentru a
calcula transformata Fourier rapidă (FFT) şi alţi algoritmi.
Precursoarele adevărate ale procesoarelor VLIW pot fi considerate
maşinile RISC (“Reduced Instruction Set Computer”), al căror principiu a
fost expus pentru prima oară în 1980. Într-un procesor RISC srtuctura pipe-
line permite execuţia în paralel a fazelor unei instrucţiuni obţinînd execuţia
unei instrucţiuni pe ciclu de ceas.
Ulterior procesoarele RISC au condus la o altă structură, conform
căreia să se realizeze citirea simultană a mai multor instrucţiuni şi atribuirea
lor mai multor unităţi de execuţie, prin intermediul căilor multiple de date,
obţinînd astfel o arhitectură LIW (“Long Instruction Word” – cuvînt lung de
instrucţiune) sau VLIW.
Legătura cu maşinile VLIW au realizat-o maşinile RISC
superscalare. Acestea sunt maşini care execută instrucţiuni multiple pe un
ciclu de ceas. Totuşi numai un număr mic de instrucţiuni independente (2
pînă la 5) pot fi executate într-o singură perioadă de ceas, deoarece ele au
puţine unităţi independente de execuţie. De exemplu, un astfel de procesor
poate avea o unitate pipe-line pentru prelucrare în virgulă mobilă, două
unităţi pipe-line pentru prelucrare întregi, o unitate pipe-line pentru
încărcare/memorare şi o unitate de procesare a salturilor. Procesoarele
VLIW au fost concepute ca o alternativă la procesoarele superscalare RISC.
Procesoarele VLIW utilizează, asemenea acestora, principiul
microprogramării orizontale pentru a decodifica o instrucţiune VLIW.
Procesorul VLIW reprezintă o extensie logicăa procesorului RISC. Ca şi un
procesor RISC superscalar, o maşinăVLIW execută cîteva operaţii simple la
un moment dat. Diferenţa constă în modul de rezolvare a dependenţelor la
ieşire, care apar atunci cînd se execută mai multe operaţii în paralel. În cazul
sistemelor VLIW, rezolvarea provine de la compilator, care este responsabil
cu împachetarea mai multor instrucţiuni simple într-un cuvînt de
instrucţiune lungă. Compilatoarele de VLIW sunt responsabile pentru a
determina care instrucţiuni depind de altele.
Maşinile VLIW necesită construirea de unităţi logice multiple pentru
a păstra instrucţiunile împachetate într-o instrucţiune largă. Acest lucru
necesităs spaţiu suplimentar pe chip. Tehnologia RISC permite minimizarea
acestui spaţiu.
176 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Principalele caracteristici ale procesoarelor VLIW sînt prezentate în


continuare.
Posedă unităţi funcţionale independente multiple şi pot executa
simultan multe operaţii pe aceste unităţi. Operaţiile sunt împachetate într-o
instrucţiune foarte lungă. O astfel de instrucţiune poate include operaţii
aritmetice (cum ar fi operaţii cu întregi şi în virgulă mobilă), operatii de
acces la memorie, operaţii de control, deplasări de date şi salturi. O
instrucţiune foarte lungă trebuie să posede un set de cîmpuri pentru fiecare
unitate funcţională; aceasta poate avea între 256 şi 1024 biţi sau chiar mai
mult. Aceste procesoare posedă numai o unitate de control, ce generează un
cuvînt de comandă lung, care controlează explicit unităţile funcţionale prin
cîmpuri independente. Astfel, ele pot executa numai un singur flux de cod,
deoarece controlorul global selectează pentru execuţie o singură instrucţiune
foarte lungă, pe fiecare perioadă de ceas. În plus, fiecare operaţie poate fi
executată în tehnica pipe-line şi solicită pentru execuţie un număr mic de
perioade de ceas. Procesoare utilizează, pentru execuţia în paralel a
operaţiilor, un “hardware” simplu şi fără interblocare. Dependenţele de date
şi resurse sunt rezolvate înainte de execuţie şi controlate explicit de către
instrucţiuni. De asemenea, procesoarele utilizează căi paralele de date
pentru unităţile funcţionale independente multiple şi un volum mic de logică
de control şi sincronizare.

Prezentare functională

Arhitectura VLIW reprezintă una dintre cele mai eficiente soluţii în


proiectarea microprocesoarelor. Pentru ca un procesor să lucreze mai repede
există două posibilităţi:

1. Creşterea frecvenţei ceasului


2. Execuţia mai multor operaţii pe fiecare ciclu de ceas.

Creşterea frecvenţei ceasului necesită inventarea unor procese de


fabricare şi adoptarea unor arhitecturi (cum sunt structurile pipe-line mai
lungi), care să menţină circuitul cît mai ocupat cu execuţia “task”-urilor.
Execuţia mai multor operaţii pe un ciclu de ceas necesită integrarea de
unităţI funcţionale multiple pe acelaşi chip, care să permită execuţia în
paralel a „task”-urilor. Problema planificării “task”-urilor este astfel
crucialăîn proiectarea procesoarelor moderne. Procesoarele superscalare
actuale realizează acest lucru prin hardware pentru rezolvarea
dependenţelor de instrucţiuni. Hardware-ul de planificare creşte însă
Arhitecturi evoluate de sisteme de calcul 177

geometric cu numărul de unităţi funcţionale şi conduce la limitări de


implementare.
Alternativa este de a lăsa “software”-ul să facă planificarea “task”-
urilor, ceea ce chiar realizează arhitectura VLIW. Astfel, un compilator
optimizat poate examina programul, poate găsi toate instrucţiunile
fărădependenţe şi le poate împacheta într-o instrucţiune foarte lungă, pentru
ca apoi săle execute concurent pe un număr egal de unităţi funcţionale. O
astfel de instrucţiune lungă (meta-instrucţiune) conţine multe cîmpuri mici,
fiecare codificînd direct o operaţie pentru o unitate funcţionalăparticulară.

O arhitectura generală VLIW este prezentată în figura 6.7:

Figura 6.7. Arhitectura VLIW generală


178 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Un astfel de procesor VLIW constă într-o colecţie de unităţi


funcţionale (sumatoare, multiplicatoare, anticipare ramificaţii etc), conectate
printr-o magistrală, plus registre şi memorii cache; durata execuţiei este
limitată doar de unităţile funcţionale proprii.
O funcţie importantă a procesoarelor VLIW este aceea că pot
implementa vechile seturi de instrucţiuni CISC mai bine chiar decît
procesoarele RISC. Aceasta este posibil deoarece programarea procesorului
VLIW este foarte asemănătoare cu scrierea de microprograme, putîndu-se
conserva astfel programul, utilizîndu-se instrucţiunile CISC complexe (cum
ar fi LODS şi STOS de la Intel x86) implementate de procesoarele CISC
prin microprograme de microinstrucţiuni în ROM –ul de microinstrucţiuni
din unitatea de comandă a procesorului.
Microprogramul este cel mai scăzut nivel de limbaj, sincronizînd
porţi şi magistrale şi transferînd datele între unităţile funcţionale. Procesorul
RISC a eliminat microprogramul în favoarea logicii cablate mai rapide, iar
procesorul VLIW a scos microprogramul în afara chipului procesor şi l-a
plasat la compilator; astfel, emularea de cod CISC se execută mai rapid pe
VLIW decît pe RISC.
În schimb, compilatorul este mai complex decît la sistemele RISC;
de aceea, se poate realiza o îmbinare “hardware-software” a implementării
VLIW.
Datorită lungimii foarte mari a cuvîntului de instrucţiune şi pentru a
elimina creşterea complexităţii “hardware”-ului, procesoarele VLIW
utilizează un compilator complex care preia instrucţiunile şi le pune într-o
secvenţăde cod liniară, astfel încît ele să formeze un cuvînt de instrucţiune
foarte lung, din care instrucţiunile pot fi executate în paralel, evitîndu-se
conflictele de date. Memoriile cache se utilizează pentru a creşte viteza de
prelucrare (“bandwidth”), permiţînd accesul rapid la instrucţiuni şi operanzi.
Instrucţiunile din cuvîntul instrucţiune foarte lung sunt procesate
folosind structuri pipe-line multiple.
Un compilator VLIW împachetează grupuri de operaţii independente
într-un cuvînt de instrucţiune foarte lung, într-un mod care utilizează cît mai
eficient unităţile funcţionale pe timpul fiecărui ciclu de ceas. Compilatorul
descoperă toate dependenţele de date şi apoi determină cum să rezolve
aceste dependenţe, reordonînd întregul program prin deplasări ale blocurilor
de cod; acest lucru este realizat la procesoarele RISC superscalare printr-un
“hardware” adecvat de reordonare şi anticipare. Pentru procesoarele VLIW,
ca şi pentru cele RISC, salturile în program reprezintă o problemă majoră a
execuţiei programelor. Dacă procesoarele RISC rezolvă comutările de
context (salturile) printr-o logică“hardware” de anticipare, procesoarele
Arhitecturi evoluate de sisteme de calcul 179

VLIW realizează acest lucru cu ajutorul compilatorului , care le planifică


prin intermediul blocurilor de cod folosite pentru a genera instrucţiunea
foarte lungă; compilatoarele de VLIW execută o analiză sofisticată a codului
şi pot deplasa cît mai mult cod deasupra saltului anticipat, cod ce poate fi
însă oricînd refăcut, dacă saltul nu trebuie efectuat în direcţia prezisă.
Un “hardware” adecvat pe procesorul VLIW poate oferi un anumit suport
pentru compilator. De exemplu, o operaţie de salt cu căi multiple permite
cîtorva instrucţiuni de salt să fie împachetate într-o singură instrucţiune
lungă şi apoi să fie executate în acelaşi ciclu de ceas.
Deoarece compilatorul trebuie să cunoască microarhitectura
procesorului VLIW pentru care compilează codul program, orice cod
maşinăpe care îl produce rulează bine numai pe procesorul respectiv; orice
rulare pe o nouă generaţie de procesor VLIW presupune o recompilare a
codului. Compatibilitatea cu noile generaţii poate fi totuşi păstrată prin
folosirea unor tehnici “hardware” sau “software” adecvate. Datorită acestor
facilităţi, performanţa procesoarelor VLIW este de 10 pînă la 30 de ori mai
bună decît un procesor convenţional.

Tehnici ”hardware” de creş tere a paralelismului pentru procesoarele


VLIW

Utilizarea unui “hardware”, care să monitorizeze fluxul de


instrucţiuni şi să grupeze mai multe instrucţiuni într-o instrucţiune VLIW
prin procesorul însuşi, constituie o opţiune posibilă pentru furnizarea
instrucţiunilor multiple. Aceasta ar permite ca fluxul secvenţial de
instrucţiuni să fie preluat direct la procesor, cu execuţia unor părţi de cod
accelerate atunci cînd este posibil, păstrîndu-se în acelaşi timp
compatibilitatea.
S-a propus un “hardware” pentru compactarea microoperaţiilor,
generate prin citirea instrucţiunilor, într-un tampon de instrucţiuni
decodificate.
Implementarea a fost numită unitate de umplere (“fill unit” – FU).
Un registru tampon, de preîncărcare instrucţiuni (“prefetch”), citeşte
instrucţiunile din memoria principală sau memoria cache de instrucţiuni
internă şi trimite microinstrucţiunile corespunzătoare la unitatea FU.
Aceasta le colectează împreună şi le plasează ca un cuvînt multiplu într-un
memorie cache de instrucţiuni decodificate DIC (“Decoded Instruction
Cache”).
180 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Scrierea liniilor din DIC se termină ori de cîte ori a fost înregistrată o
instrucţiune de salt sau nu a mai rămas în cuvîntul multiplu nici un cîmp de
microinstrucţiune vid.
Microinstrucţiunile din cuvîntul multiplu pot avea dependenţe de
date, care pot fi rezolvate mai tîrziu, printr-o planificare
dinamică“hardware” întreţesută. Scopul FU este de a se obţine un cuvînt
atomic lung la planificarea dinamică.

Tehnici ”software” de creş tere a paralelismului pentru procesoarele


VLIW

Calculatoarele VLIW pun mare accent pe optimizarea


compilatorului, degrevînd “hardware”-ul intern de mai multe funcţii
importante, cum ar fi:

-evitarea dependenţelor dintre operaţii;


-compactarea mai multor operaţii independente într-o singură instrucţiune
lungă, capabilă să se execute complet în paralel (lucru întărit şi de
planificarea “software” a resurselor necesare pentru executarea în paralel a
tuturor operaţiilor din instrucţiunea lungă);
-anticiparea cel puţin parţială a salturilor condiţionale, extrăgîndu-se astfel
un paralelism ridicat la nivel de instrucţiune.

O instrucţiune VLIW (“Very Long Instruction Word”) poate include


mai multe operaţii, cum ar fi, de exemplu: două operaţii întregi, două
operaţii în virgulă mobilă, două referiri la memorie şi o ramificaţie; aceste
operaţii se execută în paralel pe resursele procesorului, care sunt planificate
de către un compilator optimizat.
Pentru a creşte paralelismul procesoarelor superscalare în general,
VLIW în special, au fost dezvoltate şi se folosesc diferite tehnici de
compilare. Fiecare nouă proiectare a unui procesor necesităşi îmbunătăţirea
tehnicilor de compilare.
Aceste tehnicile ajută la creşterea vitezei de execuţie (“speedup”) a
arhitecturilor superscalare, în general, a celor VLIW, în special.
Scăderea performanţelor procesoarelor superscalare se datorează mai
ales următoarelor probleme: limitarea “hardware” a paralelismului; predicţia
eronată a salturilor şi neevitarea blocărilor structurilor pipe-line; dificultăţi
în menţinerea unei viteze susţinute de execuţie în cazul apariţiei mai multor
salturi condiţionale pe ciclul de ceas.
Tehnicile de planificare ”software”, împreunăcu un “hardware”
adecvat, rezolvă aceste dezavantaje şi măresc viteza de execuţie.
Arhitecturi evoluate de sisteme de calcul 181

Din cadrul tehnicilor simple de compilare se pot enumera:


asamblarea prin program (“software pipelining”) şi planificarea urmelor
(“trace scheduling”).
În cadrul tehnicilor complexe de compilare se disting: deplasarea
speculativă a operaţiilor de încărcare / memorare în afara buclelor
(“speculative load/store motion”); nespecularea (“unspeculation”); Înaintea
aplicării acestor tehnici trebuie determinate dependenţele programului, prin
construirea grafurile de dependenţe pentru programele compilate.
“Software pipelining” este o tehnică utilizată atît de sistemele
uniprocesor, cît şi de sistemele multiprocesor. Ea constă în distribuţia unei
bucle pe mai multe procesoare sau unităţi funcţionale (în cazul
procesoarelor VLIW sau alte procesoare superscalare). Tehnica
“software pipelining” reprezintă o metodăpentru optimizarea buclelor, prin
suprapunerea operaţiilor provenind de la diferite iteraţii. Acest lucru este
realizat prin partiţionarea corpului unui program în segmente, care pot fi
procesate în mod pipe-line; buclele sunt reorganizate astfel încît fiecare
iteraţie din codul optimizat prin “software pipelining” să fie compusădin
secvenţe de instrucţiuni alese din diferite iteraţii evitînd degradarea
potenţială a performanţelor, prin gruparea operaţiilor speculative în jos pe
una sau două destinaţii ale saltului condiţionat, transformîndu-le în operaţii
neespeculative.
Prin tehnica planificării urmelor (“trace scheduling”) se generează
un paralelism suplimentar. Tehnica planificării urmelor este o combinaţie de
două procese separate.
Primul proces, numit selectarea urmelor (“trace selection”), încearcă
să găsească cea mai potrivită secvenţă de operaţii care vor fi asamblate
împreună într-un număr mic de instrucţiuni; această secvenţă se numeşte
urmă (“trace”). Pentru a genera urme lungi, se foloseşte tehnica desfăşurării
buclei (“loop unrolling”) în timp ce salturile din buclă sunt executate. O
dată ce o urmă este selectată, următorul proces, numit compactarea urmelor
(“trace compaction”), încearcă să comprime urma într-un număr mic de
instrucţiuni lungi. Operaţia de compactare a urmelor deplasează operaţiile
dintr-o secvenţă, împachetîndu-le, pe cît este posibil, în cîteva instrucţiuni
lungi.
Există două limitări în compactarea urmelor:

- dependenţele de date, care forţează o ordine parţială de operare;


-punctele de salt, care creează locuri de-a lungul cărora codul nu
poate fi deplasat uşor;
182 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

În esenţă, codul trebuie să fie compactat în cea mai scurtă secvenţă


posibilă, care conserve dependenţele de date, iar instrucţiunile de salt
reprezintă impedimentul principal al acestui proces.
Tehnica deplasării speculative a operaţiilor de încărcare / memorare
în afara buclelor (“speculative load/store motion”) urmăreşte evitarea
acceselor la memorie din bucle. Instrucţiunile de acces la memorie tind să
introducă întîrzieri în execuţie în special dacă datele cerute nu nu se află în
memoria cache.
În esenţă, această tehnică constă în generalizarea deplasărilor de
instrucţiuni invariante de buclă (“loop-invariant instructions”) în afara
buclelor, cu capabilităţi suplimentare de deplasare a instrucţiunilor de access
la memorie.
Operaţiile speculative (operaţii ale căror rezultate nu contribuie
întotdeauna la rezultatul final al programului) pot apărea în codul intemediar
datorită tehnicilor variate de manipulare a codului, care au fost aplicate, sau
datorită faptului că astfel de operaţii au fost prezente în programul original.
O secvenţă de operaţii devine speculativă dacă este deplasată înaintea unui
salt condiţionat, care impune ca operaţia să fie executată pentru a obţine
rezultatul dorit al programului. În unele cazuri execuţia saltului condiţionat
poate conduce l arezultate eronate din cauza execuţiei speculative.
Obiectivul nespeculării este de a descoperi şi reduce numărul
operaţiilor speculative, aceasta evitînd degradarea potenţială a
performanţelor, prin gruparea operaţiilor speculative în jos pe una sau două
destinaţii ale saltului condiţionat, transformîndu-le în operaţii nespeculative.

6.3. Predicţia salturilor


Predicţia salturilor este o cerinţă importantă în sistemele de calcul ce
utilizează intens tehnica pipe-line. Prin predicţia salturilor se optimizează
utilizarea structurii pipe-line evitîndu-se reiniţializarea acesteia dacă
intrucţiunile corespunzătoare saltului în program au fost încărcate în mod
eronat.
În situaţia unei instrucţiuni de salt condiţionat instrucţiunea ţintă nu
poate fi încarcată în pipe-line decît după ce s-a calculat adresa de salt şi nu
s-a evaluat condiţia de salt. Pentru salturile necondiţionate trebuie calculată
numai adresa de salt.
Pînă cînd aceste informaţii sînt disponibile structura pipe-line
aşteaptă sau încarcă o instrucţiune tintă posibilă; în momentul cînd
informaţiile sînt disponibile se poate decide o reiniţializare a structurii (în
situaţia în care în pipe-line s-au încărcat instrucţiuni ţintă în mod eronat). În
Arhitecturi evoluate de sisteme de calcul 183

ambele situaţii apare o degradare a performanţei structurii pipe-line.


Utilizarea predicţiei salturilor conduce la o atenuare a acestei degradări de
performanţă datorităfaptului că în majoritatea cazurilor instrucţiunile ţintă
sînt încărcate correct.
Instrucţiunile de salt se impart în două categorii:
- salturi statice ( care se regăsesc în codul binar şi sînt cunoscute
înainte de execuţia programului)
- salturi dinamice ( care apar în urma execuţiei şi nu sînt cunoscute
înainte de execuţie)
Predicţia salturilor dinamice este mai dificilă decît predicţia
salturilor statice.

Ideea de bază a predicţiei salturilor este memorarea istoriei fiecărui


salt (dacă s-a efectuat sau nu s-a efectuat) şi luarea deciziei (salt efectuat /
salt ne-efectuat) pe baza acestei istorii. Se definesc anumite tipare (pattern)
de diferite lungimi care indică în timp dacă saltul; s-a efectuat sau nu.
Aceste tipare sînt dependente de tipul de program care se execută.
Există mai multe tipuri de programe (task-uri):

T1 – procesarea bazelor de date


T2 – programe de căutare, editare, compilare şi testare
T3 – programe de rezervare hotelieră, tranzacţii bancare
T4 – programe utilitare pentru manevrarea de date

În tabelul 1 sînt prezentate numărul de isnstrucţiuni de salt pentru


fiecare tip de task:
Tabelul 1

T1 T2 T3 T4
Numărul total 1,300,881 1,325,359 1,309,178 1,667,468
de instrucţiuni
Numărul 285,528 321,441 312,865 359,550
salturilor
dinamice
Numărul 19,176 27,878 21,202 15,491
salturilor
statice

Predicţia salturilor utilizează un buffer de memorie ( BTB – Branch


Target Buffer) care conţine adresele instrucţiunilor ţintă pentru fiecare salt
184 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

precum şi informaţia necesară predicţiei. Bufferul BTB este adresat cu


ajutorul adresei instrucţiunii de salt. Deoarece în mod evident nu se poate
utilize un BTB excesiv de mare se vor utilize tehnici de mapare a adresei
instrucţiunii de salt în spaţiul de adresabilitate al BTB ( tehnici similare
mapării memoriei cache). Dimensiunea bufferului BTB influenţează rata de
predicţie (figura 6.8).
Dimensiunea mare a BTB poate fi în aparenţă un avantaj. Totuşi un
BTB mare are următoarele dezavantaje:

- se reduce din dimensiunea memoriei sistemului


- se stochează adrese effective ( nu adrese fizice) ceea însemnă că
la comutarea task-urilor tot conţinutul BTB este inutil sau chiar
contraproductiv

Metoda de mapare a BTB ( similară memoriei cache ) influenţează


rata de predicţie ca în figura 6.9.

Figura 6.8. Variaţia ratei de predicţie funcţie de dimensiunea BTB


Arhitecturi evoluate de sisteme de calcul 185

Figura 6.9. Variaţia ratei de predicţie funcţie de metoda de mapare a BTB

În situaţia în care procesorul încarcă mai mult de o singură


instrucţiune într-un ciclu atunci bufferul BTB trebuie accesat pe blocuri de
date. Rata de predicţie va scadea uşor ca în figura 6.10.

Figura 6.10. Variaţia ratei de predicţie funcţie de modul de adresare a BTB


186 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Predicţia direcţiei salturilor

Salturile condiţionate sînt prezise utilizînd informaţia anterioară


despre modul cum s-au efectuat aceste salturi.
Cea mai simplă cale de predicţie a saltului este aceea de a presupune
că un nou salt se va efectua în aceeaşi direcţie ca salturile anterioare. O
asemenea predicţie se numeşte predicţie locală cu o istorie de 1 bit ( local
prediction 1 bit history). Evident metoda este mai bună dacă istoria are mai
mulţi biţi care memorează direcţia saltului ( 1 se efectuează saltul, 0 nu se
efectuează saltul). Tabelul 2 ilustrează modul de predicţie a salturilor pentru
un tipar de 3 biţi.

Tabelul 2

Tiparul Predicţie Saltul urmator


(pattern) efectuat este
efectuat(%)
000 ne-efectuat (0) 7.8
001 ne-efectuat (0) 34.1
010 efectuat (1) 51.9
011 efectuat (1) 67.9
100 ne-efectuat (0) 32.6
101 efectuat (1) 64.4
110 efectuat (1) 79.1
111 efectuat (1) 97.7

Se utilizează un registru de deplasare ( cu n biţi pentru un predictor


local cu istorie de n biţi). Acest registru de deplasare conţine ultimele n
decizii. Cel mai din stînga bit reprezintă decizia cea mai veche. Construirea
istoriei presupune ca bucla să se fi executat de un anumit număr de ori timp
în care saltul nu este predictibil).
Istoria fiecărui salt este stocată în bufferul BTB.
Analizele pe o gamă variată de programe indică faptul că dacă
numărul de biţi din tipar creşte rata de predicţie creşte. Totuşi prin
Arhitecturi evoluate de sisteme de calcul 187

adăugarea unui bit ( de la o istorie cu 2 biţi la o istorie cu 3 biţi) creşterea nu


este semnificativă.
Se poate utiliza, pentru fiecare salt, un contor de 2 biţi care este
incrementat ori de cite ori saltul se efectuează şi este decrementat ori de cite
ori saltul nu se efectuează. Operaţiile de incrementare, respectiv
decrementare, se efectuează cu saturare astfel încît contorul ia valorile 0,1,2
sau 3. Predicţia se efectuează astfel : dacă valoare contorului este 0 sau 1 –
saltul nu se efectuează, dacă valoarea contorului este 2 sau 3 – saltul se
efectuează. Această schemă de predicţie poate fi asimilată unui automat cu 4
stări ca în figura 6.11.

Figura 6.11. Schema de predicţie cu contor de 2 biţi cu saturare

Rezultatele experimentale obţinute în literatură pentru un predictor


local cu istorie de 3 biţi şi pentru un predictor cu contor de 2 biţi cu saturare
sînt ilustrate în figurile 6.12 şi 6.13.
188 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 6.12. Predicţia cu un predictor local cu istorie de 3 biţi

Figura 6.13. Predicţia cu un predictor cu contor de 2 biţi cu saturare

O schemă de predicţie a salturilor mai eficientă este schema de


predicţie adaptivă cu 2 niveluri. Această schemă presupune existenţa a 2
tabele: o tabelă BTB şi o tabelă de contori de 2 biţi cu saturare. Tabela BTB
conţine istoria pe n biţi a fiecărui salt; conţinutul BTB adresează tabela de
Arhitecturi evoluate de sisteme de calcul 189

contori; decizia se ia ca în cazul schemei de predicn cazul schemei de


predicţie cu contor cu saturare; se actualizează contorii şi tabela BTB.
Schema de predicţie adaptivă cu 2 niveluri este ilustrată în figura 6.14.

Figura 6.14. Predicţia adaptivă cu 2 niveluri

În figura 6.15 este ilustrată rata de predicţie pentru un predictor


adaptive cu 2 niveluri funcţie de numărul de biţi de adresă.
190 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 6.15. Evoluţia ratei de predicţie pentru predicţia adaptivă cu 2


niveluri

Predicţia direcţiei salturilor bazată pe istoria globală

Predicţia bazată pe istoria globală a salturilor utilizează un singur


registru în care se memorează istoria pentru toate salturile, în loc să se
înregistreze această istorie separat pentru fiecare salt.
Pentru fiecare salt executat direcţia acestuia este înregistrată în acest
registru global (GR – Global Register) şi formează un tipar (pattern) global.
Pentru a prezice un anumit salt trebuie luată în considerare calea prin
program urmată pentru a se executa saltul.
În mod similar metodei de predicţie adaptive cu 2 niveluri acest tipar
global este utilizat pentru a adresa o tabelă de contori cu saturare.
Metoda de predicţie globală este ilustrată în figura 6.16.

Figura 6.16. Predicţia globală a salturilor

Avantajul metodei de predicţie globale este acela că se reduce


dimensiunea tabelelor utilizate pentru memorarea informaţiilor necesare
predicţiei. Se pot prezice mai multe salturi utilizînd o dimensiune de
memorie specificată.
Problema care apare pentru această metodă de predicţie este aceea
informaţiile pentru diferite salturi interferă între ele.
Există două scheme pentru predicţia globală a salturilor: gselect şi
gshare.
Ambele metode încearcă să resolve problema interferării
informaţiilor între salturi printr-o adresare mai precisă a saltului.
Arhitecturi evoluate de sisteme de calcul 191

Metoda gselect este ilustrată în figura 6.17.

Figura 6.17. Metoda de predicţie globală – gselect


Adresarea tabelei de contori se realizează utilizînd concatenarea unor
biţi din registrul GR şi a bitilor mai puţin semnificativi din adresa
instrucţiunii de salt ca în tabelul 3.

Tabelul 3
Adresa instrucţiunii de salt Registrul GR Index în tabela de
contori (gselect)
0000 0000 0000 0001 0000 0001
0000 0000 0000 0000 0000 0000
1111 1111 0000 0000 1111 0000
1111 1111 1000 0000 1111 0000

Metoda gshare este prezentată în figura 6.18.


192 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 6.18. Metoda de predicţie globală – gshare

Metoda gshare calculează indexul pentru tabela de contori ca un


XOR logic între biţii din registrul GR şi biţii mai puţin semnificativi ai
adresei instrucţiunii de salt, ca în tabelul 4.
Tabelul 4
Adresa instrucţiunii de salt Registrul GR Index în tabela de
contori (gshare )
0000 0000 0000 0001 0000 0001
0000 0000 0000 0000 0000 0000
1111 1111 0000 0000 1111 1111
1111 1111 1000 0000 0111 1111

Metoda gshare elimină situaţiile în care indexul pentru tabela de


contori ia aceeaşi valoare pentru salturi diferite (tabelul 5).

Tabelul 5
Adresa Registrul GR Index în tabela de Index în tabela de
instrucţiunii de contori (gselect ) contori (gshare )
salt
0000 0000 0000 0001 0000 0001 0000 0001
0000 0000 0000 0000 0000 0000 0000 0000
1111 1111 0000 0000 1111 0000 1111 1111
1111 1111 1000 0000 1111 0000 0111 1111
Arhitecturi evoluate de sisteme de calcul 193

Performanţele metodelor de predicţie globală gselect şi gshare sînt


illustrate în figurile 6.19. şi 6.20.

Figura 6.19. Rata de predicţie pentru metoda de predicţie globală gselect


194 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 6.20. Rata de predicţie pentru metoda de predicţie globală gshare


Arhitecturi evoluate de sisteme de calcul 195

În practică se utilizează metode hibride care utilizează 2 predictori


(de tipuri diferite). În figura 6.21 este ilustrată o metodă de predicţie cu
selecţia predictorului.

Figura 6.21. Metoda de predicţie a salturilor cu selecţia predictorului

Analiza comparativă a diferitelor metode de predicţie este ilustrată în


figurile 6.22 – 6.26.

Figura 6.22. Comparaţie între predicţia locală cu BTB şi predicţia adaptivă


cu 2 niveluri (bimodală)
196 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 6.23 Comparaţie între predicţia locală cu BTB,predicţia adaptivă cu 2


niveluri (bimodală) şi predicţia globală

Figura 6.24. Comparaţie între predicţia locală cu BTB, predicţia adaptivă cu


2 niveluri (bimodală), predicţia globală şi metoda gselect
Arhitecturi evoluate de sisteme de calcul 197

Figura 6.25. Comparaţie între predicţia locală cu BTB, predicţia adaptivă cu


2 niveluri (bimodală), predicţia globală, metoda gselect şi metoda gshare

Figura 6.26. Comparaţie între predicţia locală cu BTB, predicţia adaptivă cu


2 niveluri (bimodală), predicţia globală, metoda gselect, metoda gshare şi
predicţia selectivă
198 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

În concluzie predicţia salturilor este influenţată de următorii factori:

- identificarea corectă a saltului curent ( pentru metodele de


predicţie globale)
- metodele de predicţie trebuie să fie testate pe o gamă largă de
programe
- diferite metode de predicţie operează mai efficient pe diferite
structuri de instrucţiuni de salt
- predicţia este influenţată de combinarea mai multor tipuri de
predictori
7
Standarde de interconectare în sistemele de
calcul

7.1 Magistrala ISA( Industy Standard Archiecture)


Magistrala ISA este o magistrală standard pentru interconectarea
dispozitivelor periferice cu unitatea centrală. Descrierea pinilor magistralei
ISA este prezentată in figura 7.1.

A0-A19 – magistrala de adrese


D0-D7 – magistrala de date
AEN – semnal utilizat in transferul
DMA (pentru preluarea magistralelor)
MEMW - scriere în memorie
MEMR – citire din memorie
IOW - scriere în porturile I/O
IOR - scriere din porturile I/O
DTACK0 – DTACK3 - recunoaşterea
dispozitivelor DMA
DRQ1 – DRQ3 – cerere de magistrala
+T/C – semnalizeaza terminarea unui
transfer DMA
IRQ2-IRQ7 – cereri de intrerupere
ALE – strob pentru demultiplexare
magistralei de adrese date la I8086

Figura 7.1 Descrierea magistralei ISA


200 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELĂ

7.2. Magistrala PCI (peripheral Component


Interconnect)
Magistrala PCI reprezinta un stadard de interconectare a perifericelor
introdus in 1991; este utilizată în arhitectura multor arhitecturi de sisteme de
calcul ( IA-32, Alpha, PowerPC, SPARC64).
Este o arhitectura ce are un bus intern de 32 de biţi ( 64 de biţi în
noile versiuni). Frecvenţa standard a ceasului magistralei PCI este de 25/33
MHz şi ajunge pînă la 66 sau 133MHz în versiunile noi).
Se pot realiza transferuri de date în secvenţe (burst-uri), este permisă
cedarea magistralelor către alte dispozitive periverice. Pe magistala PCI se
pot conecta dispozitive periverice de tip “plug and play”.
Un dispozitiv care poate fi conectat pe o magistrală PCI (dispozitiv
PCI) are următoarele resurse:

- memorie locală
- registre de date, de control si de stare mapate în spaţiul I/O sau în
memoria locală
- linii de întrerupere ( 4 linii pe dispozitiv)

Spaţiul de adresabilitate al memoriei locale unui dispozitiv PCI este,


în general vorbind, separat de spaţiul de adresabilitate al memoriei
principale a sistemului de calcul.

Arhitectura unui sistem de calcul cu magistrală PCI este ilustrată in


figura 7.2.
Standarde de interconectare în sistemele de calcul 201

Figura 7.2 Arhitectura unui sistem de calcul cu magistrală PCI

Fiecare dispozitiv periferic conectat pe magistrala PCI are registre de


configurare; la încărcarea sistemului de operare se vor înscrie în aceste
registre adresele I/O specifice dispozitivelor periferice.
Toate liniile de întrerupere ale dispozitivului PCI sînt rutate
independent către controlerul de întreruperi. Dispozitivele periferice PCI pot
partaja o linie de întrerupere comună.
Datorită registrelor de configurare, dispozitivele PCI sînt dispozitive
“plug and play”. Aceste dispozitive nu necesită o programare prin hardware
(jumpe-ri pe placa de bază) .
La iniţializare se verifică dacă dispozitivul PCI este instalat ( exista
fizic în sistem). Acest lucru se realizează utilizînd registrele de configurare
ale dispozitivului PCI în care se stochează un identificator specific tipului de
dispozitiv şi fabricantului.
202 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELĂ

7.3. Magistrala AGP ( Accelerated Graphics Port)


Într-un sistem de calcul performanţele pot scade datorită gîtuirilor
(bottlenecks) datorate subsistemelor I/O. Unul dintre subsistemele I/O care
necesită o rată mare de transfer este subsistemul grafic.
Subsistemul grafic (placa grafică) poate fi conectat în sistemul de
calcul pe un bus PCI ca în figura 7.3.

Figura 7.3. Subsistemul grafic conectat pe bus PCI

Conectarea pe bus PCI are următoarele probleme:

- extinderea memoriei grafice este costisitoare ( trebuie adaugate


noi module de memorie pe placa grafică sau aceasta trebuie
înlocuită în întregime)
- deoarece unele date grafice ( ca de exemplu textura) sînt stocate
în memeoria principală a sistemului placa grafică PCI trebuie să
acceseze ( pe busul PCI) memoria principală. Aceste accese pe
busul PCI pot fi frecvente dacă placa grafică are o capacitate de
memorare scăzută
- deoarece placa grafică PCI ocupă frecvent busul PCI alte
dispozitive PCI vor fi încetinite ( deoarece subsistemul grafic are
prioritate mai mare)
Standarde de interconectare în sistemele de calcul 203

Soluţia performantă de interconectare a subsistemului grafic este


utilizarea tehnologiei AGP (Accelerated Graphics Port) care prezintă
următoarele avantaje:

- arhitectura AGP permite ca subsistemele grafice să utilizeze


memoria principală ca şi memoria proprie ( nu printr-un bus ci
prin partajarea memoriei)
- extinderea memoriei grafice se realizează cu costuri mici
(chipurile de memorie DRAM sînt relativ ieftine)
- nu mai sînt încetinite alte subsisteme ale sistemului de calcul;
placa grafică operează în paralel cu dispozitive PCI
- creşte disponibilitatea utilizării bus-ului PCI pentru alte
dispozitive periferice

În figura 7.4 este prezentată conectarea subsistemului grafic utilizînd


tehnologia AGP.

Figura 7.4. Conectarea subsistemului grafic în tehnologia AGP


204 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELĂ

În figura 7.4 circuitul AMD 762 reprezintă un controler AGP care


realizează interconectarea dintre procesor, memorie principală şi
subsistemul grafic.
Acest controler permite realizarea concurentă a transmisiei cererilor
( comenzilor) şi a datelor ca în figura 7.5.

Figura 7.5. Realizarea concurentă a transmisiei comenzilor şi a datelor


(AMD 762)

Există mai multe standarde AGP : AGP-1x (rată de transfer maximă


264 Mo/sec), AGP-2x (rată de transfer maximă 528 Mo/sec), AGP-3x (rată
de transfer maximă 1 Go/sec) şi AGP–4x (rată de transfer maximă 2Go
/sec).
Figura 7.6 ilustrează comparativ preformanţele ( ca bandă de transfer
a datelor) pentru standardele PCI şi AGP.

Figura 7.6. Banda de transfer pe busul PCI şi AGP


Standarde de interconectare în sistemele de calcul 205

În practică se reazizează soluţii de interconectare mixtă ce utilizează


atît magistrala PCI cît şi tehnologia AGP ca în figura 7.7.
Soluţia din figura 7.7 integrează toate variantele de interconectare
(ISA, PCI şi AGP) şi utilizează două controlere Intel 8244EX ( PCI / AGP)
şi 8271AB/EB ( PCI / ISA).

Figura 7.7 Soluţie integrată de interconecatre cu bus PCI şi port


AGP
8
Elemente de sisteme de operare

8.1 Introducere

Resursele unui sistem de calcul constau în : unitatea centrală de


prelucrare (CPU), sistemul de memorie (memorie principală, memorie de
masă - disk, bandă magnetice) şi interfeţe de intrare - ieşire (pentru
introducerea şi afişarea datelor). Toate aceste resurse concură la îndeplinirea
sarcinii sistemului de calcul : efectuarea volumului de calcule asociate cu o
anumită aplicaţie.
Resursele sistemului de calcul trebuie gestionate în aşa fel încît să se
obţină performanţele maxime din punctul de vedere al vitezei de prelucrare,
necesităţilor de memorare, etc.
Gestiunea resurselor sistemului de calcul revine unui program de
supervizare, denumit system de operare.
Sistemul de operare constituie un mediu pentru execuţia programelor
de aplicaţie.
Funcţiile sistemului de operare sînt :

- controlul execuţiei programelor (încărcare, lansare, terminare)


- asigurarea interfeţei cu operatorul (independenţa programelor
relativ la hardware-ul de intrare-ieşire)
- interfată cu operatorul uman
- tratare erori
- gestionarea resurselor sistemului
- alocarea hardware a CPU, memoriei, porturilor I/O
- protecţia resurselor împotriva accesului neautorizat
- evidenţa utilizării resurselor

Componentele principale ale sistemului de operare sînt : nucleul (kernel) –


alocă resursele,asigura protecţia, controlează interfeţele de intrare-ieşire
(I/O) la nivel fizic, tratează întreruperile, executivul - controlează interfeţele
Elemente de sisteme de operare 207

I/O la nivel logic, gestionează sistemul de fişiere, planifică activităţile din


sistemul de calcul, coordonează programele de aplicaţie şi supervizorul -
asigură interfaţa cu operatorul uman, asigură legătura cu celelalte nivele ale
sistemului de operare, contabilizează utilizarea resurselor.

8.2 Structura şi arhitectura sistemului UNIX


Sistemul de operare UNIX este un sistem multitasking şi multiuser
destinat pentru diverse tipuri de calculatoare (microcalculatoare,
minicalculatoare, supercalculatoare) şi pentru reţele puternice de
calculatoare, fiind cel mai vechi sistem de operare ce a rezistat şi s-a impus
până azi.
La ora actuală sistemul UNIX este singurul sistem de operare care
funcţionează simultan pe microcalculatoare şi supercalculatoare. Este
practic singurul sistem de operare pentru minicalculatoare şi staţii de lucru.
Este sistemul de operare care a stat la baza conceperii şi elaborarii altor
sisteme de operare performante, cel mai recent exemplu fiind sistemul de
operare Linux -primul sistem de operare free software (elaborat în 1992).
Sistemul Unix este primul sistem care a inclus clasa de protocoale
(set standard de servicii pentru transmiterea de informaţii între calculatoare)
TCP/IP ( Transmission Control Protocol / Internet Protocol) utilizată astăzi
de cea mai mare reţea de calculatoare la nivel mondial: sistemul Internet, cu
milioane de abonaţi pe toate continentele. Unii utilizatori ai sistemului
Internet trebuie să fie familiarizaţi cu filosofia şi comenzile sistemului
UNIX, deoarece multe servicii oferite utilizatorilor vor fi mai eficiente dacă
sunt cunoscute unele comenzi UNIX.
În prezent există mai multe implementări (variante) ale sistemului
UNIX:
System V (licenţă Unix Support Group-AT&T);
Solaris (licenţă Sun Microsystems);
AIX (licenţă IBM, pentru calculatoare RISC RS-6000);
ULTRIX , OSF ( produs de firma DEC-Digital);
HP-UX ( produs de firma Hewlett-Packard);
Linux (free software-Linus Torvalds; Finlanda ).

Sistemul UNIX lucrează în time-sharing fiind constituit dintr-un


nucleu (Kernel) şi un număr foarte mare de utilitare accesibile prin
intermediul interpretorului de comenzi Shell ce reprezintă interfaţa dintre
sistemul de operare şi utilizator:
208 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 8.1 Modul de operare al SO – Unix

Nucleul (Kernel) este un intermediar între interfaţa furnizată de


apelurile sistem şi echipamentele fizice din sistemul de calcul. Nucleul
UNIX este partea rezidentă a sistemului de operare care asigură funcţii de
supervizare şi gestiune a resurselor sistemului de calcul (memorie internă,
dispozitive I/O):
- organizarea şi gestiunea memoriei;
- organizarea şi gestiunea fişierelor;
- execuţia şi gestiunea proceselor;
- planificarea unităţii centrale (UC) între procese;
- controlul şi gestiunea perifericelor;
- protecţia datelor şi programelor.
Eleganţa interfeţelor sistemului UNIX şi calitatea remarcabilă a
abstracţiilor pe care le oferă utilizatorilor, au influenţat şi vor continua să
influenţeze profund arhitectura sistemelor de calcul. De asemenea, în ultima
perioadă s-au adus noi facilităţi pentru a lucra cu un număr mare de
microprocesoare şi pentru a realiza integrarea completă a aplicaţiilor
Windows NT şi Novell Netware. Sistemele UNIX comerciale sunt încă
realizări impresionante, care oferă funcţionalităţi superioare sistemelor
Linux şi Windows NT.
De exemplu serverul HP 9000 model V2500 (produs al firmei
Hewlett Packard) se caracterizează prin următoarele:
- oferă cele mai puternice şi flexibile platforme UNIX pe 64 biţi, ce
foloseşte până la 2048 de procesoare moderne RISC HP PA-8500 de 440
MHz superscalare, cu 1.5 Mb memorie Chache pe cip şi cu o performanţă în
execuţie de 1,76 Gigaflops;
- oferă platformă pe 64 biţi bazată pe microprocesoare de 64 biţi, registrii şi
magistralele pe 64 biţi, cu dresarea memoriei pe 64 biţi şi cu acces DMA pe
64 biţi; sistemul de operare şi Kernel-ul este în intregime pe 64 biţi;
- lucrează sub sistemul de operare HP-UX ce este o implementare pe 64 biţi
dezvoltată de firma Hewlett Packard special pentru sistemele de mainframe
Elemente de sisteme de operare 209

şi care prezintă compatibilitate totală cu versiunile precedente de 32 şi 64


biţi, putând executa fără recompilare toate produsele software de 64 şi 32
biţi;
- oferă mediu de execuţie pentru cele mai complexe aplicaţii în timp real
pentru diverse domenii ale zilelor noastre:
- OLTP (on-line transaction processing)
- ERP ( entreprise resource planning)
- luarea de decizii
- calcule complexe de inginerie şi modelări ştiinţifice
- gestionarea marilor baze de date din domeniul ştiinţific, financiar-
bancar, economic, militar;
- permite execuţia aplicaţiilor Java, o integrare completă a aplicaţiilor
Windows NT şi Novell Netware şi suport pentru utilizarea mediilor C/C++,
Fortran 90, Oracle Web.
Sistemul de operare UNIX este constituit din:
- Nucleu (Kernel) - partea rezidentă;
- Shell - interpretor de comenzi;
- Utilitare - servicii accesibile prin intermediul interpretorului de comenzi.
Interfaţa utilitarelor şi a aplicaţiilor utilizatorilor cu nucleul, se face prin
intermediul unui ansamblu de funcţii de sistem. Utilizatorul are trei nivele
de acces la aceste funcţii :
- prin utilitare ( nivel extranucleu);
- prin funcţii de bibliotecă standard a limbajului C/C++ (nivel intermediar);
- prin directive sistem (nivel inferior).

Structura sistemului UNIX

Este prezentata in figura 8.2.


Din figură se poate observa că nucleul este intermediarul între
interfaţa furnizată de apelurile de sistem şi echipamentele fizice. Nucleul
realizează gestiunea fişierelor şi memoriei, planificarea unităţii centrale între
procese. Apelurile sistem definesc interfaţa cu programatorul. Apelurile
sistem pot fi grupate în trei categorii:
- pentru prelucrarea fişierelor şi perifericelor;
- pentru controlul execuţiei proceselor;
- pentru prelucrarea informaţiei
210 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 8.2. Structura sistemului de operare UNIX

Versiunile actuale de UNIX oferă pentru utilizator atât interfeţe de


tip linie de comandă, desemnată prin Shell -cele mai utilizate fiind sh
(Bourne Shell, după numele creatorului S.R. Bourne), ksh (Korn Shell), csh
(C Shell)-, cât şi interfeţe grafice moderne (GUI-Graphical User Interface).

Nucleul (Kernel) UNIX – prezentat in figura 8.3. - este constituit din două
componente principale:

- sistemul de gestiune a fişierelor;


- sistemul de gestiune a proceselor.

Funcţiile generale ale sistemului de gestiune a fişierelor sunt:


- operatii cu fişiere (creare, citire, scriere, copiere, ştergere,
concatenare,etc.);
- alocare de spaţiu dinamic pentru fişiere pe HDD sau FDD;
- accesul la fişiere;
- administrarea spaţiului liber pe HDD sau FDD;
- schimbarea structurii sistemului de fişiere.
Elemente de sisteme de operare 211

PROGRAME APLICATIE

LIMBAJ DE PROGRAMARE ( ASAMBLARE, C)

BIBLIOTECI

INTERFATA CU PRIMITIVELE DE SISTEM

GESTIUNE GESTIUNE
FISIERE PROCESE

GESTIUNE GESTIUNE
MEMORIE MEMORIE
CACHE

CONTROL I/O

HARDWARE

Figura 8.3. Structura nucleului UNIX

Funcţiile generale ale sistemului de gestiune a proceselor sunt:


- trecerea proceselor prin diverse stări (creare, aşteptare, execuţie,
terminare);
- planificarea proceselor pentru a avea acces la procesor;
- comunicarea între procese;
- sincronizarea proceselor.
212 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

8.3 Structura şi arhitectura sistemului Windows 2000

Sistemul de operare Windows 2000 este un sistem de operare pe 32


de biţi, preemptiv şi multitasking pentru procesoare din familia Intel.
Principalele caracteristici ale sistemului de operare Windows 2000
sunt: portabilitatea, securitatea, asigurarea unui suport pentru sisteme
multiprocesor, extensibilitate, compatibilitate cu aplicaţiile MS-DOS, MS-
Windows şi POSIX ( IEEE 1003.1).
Windows 2000 are o arhitectură ce conţine un micro-nucleu ( micro-
kernel). Arhitectura sa este stratificată în următoarele niveluri:
- executivul (operează în modul protejat) care furnizează serviciile
de bază ale sistemului
- câteva subsisteme care operează în modul utilizator ( situate
deasupra executivului)
Structura modulară permite adăugarea de subsisteme adiţionale ce
operează în modul utilizator.
Sistemul de operare Windows 2000 este portabil (poate fi rulat pe
structuri hardware diferite bazate pe familia de procesoare Intel); este scris
în limbajele C şi C++. Secvenţele de cod dependente de procesor sunt
izolate într-o bibliotecă (Dinamic Link Library) numită nivel de
abstractizare a hardwarelui ( hardware abstraction layer - HAL).
Se utilizează o protecţie hardware pentru memoria virtuală şi o
protecţie software pentru resursele sistemului de operare.
Subsistemele sistemului de operare Windows 2000 pot comunica
unul cu altul prin intermediul unui sistem de transfer al mesajelor
performant. Procesele mai puţin prioritare pot fi întrerupte de evenimente
externe ce trebuie tratate fără întârziere.
Structura sistemului de operare Windows 2000 este ilustrată în
figura 8.4.
Nucleul (kernel) reprezintă fundamentul pentru executiv şi
subsisteme. Nucleul nu va fi niciodată întrerupt şi nu se vor genera niciodată
excepţii pentru paginile de memorie necesare acestuia. Nucleul are 4 mari
responsabilităţi: planificarea firelor de execuţie (proceselor), manevrarea
întreruperilor şi a excepţiilor, sincronizarea de nivel jos a procesorului,
refacerea stării sistemului după o întrerupere a alimentării.
Nucleul este orientat pe obiecte; se utilizează 2 seturi de obiecte:
obiecte dispecer (dispacher objects ) ce controlează firele de execuţie
(thread), evenimentele, semafoarele şi contorii de timp) şi obiecte control
Elemente de sisteme de operare 213

(control objects) care controlează apelurile asincrone de proceduri,


întreruperile, crearea proceselor, managementul puterii consumate.
Fiecare proces are o zonă de memorie virtuală alocată, o prioritate, o
stare (ready, standby, running, waiting, transition, terminated). Planificarea
firelor de execuţie utilizează o schemă cu 32 de nivele de prioritate
organizată în 2 clase de prioritate: calsa de prioritate “ timp real” (real time)
cu priorităţile 16-31, respectiv clasa de priritate variable cu priorităţile 0 –
15. Strategia de acordare a priorităţii firelor de execuţie urmăreşte obţinerea
unui timp de răspuns foarte bun pentru firele de execuţie ce utilizează
mouse-ul şi tastatura. De asemenea se validează firele de execuţie ce
utilizează dispozitivele I/O pentru a le ţine ocupate( acestea se execută uzual
în background).

Figura 8.4 Structura sistemului de operare Windows 2000

Planificarea se execută atunci când un fir de execuţie intră în starea


ready sau wait când un fir de execuţie s-a terminat sau când o aplicaţie
214 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

modifică prioritatea unui fir de execuţie. Procesele de timp real vor avea
acces preferenţial la procesor fară ca sistemul de operare Windows 2000 să
garanteze o limită de timp (aceasta se numeste soft real time).
Nivelele de întrerupere uzuale pentru Window 2000 sunt:

Nivelul Utilizarea întreruperii


întreruperii
31 Bus error
30 Power fail
29 Notifiacre interprocessor
28 Ceas de timp real
3-26 Întreruperile tradiţionale în PC
2 Procedura din kernel dispatch and deferred – DPC
1 Apel de procedura asincron (Asynchronous procedure
call – APC)
0 Pasivă

Intreruperile şi excepţiile sunt tratate prin intermediul unor primitive


ale sistemului de operare (trap handler, exception dispatcher).
Nucleul sistemului asigură un mecanism de interblocare pentru
realizarea excluziunii reciproce a procesoarelor dintr-un sistem
multiprocesor.
Sistemul de operare Windows 2000 (prin executiv - executive)
utilizează obiecte (objects) pentru toate serviciile şi entităţile definite. Un
manager de obiecte (manager objects ) generează un număr de identificare a
obiectului creat (object handle) , verifică atributele de securitate ale
obiectului şi ţine evidenţa tuturor proceselor care utilizează obiectul.
Obiectele sunt manipulate cu ajutorul unor metode : create, open, close,
delete, query name, parse şi security. Fiecare obiect posedă un nume care
poate fi temporar sau permanent. Se permite utilizarea de nume multiple (de
fapt link-uri simboloce către un obiect cu un nume) pentru acelaşi obiect
(nickname). Un proces va utiliza un obiect prin intermediul numărului de
identificare (handle –ul către acel obiect) care poate fi definit la crearea
obiectului, poate exista prin crearea obiectului de către un alt proces sau
poate fi moştenit de la un proces părinte. Fiecare obiect este protejat printr-
o listă de control al accesului.
Managerul memoriei virtuale (virtual memory manager) se bazează
pe faptul că hardware-ul un mecanism de paginare a memoriei fizice şi
asigură coerenţa memorie cache în sistemele multiprocesor. Managementul
memoriei se realizează prin paginare iar dimensiunea unei pagini este de
Elemente de sisteme de operare 215

4ko. Alocarea memorie se efectuează în doi paşi: rezervarea unei porţiuni


din spaţiul de adrese al procesului şi asocierea acestui spaţiu cu un număr de
pagini din memoria fizică a sistemului.
În figura 8.5 este prezentată realizarea paginării pentru Windows
2000.

Figura 8.5 Paginarea memoriei

Se utilizează următoarele structuri de date:

- page directory care conţine 1024 de intrări (page directory entry


- PDE) de dimensiune 4 octeţi fiecare.
- fiecare intrare indică o tabelă de pagini (page table) cu 1024 de
intrări (page table entry - PTE) de dimensiune 4 octeţi fiecare
- fiecare PTE indică o un cadru de pagină sau pagină (page
frame, page) de dimensiune 4ko în memoria fizică.

O pagină poate fi într-una din stările: valid, zeroed, free, standby,


modiefied, bad.
216 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Figura 8.6 indică modul de translatare a adresei virtuale (indicată de


PDE, PTE şi offset – page offset) în adresă fizică pe 32 de biţi.

Figura 8.6 Translatarea adresei virtuale în adresă fizică

Se alocă 10 biţi pentru PDE, 20 de biţi pentru PTE şi 12 biţi pentru


page-offset.
O intrare în tabela de pagini (PTE) are structura din figura 8.7.

Figura 8.7. Structura PTE

Adresa de pagină (page frame addresss) are 20 de biţi, 5 biţi sunt


rezrevaţi pentru realizarea protecţiei paginii, 4 biţi selectează un grup de 16
pagini (page file) şi 3 biţi codifică starea paginii (T, P, V ).
Se defineşte în memorie o regiune rezervată – heap disponibilă, ca
resursă partajată, pentru toate procesele.
Managerul de procese (process manager) asigură servicii pentru
crearea, stergerea şi utilizarea firelor de execuţie şi a proceselor. Relaţiile
dintre procesele parent/child şi ierarhia proceselor sunt tratate de către
subsistemul particular căruia îi aparţine procesul.
Există procese de tip foreground ( selectate pe ecran) şi background
(neselectate pe ecran).Există mai multe clase de prioritale:
IDLE_PRIORITY_CLASS ( nivelul 4), NORMAL_PRIORITY_CLASS
(nivelul 8), HIGH_PRIORITY_CLASS (nivelul 13) şi
REALTIME_PRIORITY_CLASS ( nivelul 24). Sincronizarea şi accesul
exclusive la resursele partajate se realizează prin semafoare şi regiuni critice
( neinteruptibile)
Executivul utilizează un apel de procedură – Local Procedure Call
(LPC) – pentru a transfera cererile şi rezultalele între procesele client –
serverîn interiorul aceleiaşi maşini. De asemenea LPC este utilizată pentru a
cere servicii de la subsistemele Windows 2000. Atunci când un canal LPC
este deschis se transferă 3 tipuri de mesaje: mesaje scurte ( până la 256 de
Elemente de sisteme de operare 217

octeţi) stocate în cozi de mesaje şi copiate de la un proces la altul, mesaje


lungi indicate prin pointeri la o zonă de memorie partajată asociată canalului
deschis şi mesaje pentru interfaţa grafică a subsistemului Win32.
Sistemul de management al I/O ( I/O manager) asigură gestiunea
sistemului de fisiere (file system) şi memoriei cache (cache management)
precum şi suportul pentru dispozitivele de intrare – ieşire (device drivers) şi
reţea (network drivers). Se asemenea ţine evidenţa tuturor fişierelor de
system şi a buffer-elor pentru cererile I/O. Managerul I/O conlucrează cu
managerul memoriei virtuale pentru a asigura transferal fişierelor în
memories au în memoria cache. Sunt suportate operaţii I/O sincrone sau
asincrone, expirări de timp şi mecanisme prin care un driver poate apela un
alt driver.
În figura 8.8 se ilustrează structura managerului I/O.

Figura 8.8. Managerul I/O

Sistemul de operare Windows 2000 posedă un mecanism de


verificare a securităţii (Security Reference Monitor) care operează pentru
fiecare entitate creată în sistem şi monitorizează drepturile de acces.
Dispozitivele de tip plug and play sunt recunoscute de către o
componentă specializată a executivului – Plug and Play Manager.
Sistemul Windows 2000 utilizează ca principal mediu de operare
subsistemul Win32 care lansează în execuţie toate procesele şi asigură
funcţionarea completă a tastaturii, mouse-ului şi a sistemului graphic.
Aplicaţiile MS-DOS sunt lansate prin intermediul unei componente a
Win32 denumită virtual DOS machine (VDM) .
218 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Există şi alte subsisteme ( numite subsisteme de mediu ) care asigură


lansarea aplicaţiilor versiunilor mai vechi ale Windows, OS/2, POXIX.
Sistemul de fişirere al Windows 2000 este NTFS ( New Technology
File Sistem). Acesta are ca structură fundamentală volumul (volume). Un
volum se bazează pe o partiţionare logică a hard-disk-ului (HDD) şi poate
ocupa o porţiune din HDD, un HDD întreg sau mai multe HDD.
Informaţiile despre volum sunt stocate în fişiere de metadate (metadata
files). Unitatea de alocare este cluster-ul. Dimensiunea unui cluster este mai
mică decât în sistemele cu FAT16 deci fragmentarea este mai redusă.
NTFS utilizează un număr logic pentru identificarea fiecărui cluster
(logical cluster number – LCN). Un fişier NTFS nu este un simplu şir de
octeţi ( ca la MS-DOS sau Unix) ci este un obiect structurat constituit din
atribute.
Fiecare fişier NTFS este descries prin una sau mai multe înregistrări
stocate într-un fişier special – Master File Table ( MFT) şi are un număr de
indentificare (ID) de 64 de biţi ( 48 de biţi – număr de fişier şi 16 biţi număr
de secventă). Fişierele NTFS sunt organizate într-o structură arborescentă.
Toate tranzacţiile cu fişiere sunt înregistrate astfel încât se pot
efectua operaţii de tip undo sau redo precum şi operaţii de refacere a
fişierelor după o întrerupere fortaţă a aplicaţiei.
Fiecare fişier are propriile sale attribute ( drepturi de acces).
În figura 8.9 sunt prezentate câteva dintre modurile de organizare a
unui volum.

a) volum pe 2 HDD
Elemente de sisteme de operare 219

b) volum pe 2 HDD întreţesut

c) volum întreseţut pe 3 HDD cu paritate

d) volum în oglindă ( 2 volume identice pentru protejarea datelor)

Figura 8.9 Organizarea unui volum


220 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Windows 2000 asigură conectarea în reţea de tip peer to peer şi


client-server prin intermediul a 2 interfeţe interne: NDIS ( Network Device
Interface Specification) – care conţine adaptoare separate de reţea pentru
protocoalele de transportşi care pot să fie schimbate fără a se afecta reciproc
şi TDI ( Transport Driver Interface) – validează orice componentă a
nivelului sesiune pentru a utiliza orice protocol de transport disponibil.
Pentru a transmite cererile I/O în reţea se utilizează protocolul SMB ( Server
Message Block) care transferă 4 tipuri de mesaje: Session Control, File,
Printer şi Message. Se utilizează un nivel de abstractizare hardware pentru
reţea denumit NetBIOS (Network Basic Input Output System) utilizat
pentru:
- stabilirea numelelor logice în reţea
- stabilirea conexiunilor logice ale sesiunii de lucru între 2 nume
logice în reţea
- tranferul fiabil al datelor

Pentru conectarea în reţea a sistemelor de calcul care utilizează


sistemul de operare Windows 9x se utilizează interfaţa NetBEUI (NetBIOS
Extended User Interface).
Windows 2000 utilizează protocolul Internet TCP/IP pentru
conectarea cu calculatoare ce rulează o gama largă de sisteme de operare.
Se utilizează conceptul de domeniu (ca grup de calculatoare care
partajează resurse commune şi au o politică de securitate comună) pentru a
gestiona drepturile de acces globale între grupurile de utilizatori.
9
Anexa: Exemple de probleme

Problema 1

Se consideră un sistem de memorie ierarhizată , cu două nivele M1 şi


M2, pentru un sistem de calcul , ca în figura 9.1 :

CPU

M1

M2

Figura 9.1 Memoria ierarhizată

Se notează :

C1 , C2 - costul per bit pentru memoriile de pe nivelul 1 , 2


S1 , S2 - capacitatea memoriilor de pe nivelul 1 , 2
t1 , t2 - timpii de acces pentru memoriile de pe nivelul 1, 2

Funcţia de succes (rata de atingere) , H , este definită ca


probabilitatea ca adresa logică generată de CPU să refere informaţie de pe
nivelul M1 .

a) Care este costul per bit , C , pentru întreg sistemul de memorie


ierarhizată ?
222 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

b) În ce condiţii C se apropie de C2 ?
c) Care este timpul mediu de acces, T , pentru întreg sistemul de
memorie ?
d) Se notează cu r = t2 / t1 - raportul "vitezelor" şi cu E = t1 / T -
eficienţa pentru accesarea sistemului de memorie ierarhizată .
Să se exprime E funcţie de r şi H.
Se cere reprezentarea grafică a lui E = f(H) pentru r=1,2,10, şi 100.
e) Presupunînd că r=100 care este valoarea minimă a lui H pentru a
avea E > 0.90 ?

Rezolvare

a) Costul memoriei pe nivelul 1 este C1S1


Costul memoriei pe nivelul 2 este C2S2
Costul total al memoriei este C1S1 + C2S2

C1S1 + C2S2
Costul mediu este C= -----------------
S1 + S2

C1 C2
b) C= ------------------- + -----------------
1 + S2 / S1 1 + S1 / S2

Dacă S2 >> S1 rezultă 1 + S2 / S1 >> 1 şi 1 + S1 / S2  1


deci C 2  C1

c) Timpul mediu de acces este :


2 i
T= i=1
hi Ti , cu Ti = 
k=1
tk şi hi = H(si ) - H(si-1 )

Rezultă T1 = t1, T2 = t1 +t2

În continuare :
Anexa 223

T = h1T1 + h2T2 = [ H(s1 ) -H(s0 ) ] T1 + [ H(s2 ) - H(s1 ) ]


T2 = Ht1 + ( 1 - H ) ( t1 + t2 ) = t1 + t2 - Ht2

deoarece H(s2 ) = 1 şi H(s0 ) = 0.


Se putea aplica direct formula
2
T= 
i=1
F(si-1 ) ti = F(s0 ) t1 + F(s1 )t2 = = t1 + (1 - H ) t2

d) Se calculează T / t1 = 1 + r ( 1 - H ) de unde rezultă :

1
E = -----------------------
1+r(1-H)

cu reprezentarea grafică din figura 9.2 :

r =1

0.5
r =2

r = 10

r = 100 H

Figura 9.2. Eficienţa sistemului de memorie ierarhizată

e) 1 / (1 + r ( 1 - H ) =  cu  = 0.9 şi r = 100

Rezultă H = Hmin = 1 - (1 / r ) ( 1 / - 1 ) = 1 - 10-3 / 0.9  1


224 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Problema 2

Fie secvenţa de pagini cerute într-un sistem de calcul cu un set de


pagini rezidente s :

abacabdbacd

Să se indice numărul de excepţii (rata de excepţii) pentru algoritmii


globali de reamplasare de tip : FIFO, LRU şi MRU (Most Recently Used ) -
opus algoritmului LRU pentru s = 2 şi s = 3.

Rezolvare

pentru s = 2

Secventa de pagini a b a c a b d b a c d

Page Fault * * * * * * * * *

Pagina fizică 1 a a a c c b b b a a d

Pagina fizică 2 - b b b a a d d d c c

Algoritmul FIFO - rata de excepţii 9 / 11


Anexa 225

Secventa de pagini a b a c a b d b a c d

Page Fault * * * * * * *

Pagina fizică 1 a a a a a a a a a a a

Pagina fizică 2 - b b c c b d b b c d

Algoritmul LRU - rata de excepţii 8 / 11

Secventa de pagini a b a c a b d b a c d

Page Fault * * * * * * * * *

Pagina fizică 1 a a a c c c c b a c c

Pagina fizică 2 - b b b a b d d d d d

Algoritmul MRU - rata de excepţii 9 / 11


226 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

pentru s=3

Secventa de pagini a b a c a b d b a c d

Page Fault * * * * *

Pagina fizică 1 a a a a a a d d d d d

Pagina fizică 2 - b b b b b b b a a a

Pagina fizică 3 - - - c c c c c c c c

Algoritmul FIFO - rata de excepţii 5 / 11

Secventa de pagini a b a c a b d b a c d

Page Fault * * * * * *

Pagina fizică 1 a a a a a a a a a a a

Pagina fizică 2 - b b b b b b b b b b

Pagina fizică 3 - - - c c c d d d c d

Algoritmul LRU - rata de excepţii 5 / 11


Anexa 227

Secventa de pagini a b a c a b d b a c d

Page Fault * * * * *

Pagina fizică 1 a a a a a a d d d d d

Pagina fizică 2 - b b b b b b b a a a

Pagina fizică 3 - - - c c c c c c c c

Algoritmul MRU - rata de excepţii 5 / 11

Discuţie

- Evident rata de excepţii scade cu cresterea lui s


- Rezultatele nu au grad de generalitate ( prea puţine pagini cerute).
Din această cauză diferenţele între diverşi algoritmi de reamplasare globali
nu sînt sesizabile.

Problema 3

O structură pipe - line este caracterizată de tabela de rezervare :

t0 t1 t2 t3 t4 t5 t6

S1 X X
S2 X X
S3 X X
S4 X X
228 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

a) Să se determine setul interzis de latenţe , F


b) Să se determine vectorul de coliziune , C
c) Să se deseneze diagrama de stare

Rezolvare

a) F = { 2, 4, 5 }
b) C = [ C5 C4 C3 C2 C1 ] = [ 1 1 0 1 0 ]
c) Diagrama de stare este prezentată în figura 9.3:

Starea iniţială 11010 : tranziţii posibile 1 şi 3


Pentru tranziţia 1 noua stare este : (01101) OR (11010) = (11111), nu
se mai pot face tranziţii (blocaj - apar coliziuni)
Pentru tranziţia 3 noua stare este : (00011) OR (11010) = (11011) -
tranziţie posibilă 3 în starea (00011) OR (11010) = (11011) - (ciclu ).

ciclu cu latenta medie 3


starea initiala

11010
3
1 11011

11111 3

stare de blocaj (fara tranzitii posibile)

Figura 9.3. Diagrama de stare

Procesele trebuie iniţiate cu latenţa 3.


Pentru iniţierea cu latenţa 1 se ajunge într-o stare de blocaj din care
se poate ieşi prin iniţierea proceselor cu o latenţă mai mare decît 5.

Problema 4

Se consideră o structură pipe-line cu k nivele. Timpul de prelucrare


pentru fiecare nivel este = 1.
Anexa 229

Fie p(N) probabilitatea ca instrucţiunea curentă la încărcare să


depindă de intreucţiunea încărcată cu N ciclii pipe-line mai înainte.

a) Să se calculeze timpul de execuţie , T , pentru M instrucţiuni.


b) Să se evalueze performanţa structurii pipe-line definită de relaţia :

P = lim ( M / T ) , M --> 

Rezolvare

Fie structura pipe line din figura 9.4 :

t0 t 0- N t 0- k

S1 S2 SN Sk

Figura 9.4. Structura pipe-line

În cazul dependenţei instrucţiunii de la intrare de o instrucţiune


aflată pe nivelul N , trebuie aşteptată încheierea execuţiei intrucţiunii care
introduce dependenţă.
Pentru o singură instrucţiune timpul suplimentar introdus este
(pentru = 1):

( t0 - N ) - ( t0 - k ) = k - N

Există p(N).M instrucţiuni "dependente" .

Timpul suplimentar total este : Ts = p(N).M.( k - N )

Timpul de execuţie normală (fără dependenţă) este :

Tn = k - 1 + M

Timpul total de execuţie este :

T = Ts + Tn = k - 1 + M + p(N).M.( k - N )
230 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

b) Performanţa structurii pipe-line este :

1
P = -----------------------------
1 + p(N). ( k - N )

Discuţie

Performanţa P depinde de p(N) , dar şi de localizarea dependenţei


( nivelul N ). Dacă N este mare performanţa creşte ( instrucţiunea care
produce dependenţă "iese" mai repede din pipe-line)

Problema 5

Se presupune că o operaţie scalară necesită un timp de execuţie de k


ori mai mare decît o operaţie vectorială.
Se dă un program scris în limbaj scalar (cu operaţii scalare).

a) Care este procentajul din acest program ce trebuie rescris ( cu


operaţii vectoriale) pentru a se obţine o creştere de viteză de m ori ?
b) Să se repete punctul a) în situaţia în care q% din programul scalar
nu poate fi rescris cu operaţii vectoriale .

Rezolvare

a) Se notează :

n - numărul de opearţii ale programului original


s - numărul de operaţii ce rămîn scalare ( din numărul de operaţii ce
pot fi rescrise)
v - numărul de operaţii ce vor fi "vectorizate"
ts - timpul de execuţie pentru o operaţie scalară
tv - timpul de execuţie pentru o operaţie vectorială

Există relaţia : ts / tv = k

Numărul de operaţii rămîne constant : n=s+v


Anexa 231

Timpul de execuţie al programului original este : nts = (s + v ) ts


Timpul de execuţie al programului vectorizat este : sts + vtv
(s + v ) ts (s+v)k
Rezultă creşterea de viteză : m = ---------------- = -------------------
sts + vtv ks + v

Procentajul din program ce trebuie rescris (vectorizat ) este

x = v / (s + v )

k
Rezultă : m = ---------------------- de unde :
k (1 - x ) + x

k m-1
x = -------- . ------------
k-1 m

b) Se utilizează notaţiile de la a)

Numărul de operaţii ce nu se pot vectoriza este : nq

Se pot vectoriza un număr de operaţii egal cu : ( 1 - q )n = s + v

Rezultă :

n = ( s + v ) / ( 1 - q ) sau n / (s + v ) = 1 / (1 - q ) sau

nq + s = ( s + v ) / ( 1 - q ) - v

Timpul de execuţie pentru programul vectorizat este :

nqts + sts + vts

Rezultă creşterea de viteză :

( s + v + nq ) ts k(s+v)[1+q/ (1-q)]
m = --------------------------- = --------------------------------------
nqts + sts + vts [ (s + v ) / ( 1 - q ) - v ] k + v
232 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Cu notaţia x = v / (s + v) - procentajul de operaţii ce trebuie rescrise


din totalul operaţiilor ce pot fi vectorizate - introdusă la a) rezultă :

k[1+q/(1-q)
m = ---------------------------------
[ 1 / (1 - q ) - x ] k + x

Rezultă

1 k m-1
x = ------- . -------- . ---------
1 -- q k - 1 m

Discuţie

Tabelul următor exemplifică relaţiile obţinute ( k = 10 ):

q = 0% q = 15 %

m=2 x = 55% m=2 x = 64%

m=4 x = 83% m=4 x = 97%

m=6 x = 92% m=6 Nu ( x>1)

Problema 6

Să se deseneze schema unui sistem multiprocesor cu 2 procesoare


interconectate printr-o memorie comună.
Anexa 233

Rezolvare

Schema sistemului este prezentată în figura 9.6:

Figura 9.6. Sistem multiprocesor cu memorie comună

Memoria comună este un circuit mai complex ce include memoria


propriu-zisă şi un controler care arbitrează conflictele de acces ce pot apare
dacă cele două procesoare cer accesul "simultan" la memoria comună.
Conflictele de acces pot apare dacă un procesor citeşte iar celălalt
scrie aceeaşi locaţie de memorie sau dacă ambele procesoare scriu în aceaşi
locaţie de memorie.
Circuitul de arbitrare a conflictelor de acces are următoarele funcţii :
- compară adresele generate de cele două procesoare pentru memoria
comună
- generează semnalele de control pentru memoria comună ( de
exemplu WE/ )
- generează semnale pentru blocarea unui ciclu de acces (cel sosit
puţin mai tîrziu); se generează de exemplu un semnal BUSY/ .

În figura 9.7. este ilustrată o soluţie constructivă fără controler


integrat (memoria comună este o memorie RAM uzuală).
234 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

ADR1
0 ADR1, ADR2, A - adrese
MUX A RD/ , WE/ - semnale citire / scriere
ADR2 1 T - control sens
S MEMORIE
RD1/ OE/ , CS/ - semnale de validare
D
data 1 MUX - multiplexor
T WE/ CS/
OE/ selectie
RD2/
BUSY1/
data 2
T
LOGICA
MUX MUX
OE/ CONTROL
S S
0 1 0 1 BUSY2/
WE1/ WE2/ CS1/ CS2/ CS2/
CS1/

Figura 9.7. Interconectarea procesoarelor prin memorie comună (fără


controler integrat)

Problema 7

Să se deseneze schema unui sistem multiprocesor cu 2 procesoare


interconectate prin împărţirea busurilor.

Rezolvare

În figura 9.8. se prezintă o soluţie de interconectare ce utilizează


principiul cererii - achitării de magistrală ( bus request - bus grant ).
Comunicarea între procesoare se realizează tot printr-o memorie
comună; cele 2 procesoare utilizează aceleaşi bus-uri pentru accesul la
memoria comună.
Unul dintre procesoare va fi master pînă cînd primeşte o cerere de
bus; acestă cerere va fi generată atunci cînd procesorul slave doreşte să
acceseze memoria comună.
Anexa 235

Ciclul de bus al procesorului slave este întîrziat ( prin trecerea


acestui procesor în starea WAIT ) pînă la activarea semnalului ce semnifică
acceptarea cererii de magistrală.
Soluţia din figura 9.8. este funcţională numai dacă procesorul slave
posedă o intrare ce permite trecerea sa în starea WAIT ( de exemplu
READY la I80x86).
În caz contrar se pot insera stări de WAIT pentru ciclurile de acces la
memoria comună pentru a aştepta eliberarea magistralelor de către master
(ca în figura 9.9.) .

WE/
PROCESOR 1
(master)
A
A
CS2/ CS1/ WE/ MEMORIE
DCD MUX
BR/
1 "COMUNA"
CS/
BG/ D CS2/
(asociata
0
procesorului
sel
OR master )
D
READY WE/
Buffer 1 OE/
PROCESOR 2
Selectia MUX - 0 : slave
(slave)
1 : master
A
CS2/
RD/ DCD
T Buffer 1 OE/ BG/ 0 1
D
0 1 1
1 0 1
READY = BG// + CS2/
a) schema bloc de principiu
CS2/

BR/

BG/

READY

b) diagrama de timp

Figura 9.9. Sistem multiprocesor cu împărţirea busurilor


236 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

Problema 8

Să se deseneze organigramele care realizează sincronizarea activităţii


a 2 procesoare dintr-un sistem multiprocesor cu 2 procesoare ( master-
slave). În figura 9.10 este ilustrată structura de date ( stocată în memoria
procesorului master) utilizată pentru comunicarea între procesoare.

Figura 9.10. Structura de date pentru comunicatia intre procesoare

Se consideră că sistemul multiprocesor astfel constituit trebuie să


îndeplinească următoarele funcţiuni :

Procesorul master (PM)


- citeşte (din memoria sa) operanzii şi tipul operaţiei
- efectuează operaţia
- stochează, în memoria sa, rezultatul

Procesorul slave (PS)


- stabileşte doi operanzi şi operaţia ce se efectuează asupra acestora
(în memoria procesorului master)
- citeşte rezultatul operaţiei (din memoria comună)

Organigramele de funcţionare pentru cele două procesoare din


sistemul multiprocesor sînt ilustrate în figurile 9.11a şi 9.11b.
Anexa 237

Figura 9.11 a) Organigrama programului de sincronizare pentru procesorul


master

Figura 9.11 b) Organigrama programului de sincronizare pentru procesorul


slave
Bibliografie

1. K. Hwang, F.A. Briggs, “ Computer Architecture and Parallel


Processing“ , McGraw-Hill Book Company, 1985
2. V. M. Milutinovic, editor, “High Level Language Computer
Architecture”, Computer Science Press, 1989
3. F. V. Pilat, I. Stefănescu, S. Seaconu, “Calculatoare personale-Unix”,
Teora, 1994
4. Sorin Zoican, “Arhitectura Sistemelor de Calcul”, litografia Universitaţii
POLITEHNICA din Bucureşti, 1998
5. Andrew Tanenbaum, “ Architecture de l’Ordinateur”, InterEdition,
Paris, 1991
6. “Structura si arhitectura sistemului UNIX”, www.unibuc.ro, 2002
7. “Arhitecturi RISC de uniprocesare paralelă a datelor utilizând cuvinte
de instrucţiuni foarte lungi tip VLIW, www.pub.cs.ro, 2003
8. “Architecture PCI”, www.bravo.ce.uniroma.it, 2003
9. “Architecture ISA”, www.ctv.es, 2003
10. “Intel ® 440EX AGPset:, 82443EX PCI AGP Controller, (PAC),
Datasheet” April 1998
11. “Introduction to AGP-8X”, Advanced Micro Devices, 2002
12. Pallavi Jesrani, Preetha Parthasarathy, “Pentium 4 Micro-architecture”,
2003, Power Point Presentation
13. Roberto Zuniga, “Intel P6 Architecture”, 2003, Power Point Presentation
14. R.B. Hilgendorf, G.J. Heim, W. Rosenstiel, “Evaluation of branch
prediction methodson traces from commercial applications”, IBM
Journal of Research and Development, vol. 43, number. 4, 1999
15. Chih-Cheng Cheng, “The Schemes and Performances of Dynamic
Branch Predictors”, Web report, 2003
16. Teresa Montreal, Antonio Gonzales, Mateo Valero, Jose Gonzales,
Victor Vinals, “Dynamic Register Renaming Through Virtual-Physical
Registers”, Web report, 2003
17. Silberschatz, Galvin, Gagne, “Operating System Concepts”, Web Power
Point Presentation, 2003
Cuprins

1. Introducere în prelucrarea paralelă..................................................... 5


1.1. Evoluţia sistemelor de calcul.......................................................... 5
1.3. Tendinţe şi orientări către prelucrarea paralelă........................... 6
1.4. Paralelismul în sistemele uniprocesor ......................................... 11
1.5 Structuri de calculatoare paralele ............................................... 18
1.6. Clasificări arhitecturale ale sistemelor de calcul ........................ 27
1.7. Aplicaţii ale prelucrării paralele.................................................. 31

2. Subsisteme de memorie şi intrare - ieşire (I / O)................................ 32


2.1. Ierarhizarea memoriei ................................................................. 32
2.2. Optimizarea ierarhiei memoriei .................................................. 35
2.3. Scheme de adresare pentru memoria principală ........................ 37
2.4. Memoria virtuală ......................................................................... 38
2.5. Alocarea şi managementul memoriei .......................................... 49
2.6. Subsisteme de intrare - ieşire (I / O) ............................................ 69

3.Principiul pipe-line şi procesare vectorială......................................... 76


3.1. Prelucrarea "pipe-line" ............................................................... 76
3.2. Principiile proiectării procesoarelor pipe-line ............................ 89
3.3. Cerinţele prelucrării vectoriale.................................................. 102

4. Arhitectura sistemelor multiprocesor .............................................. 110


4.1. Structuri funcţionale ale sistemelor multiprocesor................... 110
4.2. Reţele de interconectare în sistemele multiprocesor ................. 119
4.3. Comparaţie între modurile de interconectare pentru sistemele
multiprocesor strîns cuplate ............................................................. 128

5. Implemetarea sistemelor de calcul matriciale şi pipe-line............... 130


5.1. Sisteme de calcul matriciale (array processors) ........................ 130
5.2. Sisteme de calcul pipe - line ....................................................... 146

6. Arhitecturi evoluate de sisteme de calcul ......................................... 162


6.1. Microarhitectura PENTIUM......................................................... 162
6.2. Arhitectura VLIW...................................................................... 175
6.3. Predicţia salturilor ..................................................................... 182
4 ARHITECTURA SISTEMELOR DE CALCUL CU PRELUCRARE PARALELA

7.Standarde de interconectare în sistemele de calcul .......................... 199


7.1 Magistrala ISA( Industy Standard Archiecture) ....................... 199
7.2. Magistrala PCI (peripheral Component Interconnect) ...... 200
7.3. Magistrala AGP ( Accelerated Graphics Port) ......................... 202

8.Elemente de sisteme de operare......................................................... 206


8.1 Introducere .................................................................................. 206
8.2 Structura şi arhitectura sistemului UNIX .................................. 207
8.3 Structura şi arhitectura sistemului Windows 2000 ................... 212

9. Anexa: Exemple de probleme ........................................................... 221

Bibliografie.................................................... Error! Bookmark not defined.