Sunteți pe pagina 1din 8

Calculatoare vectoriale

Dintre toate arhitecturile capabile sa exploateze paralelismul la nivel de date, cea mai
mare raspandire au avut-o calculatoarele vectoriale datorita performantelor superioare ale
acestora.
Prelucrarea vectoriala implica date organizate in vectori alcatuiti din n elemente de
acelasi tip.Acesti vectori sunt tratati ca o singura entitate de calcul in timpul prelucrarii
programului. Fiecare instructiune a programului va fi executata pe entitatea vector, eliminand
astfel instructiunile de control de genul buclelor for, care sunt utilizate in prelucrarea scalara.
Pentru a fi posibil acest lucru procesoarele calculatoarelor vectoriale sunt dotate cu registre
vectoriale, care sunt capabile sa memoreze un intreg vector. Caracteristicile specifice
instructiunilor vectoriale fac ca prelucrarea vectoriala sa exploateze la maximum tehnica
pipeline.
Se vor prezenta particularitatile instructiunilor vectoriale, se va stabili care sunt
componentele de baza ale unui calculator vectorial si se vor exemplifica aceste notiuni pe unul
dintre calculatoarele care s-au bucurat de un mare succes de la lansarea primei sale versiuni
CRAY1 in 1976 pana la cele mai recente versiuni.
Dupa tipul operanzilor si a rezultatelor instructiunile vectoriale pot fi clasificate in 4
categorii principale.f1 : V-> V, f2 : V-> V, f1 : V-> V, f1 : VxS-> V, unde V este un operand
vector, iar S este un scalar. Exemple de astfel de instructiuni vectoriale ar putea fi:
- VADD - Z(i) = X(i) + Y(i), i = 1...n. Adunarea a 2 vectori.
- VTEST - Z(i) = 0 daca X(i) < Y(i), Z(i) = 1 in caz contrar, i= 1....n
- SDIV - Z(i) = X(i)/s, unde s este un scalar , i = 1...n impartirea elementelor vectorului cu un
scalar.

Pentru a usura operatiile vectoriale, majoritatea calculatoarelor vectoriale dispun si de


anumite instructiuni speciale. Acestea se bazazeaza pe un vector bulean care este folosit pentru a
activa sau dezactiva prelucrarile asupra componentelor unui vector dintr-o instructiune
vectoriala. Doua tipuri de instructiuni sunt interclasarea si compresia datelor. De exemplu fiind
dati vectorii X = (1,3,5,6,2) si B = (0,0,1,0,0) , instructiunea de compresie aplicata lui X cu
ajutorul lui B va da rezultatul Y = (5,6). Din X se selecteaza doar componentele care corespund
pozitiilor unde se gaseste valoarea 1 in B. analog se poate obtine si interclasarea a 2 vectori: X =
(6,1,3,8,3,9) si Y = (2,1,4,2,6,7) si B = (0,1,0,1,0,1,1,1,0,0,0,1). Interclasarea vectorilor X si Y
controlata de B are rezultat Z = (2,6,1,1,4,3,8,3,2,6,7,9) primul 0 din B indica faptul ca Z(1) este
selectat din Y, urmatorul 1 indica faptul ca Z(2) selectat din X. Operatiile vectoriale sunt
potrivite pentru executarea lor in pipeline, deoarece presupun executarea aceleiasi functii in mod
repetat. Se reduce timpul instructiunilor de control al ciclarii. De aceea calculatoarele vectoriale
sunt construite cu unitati functionale in banda de asamblare.
Formatul instructiunilor vectoriale este compus din mai multe campuri pentru care se
specifica urmatoarele elemente.
- Codul operatiei
- Adresa de baza din memorie unde trebuie extrasi operanzii vector
- Incrementul folosit la adresarea componentelor vectorilor
- Offset fata de adresa de baza
- Lungimea vectorilor
Daca tinem seama de locul de unde operanzii vectori sunt adusi pentru prelucrare vom
putea distinge doua tipuri de calculatoare vectoriale: calculatoare de tip memorie la memorie
(componentele vectorilor implicati intr-o instructiune vectoriala sunt aduse din memorie, iar
rezultatul este stocat tot in memorie) si calculatoare registru la registru ( acestea au registre
vectoriale care sunt capabile sa memoreze operanzii vectori necesari unei instructiuni). Pentru a
sublinia avantajele prelucrarii vectoriale in comparatie cu operatia scalara, vom considera
urmatorul exemplu:
For(i= 1 to n) do
x(i) = y(i) + z(i)
y(i) = x(i+1) * x(i+1)
end for
Acesta bucla for poate fi implementata pe un calculator scalar astfel (implementarea este data
intr-un pseudo limbaj de asamblare):
Mov i, 1
Et1: mov r1,y(i)
mov r2,z(i)
add r4, r1, r2
mov x(i),r4
mov r3, x(i+1)
mul r5, r3,r3
mov y(i),r5
inc i
if i< n goto et1
Intr-un calculator vectorial aceeasi secventa de cod poate fi reprezentata prin 3 instructiuni.
X(1:n) = y(1:n) + z(1:n)
temp(1:n) = x(2:n+1)
y(1:n) = temp(1:n) * temp(1:n)
reducerea la doar 3 instructiuni este posibila pentru ca fiecare vector va fi memorat intr-un
registru vectorial, iar adunarea a doua registre vectoriale este echivalenta cu adunarea a 2 vectori.
Se observa cum prin folosirea unor instructiuni vectoriale numarul total necesari executarii
acestei bucle a fost redus. Executia instructiunilor scalare prin tehnica benzii de asamblare, mai
introduce un timp suplimentar (overhead) la fiecare iteratie datorita instructiunii de control a
buclei. Aceasta problema nu mai apare la procesarea vectoriala, unde se poate folosi un registru
care contine lungimea vectorilor pentru a controla instructiunile vectoriale. In cazul procesarii
vectoriale timpul suplimentar care apare este format din timpul necesar routarii operanzilor prin
unitatile functionale si timpul scurs de la decodificare pana cand primul rezultat iese de pe banda
de asamblare. Lungimea vectorilor este un factor ce poate aducce un timp suplimentar aditional
prin subdivizarea unor vectori foarte lungi ce nu pot fi memorati intr-un registru vectorial in
portiuni mai mici. Pentru a creste performantele procesarii vectoriale, trebuie folosite
compilatoare ce folosesc un cod optimizat menit sa utilizeze la maxim resursele calculatorului.
Au fost propuse mai multe cai de a obtine un astfel de cod optimizat:
1. Marirea numarului de instructiuni vectoriale. Folosind un numar mare de instructiuni
vectoriale(ex: incluzand in setul de instructiuni, instructiuni speciale cum au fost cele de
compresie si interclasare), se poate realiza o utilizare eficienta a resurselor.
2. Combinarea resurselor scalaree de acelasi tip pentru a imbunatatii viteza benzii de
asamblare
3. Alegerea unor algoritimi potriviti. de ex: un alg de interclasare nu este foarte performant pe
un calculator vectorial deoarece acesta poate executa interclasarea printr-o singura
instructiune
4. Folosirea unor compilatoare vectorizante. Acestea pot detecta concurenta dintre
instructiunile vectoriale si pot exploata paralelismul pierdut datorita folosirii unor limbaje de
programare secventiale.

Calculatoare cu memorie distribuita


Un sistem cu memorie distribuita este alcatuit dintr-un set de noduri de calcul
interconectate printr-o retea de intercomunicare. Fiecare nod de calcul dipune de un procesor
destinat calculelor propriu-zise, o memorie privata, un procesor care este specializat pe
operatiile de comunicatie si un comutator cu rol de router ce realizeza interfata dintre nodul de
calcul (NC) si reteaua de interconectare (fig.5.5).

Fig. 5-5 Calculator paralel cu memorie distribuit


Distinctia dintre elementele ce compun un nod al calculatorului nu a fost foarte clara la
primele tipuri de masini din aceasta clasa. Initial, pentru calcul, comunicatie si realizarea
legaturii cu reteua de comunicare era folosit acelasi procesor. Odata cu dezvoltarea tehnologiilor
cele rei elemente au inceput sa fie separate astfel incat la calculatoarele de ultima generatie sunt
folosite procesoare distincte pentru calcul, comunicatie si rotarea mesajelor.
Un element foarte important la arhitecturile cu memorie distribuita este modul de
organizare a retelei de interconectare. Acestea pot fi:
- Statice-retelele care constau in legaturi punct la punct intre procesoare denumite
uneori si retele directe;
- Dinamice-construite pe baza unor comutatoare cu ajutorul carora retelele se pot
reconfigura in mod dinamic.
De abicei la calculatoarele paralele cu memorie distribuita se utilizeaza mai ales retelele
statice. Pentru descrierea acestor retele se folosesc trei caracteristici: topologia retelei, topologie
care influenteaza durata de transmisie a unui mesaj; metoda de comutare utilizata (comutare de
pachete sau comutare de circuite); si protocoalele de route-are, care au rolul de a stabili o cale pe
care un mesaj o va urma de la procesorul sursa la procesorul destinatie. Aceste trei caractristici
vor fi detaliate in capitolele urmatoare.
Pe langa problema alegerii unui tip de retea de interconectare o decizie importanta in
proiectarea unui calculator paralel o constituie stabilirea tipului de procesor care va fi utilizat.
Granularitatea este un alt aspect cheie care trebuie mentionat atunci cand se caracterizeaza un
astfel de calculator. Daca majoritatea calculatoarelor cu memorie distribuita atmit o granularitate
grosiera, exista si calculatoare ce atmit o granularitate medie.
O caracteristica importanta a calculatoarelor construita pe baza memoriei distribuite o
constituie problema accesului la memorie. Fiecare procesor poate accesa in mod direct (adica
prin instructiuni de tip load/store) numai in memoria proprie nodului sau. De aceea cand doua
sau mai multe procesoare au nevoie sa comunice intre ele, comunicarea nu se poate face prin
intermediul unor locatii de memorie la care sa aiba acces ............. in operatia de comunicare.
Solutia in acest caz o reprezinta modelul de comunicare prin schimb de mesaje. Daca la un
moment dat apare situatia in care un procesor are nevoie de date care nu se afla in memoria
locala, atunci el va compune un mesaj in care va cere datele respective si va directiona mesajul
catre nodul unde se afla stocate ele. Pentru operatiile de comunicare prin schimb de mesaje sunt
folosite in general doua primitive:
- Send-pentru trimiterea unui mesaj;
- Receive-pentru primirea unui mesaj.
Exista 2 modalitati de abordare a comunicarii prin schimb de mesaje .
Una in care procesul ce a executat o astfel de operatie este blocat pana la
incheierea operatie(spre exemplu, cand se executa o operatie SEM, procesul ar
putea continua numai dupa ce destinatarul a primit mesajul si invers, un proces
ce executa o operatie de receive este blocat pana cand receptioneaza un mesaj);
A doua modalitate, in care procesul poate continua imediat dup ace a apelat una
din cele 2 primitive si va fi instiintat printr-o intrerupere atunci cand aceste
operatii s-au terminat de realizat (bineinteles daca procesul a executat receive,
el poate continua doar pana cand era nevoie efectiv de datele cerute - in acest
moment el va fi blocat pana la primirea datelor).

3 Calculatoare cu memorie partajata


5.3.1 Prezentare generala
Datorita costurilor reduse, calculatoarele cu memorie partajata reprezinta una dintre
variantele de calculatoare paralele cu raspuns foarte mare. Structura de baza a acestora a fost
prezentata anterior fig 5.1, 5.2.
Caracteristica principala este reprezentata de spatiul unic de adresa. Indiferent de numarul
de module de memorie sau de tipul de retea de interconectare intre memorie si procesoare, toate
procesoarele vor avea acces la intreaga memorie si in mod uniform. Din aceasta caract. deriva si
un dezavantaj important: lipsa de scalabilitate.
Numarul de procesoare nu poate fi marit prea mult pentru ca apare o problema a
accesului concurent la memorie. Cu cat vor fi mai multe procesoare cu atat probabilitatea de
acces concurent la acelasi modul de memorie va fi mai mare, iar acest fapt duce la timpi de
asteptare mari, adica puterea de calcul a procesoarelor nu va fi utilizata eficient. Astfel au fost
propuse solutii in care se utilizeaza memorii cache locale, care sa reduca numarul de accese
concurente.
O alta propunere a cresterii gradului de scalabilitate se refera la modul propriu-zis de
organizare a memoriei comune. Astfel au aparut noi variante de calculatoare in care memoria cu
toate ca este partajata d.p.d.v logic de catre toate procesoarele existente in sistem, d.p.d.v fizic
este distribuita devenind o memorie locala a fiecarui procesor. Denumirea exacta a acestor tipuri
de calculatoare este Distributed Shared Memory. Dupa modalitatea completa de realizare
prezentata in sect. 5.1, o clasificare a calculatoarelor de acest tip este:
masini NUMA (Non Uniform Memory Access)
masini CC-NUMA (Cache Coerent Non Uniform Memory Access)
masini COMA (Cache Only Memory Access)

Granularitatea
Aceasta desemneaza dimensiunea unitatii de lucru alocate unui procesor. Daca tinem
seama de acest aspect putem clasifica paralelismul in 3 mari categorii:
- paralelism de granula mare sau grosier
- paralelism de granula medie
- paralelism de granula fina

Dimensiunea de lucru a unui procesor, deci tipul granularitatii, va duce la numarul si tipul
de procesoare cu care este dotat un calculator paralel.
Calculatoarele cu granula grosiera au putine procesoare dar acestea sunt in general
procesoare complexe. Unitatea de lucru alocata procesoarelor poate fi in acest caz un proces o
procedura sau corpul unei bucle dintr-un program. Calculatoarele din aceasta clasa au
performante foarte bune, dar si costul lor este deosebit de mare.
Calculatoarele cu granula fina presupun existenta paralelismului la nivelul evaluarii unei
expresii sau chiar a executiei unei instructiuni. Ele pot fi dotate cu mii sau zeci de mii de
procesoare ieftine, care pot executa instructiuni simple, in aceasta categorie intrand
calculatoarele SIMD, ariile sistolice, ariile cu front de unda. Tot in aceasta categorie se
incadreaza si procesoarele super scalare si arhitecturile VLIW. Intre calculatoarele cu granula
grosiera si cele cu granula fina se situeaza calculatoarele cu granula medie. Ele sunt poate cele
mai raspandite calculatoare paralele datorita faptului ca au un raport performanta pret foarte
bun.aceste calculatoare pot fi dotate cu sute de calculatoare ieftine si au performate ridicate.
Procese si fire de executie.
Definitia clasica a unui proces spune ca acesta este un program in executie . Daca
incercam sa caracterizam un proces, trebuie sa aratam ca el are un spatiu de adresa si un punct de
control. Procesul este entitatea fundamentala de planificare. Toate procesele sunt in competitie
pentru a primi acces la anumite resurse ale calculatorului cum ar fi memoria, procesorul,
dispozitivele de I/O.
Crearea unui proces implica o serie de actiuni din partea sitemului de operare:
- crearea si initializarea structurilor interne ale SO referitoare la proces.
- Alocarea unui spatiu de adresa, eventual si rezervarea unui spatiu de
evacuare(SWAP).
- Incarcarea programului in spatiu de adresa alocat.
- Introducerea noului proces creat in coada procese, gata de executie, pentru a putea
fi planificat.

In orice moment procesele se afla intr-o anumita stare. Ca raspuns la diferite evenimente
care apar in sistem procesele pot trece dintr-o stare in alta conform unei diagrame de tranzitie a
starilor. Simplificand lucrurile, identificam 3 stari de baza in care se poate afla un proces :
o Ready - gata de executie: procesul este pregatit pentru executie, dar
momentan procesorul este alocat altui proces.
o Running - in executie: procesul utilizeaza procesorul la momentul actual.
o Blocked blocat : procesul asteapta aparitia unui eveniment extern.

Clasificari ale calculatoarelor paralele


Se va prezenta o metoda de clasificare devenita clasica care apartine lu Michael J. Flynn
si are drept criteriu de clasificare, fluxurile de date si fluxurile de instructiuni. Fluxul de
instructiuni este o secventa de instructiuni asa cum sunt ele executate de procesor, iar fluxul de
date reprezinta o secventa de date ce cuprind datele de intrare, rezultatele temporare sau partiale,
prelucrate de fluxul de instructiuni.
In functie de numarul de fluxuri de date si instructiuni deosebim urmatoarele tipuri de
calculatoare:
- SISD - Single Instruction Single Data
- SIMD - Single Instruction Multiple Data
- MISD Multiple Instruction Single Data

- MIMD Multiple Instruction Multiple Data

-


Modelul PRAM
Modelul PRAM Paralel Random Access Machine este o generalizare a modelului RAM
(Random Access Machine) de calcul secvential. Pe scurt o masina PRAM poate fi privita ca p
masini RAM, secventiale, ce partajeaza o memorie comuna, fiecare putand accesa memoria
independent si intr-o perioada constanta. Comunicarea intre procesoare are loc prin intermediul
memoriei comune. Orice operatie de comunicare implica o scriere si o citire a unei locatii de
memorie, operatie care are loc de asemenea intr-un timp constant. In fig 2.5 este prezentata
schema de baza a masinii PRAM.

Modelul LogP
Acesta pleaca de la observatia ca in prezent majoritatea calculatoarelor paralele sunt
construite ca un set de procesoare dotate cu memorii locale, interconectate printr-o retea, dupa
cum se poate vedea in figura 2.6.(acesta fiind de fapt modelul general al calculatorului paralel cu
memorie distribuita). LogP este un model de programare pentru sisteme cu memorie distribuita,
in care procesoarele comunica prin schimb de mesaje.

Figura 2.6. Organizarea calculatoarelor paralele cu memorie distribuit


Modelul specifica principalii parametri ai modelului de comunicare intre procesoare, dar
nu face nicio ipoteza asupra topologiei retelei. Parametrii modelului sunt:
1. L limita superioara a latentei, adica a intarzierii unui mesaj intre procesorul sursa
si cel destinatie,mesaj ce contine 1 cuvant.
2. O overhead - masoara perioada in care un procesor este ocupat cu primirea sau
transmiterea unui mesaj. In aceasta perioada procesorul nu poate realiza calcule
propriu-zise.
3. g gap, intervalul minim de timp intre doua transmisii/ receptii consecutive de
mesaje. 1/g reprezinta largimea de banda disponibila per procesor pentru
comunicatie.
4. P numarul de procesoare si module de memorie.

Reteaua de comunicatie este presupusa a avea o capacitate finita, egala cu L/g, deci
numai un numar de cel mult L/g mesaje pot fi in tranzit de la un procesor sursa la unul destinatie.
Orice incercare de a transmite mesaje peste aceasta capacitate va duce la blocarea procesorului in
cauza. In acest model spre deosebire de PRAM procesoarele lucreaza asincron, iar intarzierea in
transmiterea unui mesaj nu este constanta, dar este limitata superior de L. O reprezentare
sugestiva a descrierii unei masini in modelul LogP este redata in figura 2.7.
Modelul BSP
Modelul BSP Bulk Syncronous Parallel a fost propus drept un model punte intre
hardware si software. Un calculator BSP este caracterizat prin:
- Un numar de procesoare fiecare dispunand de o memorie local.
- Retea de interconectare astfel incar un procesor sa poata avea acces la memoria altui
procesor. Acesta este considerata ca o cutie neagra, neluandu-se in seama topologia ei,
prorpietate foarte importanta pentru a asigura portabilitate algoritmilor.
- Un mecanism de sincronizare globala, sincronizare ce are loc la intervale de timp egale cu L,
unde L este un parametru de peridiocitate.

Conform acestui model calculul este privit ca o secventa de superpasi. In fiecare super
pas procesoarele executa calcule locale, transmit si primesc mesaje. La fiecare interval de L
unitati de timp, se face o verificare globala pentru a testa daca superpasul curent a fost terminat
de toate procesoarele. Daca acesta s-a incheiat se continua cu urmatorul superpas, iar daca nu
urmatorul interval de L unitati de timp este alocat superpasilor neterminati.
Termenul Bulk Syncronous provine de la caracterul modelului care se situeaza intre un
model total sincron (PRAM) si unul total asincron in care procesoarele lucreaza independent
unul de altul si se sincronizeaza doar atunci cand are loc un schimb de mesaje. Modelul BSP se
situeaza undeva intre aceste doua extreme: in interiorul unui superpas procesoarele lucreaza
asincron, dar sunt sincronizate la sfarsitul fiecarui superpas.
Exista mai multe variante, usor diferite, pentru calculul complexitatii unui algoritm
paralel folosind modelul BSP, variante din care se va prezenta doar una, datorita simplitatii ei.
Particularitatea aceste variante consta in aceea ca orice algoritm este alcatuit dintr-o secventa de
superpasi in care fiecare procesor, fie calculeaza ceva, fie participa la o relatie h, ambele
urmate de o sincronizare globala. Pe ipoteza ca superpasii sunt destinati fie calculelor, fie
comunicarii, (deci nu putem avea si calcule si comunicare intr-un superpas) se pierde oarecum
ceva din generalitatea modelului, dar se simplifica analiza acestuia. O relatie h este o
procedura de comunicare intre procesoare, in care orice procesor trimite cel mult un numar de
h mesaje catre alte procesoare si primeste cel mult h elemente de date.

Arii sistolice si arii cu front de umbra

Ariile sistolice sunt alcatuite dintr-un set de procesoare care stiu sa execute doar un nr
limitat de operatii simple. Procesoarele sunt interconectate intr-o structura ordonata, cum ar fi un
arbore, o retea bidimensionala sau o structura liniara. Denumirea acestora provine din
asemanarea lor cu sistemul circulator: asa cum inima pompeaza sange in sistemul circulator, asa
ariile sunt compactate? in aria sistolica. Aceste date sunt supuse unor prelucrari de catre fiecare
element de procesoare.
Comunicatia sistemului sistolic cu exteriorul are loc prin intermediul elementelor de procesare
situate la marginea ariei, acestea fiind si singurele elemente de procesare care dispun de
posibilitatea

S-ar putea să vă placă și