Sunteți pe pagina 1din 64

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL 2.1.

Etape de realizare a aplicaiilor paralele


Principalele etape de realizare a unui program paralel sunt: 1. Identificarea poriunilor aplicaiei care pot fi executate n paralel necesit: o nelegere n detaliu a aplicaiei; exploatarea oricrui paralelism specific aplicaiei; n cazul unui program secvenial preexistent, va fi probabil nevoie de restructurarea programului i/sau algoritmului, sau chiar utilizarea unui nou algoritm. 2. Descompunerea aplicaiei n mai multe pri, plecnd de la: domeniul datelor; funcionalitatea aplicaiei. 3. Faza de proiectare: poate fi influenat de tipul arhitecturii destinaie; se alege o paradigm de programare paralel; se determin comunicaiile ntre procese. 4. Compilarea, testarea i depanarea aplicaiei. 5. Optimizarea aplicaiei: msurarea performanelor; identificarea i localizarea problemelor care apar; mbuntirea performanelor

2.2. Tehnici de baz pentru realizarea aplicaiilor paralele


Pentru rezolvarea unei probleme pe un calculator paralel se pot alege mai multe tehnici de descompunere a unei probleme, funcie de: natura problemei; arhitectura calculatorului; limbajul disponibil. Tehnicile de baz utilizate in realizarea aplicaiilor paralele sunt: tehnica pipeline; paralelismul geometric;

48

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

paralelismul dup rezultat; ferma de procese. 1) Tehnica pipeline (figura 2.1):


activitatea Proc. 1 Proc. 2

Proc. n rezultate

date

...

Figura 2.1. se descompune activitatea ntr-o colecie de subactiviti (procese) care lucreaz n paralel asupra unor elemente succesive de date (datele trec de la un proces la altul); este specific arhitecturilor de tip MIMD. Exemplu: determinarea numerelor prime din setul 1, 2, . . ., n cu ciurul lui Eratostene (figura 2.2):
activitate Proc. 1
1, 2, . . . , n

Proc. 2

a
Proc. n Numere prime

...

Figura 2.2. Modul de procesare: Proc. 1 elimin multiplii lui 2, Proc. 2 elimin multiplii lui 3, Proc. 3 elimin multiplii lui 5, .a.m.d.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

49

Dac la un moment dat Proc.1 analizeaz numrul i, atunci Proc. 2 analizeaz numrul i-1; La ieire se obine secvena de numere prime. 2) Paralelismul geometric: se partiioneaz datele n submulimi, iar programul se structureaz astfel nct s se execute aceeai activitate n paralel asupra tuturor seturilor de date; se implementeaz, n special, pe arhitecturi SIMD, dar se poate i pe arhitecturi MIMD; Exemplu: determinarea numerelor prime ntre 1 i 109 1 a b c
Figura 2.3.

109

Modul de procesare: Primul proces caut toate numerele prime n intervalul [1,a], al doilea n intervalul (a,b], .a.m.d. Fiecare proces face ntreaga activitate, dar asupra unui subset de date; 3) Paralelismul dup rezultat (structuri de date active) Se poate aplica n situaiile n care un program produce ca rezultat o structur de date cu mai multe elemente componente, iar elementele rezultatului au o organizare i interdependen predictibil; Programul se va descompune n mai multe procese, fiecare proces ocupndu-se de calcularea unui element al rezultatului; Exemplu: algoritmul pentru nmulirea a dou matrice se poate concepe ca un program paralel cu cte un proces pentru fiecare element al matricei rezultat; 4) Ferma de procese model flexibil nrudit cu paralelismul dup rezultat, dar presupune, n general, crearea unui numr mai mic de procese;

50

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

se descompune programul ntr-un set de activiti (nu neaprat identice) care vor fi efectuate de un set de procese lucrtor (worker), numrul de procese stabilindu-se n funcie de numrul de procesoare disponibile; procesele lucrtor vor prelua din mulimea de activiti de efectuat la un moment dat, o activitate pe care o vor ndeplini, dup care vor prelua o alt activitate, .a.m.d. de obicei, alocarea activitilor se realizeaz de un proces master, a crui unic sarcin este distribuirea calculelor i colectarea rezultatelor; programele se execut n acelai mod, independent de numrul de procese lucrtor care trebuie s fie de cel puin 1.

2.3. Comunicarea ntre procese


Comunicarea ntre procesele dintr-un program paralel se poate realiza prin: variabile comune - n cazul sistemelor cu memorie comun; transmitere de mesaje - n cazul sistemelor cu memorie distribuit. Principalele tipuri de comunicaie prin mesaje sunt: Unul la unul (Point to Point); Unul la mai muli (One to Many Multicast); Unul la toi (One to All Broadcast); Mai muli la mai muli (Many to Many Multicast); Toi la toi (All to All Broadcast); Unul la toi personalizat (One to All Personalized); Toi la toi personalizat (All to All Personalized); Deplasare (Shift); Calcule colective Reductions. Comunicaia Unul la unul reprezint modalitatea de baz de comunicare ntre dou procese, n care un proces emitor trimite un mesaj ctre un proces receptor; mesajul conine, n general, informaii ca: adresa procesului receptor; lungimea mesajului; etichet , etc. comunicaia poate fi cu: cu blocare: procesul emitor / receptor ateapt pn ce mesajul a fost transmis; fr blocare: procesul i continu execuia chiar dac mesajul nu a fost nc transmis.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

51

Comunicaia Unul la mai muli (One to Many) nseamn c fiecare proces, la rndul su, trimite o informaie ctre mai multe procese. Comunicaia Unul la toi (One to All Broadcast) const n faptul c un proces trimite aceeai informaie ctre toate celelalte procese. Comunicaia Mai muli la mai muli (Many to Many) nseamn c unele procese, pot trimite o informaie ctre mai multe procese. Comunicaia Toi la toi (All to All Broadcast) nseamn c fiecare proces, la rndul su, trimite o informaie ctre toate celelalte procese. Comunicaia Unul la toi personalizat (One to All Personalized) const n faptul c un proces trimite informaii distincte ctre celelalte procese. Comunicaia Toi la toi (All to All Personalized) nseamn c fiecare proces, la rndul su, trimite informaii distincte ctre celelalte procese. Comunicaia de tip Deplasare (Shift) const n faptul c fiecare proces transmite o informaie ctre vecinul su, iar transmisia se poate face: ntr-un sens sau altul; liniar sau circular. Calculele colective (reductions) const n faptul c un membru al unui grup de procese colecteaz date provenind de la ceilali membri din grupul respectiv. Acest tip de comunicare se face, de regul, pentru efectuarea unei operaii matematice cum ar fi: min, max, adunare, nmulire, etc.

2.4. Consideraii privind proiectarea aplicaiilor de procesare paralel


2.4.1. Factori de baz Proiectarea aplicaiilor paralele trebuie s in cont de 4 factori principali care se prezint n continuare. 1. ncrcarea echilibrat a procesoarelor (load balancing) se refer la alegerea unei distribuii a task-urilor pe procesoare astfel nct timpul de execuie s fie optim. Performanele unei aplicaii se pot mbunti dac activitatea este uniform distribuit. n acest scop, dac exist task-uri de dimensiuni diferite se poate pstra, de exemplu, un pool de task-uri din care s se distribuie procesoarelor care sunt disponibile;

52

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

O ncrcare echilibrat a procesoarelor este mai dificil de realizat n arhitecturi heterogene i dac exist simultan mai muli utilizatori. 2. Granularitatea determin dimensiunea unitii de program care se execut sub forma unui proces pe un procesor. Exist 4 nivele de granularitate: a. Operaie - unitatea de execuie este o operaie (aritmetic sau logic ); b. Instruciune - unitatea de execuie este o instruciune (sau o secven de instruciuni); c. Iteraie - unitatea de execuie este un ciclu; d. Subprogram - unitatea de execuie este un subprogram. Cele mai multe limbaje concurente tradiionale prezint granularitate la nivel de subprogram (granularitate brut). Pentru a exploata eficient performanele sistemelor paralele, (unele dintre ele cu faciliti vectoriale), nu este suficient granularitatea la nivel de subprogram. Algoritmii paraleli i calculatoarele paralele moderne permit mai multe nivele poteniale de granularitate, de la cea mai fin spre cea mai brut. Teoretic, cele mai bune performane sunt date de granularitatea cea mai fin. Practic, exist factori care limiteaz nivelul de granularitate i care determin granularitatea optim. Acetia sunt dai de: caracteristicile intrinseci ale algoritmului; numrul de procesoare disponibile; costul pentru planificarea activitilor paralele; costurile pentru comunicare i sincronizare. 3. Operaiile de I/O reduc, n general, gradul de paralelism al unei aplicaii. Nu exist nc sisteme paralele de intrare-ieire disponibile. Pentru procesarea operaiilor de intrare-ieire se recomand: reducerea pe ct posibil a operaiilor I/O; realizarea operaiilor de I/O n poriunile secveniale ale aplicaiei. 4. Configuraia arhitecturii destinaie. Obinerea unor performane bune ale unei aplicaii paralele presupune utilizarea unor algoritmi adaptai arhitecturii respective. Pentru aceasta, este nevoie ca programatorul s ia n considerare factori ca: numrul procesoarelor; caracteristicile memoriei; ncrcarea sistemului.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

53

2.4.2. Depanarea aplicaiilor paralele Este mult mai dificil dect n cazul aplicaiilor secveniale. Se recomand o abordare modular a proiectrii i implementrii aplicaiei, iar depanarea trebuie s in cont att aspectele computaionale, ct i aspectele legate de comunicarea ntre procese. 2.4.3. Paradigme ale programrii paralele Paradigmele programrii paralele sunt: a. Paralelismul de control (paralelism funcional) se caracterizeaz prin faptul c fiecare procesor execut o sarcin de calcul diferit i comunic cu celelalte procesoare pentru obinerea rezultatului final al aplicaiei. El se aplic atunci cnd structurile de date ale programului sunt neregulate, iar operaiile sunt variate i diferite. Paralelizarea se realizeaz prin partiionarea programului n mai multe sarcini de calcul (task-uri) care sunt executate n paralel independent i asincron pe procesoare diferite. Este adecvat arhitecturilor de tip MIMD; Este prezent i n limbajele de programare concurent. Procesele pot interaciona ntre ele, interaciunea fiind exprimat explicit de programator prin utilizarea unor primitive de sincronizare i comunicare. Unul dintre modelele cele mai rspndite este comunicarea prin mesaje (message passing), n care procesele comunic prin transmisia i recepia de mesaje. Transmisia de mesaje apare specificat n unele limbaje de programare concurent (OCCAM, CSP). O alt abordare mai recent este crearea de biblioteci de funcii pentru comunicarea prin mesaje care sunt disponibile pentru limbaje de programare ca: Fortran, C, C++. Exemple: MPI, MPL, PVM. Cea mai simpl form de paralelism de control este implementarea pipeline a algoritmilor, n care algoritmul este divizat ntr-un numr de etape de execuie, fiecare etap fiind atribuit unui procesor al sistemului. Datele de ieire de la o etap reprezint date de intrare pentru etapa urmtoare, ntocmai ca n cazul execuiei pipeline a instruciunilor. b. Paralelismul de date este un paralelism structural i se aplic la acele programe n care sunt definite structuri de date regulate asupra crora se execut aceleai operaii. Se obine prin aplicarea simultan a unei aceleiai operaii asupra unora sau tuturor elementelor dintr-un ansamblu de date. Se caracterizeaz prin:

54

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

execut un flux unic de instruciuni, deci, procesoarele (virtuale) execut aceeai instruciune sincron n regim lock step (fiecare asupra unor elemente diferite din setul de date); programele n limbajele cu paralelism de date (data-paralel) utilizeaz un spaiu global de nume, fr a conine n mod explicit primitive pentru transmiterea de mesaje, compilatorul fiind cel care va genera cod paralel prin includerea operaiilor de comunicare de nivel sczut, acolo unde este necesar; programatorii sunt scutii de sarcina sincronizrilor, complexitatea programelor fiind redus; programele conin construcii paralelism de date de nivel nalt (programe data-paralele), care vor fi convertite de ctre compilator n apeluri la o bibliotec de comunicare prin mesaje; este adecvat implementrii algoritmilor care presupun manipularea sincron a structurilor de date distribuite (tablouri multidimensionale, grafuri, etc.); semantica complet sincron reduce complexitatea programelor i uureaz depanarea acestora; limbajele data-paralel permit scrierea unui software paralel portabil; este adecvat arhitecturilor SIMD i vectoriale, dar poate fi implementat i pe arhitecturi MIMD; limbajele data-parale necesit tehnici i instrumente specifice pentru monitorizarea i msurarea performanelor. Analiz comparativ Alegerea unei anumite paradigme de programare paralel trebuie s se fac plecnd de la urmtoarele criterii de evaluare: Maturitatea; Uurina de programare; Flexibilitatea; Eficiena; Scalabilitatea; Portabilitatea; Operaiile de I/O; Costul. Avnd n vedere principalele tendine actuale ale programrii paralele, ne vom rezuma la a analiza comparativ bibliotecile de comunicare prin mesaje (message passing) i limbajele de tip paralelism de date (dataparalel).

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

55

1. Maturitatea. Selecia unei paradigme de programare sau a unei implementri particulare a acesteia trebuie s in cont de gradul de maturitate al compilatorului sau a bibliotecii de funcii ce urmeaz s fie utilizate. Aspecte vizate: varietatea funcional; uurina n dezvoltarea aplicaiilor; lipsa de bug-uri; nivelul de suport asigurat. Bibliotecile pentru comunicare prin mesaje au un grad nalt de maturitate ca urmare a folosirii lor timp ndelungat att n cercetare ct i n industrie, funcionalitate relativ simpl i uor de implementat. Compilatoarele pentru limbajele data-paralel au un grad de maturitate mai sczut, nu includ, n general, toate trsturile limbajelor, conin adesea greeli, sunt foarte complexe i dificil de realizat. 2. Uurina n programare Aspectele vizate sunt: capacitatea de a dezvolta software rapid i eficient; costuri mici n faza de ntreinere a aplicaiilor. Comunicarea prin mesaje se caracterizeaz prin: dezvoltarea aplicaiilor, cu excepia celor foarte simple, implic un efort considerabil, comparabil cu programarea n limbaje de asamblare; programatorul trebuie s implementeze explicit schema de distribuie a datelor i toate comunicrile ntre procese; programatorul trebuie s rezolve toate dependenele de date ntre procese i este responsabil de toate comunicrile i sincronizrile ntre procese. Paralelismul de date se caracterizeaz printr-o mai mare uurin n programare; distribuia datelor este simpl i se realizeaz, n general, prin directive ale compilatorului; toate comunicrile i sincronizrile ntre procese sunt n responsabilitatea compilatorului i sunt invizibile programatorului.

56

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

3. Flexibilitatea. n scrierea programelor paralele, flexibilitatea poate fi abordat n funcie de: caracteristicile arhitecturii destinaie; uurina n fazele de dezvoltare i ntreinere; performanele dorite. Exist diferite tipuri de abordri, printre care, mai importante sunt: Paralelismul funcional, atunci cnd exist task-uri cu cod diferit care se execut n acelai timp; Paralelismul de tip master-slave, atunci cnd un proces master asigneaz task-uri unor procese slave; Paralelismul de tip SPMD (Single Program, Multiple Data), atunci cnd acelai cod este replicat la fiecare proces. Paradigma Comunicare prin mesaje este mai flexibil, permind toate aceste abordri. Paradigma Paralelism de date nu permite dect programarea de tip SPMD. 5. Eficiena unei aplicaii este funcie de distana la care se plaseaz programatorul fa nivelul sistem. n paradigma Comunicare prin mesaje: eficiena obinut este adesea strns legata de nivelul de performan al arhitecturii destinaie; performanele unei aplicaii sunt puternic influenate de abilitatea programatorului, pentru c el este responsabil de implementarea schemei de distribuie a datelor i a proceselor, precum i de toate comunicrile ntre procese. n paradigma Paralelism de date: eficiena depinde de compilator i de sistemul de rutine care gestioneaz toate comunicrile i sincronizrile ntre procese; din cauza gradului de maturitate relativ redus a acestor compilatoare, codul produs nu este ntotdeauna optim. 6. Scalabilitatea. Ambele paradigme permit scrierea de aplicaii scalabile. n paradigma Comunicare prin mesaje, programatorul este responsabil de scrierea unui software care s poat rula cu uurin pe un numr mai mare de procesoare ale arhitecturii destinaie. n paradigma Paralelism de date scalabilitatea este o caracteristic furnizat automat de ctre compilator.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

57

7. Portabilitatea. Pentru a asigura portabilitatea unei aplicaii este necesar alegerea unui standard. Astfel, n paradigma Comunicare prin mesaje se aleg: MPI, PVM, iar n paradigma Paralelism de date - HPF (High Performance Fortran). 8. Operaii de I/O. Operaiile de intrare-ieire reprezint un domeniu din programarea paralel insuficient dezvoltat pn n prezent. Suportul oferit pentru operaiile de I/O nu este dependent de o anumit paradigm de programare folosit, ci este funcie de particularitile bibliotecii de comunicare prin mesaje, respectiv ale compilatorului paralelism de date utilizat. 9. Costul reprezint unul dintre factorii importani n alegerea unui software. Astfel, bibliotecile de comunicare prin mesaje sunt, n general, gratuite, iar compilatoarele de tip paralelism de date sunt considerate o afacere competitiv i nu sunt, n general, gratuite.

2.5. Analiza performanelor i a complexitii algoritmilor de procesare paralel


2.5.1. Parametri generali
Msurarea i analiza algoritmilor paraleli difer fa de algoritmii secveniali din dou motive: a. Complexitatea inerent a sistemelor paralele este caracterizat prin: volumul mare de date; multiplicarea posibilitilor de blocare; diversitatea resurselor hardware; reeaua de interconectare a procesoarelor; b. Efectele instrumentrii asupra comportrii sistemului. Algoritmii secveniali sunt evaluai avnd n vedere timpul de execuie care este exprimat n funcie de numrul datelor de intrare. Un algoritm paralel poate fi evaluat numai n contextul arhitecturii calculatorului paralel pentru care a fost proiectat, deoarece timpul de execuie depinde nu numai de dimensiunea intrrii ci i de arhitectur i de numrul de procesoare. Timpul de execuie secvenial (Ts) pentru rezolvarea unui algoritm secvenial este considerat ca numrul de operaii de baz sau pai de calcul executai de algoritm n cazul cel mai defavorabil. Definirea unui pas de calcul este in funcie de modelul teoretic considerat, dar, n general, operaii

58

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

ca: adunarea, comparaia sau interschimbul a dou numere, sunt considerate ca operaii de baz i necesit acelai numr de ciclii (uniti de timp) pe un calculator secvenial. Timpul de execuie paralel (Tp) este dat de durata necesar pentru rezolvarea unei probleme pe un calculator paralel, ntre momentul de start al execuiei i momentul n care ultimul procesor termin execuia. Aceast durat se estimeaz prin numrarea a dou tipuri de pai: de calcul i de comunicaie, in cazul cel mai defavorabil. Un pas de calcul este dat de o operaie aritmetic sau logic executat de un procesor. Un pas de comunicaie este dat de durata necesar pentru transferul unei date prin intermediul memoriei partajate sau ca mesaj prin reeaua de interconectare. In analiza prin modelele PRAM, timpii de comunicaie sunt ignorai. In analiza algoritmilor se folosesc, n general, urmtoarele trei tipuri de funcii: a) Funcia exponenial: f(x) = ax, n care x R, a Z, a > 1; b) Funcia polinomial: f(x) = xb, n care x R, b Z, b > 0, b fiind gradul polinomului. O funcie liniar este o funcie polinomial cu b = 1. Dac o funcie f este suma a dou funcii polinomiale g i h, aceasta este tot o funcie polinomial al crei grad este maximul dintre gradele lui g i h; c) Funcia logaritmic: f(x) = logb x, n care x R, b Z, b > 1. Funciile ce se exprim ca suma a dou sau mai multe funcii sunt cele mai des utilizate n analiza algoritmilor. O funcie f(x) domin o funcie g(x), dac f(x) crete mai repede dect g(x), deci dac raportul f(x)/g(x) este o funcie monoton cresctoare. Funcia exponenial domin funcia polinomial, iar funcia polinomial domin funcia logaritmic. Relaia de dominan este tranzitiv, deci funcia exponenial domin funcia logaritmic. n general, funcia timp de execuie (secvenial sau paralel) ca funcie de dimensiunea intrrii are o expresie complicat, iar analiza ei este dificil. De aceea este util s se foloseasc o expresie mai simpl, cu o comportare cunoscut ce aproximeaz asimptotic comportarea funciei considerate. n analiza algoritmilor dup funcia timp se utilizeaz limita asimptotic superioar, limita asimptotic inferioar i ordinul exact al funciilor, noiuni ce vor fi prezentate n continuare.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

59

Limita asimptotic superioar. O funcie g(x) este limita asimptotic superioar a funciei f(x) dac c R+ i x0 R, astfel nct, pentru x x0, se verific relaia f(x) cg(x). n acest caz, se spune c funcia f(x) este n ordinul lui g(x) i se noteaz astfel: f(x) = O(g(x)). Limita asimptotic inferioar. O funcie g(x) este limita asimptotic inferioar a funciei f(x) dac c R+ i x0 R, astfel nct, pentru x x0, se verific relaia f(x) cg(x). Se noteaz astfel: f(x) = (g(x)).

c1, c2 R+ i x0 R, astfel nct, pentru x x0, se verific relaia c1g(x) f(x) c2g(x). Se noteaz astfel: f(x) = (g(x)).
Analiznd definiiile prezentate mai sus, se poate spune c: Dac f(x) = (g(x)) i f(x) = O(g(x)), atunci f(x) = (g(x)) (2.1) Folosind aceste notaii, se poate face concentrarea analizei asupra termenilor dominani ai unei expresii i ignorarea termenilor nedominani i a constantelor multiplicative. Timpul de execuie secvenial se mai numete complexitate secvenial de timp (sequential time complexity), iar timpul de execuie paralel (a unui algoritm paralel) se mai numete complexitate paralel de timp (parallel time complexity). Pentru rezolvarea aceleiai probleme, timpul de execuie paralel trebuie s fie mai mic dect timpul de execuie secvenial, cel puin asimptotic. Vom considera numai algoritmii determiniti, adic acei algoritmi n care fiecare pas de calcul este determinat n mod unic, n conformitate cu modul n care programul este executat pe calculatoarele reale. Complexitatea spaial M (space complexity) a unui algoritm se definete n mod similar, ca o funcie de dimensiunea intrrii, dar se refer la dimensiunea memoriei necesare pentru stocarea datelor problemei, fr s se includ codul programului i datele de intrare. Clasa P reprezint clasa problemelor rezolvabile prin algoritmi determiniti n timp polinomial. Complexitatea NP. Un algoritm are o complexitate de timp polinomial dac exist un polinom p(x), astfel nct complexitatea de timp a algoritmului este n O(p(x)), pentru orice dimensiune x a problemei.

Ordinul exact. O funcie f(x) este ordinul exact al funciei g(x) dac

60

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

Mulimea problemelor care au o complexitate polinomial este numit clasa P (P-class sau polynomial class). Mulimea problemelor rezolvabile prin algoritmi nedeterminiti n timp polinomial este numit clasa NP (NP-class sau nondeterministic polynomial class). Clasa NPC (NP Complet) reprezint clasa problemelor complet nedeterministe. tiind c algoritmii determiniti sunt un caz particular al algoritmilor nedeterminiti, se poate scrie, P NP. Din punct de vedere computaional, problemele din mulimea P sunt rezolvabile, iar problemele din mulimea NP P sunt nerezolvabile. Nu se tie nc dac P = NP sau P NP. Simularea unui algoritm nedeterminist printr-un algoritm determinist poate s necesite un timp exponenial i de aceea, problemele din mulimea NP-P sunt caracterizate prin timp de soluionare exponenial. Deoarece cei mai muli teoreticieni n tiina calculatoarelor cred c P NP , se poate scrie: NPC NP i NPC P = . (2.2)

2.5.2. Parametri de performan ai procesrii paralele (lucrul, accelerarea, eficiena, costul, redundana, utilizarea, calitatea) n evaluarea unui sistem paralel se au n vedere: ctigul de timp n execuie (accelerarea), eficiena de utilizare a procesoarelor i costul de execuie paralel a algoritmilor paraleli n raport cu execuia secvenial. Lucrul (work W) se definete ca numrul total de operaii care se execut n cadrul unui algoritm paralel. Acest parametru W(n) este dependent de dimensiunea intrrii, n i de numrul procesoarelor W(p). Accelerarea paralel (parallel speedup Sp). Este primul parametru ce se analizeaz n evaluarea unui sistem paralel. El se definete ca raportul dintre timpul de execuie n cazul cel mai defavorabil al celui mai rapid algoritm secvenial cunoscut pentru o problem dat (cel mai scurt timp), i timpul de execuie paralel, de asemenea, n cazul cel mai defavorabil:

Sp =

TS TP

(2.3)

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

61

Teoretic, conform celor prezentate n paragraful 1.3.1, relaia (1.1), accelerarea nu poate depi numrul de procesoare p spre care tinde asimptotic ( 1 S p p ). O accelerare mai mare dect p s-ar putea obine dac fiecare procesor ar necesita un timp mai mic dect Ts/p uniti de timp. n acest caz, rezult c un singur procesor ar putea rezolva problema ntr-un timp mai mic dect Ts, ceea ce contrazice ipoteza din definiia acceleraiei paralele. In practic, o accelerare mai mare dect numrul p de procesoare este posibil (accelerare supralinear) datorit construciei hardware care pune algoritmul serial ntr-o situaie mai defavorabil de execuie. Un astfel de caz poate fi atunci cnd un algoritm utilizeaz un volum foarte mare de date ce nu pot fi stocate n memoria principal a unui calculator secvenial, fiind nevoit s utilizeze memoria secundar cu timp de acces mult mai mare. Dac este executat pe un calculator paralel, distribuirea datelor la toate cele p procesoare, poate face ca fiecrui procesor s-i revin un volum de date acceptabil i s poat fi memorat n memoria proprie. In cele ce urmeaz, nu vom lua n considerare accelerrile supralineare datorate memoriilor ierarhice. Eficiena paralel (parallel efficiency Ep) se definete ca raportul dintre accelerarea paralel i numrul de procesoare:

Ep =

Sp p

Ts pT p

(2.4)

Conform celor precizate mai sus, eficiena este mai mic, dar tinde asimptotic ctre o, funcie ce depinde de gradul de utilizare al procesoarelor. Costul paralel (parallel cost Cp) se definete ca suma timpilor consumai de toate procesoarele pentru rezolvarea algoritmului. Deci, produsul dintre timpul de execuie paralel i numrul de procesoare: Cp = p Tp (2.5) Deoarece n cazul unui algoritm secvenial, p = 1, costul Cs = Ts. Pornind de la aceast consideraie, eficiena se mai poate exprima ca raportul dintre costul secvenial i costul paralel: C Ep = S (2.6) Cp Un algoritm paralel pentru rezolvarea unei probleme este optimal din punct de vedere al costului, dac costul acestuia este proporional cu timpul

62

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

de execuie al celui mai rapid algoritm secvenial cunoscut pentru acea problem: pTp = kTs i eficiena devine: (2.7)

TS 1 = = O(1) (2.8) p pT p k Expresia (2.8) arat c eficiena unui algoritm paralel cost-optimal este constant n raport cu dimensiunea problemei i cu numrul de procesoare utilizat. Ep = =
Redundana (Redundancy Rp) se definete ca raportul dintre lucrul total al procesoarelor paralele i lucrul total al unui calculator secvenial necesar pentru rezolvarea algoritmului:

Sp

Rp =

W ( p) W (1)

(2.9)

Utilizarea (Utilization Up) se definete ca raportul dintre lucrul total al procesoarelor paralele i costul paralel:

Up =

W ( p) W ( p) = Cp pT p
Ts3 Ts3 = C pW ( p ) pT pW ( p )

(2.10)

Calitatea (Quality Qp) se definete prin relaia:

Qp =

(2.11)

ntre parametri prezentai mai sus exist urmtoarele relaii ce se pot uor demonstra:

U p = Rp E p Qp = E p Sp Rp
(2.12)

1 Ep U p 1 p 1 1 Rp p Ep Qp S p p

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

63

2.5.3. Costul suplimentar de calcul paralel


Costul suplimentar de calcul paralel (overhead -To) se definete ca acea parte din costul paralel care nu intervine n cel mai rapid algoritm secvenial de rezolvare a unei probleme date: To = Cp Ts = p Tp Ts (2.13) Este timpul total, consumat de toate procesoarele, n plus fa de timpul necesar pentru cel mai rapid algoritm secvenial i nglobeaz ntr-o singur expresie toate sursele care contribuie la ineficiena sistemelor paralele. Principalele surse care determin costul suplimentar sunt: ncrcarea neechilibrat a procesoarelor, calculele suplimentare i comunicaia ntre procese. ncrcarea neechilibrat a procesoarelor (load imbalance) este determinat de urmtorii factori: a) O problem, de cele mai multe ori, nu poate fi mprit n sarcini de calcul (task-uri) absolut egale, care apoi s fie repartizate procesoarelor. Deci, unele procesoare pot fi inactive, n timp ce altele sunt n execuie. b) Necesitatea impus de un program ca mai multe procesoare s se sincronizeze ntr-un punct al execuiei. Aceasta impune ca procesoarele care au terminat execuia task-ului mai devreme, s atepte pn cnd ultimul procesor ajunge n punctul de sincronizare. Deci, apare un timp suplimentar de ateptare. c) Variaia gradului de paralelism n rezolvarea unei probleme. Este dat de faptul c numrul de procesoare care pot fi folosite pentru rezolvarea unei probleme, variaz n diferite faze ale execuiei. Deci, sunt faze n care nu se pot utiliza toate procesoarele sistemului. Cazul cel mai defavorabil apare atunci cnd o anumit parte a unei probleme nu poate fi paralelizat, ea fiind executat pe un singur procesor. O astfel de situaie este exprimat de legea lui Amdahl [1967], care presupune c, din totalul operaiilor executate secvenial n Ts pai de calcul, exist o fraciune f care nu poate fi paralelizat, restul de (1- f) pai putndu-se executa pe un numr de p procesoare. n aceste condiii, expresia accelerrii paralele devine:

Sp =

TS p = T (1 f ) f ( p 1) + 1 TS f + S p

(2.14)

64

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

Analiznd relaia (2.14) se observ c S p

1 atunci cnd p . f

Deci, accelerarea maxim ce se poate obine ntr-un sistem paralel care rezolv o problem din care o fraciune f nu poate fi paralelizat este 1/f , indiferent de numrul procesoarelor din sistem. Diagramele din figura 2.4 arat curbele de variaie a accelerrii n funcie de numrul de procesoare i de parametrul f anterior definit. Sursa aceasta de cost suplimentar depinde mai puin de modelul calculatorului paralel, natura problemei de rezolvat avnd cea mai mare pondere. Deci, ea trebuie luat n calcul la toate modelele teoretice de procesoare paralele.
Accelerarea (S)

1024 256 64 16

f=0

f = 0.01

f = 0.1 4 1 f = 0.9 1 4 16 64 256 1024


Numr de procesoare (p)

2.4. Accelerarea paralel conform legii lui Amdahl Din legea lui Amahdl se poate deduce urmtorul corolar: Un numr mic de operaii seriale pot limita sensibil viteza atins de un calculator paralel. Astfel, dac 10% din calcul trebuie s se execute serial, atunci viteza maxim ce poate fi atins este de 10, indiferent de numrul procesoarelor. Calculele suplimentare apar n cazul n care cel mai rapid algoritm secvenial pentru o problem dat nu poate fi paralelizat. Deci, va fi nevoie

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

65

s se utilizeze un algoritm mai lent, dar mai uor de paralelizat. Dac considerm c Ts este timpul de execuie al celui mai rapid algoritm secvenial, dar neparalelizabil, pentru o problem dat, iar Ts1 este timpul de execuie al unui algoritm mai lent, dar paralelizabil, pentru aceeai problem, costul suplimentar de calcul paralel este: Ts1 - Ts (2.15)

O alt cauz de apariie a unor calcule suplimentare este atunci cnd rezultatele unor calcule ale unor procesoare nu pot fi utilizate direct de alte procesoare care pot fi diferite de primele, i deci, implic o preprocesare a lor. Comunicaia ntre procesoare consum un timp de procesare care constituie cea mai important surs de cost suplimentar. Considernd c fiecare procesor consum un timp Tc pentru efectuarea comunicaiilor, atunci costul suplimentar care se datoreaz comunicaiei ntre procesoare este p Tc. Dar, s-a convenit c n modelele teoretice se ignor timpii de comunicaie. Deci, n cazul algoritmilor PRAM, el nu intervine i se neglijeaz.

2.5.4. Modelul grafurilor orientate aciclice (work-depth - WT) pentru calculul complexitii Analiza complexitii algoritmilor paraleli presupune folosirea unor modele formale cu ajutorul crora s se permit evaluarea parametrilor de performan prezentai anterior (timpul de execuie, lucrul, accelerarea etc.). Modelele formale sunt dependente de caracteristicile mainilor paralele (au fost prezentate n capitolul 1) pe care se execut. Dar, folosirea unui model particular care s surprind ct mai fidel caracteristicile fiecrei categorii de maini este nepractic, datorit numrului mare de modele care ar fi necesare. Folosirea unui numr mic de modele abstracte, care nu ncearc s reproduc fidel comportarea vreunei maini paralele particulare, ofer avantajul c algoritmii dezvoltai pe baza lor pot fi tradui cu uurin n programe care se dovedesc eficiente pe mainile paralele reale. Un model teoretic foarte mult utilizat este modelul PRAM (prezentat n paragraful 2.1) orientat spre arhitectura mainii. O alternativ la utilizarea unor modele orientate pe categorii de maini este folosirea unor modele orientate spre algoritmi. Fr a ine seama de particularitile sistemelor de calcul paralele i distribuite pe care

66

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

urmeaz a fi executai algoritmii dezvoltai, modelele faciliteaz exprimarea fr constrngeri artificiale a rezolvrii problemelor, exploatnd la maximum paralelismul intrinsec al problemelor. Un astfel de model, foarte des utilizat este cel denumit lucru-adncime. O categorie foarte larg de calcule pot fi reprezentate prin grafuri orientate aciclice (arbori binari algebrici) respectnd regulile urmtoare: fiecare intrare este reprezentat printr-un nod terminal (frunz); fiecare operaie este reprezentat ca un nod al arborelui (cu excepia nodurilor frunz), operanzii fiind reprezentai ca intrri n noduri; ieirea este reprezentat printr-un nod rdcin. n figura 2.6. se prezint un graf orientat aciclic care descrie un algoritm de calcul al sumei elementelor unui tablou unidimensional cu 23 elemente. Prin graf sunt descrise operaiile pe care le execut algoritmul precum i constrngerile de preceden asupra ordinii n care acestea sunt executate. Acest model, care este independent de arhitectur i de numrul de procesoare, pune n eviden dou aspecte: lucrul (W) efectuat de algoritm (numrul total de operaii); adncimea (A) reprezentat prin lungimea celui mai lung lan de dependene secveniale din algoritm. Aceasta se poate calcula numrnd operaiile de efectuat pe calea ce pornete de la orice frunz, pn la rdcin. Generaliznd, pentru n numere (elemente ale tabloului) sunt necesare n 1 operaii, iar adncimea se calculeaz cu relaia:

A = log n
Paralelismul algoritmului(P) este dat prin raportul

(2.16)

P=

W A

(2.17)

7 = 2,33 . 3 Modelul prezentat mai sus poate fi analizat, indiferent de arhitectur, considernd numrul de uniti de timp necesare execuiei algoritmului, n fiecare unitate de timp executndu-se n paralel orice numr de operaii. Astfel, numrul total de uniti de timp necesare pentru execuie complet este log n, iar timpul total de execuie paralel este Tp(n) = O(log n). n prima unitate de timp (iteraia 1) sunt executate n paralel n/2 operaii, n

n exemplul din figura 2.5, acest raport este P =

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

67

iteraia i se execut

singur operaie. Deci, lucrul efectuat de algoritm pentru execuie complet este:

n , 1 i log n, iar n ultima unitate de timp are loc o 2i

W (n) = n 1 =
i =1

log n

n = O ( n) 2i
x[5] + x[6]

(2.18)

x[1] +

x[2]

x[3] +

x[4]

x[7] +

x[8]

+ + Figura 2.5.

Numrul modelelor ce pot fi utilizate pentru dezvoltarea algoritmilor paraleli este relativ mare. Fiecare model are caracteristicile sale particulare, ceea ce implic o analiz special, particular. Dar, din fericire, exist deseori tehnici automate de traducere a algoritmilor de la un model la altul. Deoarece s-a ales ca model principal de analiz a complexitii, modelul PRAM prezentat n capitolul 1, este foarte important dezvoltarea unei tehnici de translatare a unui model n modelul PRAM. O astfel de tehnic este dat de teorema lui Brent pentru conversia unui algoritm work-depth (WT) ntr-un algoritm PRAM.

2.5.5. Teorema lui Brent


Orice algoritm WT cu timpul Tp(n) i lucrul W(n) poate fi simulat pe un model PRAM cu p procesoare n cel mult Tp(n,p) pai paraleli:

W ( n) T p ( n, p ) = + T p ( n) p

(2.19)

68

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

Demonstraie: Fie Wi(n) numrul operaiilor efectuate concurent n pasul i, W ( n) 1 i Tp(n). Aceste operaii se mpart n grupe de cte p operaii, p cu excepia ultimei grupe care poate avea mai puine, datorit eventualei mpriri inexacte. n fiecare grup, o operaie j este alocat procesorului cu indexul j (1 j p). Cu aceste precizri, numrul total de pai paraleli n care algoritmul poate fi simulat este:
T (n) Wi ( n ) p Wi ( n ) W ( n ) T p (n, p) = + T p ( n) + 1 p i =1 p p i =1 Tp (n)

Observaie. n demonstraie s-a presupus c sincronizarea este implicit. Aceasta implic faptul c nu se vor actualiza membrii stngi ai asignrilor pn nu se evalueaz toate expresiile din membrii drepi, ceea ce impune introducerea n algoritm a unor variabile temporare de sincronizare.

2.6. Tehnici utilizate n proiectarea algoritmilor de procesare paralel


2.6.1. Consideraii generale
n comparaie cu calculatoarele seriale, calculatoarele paralele permit o mai mare libertate de expresie n ceea ce privete analiza unei probleme i programarea ei. Pentru nelegerea modului de algoritmizare i programare paralel trebuie pornit de la urmtoarele principii generale: a) n ncercarea de soluionare n paralel a unei probleme, cel mai simplu procedeu este acela de a rescrie un algoritm serial de rezolvare a ei prin utilizarea unor obiecte matematice de tipul vectorilor i matricelor, aa fel nct, mai multe date sau seturi de date s poat fi procesate simultan; b) Cutarea i utilizarea unei metode iterative de rezolvare a unei probleme, tiut fiind c o astfel de problem posed un grad de paralelizare mult mai ridicat dect o metod direct, neiterativ; c) ntregul calcul trebuie divizat n uniti mai mici care se distribuie apoi ntre procesoare. Tehnicile care vor fi prezentate n paragraful de fa se vor baza pe acest principiu. Un program paralel descrie cel puin dou procese cooperante. Deosebirea esenial dintre un program secvenial i un program paralel este

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

69

aceea c, dac la execuia unui program secvenial exist un singur fir al controlului (thread of control), la cea a unui program paralel exist mai multe fire, cte unul pentru fiecare proces. nainte de abordarea structurii principalelor tipuri de algoritmi paraleli se va prezenta, pe scurt, modul de descriere a algoritmilor. Pentru descrierea ct mai facil a algoritmilor paraleli vom folosi un limbaj formal de nivel nalt ce combin textul de descriere a operaiilor cu construcii larg rspndite de programare foarte asemntoare limbajului C. Structura unui algoritm paralel este format din dou tipuri de operaii: secveniale i paralele. Operaiile secveniale vor fi descrise prin instruciuni similare celor din limbajul C, cum ar fi: for, if ... else, while, instruciuni de atribuire, de intrare-ieire, etc. Operaiile paralele se vor exprima prin dou tipuri de construcii paralele. Execuia n paralel de ctre mai multe procesoare specificate printr-o list, a unei liste de instruciuni ce aparin unei operaii, se va face utiliznd urmtoarea construcie:

forall <lista_de_procesoare> do
<list_instruciuni>

endfor
n care: forall i endfor sunt cuvinte rezervate pentru nceputul, respectiv sfritul execuiei unui program paralel i concurent. Execuia lui forall se termin (endfor) atunci cnd toate procesoarele i ncheie execuia. Toate variabilele declarate nainte de forall sunt comune tuturor proceselor programului paralel. n orice proces pot fi declarate i variabile locale, acestea fiind valabile numai n procesul n care apare declaraia lor. Execuia n paralel a mai multor instruciuni specificate printr-o list va fi descris printr-o construcie de forma urmtoare, presupunnd c fiecare secven de instruciuni din list poate fi executat pe un procesor separat:

parbegin
<S1 // S2 // . . . // Sn> parend n care: parbegin i parend sunt cuvinte rezervate pentru nceputul, respectiv sfritul execuiei unui program paralel i concurent, iar S1, S2, ... , Sn reprezint secvene de instruciuni de execuie paralel a unui program sau chiar subprograme paralele (cte unul pentru fiecare procesor), efectul

70

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

fiind o anumit ntreesere a aciunilor lor. S1, S2, ... , Sn pot fi simple instruciuni sau chiar operaii n cazul n care programul are granularitatecea mai fin. Execuia lui parbegin se termin cu parend atunci cnd toate procesele (procesoarele) i ncheie execuia. Toate variabilele declarate nainte de parbegin sunt comune tuturor proceselor programului paralel. De asemenea, n orice proces pot fi declarate i variabile locale, acestea fiind valabile numai n procesul n care apare declaraia lor. Pornind de la parametri de evaluare a performanelor algoritmilor paraleli (accelerare, eficien, cost) prezentai n paragraful anterior, se pot stabili cteva condiii generale pe care acetia trebuie s le ndeplineasc n vederea rezolvrii eficiente a problemelor de calcul. Considernd c: n este dimensiunea problemei dat de dimensiunea intrrii; p(n) este numrul de procesoare ale sistemului; Tp(n) - timpul de execuie paralel, iar Cp(n) - costul algoritmului paralel (suma timpilor consumai de toate procesoarele pentru rezolvarea unei probleme), pentru obinerea celor mai performani algoritmi paraleli, aceste mrimi trebuie s ndeplineasc condiiile ce se prezint n continuare. Numrul de procesoare p(n) trebuie s fie mai mic dect n (care este dependent de aplicaie, deci variabil). Numrul de procesoare p(n) trebuie s fie adaptiv, ceea ce impune ca algoritmii paraleli s se adapteze la numrul real de procesoare disponibile n sistem n momentul execuiei. Cu alte cuvinte, prin schimbarea dimensiunii problemei dependent de aplicaie sau a configuraiei calculatorului (numrul de procesoare) nu trebuie s se ajung n situaia n care algoritmul paralel deja proiectat nu poate fi utilizat. Timpul de execuie paralel Tp(n) trebuie s fie ct mai mic, astfel nct, un algoritm paralel scris pentru rezolvarea unei probleme, trebuie s fie considerabil mai rapid dect cel mai rapid algoritm secvenial care descrie aceeai problem. Altfel, calculatoarele paralele nu au sens. Timpul de execuie paralel Tp(n) trebuie s fie adaptiv. Teoretic, se poate afirma c timpul de execuie paralel scade atunci cnd numrul de procesoare utilizate crete. Practic ns, n funcie de gradul de paralelism al problemei de rezolvat, se atinge o limit peste care, creterea numrului de procesoare nu mai determin scderea timpului de execuie. Costul C(n) trebuie s fie optimal.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

71

n activitatea de proiectare a algoritmilor paraleli, trebuie analizat care din aceste condiii pot fi ndeplinite, deoarece, n funcie de specificul problemei de rezolvat, ele pot fi ndeplinite n totalitate (cazul ideal), sau numai o parte din ele. n paragrafele urmtoare se vor prezenta principalele tipuri de algoritmi de procesare paralel a datelor. Logaritmii care intervin n relaiile de analiz a algoritmilor sunt considerai n baza 2, dac nu se specific altfel.

2.6.2. Concuren, atomicitate i sincronizare


Atomicitatea i sincronizarea Execuia unui program paralel poate fi tratat ca o ntreesere a aciunilor atomice ale proceselor. Cnd procesele interacioneaz, nu toate combinaiile sunt acceptabile. Spre exemplificare, s considerm urmtorul program i s lum ca aciuni atomice citirea i scrierea unei variabile:
b=0;c=0; parbegin a = b + c // b = 1; c = 2

parend
Dac adunarea este realizat prin ncrcarea valorii lui b ntr-un registru i adugarea ulterioar a valorii lui c, valoarea lui a poate fi 0, 1, 2 sau 3, n funcie de vitezele celor dou procese. La prima vedere, evaluarea unei expresii nu poate fi considerat aciune atomic n context paralel, dect dac variabilele din expresie nu sunt alterate de alte procese. n realitate, atomicitatea este asigurat de o condiie mai slab, numit proprietatea cel-mult-o-dat (at-most-once), care se formuleaz astfel: O expresie E satisface proprietatea de cel-mult-o-dat dac ea se refer cel mult o dat la cel mult o variabil simpl (element de tablou sau cmp de nregistrare) care ar putea fi schimbat de un alt proces n timpul evalurii lui E . O instruciune de atribuire a = E satisface proprietatea de cel-mult-odat, fie dac E satisface aceast proprietate i variabila a nu este citit de un alt proces (adic a este o variabil local), fie dac a este o variabil simpl i E nu se refer la nici o variabil care ar putea fi schimbat de un alt proces.

72

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

De exemplu, nici o atribuire din construcia:

parbegin a = b + 1 // b = a + 1 parend
nu satisface proprietatea menionat. De asemenea, atribuirea a = b + c din exemplul dat la nceputul seciunii nu satisface aceast proprietate, ea referind dou variabile modificate de un alt proces. Atunci cnd aceast proprietate nu este satisfcut, sau dac nu dorim gruparea mai multor aciuni ntr-o singur aciune atomic de granularitate mai mare, este necesar un mecanism de sincronizare. Pentru specificarea aciunilor atomice vom folosi parantezele unghiulare. Astfel, reprezentarea < E > arat c expresia E trebuie evaluat atomic. Pentru sincronizare, vom utiliza construcia: < await B S > n care B este o expresie boolean, iar S este o succesiune finit de instruciuni (secveniale) despre care tim sigur c se termin. Semnificaia construciei este urmtoarea: se ateapt ndeplinirea condiiei B, dup care se execut succesiunea de instruciuni S. De exemplu, construcia: < await a> 0 a -- > ntrzie procesul executat pn cnd variabila a devine pozitiv dup care, a este decrementat. Forma general a instruciunii await mai poate specifica, fie numai excluderea mutual (<S>), fie numai sincronizarea condiionat (<await B>). Aciunile atomice se rezum la testarea condiiilor, fr a cuprinde i celelalte aciuni asupra variabilelor comune. Sincronizarea prin await, dei general, are mai multe dezavantaje legate att de claritatea descrierilor rezultate, ct i de eficiena posibilelor implementri. Astfel: ea conduce uneori la soluii complicate, greu de neles i de demonstrat; nu face o separare ntre variabilele utilizate pentru sincronizare i cele folosite pentru rezultatele calculelor; tehnica de implementare a sincronizrii prin await (busy waiting ateptare activ) este ineficient, fiecare proces testnd continuu condiia din await pn cnd aceasta devine adevrat.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

73

Datorit dezavantajelor prezentate mai sus, s-au dezvoltat alte mecanisme de sincronizare care nltur aceste dezavantaje. Acestea sunt: semafoarele, regiunile critice, monitoarele, barierele, comunicarea prin mesaje. Se va prezenta n continuare mecanismul barierelor de sincronizare

Bariere de sincronizare. Mecanismul de sincronizare prin bariere este specific paradigmei paralelism de date, iar corespondentul arhitectural al acesteia este modelul SIMD. Aa dup cum s-a mai precizat n paragraful 2.2.4.3, un algoritm pentru paralelism de date este un algoritm iterativ care prelucreaz n paralel i n mod repetat elementele unui tablou. Acest tip de algoritmi este asociat modelului SIMD, dar el poate fi util i n cazul multiprocesoarelor asincrone. O caracteristic important a algoritmilor paraleli este aceea c fiecare iteraie depinde (n general) de rezultatul iteraiei precedente. O variant de realizare este aceea de organizare a fiecrei iteraii ca o colecie de procese paralele, dar aceast soluie este ineficient deoarece creeaz i distruge procese la fiecare iteraie. O alt soluie, mai eficient, este aceea prin care procesele se creeaz o singur dat, fcnd sincronizarea lor la trecerea de la o iteraie la alta. Acest tip de sincronizare poart numele de barier. Pentru a se da algoritmilor o form general, se va utiliza o notaie explicit pentru marcarea barierelor, i anume barrier. Trebuie menionat faptul c sistemele SIMD asigur prin construcie sincronizarea, eliminnd astfel, necesitatea programrii explicite a barierelor.

2.6.3. Difuziunea
n calculatoarele paralele operaia de difuziune const n repartizarea datelor pe procesoarele din sistem considernd reeaua de comunicare ce leag aceste procesoare ntre ele. Operaia cunoate trei variante, i anume: 1. Transmiterea a n date la n procesoare (unul la unul); 2. Transmiterea a n date la p procesoare, cu p < n (mai muli la unul); 3. Transmiterea unei singure date la toate procesoarele din sistem (unul la toi - broadcast). Repartizarea datelor necesit organizarea datelor i dezvoltarea unor algoritmi care s se potriveasc ct mai bine cu tipurile de reele. Metoda de

74

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

organizare a datelor trebuie s fie foarte eficient n practic i s se bazeze pe alegerea unei aplicaii optime de repartizare a informaiei, n strns legtur cu conexiunile reelei. Dar, ntr-un mare numr de aplicaii, modul de interaciune a datelor este modificabil i, prin urmare, gsirea unei aplicaii de distribuire a lor pe procesoare poate devenii foarte dificil. Flanders a propus o variant general de realizare a acestui lucru, care poart numele de Transformare Paralel a Datelor (TPD) i opereaz cu aplicarea i rotirea repartizrii datelor pe procesoare. Ideea care st la baza metodei TPD este urmtoarea: dect s se considere reprezentarea direct a datelor pe procesoare, mai bine s se considere o reprezentare alternativ descris cu ajutorul unui vector al aplicaiei. Aceasta va desemna o submulime a tuturor aplicaiilor posibile, dar destul de mare pentru a soluiona un numr nsemnat de probleme.

2.6.3.1. Difuziunea unu la unu


n acest caz este vorba de aplicarea unei singure date pe procesor. Pentru analiza acestui caz s considerm problema aplicrii a n termeni de dat pe o reea de n procesoare legate liniar, n care fiecare procesor memoreaz un singur termen de dat. Fiind vorba de n date, vor exista n! posibiliti de alocare a datelor. Astfel, pentru n = 8, putem considera repartizarea care caracterizeaz amestecarea perfect definit dup cum urmeaz: Indexul datei: 0 4 1 5 2 6 3 7 Procesorul: 0 1 2 3 4 5 6 7

Amestecarea perfect. Noiunea de amestecare perfect are la baz aa numita amestecare perfect a crilor de joc dintr-un pachet. S presupunem c un pachet care are n = 2m cri de joc numerotate de sus n jos C0, C1, ..., Cn-1 este tiat n dou pri egale. Ultimele n/2 cri sunt intercalate printre primele n/2 cri ca n figura 2.6 pentru n = 8.
0 1 2 3 4 5 6 7 Figura 2.6. Amestecarea perfect (n = 8)

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

75

La o simpl analiz a figurii 2.6 se poate constata c amestecarea se bazeaz pe o permutare pe care o putem nota cu . n procesul de amestecare, important este rezultatul acestei amestecri, (i), ca fiind indicele crii care ocup poziia i n urma amestecrii (i = 0, 1, ..., n-1): 0 1 2 3 4 ... n 2 n 1 : 1 1 1 0 n 1 n + 1 2 ... n + 1 n 1 2 2 2 Din analiza relaiei (2. ) se poate observa c :
1 ( x) = 2 x(mod ulo n 1) pentru x = 0,1,..., n 2 1 (n 1) = n 1 (2.21)

(2.20)

n exemplul prezentat mai sus, datele pot fi scrise sub forma unui vector [0 4 1 5 2 6 3 7], unde data cu indicele 0 va fi transmis procesorului de indice 0, data cu indicele 4, procesorului de indice 1, .a.m.d. Ne vom referi la un asemenea tip de aplicaie ca la o aplicaie fizic, deoarece ea descrie aranjarea fizic a datelor n procesoare. Se pot descrie n! asemenea aplicaii fizice, dar dac n este foarte mare, scrierea devine foarte laborioas. Introducerea vectorului aplicaiei va permite, de asemenea, reprezentarea a n! aplicaii, dar numai cu ajutorul a log2 n simboluri. Pentru analiz vom considera exemplul precedent cu 8 procesoare i 8 date. Notm reprezentarea binar a indicelui unei date cu d2d1d0. Valoarea binar a procesorului se va determina prin luarea ntr-o anumit ordine a biilor d2d1d0 . Astfel, ordinea d1d0d2 va aplica data cu indicele 4 (100) n procesorul cu indicele 001 .a.m.d. aplicaia complet este: Indicele datei: 000 001 010 011 100 101 110 111 Procesorul: 000 010 100 110 001 011 101 111 Tabelul 2.1. Vectorii aplicaiei i aplicaia fizic pentru n = 8

Descriere
Identitate Inversarea biilor Amestecarea perfect Amestecarea invers

Vectorul aplicaiei (2 1 0) (0 1 2) (1 0 2) (0 2 1)

[0 [0 [0 [0

Aplicaia fizic 1 2 3 4 5 6 7] 4 2 6 1 5 3 7] 4 1 5 2 6 3 7] 2 4 6 1 3 5 7]

76

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

Numerele de pe ultima coloan indic procesorul. Deci, vectorul aplicaie (102) corespunde aplicaiei fizice [0 4 1 5 2 6 3 7]. Scrierea lui se bazeaz pe permutarea biilor indicelui, n timp ce aplicaia fizic prezint permutarea ntregului set de date. Rotirea datelor nseamn schimbarea aplicaiei lor pe procesoare. Prin urmare, rearanjarea datelor poate fi fcut prin modificarea vectorilor aplicaiei i nu prin modificarea aplicaiilor fizice. Astfel, dac dorim s schimbm distribuirea datelor prin inversarea biilor n amestecare perfect (problem care poate apare n aplicaii de genul transformatei Fourier), se observ c aplicaia iniial (0 1 2) devine (2 1 0) printr-o simpl interschimbare a primului i ultimului bit. n cazul n care datele au valori mai mari, se impun, n general, mai multe interschimbri de perechi de bii.

2.6.3.2. Difuziunea mai muli la unul


n acest caz este vorba de aplicarea mai multor date pe un singur procesor. S analizm n prealabil dou tehnici de repartizare a datelor cunoscute n literatura de specialitate sub numele de slicing (tiere) i crincling (ncreire) ce presupune, n general, distribuia unui volum mare de date pe un numr redus de procesoare. Aceast tehnic este foarte adecvat ndeosebi sistemelor cu granularitate fin, n care fiecare procesor este capabil s efectueze numai operaii aritmetice asupra datelor sale locale. S presupunem c avem un volum de date de dimensiune n (dimensiunea unei matrice) care necesit n mod normal un numr de m procesoare, dar dispunem de un sistem avnd numai p procesoare cu p < m. n cazul tehnicii slicing, volumul de date este mprit n uniti mai mici, astfel nct fiecare unitate are un numr de elemente egal cu numrul de procesoare din sistem i fiecare element se transmite cte unui procesor. Aceast operaie se poate face n paralel, iar unitile sunt executate separat. Dar, pentru numeroase probleme, cum ar fi rezolvarea ecuaiilor difereniale cu derivate pariale unde valoarea n fiecare punct al grilei este actualizat n funcie de valorile din cele patru puncte adiacente, tehnica slicing este greoaie. n aceste cazuri, mult mai adecvat este tehnica cunoscut n literatura de specialitate cu numele de crinkling deoarece aceasta menine conectivitatea unei date cu datele cele mai apropiate. Conform acestei tehnici, unitile de date se organizeaz n aa fel nct s conin toate datele vecine care se transmit unui singur procesor.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

77

Spre exemplificare, s considerm cazul rezolvrii unei probleme oarecare ce conine un tablou de 8 x 8 date care trebuie transmise la o reea de 4 x 4 procesoare interconectare astfel nct s fie pstrat legtura cu cei mai apropiai vecini. Tabloul de date conine 64 de elemente, iar numrul de procesoare este de 16. Deci, fiecrui procesor i se vor repartiza cte 4 elemente. n figura 2.7 este prezentat repartizarea datelor n ambele tehnici. n cazul tehnicii slicing, tabloul de date este mprit n patru uniti A(1,1), A(1,2), A(2,1), A(2,2), fiecare avnd dimensiunea de 4 x 4 = 16 i fiecare element al unei uniti atribuindu-se cte unui procesor. Deci, fiecare procesor va avea cte un element din cele 4 uniti. n tehnica slicing, unitile se pot forma din elementele apropiate fie pe linie, fie pe coloan. n cazul tehnicii crinkling, tabloul de date 8 x 8 date este mprit n blocuri de 2 x 2 = 4 asignnd fiecare bloc cte unui procesor. Imaginea desfurrii plane indic pstrarea la margini a conectivitii cu cei mai apropiai patru vecini. Pentru acest model de calcul, s presupunem c actualizm matricea:

Bij =

1 ( Ai , j +1 + Ai , j 1 + Ai 1, j + Ai +1, j ), 4

i, j = 1,2,...,8

(2.22)

Conform tehnicii crinkling, se poate actualiza fiecare din cele patru uniti simultan, i prin urmare, n patru pai se termin actualizarea valorilor cerute. Dac se utilizeaz tehnica slicing, conectivitatea cu cei mai apropiai patru vecini este meninut numai pentru liniile i coloanele pn la n -1, cu n = 4. deci, pentru fiecare unitate vor fi necesare dou cazuri speciale, ceea ce implic parcurgerea unui numr total de 12 pai. Funcie de tipul de problem ce trebuie rezolvat (nmuliri de matrici, probleme de valori proprii, rezolvarea ecuaiilor liniare, procesri de imagini etc.), tehnicile slicing i crinkling sunt intens utilizate pe arhitecturi paralele de tipul SIMD. Sunt aplicaii n care pot fi necesare, simultan, att slicing ct i crinkling, ceea ce implic trecerea de la o tehnic la cealalt. Pentru ilustrarea aplicrii metodei TPD, considerm urmtorul exemplu: fie o structur de date format din 16 termeni care trebuie repartizai pe un tablou liniar de 4 procesoare. Exist mai multe posibiliti n care datele pot fi ncrcate n procesoare. Noi vom utiliza n cele ce urmeaz numai tehnicile slicing i crinkling.

78

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

slicing a11 a21 a31 a41 a51 a61 a71 a81 a12 a22 a32 a42 a52 a62 a72 a82 a13 a23 a33 a43 a53 a63 a73 a83 a14 a24 a34 a44 a54 a64 a74 a84 a15 a25 a35 a45 a55 a65 a75 a85 a16 a26 a36 a46 a56 a66 a76 a86 a17 a27 a37 a47 a57 a67 a77 a87 a18 a28 a38 a48 a58 a68 a78 a88 a11 a21 a12 a22 a31 a41 a32 a42 a51 a61 a52 a62 a71 a81 a72 a82 a13 a23 a14 a24 a33 a43 a34 a44 a53 a63 a54 a64 a73 a83 a74 a84 crinkling a15 a25 a16 a26 a35 a45 a36 a46 a55 a65 a56 a66 a75 a85 a76 a86 a17 a27 a18 a28 a37 a47 a38 a48 a57 a67 a58 a68 a77 a87 a78 a88 A11 A21 A12 A22

Figura 2.7. Tehnicile slicing i crinkling

A. Repartizarea datelor prin slicing. Cele 16 date sunt mprite n 4 grupe a cte 4 termeni i apoi aplicate n tabloul liniar de procesoare, ca n tabelul 2.2. Tabelul 2.2. Adresa de memorie \ Nr. procesor 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Analiznd tabelul, se constat c n procesorul cu indicele 0 sunt memorate datele cu indicii 0, 4, 8 i 12, n memoria procesorului 1 sunt stocate datele cu indicii 1, 5, 9, 13 .a.m.d. pn la epuizarea celor 16 date.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

79

B. Repartizarea datelor prin crinkling. Cele 16 date sunt, de asemenea mprite n 4 grupe de cte 4 termeni, dar termenii din fiecare grup sunt memorai n acelai procesor, ca n tabelul 2.3.
Tabelul 2.3.

Adresa de memorie \ Nr. procesor 0 1 2 3

0 0 1 2 3

1 2 3 4 8 12 5 9 13 6 10 14 7 11 15

Analiznd tabelul i n acest caz, se constat c n procesorul cu indicele 0 sunt memorate datele cu indicii 0, 1, 2 i 3, n memoria procesorului 1 sunt stocate datele cu indicii 4, 5, 6, 7 .a.m.d. pn la epuizarea celor 16 date Se vor descrie n continuare vectorii aplicaiei. ntruct sunt mai multe date pe procesor, vectorul aplicaiei va conine dou grupe de indici: a) numrul procesorului; b) adresa din memorie a datei. Aceste dou numere vor localiza n mod unic orice dat. n cazul repartizrii prin slicing, acest lucru se poate face cu ajutorul numerelor de forma a3a2a1a0 n care primele dou cifre a3a2 reprezint adresa de memorie, iar ultimele dou a1a0 reprezint procesorul i adresa datei din memoria procesorului. Spre exemplu, data cu indicele 9, a crei reprezentare este 1001, se gsete la adresa binar 10, adic 2, iar procesorul al crui indice este 01, este procesorul 1. n cazul repartizrii prin crinkling, acest lucru se poate face tor cu ajutorul numerelor de forma a3a2a1a0, dar primele dou cifre a3a2 reprezint numrul procesorului i adresa datei din memoria procesorului, iar ultimele dou a1a0 reprezint adresa de memorie. n acest caz, data cu indicele 9, a crei reprezentare este 1001, se gsete la adresa binar 01, iar procesorul al crui indice este 10, este procesorul 2 Deci vectorii aplicaiei n cele dou cazuri sunt: Slicing: (adresa: 21, procesor: 12); Crinkling: (adresa: 12, procesor: 21). Rotirile de date sunt mai complicate, dar nc se pot aplica tablourilor de procesoare. Specificarea bi-parametric a vectorului aplicaiei poate fi extins la mai muli parametri, de exemplu trei, dac vom lucra cu un tablou bidimensional de procesoare (nu liniar ca n cazul anterior). n acest caz,

80

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

procesorul va fi definit cu ajutorul a dou numere: un indice de linie i un indice de coloan. Al treilea parametru ce va apare n definirea vectorului aplicaiei, va fi adresa datei n procesor. Spre exemplu, s presupunem c exist 32 date ntr-un vector pe care dorim s le repartizm pe un tablou de 2 x 4 procesoare (numerotate ca o matrice de 2 x 4 elemente), utiliznd tehnica slicing (figura 2,8).
Nr. de coloan al procesorului Nr. de linie al procesorului

P00 P10 0 4 8 12 16 20 24 28

P01 P11 1 5 9 13 17 21 25 29

P02 P12 2 6 10 14 18 22 26 30

P03 P13 3 7 11 15 19 23 27 31

plan de procesoare plan de date 0

Adresa de memorie

plan de date 1 plan de date 2

plan de date 3

Figura 2.8. Difuzia a 32 de date pe un tablou de 2 x 4 procesoare


Aplicaia fizic este notat prin:

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 28 29 30 31

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

81

Vectorul aplicaiei va fi: (adresa: 43, linia: 2, coloana: 10). Analiznd figura 2.7 se constat c data cu indicele 24 (n binar 11000) se afl la adresa 3 (plan de date 3) n procesorul P00 cu indicele (0,0 combinaia 000), iar data cu indicele 18 (n binar 10010) este la adresa 2 (planul de date 2) n procesorul P02 (combinaia 010). n cazul tehnicii crinkling, obinerea vectorului aplicaie o putem considera ca aplicaie.
2.6.3.3. Date multidimensionale

Considerm c datele formeaz un tablou multidimensional (fr restrngere de generalitate, presupunem c dimensiunea tablourilor este o putere a lui 2). Ca i n cazul datelor unidimensionale, unde biii indicelui datei apar ca elemente ale vectorului aplicaiei, situaia datelor multidimensionale se adapteaz uor prin simpla specificare a unui indice pentru fiecare dimensiune. De exemplu, o matrice 8 x 16 va necesita doi indici care s-i localizeze datele. Vom eticheta indicii corespunztori celor dou dimensiuni ca primul, respectiv al doilea indice. Astfel, valoarea binar pentru primul indice necesit trei bii, a2a1a0 i convenim s notm aceasta cu 211101. Analog, al doilea indice necesit 4 bii a3a2a1a0 i facem notarea 32221202. Ambele tipuri de indici vor apare ulterior n determinarea vectorului aplicaiei, dup cum se poate vedea n exemplul urmtor. Fie o matrice de date de dimensiune 2 x 4 pe care dorim s o aplicm pe un tablou de procesoare de dimensiune 2 x 2, utiliznd tehnicile slicing i crinkling. Conform tehnicii slicing, fiecare subtablou de 2 x 2 va fi aplicat ntr-un singur plan. Tehnica crinkling va produce aplicarea fiecrui tablou 2 x 1 n memoria unui procesor. Subtablourile adiacente sunt aplicate n procesoare adiacente. Figura 2.9 prezint aplicaia fizic a datelor pe procesoare, n ambele tehnici.
Datele sunt identificate dup indicii lor, n forma (indice de linie, indice de coloan). n cazul nostru, indicele care caracterizeaz prima dimensiune poate fi 0 sau 1, prin urmare, reprezentarea lui binar va necesita o singur cifr, notat prin 01. Indicele corespunztor celei de a doua dimensiuni poate lua valori cuprinse ntre 0 i 3, deci vor fi necesare dou cifre n reprezentarea sa binar, i vor fi notate prin 1202. Cu aceste notaii, vectorul aplicaiei corespunztor tehnicii slicing va fi dat de relaia:

(adresa: 12, coloana: 02, linia: 01).

82

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

Nr. de coloan al procesorului Nr. de linie al procesorului Plan de date 0

P(0,0) P(1,0) (0,0) (1,0) (0,2) (1,2)

P(0,1) P(1,1) (0,1) (1,1) (0,3) (1,3)

P(0,0) P(1,0) (0,0) (1,0) (0,1) (1,1)

P(0,1) P(1,1) (0,2) (1,2) (0,3) (1,3)

Plan de date 1

a) Slicing

b) Crinkling

Figura 2.9. Difuzia a 2 x 4 date pe 2 x 2 procesoare Legtura ntre vectorul aplicaiei i aplicaia fizic poate fi observat fcnd compararea aplicrii unui element n fiecare caz. Spre exemplu, fie termenul de dat din linia 1 i coloana 3 a matricei de date 2 x 4. Primul indice este 1 (n binar 1), deci 01 =1; al doilea indice este 3 (n binar 11), deci 02 = 1, 12 = 1. nlocuind aceste valori n vectorul aplicaiei, se obine: (adresa: 1, coloana: 1, linia: 1). Prin urmare, acest termen de dat este memorat la adresa 1, n procesorul care are coloana 1 i linia 1, lucru care este uor de verificat dac considerm aplicaia fizic de mai sus. Analog, vectorul aplicaiei corespunztor tehnicii crinkling este: (adresa: 02, coloana: 12, linia: 01). Localizarea oricrui termen de dat poate fi fcut cu ajutorul vectorului aplicaiei. Spre exemplu, termenul din linia 0 i coloana 1 are 01 = 0, 12 = 0 i 02 = 1; nlocuind aceste valori n vectorul aplicaie vom avea: (adresa: 1, coloana: 0, linia: 0), ceea ce indic localizarea termenului de dat la adresa 1, coloana 0 i linia 0 a tabloului de procesoare. Pn acum am considerat termenii de dat ca fiind entiti compacte, deci nu am ncercat s-i localizm la nivel de bit. Pentru a evita aceast restricie, se introduce o extra-dimensiune a datelor. Ne vom referi la ea ca la dimensiunea datei i o putem nelege dac vom gndi data ca avnd lungimea indexat n uniti de unul sau mai muli bii. n acest fel, n vectorul aplicaiei, dimensiunea datei va fi specificat prin intermediul a k = log2 p simboluri: (k 1)0(k 2)0...00, unde termenii de dat sunt de lungime

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

83

p = 2k bii. Spre exemplu, pentru numere formate din 8 bii, dimensiunea datei este specificat prin succesiunea 201000; astfel, pentru tehnica crinkling discutat anterior, vectorul aplicaiei va fi urmtorul:

(adresa: 02201000, coloana: 12, linia: 01). De exemplu, pentru a localiza bitul 3 al termenului (0,1), vom nlocui valorile 20 = 0, 10 = 1, 00 = 1 (deoarece numrul bitului cutat este 3); 01 = 0 (deoarece primul indice este 0); 12 = 0, 02 = 1 (deoarece al doilea indice este 1). Vectorul aplicaiei va fi: (adresa: 1011, coloana: 0, linia: 0). Deci, bitul 3 este localizat n planul de bii 11 (1101 n binar) al procesorului care are linia 0 i coloana 0.
Remarc. Utilizarea dimensiunii datelor este necesar doar atunci cnd pe parcursul calculelor este necesar divizarea datelor n subpri. Rotirea datelor i tehnica TPD este parte component a calculului paralel i permite repartizri eficiente ale informaiei, chiar atunci cnd aceasta se modific dinamic n cursul execuiei algoritmului. 2.6.3.4. Difuziunea unul la toi (broadcast)

n calculatoarele paralel, operaia de difuziune de tipul unul la toi (broadcast) este una din cele mai frecvente operaii. Ea const n transmiterea unei date la toate procesoarele din sistem. n acest caz, algoritmul de difuziune este mai simplu dect n cazurile prezentate anterior. Pentru prezentarea algoritmului ntr-un model EREW-PRAM, s considerm o locaie de memorie partajat n care este memorat o informaie care trebuie transmis la un numr de p procesoare. Avnd n vedere c accesul la memorie este exclusiv, implementarea acestui algoritm presupune ca procesoarele s citeasc succesiv valoarea din memorie, deci n p pai care necesit un timp de execuie secvenial Ts(p) = O(p). Acest timp, fiind secvenial, este mare i nu se exploateaz posibilitatea de execuie concurent a mai multor procesoare. Dac se utilizeaz un vector de date a[n] ca spaiu de lucru al algoritmului n memoria partajat i avnd lungimea egal cu numrul de procesoare p, se obine o soluie mult mai performant de execuie a difuziunii. S considerm difuziunea caracterului D la p (2m) procesoare folosind un vector de date a[n]. Dac numrul de procesoare este o putere a

84

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

lui 2, atunci n, dimensiunea vectorului poate fi 2m-1. Dac numrul de procesoare p este un numr oarecare, atunci m = sup(log p). Pentru exemplificare (figura 2.10), vom considera p = 8 procesoare i de asemenea, n = 4. Iniial, caracterul D se afl n locaia a[0] a vectorului aflat n memoria partajat i n memoria local a procesorului P0. n iteraia j = 0 (pasul 1), caracterul D este citit din locaia a[0] de procesorul P1, este nscris n memoria sa local i n vectorul partajat, locaia a[1]. n urmtoarea iteraie, j = 1 (pasul 2), procesoarele P2 i P3 citesc caracterul D din locaiile a[0], a[1], l nscriu n memoriile locale proprii i n locaiile a[2], a[3]. n ultima iteraie, j = 2 (pasul 3), procesoarele P4, P5, P6 i P7 citesc caracterul D din locaiile a[0], a[1], a[2], a[3] i l nscriu n memoriile locale proprii. 0
a D

3
a

0
D

1
D

D P0 P1 P2 P3 P4 P5
a) Condiia iniial

D D P6 P7 P0 P1 P2 P3 P4 P5
b) Iteraia j = 0

P6 P7

0
a

3
a

D D D D

D D D D

D D D D P0 P1 P2 P3 P4 P5
c) Iteraia j = 1

P6 P7

D D D D D D D D P0 P1 P2 P3 P4 P5 P6 P7
d) Iteraia j = 2

Figura 2.10. Difuziunea unei date la 8 procesoare n modelul EREW-PRAM

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

85

Generaliznd, se poate spune c n iteraia j, procesoarele i, cu 2 i < 2j+1, citesc data de difuzat din vectorul a, locaiile a[i 2j], o memoreaz n memoria local proprie i apoi o nscriu n locaiile a[i] ale vectorului.
j

Dac vectorul are dimensiunea p / 2, ca n exemplul nostru, n ultima iteraie, data nu mai este nscris n locaiile corespondente ale vectorului a, realizndu-se n acest fel o foarte mic economie de timp de execuie. Deoarece la fiecare iteraie j se dubleaz numrul procesoarelor i al elementelor vectorului a (cu excepia ultimei iteraii) care au memorat data respectiv, sunt necesare log n iteraii. n oricare iteraie j, sunt active 2j procesoare ce au indicele i, astfel nct 2j i < 2j+1 . Implementarea n pseudocod al acestui mod de difuzie se prezint n programul 2.1.
PROGRAMUL 2.1.
DIFUZIUNE Condiii iniiale: n locaia a[0] i n memoria local a procesorului P0 se afl data de difuzat. Rezultatul final: n memoria local a tuturor celor p procesoare este memorat data de difuzat. Variabile globale: p, n, a[n]. forall (0 i <p) do for (j = 0; j < log p 1; j++) if (2j i < 2j+1) { Citete valoarea din a[ i-2j ]; Memoreaz valoarea n memoria local a procesoarelor de index i i n a[ i ]; } { j++ Citete valoarea din a[ i-2j ]; Memoreaz valoarea n memoria local a procesoarelor de index i ; } endfor

Analiznd algoritmul, se observ c bucla secvenial for are log p 1 iteraii, fiecare iteraie avnd un timp de execuie constant. Ultima iteraie

86

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

are un timp de execuie ceva mai scurt, deoarece data nu se mai nscrie n locaiile vectorului a. Deci, se poate spune c timpul de execuie al algoritmului este ceva mai mic dect O(log p). Dac n exemplul prezentat se utilizeaz un vector a crui dimensiune este egal cu numrul de procesoare, ultima secven de instruciuni nu mai este necesar, iar condiia j < log p 1 devine j < log p. Timpul de execuie al fiecrui pas este acelai, iar timpul de execuie al algoritmului este:
Tp = O(log p)

2.6.4. Tehnica dublrii recursive sau problema reducerii secvenelor


Fie dat o mulime de n valori a0, a1, ..., an-1 asupra creia opereaz un operator binar asociativ de forma: : Dac este o operaie asociativ asupra unor perechi de obiecte matematice (numere, vectori, matrice etc.) astfel nct
(a b) c = a (b c),

atunci expresia de forma


a1 a2 a 3 . . . a n

este unic definit indiferent de locul parantezelor, astfel:


((((a1 a2) a3 ) . . . ) an ) = (a1 a2 ) (a3 a4 ) . . . (an-1 an),

pentru n par. Partea stng a expresiei de mai sus reprezint modul natural de calcul, iar partea dreapt este metod alternativ de calcul aa fel nct operaiile din paranteze pot fi evaluate simultan pe o main paralel cu n / 2 procesoare.
Metoda dublrii recursive const n descompunerea repetat a calculului n perechi de calcule de complexitate egal care pot fi efectuate simultan.

Operaia de reducere se definete ca:


R = ai
i =0 n 1

(2.23)

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

87

Particulariznd, vom considera c cele n valori de intrare sunt elemente ale unui vector a[n], iar operatorul asociativ este adunarea. n procesul de reducere secvenial se vor aduna toate elementele vectorului de intrare, iar la sfritul operaiei, dup n-1 pai, n R va fi memorat suma final. Implementarea secvenial a operaiei, considernd c R este chiar a[0], are forma:
for ( i = 1; i < n; i++ ) a[0] + = a[ i ] ;

Deci, timpul secvenial va fi: Ts = O(n) Algoritmii EREW-PRAM de reducere paralel a n elemente pot fi implementai pe maxim n / 2 procesoare. Se vor considera dou cazuri ce vor fi prezentate n continuare.
Cazul 1. Fie un numr oarecare m de elemente. Pentru a simplifica codul, numrul m se va majora la un numr n de elemente, astfel nct n s fie o putere a lui 2. Valorile tuturor elementelor de la m la n sunt egale cu valoarea elementului neutru n raport cu operaia de efectuat (0 pentru adunare, 1 pentru nmulire etc.). Numrul procesoarelor utilizate se va alege p = n / 2. Cele n elementele definite ca date de intrare sunt memorate ntr-un vector a[n] din memoria partajat, iar operatorul de reducere este adunarea. Pentru reprezentarea operaiei de nsumare paralel se poate folosi un arbore binar complet n care cele n elemente sunt frunze. Considernd n = 8, rezult c p = 4 (figura 2.11).
Fiecare pas de execuie (iteraie) este reprezentat printr-un nivel al arborelui. Numrul pailor de execuie este log n = log 8 = 3. n primul pas de calcul ( iteraia j = 0), toate procesoarele Pi (0 i < n/2) cu i = 0, i = 1, i = 2 i i = 3 sunt active, fiecare adunnd cte dou valori (a[2i] i a[2i+1]) amplasate n dou noduri frunz adiacente ale arborelui, rezultatul fiind depus n locaia a[2i]. n al doilea pas (iteraia j = 1), sunt active procesoarele Pi cu i = 0 i i = 2, care adun valorile a[2i] i a[2i+2] depunnd rezultatul n locaia a[2i]. n pasul 3 (iteraia j = 2) este activ numai procesorul Pi cu i = 0, care adun valorile a[2i] i a[2i+4], rezultatul fiind depus n a[2i].

iteraia j sunt active procesoarele Pi , cu i = 2 jk (i este numr ntreg de 2 j, 0 k < n/2 j+1), 0 j < log n, fiecare actualizeaz locaia a[2i], prin adunarea la aceasta a elementului din vector aflat la o adres mai mare cu 2 j, astfel a[2i]= a[2i] + a[2i+2 j].

Generaliznd pentru n = 2 valori, n i r fiind numere naturale, avem: n

88

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

a[7] P3 a[6] a[5] P2 a[4] a[3] P1 a[2] a[1] P0 a[0] a[0] a[0] a[0] a[2] a[4] a[4] a[6]

pasul 1 (j = 0)

pasul 2 (j = 1)

pasul 3 (j = 2)

Figura 2.11. Se prezint n continuare programul 2.2 de implementare a acestui algoritm n modelul EREW-PRAM.
PROGRAMUL 2.2. REDUCERE 1 Condiii iniiale: Lista celor n > 1 elemente memorate n vectorul a[n]. Se folosesc p = n / 2 procesoare Rezultatul final: n locaia a[0] se memoreaz suma elementelor. Variabile globale: n, a[n].

forall (0 i < n/2) do for ( j = 0; j < log n; j++ )

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

89

if (i modulo 2 j == 0) a[ 2i ] + = a[ 2i+2 j ] ; endfor

Analiznd execuia algoritmului din programul 2.2, se poate constata c bucla secvenial for ( j = 0; j < log n; j++ ) se execut de log n ori, fiecare iteraie avnd acelai timp de execuie. Pentru p = n/2 procesoare, timpul de execuie a algoritmului este Tp = O(log n). Acceleraia paralel, eficiena i costul paralel sunt:

Sp =

Ts n 1 = = O (n / log n); Pp log n

(2.24) (2.25)

Ep =

Sp p

= O(n / p log n) = O (2 p / p log n) = O(2 / log n);


(2.26)

C p = pT p = O( p log n).

Se observ c algoritmul paralel n O(p log n), pentru n > 4, este asimptotic mai mare dect costul n O(n) al algoritmului secvenial pentru reducere. Se poate trage concluzia c acest algoritm nu este cost-optimal. Execuia implic i un cost suplimentar de calcul paralel a crui expresie este:
To = Cp Ts = O(p log n) O( n)

(2.27)

Costul suplimentar este determinat de ncrcarea neechilibrat a procesoarelor deoarece gradul de paralelism al problemei nu este acelai. n fiecare iteraie j se utilizeaz un numr diferit de (p = n /2 j+1) procesoare. Cu ct j crete, cu att numrul de procesoare active scade conform relaiei prezentate, astfel nct n ultima iteraie va fi activ un singur procesor. Inactivitatea unor procesoare n timpul execuiei face ca eficiena algoritmului s fie subunitar, chiar i n cazul utilizrii modelului PRAM n care sunt ignorate o parte din condiiile reale de execuie (timpul de comunicaie ntre procesoare). Algoritmul de reducere prezentat, are caracteristica de paralelism al datelor: datele sunt reprezentate printr-o structur regulat (vectorul a[n]); ele sunt distribuite ntre procesoarele sistemului, fiecare procesor actualiznd o locaie a vectorului a; asupra datelor se execut operaii identice (adunare). A rezultat astfel, un program data-paralel cu granularitatea cea mai fin (fiecare procesor execut o singur operaie i actualizeaz o singur locaie a vectorului) i cu gradul maxim de paralelism

90

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

n O(n). Dar, aa dup cum s-a precizat mai sus, nu este cost-optimal, numrul de procesoare este prea mare n O(n) i nu este adaptiv. Un algoritm de reducere mai performant este cel care folosete un numr de procesoare mai mic dect n / 2. Un astfel de algoritm se va prezenta n continuare.
Cazul 2. Operaia de reducere a n elemente, utiliznd un numr de procesoare p < n / 2. Fie un numr oarecare m de elemente. Pentru a simplifica codul, numrul m se va majora la un numr n de elemente, astfel nct n s fie divizibil prin p. Valorile tuturor elementelor de la m la n sunt egale cu valoarea elementului neutru n raport cu operaia de efectuat (0 pentru adunare, 1 pentru nmulire etc.). Mai nti se partiioneaz vectorul a[n] al datelor de intrare ntr-un numr p de subvectori cu dimensiunea r = n/p asignndu-se fiecare partiie la cte un procesor (distribuire crinkling). Urmeaz apoi operaia de reducere paralel care se execut n dou faze. n prima faz, fiecare procesor execut secvenial operaia de nsumare a r = n/p valori. Durata acestei faze este (n/p) 1 pai de calcul. n faza a doua, cele p procesoare execut o operaie de reducere paralel a unui numr de p valori calculate n faza precedent de fiecare procesor. Durata acestei faze este log p pai de calcul. Algoritmul EREW-PRAM pentru acest caz se prezint n programul 2.3.
PROGRAMUL 2.3. REDUCERE 2 Condiii iniiale: Lista celor n > 1 elemente memorate n vectorul a[n]. Se folosesc p < n / 2 procesoare. Cele n elemente se mpart n p partiii de r = n/p elemente. Rezultatul final: n locaia a[0] se memoreaz suma elementelor. Variabile globale: n, a[n], r = n/p .

forall (0 i < p) do /* faza I */ for ( j = i * r + 1; j < (i+1) * r; j++ ) a[ i * r ] + = a[ j ]; /* faza a II-a */ for (j = 0 ; j < log p ; j++ ) if ( i modulo 2 j+1 == 0 ) a[ i * r ] + = a[( i + 2 j) * r ] ;

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

91

endfor

Timpul de execuie paralel, accelerarea, eficiena i costul acestui algoritm se pot calcula tiind c timpul de execuie secvenial a aceluiai algoritm este Ts = n 1 = O(n). Se obin urmtoarele rezultate:

Tp =

n n 1 + log p = O( + log p); p p

(2.28) (2.29)

p ); S p = O( p 1 + log p n 1 E p = O( ); p 1 + log p n C p = O(n + p log p).


Costul suplimentar are valoarea:
To = Cp Ts = O(n + p log p) O( n) = O(p log p)

(2.30) (2.31)

(2.32)

i se datoreaz ncrcrii ne-echilibrate a procesoarelor n faza de adunare a tuturor rezultatelor pariale. El crete odat cu creterea numrului de procesoare i are valoarea maxim pentru p = n, cnd granularitatea programului este maxim. Algoritmul este cost-optimal dac p log p = O(n).
2.6.5. Suma prefixelor

Fie dat o mulime de n valori a0, a1, ..., an-1 asupra creia opereaz un operator binar asociativ . Problema de calcul al sumei prefixelor (prefix sums) const n calculul a n cantiti b[n], utiliznd relaia:

b[ j ] = ai ,
i =0

0 j n 1

(2.33)

Considernd c cele n valori de intrare sunt elementele unui vector a[n], iar operatorul asociativ este adunarea, vectorul b[n] este chiar vectorul a[n], algoritmul secvenial de calcul al sumei prefixelor are forma:
for ( i = 1; i < n; i++ )

92

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

a[ i ] + = a[ i -1] ;

Se observ c sunt executai n-1 pai de calcul. Deci, timpul de execuie secvenial a algoritmului este Ts = n 1 = O(n). Implementarea algoritmului paralel de calcul al prefixelor n modelul PRAM sau n alte modele paralele are o mare importan, datorit aplicaiilor numeroase pe care le are. Se va prezenta n continuare implementarea calcului sumei prefixelor ntr-un algoritm paralel, modelul EREW-PRAM. Pentru aceasta, vom considera c datele de intrare sunt memorate intr-un vector a[n] din memoria partajat i se vor utiliza n-1 procesoare cu indicii i cuprini ntre 1 i n-1. Vom considera c n = 8. Schema algoritmului este prezentat n figura 2.12. n locaiile vectorului a din figur sunt nscrii indicii elementelor nsumate dup execuia iteraiei corespunztoare. Analiznd schema din figura 2.12 se constat c numrul iteraiilor de execuie este 3, adic log n.
a[0] [7] 0 a[1] a[2] a[3] a[4] a[5] a[6]

1 0,1

2 1,2

3 2,3

4 3,4

5 4,5

6 5,6

7 6,7

a) Condiia iniial

b) Iteraia j = 0

0,1

0,1,2 0,1,2,3 1,2,3,4 2,3,4,5 3,4,5,6 4,5,6,7 c) Iteraia j = 1

0,1

0,1,2 0,1,2,3 0,1,2,3 0,1,2,3 0,1,2,3 0,1,2,3, ,4 ,4,5 ,4,5,6 4,5,6,7 d) Iteraia j = 2

Figura 2.12. Suma prefixelor n modelul EREW-PRAM pentru n = 8. n primul pas (iteraia j = 0), fiecare procesor Pi (1 i n) nsumeaz dou valori, cele din locaiile a[i] i a[i-1], iar rezultatul l depune n locaia a[i]. n pasul al doilea (iteraia j = 1), procesoarele cu indici i cuprini ntre 2 i n-1 nsumeaz valorile din locaiile a[i] i a[i-2] i

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

93

rezultatul l depune n a[i]. n ultimul pas (iteraia j = 2), procesoarele cu indici i cuprinii ntre 4 i n-1 nsumeaz valorile din locaiile a[i] i a[i-4], rezultatul depunndu-l n a[i]. Generaliznd pentru un numr oarecare de n elemente de intrare memorate ntr-un vector a[n] din memoria partajat i utiliznd n-1 procesoare, se poate afirma c n iteraia j, procesoarele cu indici i 2j execut operaia de nsumare a[i] = a[i] + a[i-2j]. Implementarea paralel a acestui algoritm ntr-un model EREWPRAM se prezint n programul 2.4.

PROGRAMUL 2.4.
SUM-PREFIXE Condiii iniiale: Lista celor n 1 elemente memorate n vectorul a[n]. Se folosesc n -1 procesoare Rezultatul final: Fiecare element a[i] conine valoarea operaiei ce reprezint suma elementelor a[0] a[1] . . . a[ i ]. Variabile globale: n, a[n] .

forall (1 i < n) do for (j = 0 ; j < log n ; j++ ) if (i 2j) a[ i ] + = a[ i - 2 j ] ; endfor

Timpul de execuie paralel procesoare, este:


Tp = log n = O(log n)

a acestui algoritm, utiliznd n-1 (2.34)

Accelerarea paralel, eficiena i costul au expresiile:

Sp =

n 1 = O(n / log n); log n

(2.35) (2.36) (2.37)

E p = O(1 / log n);


C p = O(n log n).

94

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

Algoritmul prezentat mai sus poate fi considerat satisfctor, dar el ascunde o potenial eroare de sincronizare. La fiecare ciclu, procesoarele actualizeaz valorile pariale a[i] . Pentru un calcul corect, trebuie ca toate procesoarele s execute simultan operaiile de adunare i apoi toate s fac atribuirile. Deoarece acest lucru impune introducerea unei noi bariere ntre adunare i atribuire, cele dou aciuni trebuie desprite. Acest lucru se poate implementa prin introducerea unui vector b (localizat tot n memoria partajat), folosit ca depozitar temporar al vechilor valori ale vectorului a. Astfel, algoritmul din programul 2.4, devine (2.4.1):
PROGRAMUL 2.4.1. SUM-PREFIXE Condiii iniiale: Lista celor n 1 elemente memorate n vectorul a[n]. Se folosesc n -1 procesoare. Se folosete un vector b[n] ca barier de sincronizare. Rezultatul final: Fiecare element a[ i ] conine valoarea operaiei ce reprezint suma elementelor a[0] a[1] . . . a[ i ]. Variabile globale: n, a[n], b[n].

forall (1 i < n) do for (j = 0 ; j < log n ; j++ ) {


b[ i ] = a[ i ] ;

if (i 2j) a[ i ] + = b[ i - 2 j ] ;

} endfor Pentru a face algoritmul mai rapid, se pot evita operaiile de logaritmare i ridicare la putere prin utilizarea a dou variabile suplimentare c i k. Astfel, algoritmul din programul 2.4.1 devine programul 2.4.2:
PROGRAMUL 2.4.2. SUM-PREFIXE Condiii iniiale: Lista celor n 1 elemente memorate n vectorul a[n]. Se folosesc n -1 procesoare. Folosete vectorul b[n] ca barier de sincronizare, variabilele c i k pentru a crete viteza algoritmului. Rezultatul final: Fiecare element a[ i ] conine valoarea operaiei ce reprezint suma elementelor a[0] a[1] . . . a[ i ].

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

95

Variabile globale: n, c, k, a[n], b[n]. c = log n

forall (1 i < n) do
k = 1;

for (j = 0 ; j < c ; j++ ) {


b[ i ] = a[ i ] ;

if (i k) a[ i ] + = b[ i - k] ; k = 2*k ;

} endfor Un exemplu de execuie paralel a algoritmului de calcul al sumei prefixelor pentru 7 valori nscrise n vectorul a[7] se prezint n figura 2.13. Analiznd figura 2.13 se constat c sunt necesare 3 iteraii ( j = sup(log n) = sup(log 7)) pentru calculul sumei prefixelor. La fiecare iteraie, vrful sgeilor arat care elemente ale vectorului a din iteraia trecut se adun pentru a determina noua valoare a fiecrui element corespunztor n iteraia curent.

a[0] 5 5

a[1] 3 8

a[2] 1 4

a[3] 7 8

a[4] 8 15

a[5] 4 12

a[6] 6 10 a) Condiia iniial b) Iteraia j = 0

16

19

20

25

c) Iteraia j = 1

16

24

28

34

d) Iteraia j = 2

Figura 2.13. Exemplu de calcul al sumei prefixelor n modelul EREW-PRAM pentru n = 7.

96

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

2.7. Paralelism la nivelul expresiilor aritmetice


Expresiile aritmetice ocup locul principal n orice aplicaie de calcul i, prin urmare, trebuie s li se acorde o atenie deosebit n calculul paralel. n evaluarea unei expresii aritmetice, paralelismul se dovedete foarte eficient. Tehnicile utilizate sunt aplicabile att la nivelul expresiilor aritmetice ct i la nivelul instruciunilor de atribuire a unor expresii aritmetice. O expresie aritmetic este constituit din variabile de forma x1, x2, x3, , xn ntre care pot fi relaii de adunare, scdere, nmulire sau mprire. Dou expresii sunt echivalente dac iau aceeai valoare indiferent de ordinea n care sunt atribuite valori variabilelor. n calculul paralel, evaluarea unei expresii aritmetice E se bazeaz pe gsirea unei expresii echivalente E, astfel nct mai multe operaii s se poat efectua simultan. Pentru exemplificare, s considerm expresia urmtoare: E = ( x1 x2 + x3 ) x4 + x5 n prelucrare serial, ordinea de evaluare a expresiei este:

E = ((( x1 x 2 ) + x 3 ) x 4 + x 5 ) n calculul paralel, se impune prelucrarea expresiei ntr-o form echivalent, cea mai convenabil fiind: E ' = x1 x2 x4 + x3 x4 + x5 care poate fi evaluat astfel: E ' = (( x1 x 2 ) x 4 + ( x 3 x 4 ) + x 5 ) regula fiind aceea c la pasul 1 se calculeaz toate parantezele interioare, la pasul 2, urmtoarele paranteze interioare, .a.m.d., evaluarea fcndu-se dinspre interior spre exterior. n figura 2.14a este reprezentat evaluarea serial a expresiei, iar n figura 2.14b, evaluarea paralel. n calculul serial, operaiile se execut secvenial, genernd ca rezultat expresia E reprezentat n figura 2.14a.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

97

n calculul paralel, la pasul s=1, produsele x1x2 i x3x4 sunt calculate simultan. La pasul s=2, produsul x1x2x4 i suma x3 x4 + x5 sunt, de asemenea calculate simultan, iar la pasul s=3 se calculeaz suma final E reprezentat n figura 2.14b. E = ( x1 x2 + x3 ) x4 + x5 + + x2 x3 a) Figura 2.14. Se poate face o analiz comparativ ntre cele dou tipuri de evaluare. Astfel, dac notm prin s numrul de pai seriali sau paraleli, prin p numrul de procesoare, iar prin o numrul de operaii efectuate de algoritm, se poate scrie: s p o Evaluare serial, E 4 1 4 Evaluare paralel, E 3 2 5 x4 x5 x1 x2 x3 b)

s=4 s=3 s=2 s=1 s=0 x1

E ' = x1 x 2 x 4 + x 3 x 4 + x 5 + + x4 x5

Cu toate c numrul pailor paraleli este cu unul mai puin dect cei seriali, numrul total de operaii este mai mare cu unu la evaluarea paralel dect la cea serial. Acest exemplu ilustreaz legtura ce exist ntre optimizarea utilizrii procesoarelor, care ar putea sta nefolosite, i minimizarea timpului total de execuie. n exemplu am considerat c operaii diferite sunt executate de procesoare diferite folosind o arhitectur de tip MIMD. Dac foloseam o arhitectur de tip SIMD, adunarea i nmulirea nu puteau efectuate simultan i am fi avut nevoie de 4 pai n obinerea rezultatului. ns uneori, pot fi gsite alte expresii echivalente, a cror execuie s nu fie afectat, din punct de vedere al numrului de pai, de tipul mainii. Astfel, dac se consider expresia

98

I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

E = ((( x1 x2 ) + x3 ) x4 + x5 ) x6 + x7 care are forma echivalent E ' = ((( x1 x 2 )( x 4 x 6 ) + ( x 3 ( x 4 x 6 ))) + (( x 5 x 6 ) + x 7 )) al crui calcul necesit 4 pai pe o main cu arhitectur MIMD i 5 pai pe main de tip SIMD, putem prelucra expresia iniial la urmtoarea form echivalent E" = (((( x1 x2 ) + x3 )( x4 x6 )) + (( x5 x6 ) + x7 )) a crei prelucrare s necesite 4 pai att pe o main MIMD ct i SIMD. Deci, tipul mainii paralele poate influena alegerea expresiei echivalente. La calculul n virgul mobil, asociativitatea nu are loc i nlocuirea lui E cu un E oarecare poate genera instabilitate numeric. n acest sens, Ronsch [30] a demonstrat c, n cazul unei expresii aritmetice arbitrare E cu variabile diferite, eroarea relativ acumulat R respect inegalitatea R R1R2 n care R1 este eroarea relativ determinat de inexactitatea datelor de intrare, iar R2 reprezint numrul de operaii de adunare i scdere din E. Presupunnd c expresia iniial este stabil, n procesul de transformare E E se poate introduce instabilitate numeric. S-a demonstrat c o expresie aritmetic reprezentat printr-un vector de lungime n poate fi calculat ntr-un timp teoretic de ordinul O(log2 n), utiliznd [n/log2 n] procesoare.

2.8. Paralelism la nivelul instruciunilor


Similar relaiei de dependen variabile-operatori dintr-o expresie aritmetic, se poate considera relaia de dependen instruciune-date. Modul de a privi programul ca o list de instruciuni care manipuleaz date situate n locaii fixe ntr-o ordine secvenial, nu mai corespunde exigenelor impuse de calculul paralel. n scopul exploatrii paralelismului la nivel de instruciune, programul se descompune conform unui graf de dependen a datelor care arat cum depind instruciunile de date. Pentru exemplificare, se consider un program ce const din urmtoarele instruciuni scrise ntr-un limbaj de nivel nalt:

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

99

g =a+ b h=c+ d i = e+ f q=ghi Aceste instruciuni pot fi scrise n felul urmtor (figura 2.15): a b c d e i= e+ f f

g=a+ b

h=c+ d

q=ghi Figura 2.15. Figura 2.14 ilustreaz paralelismul potenial inclus n execuia secvenei. Baza sgeii arat unde este atribuit variabila (valoarea datei), iar vrful sgeii arat locul unde este aceasta implicat. Din forma prezentat n figura 2.15 se poate construi graful dependenei datelor din figura 2.16. a + g h q Figura 2.16. Analiznd modul de evaluare a datelor la nivel de instruciune, conform grafului de dependen a datelor din figura 2.16, se poate constata c acesta este similar cu cel de evaluare a expresiei E din figura 2.14b. Deoarece n exemplul precedent nu s-a specificat complet modul de evaluare la nivelul nmulirii, se poate alege unul din subgrafurile reprezentate n figura 2.17a sau 2.17b. b c + i d e + f

100 I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

a) q

b) q

Figura 2.17.

2.9. Paralelism la nivel de bit


2.9.1. Prezentare general
Procesarea simultan a biilor unui cuvnt a fost una din principalele forme de paralelism utilizate cu succes n calcule diferite de ordin general. Spre deosebire de sistemele organizate pe cuvnt, unde fiecare procesor opereaz pe cuvnt (pe 8, 16, 32, 64 bii), n sistemele de calcul organizate pe bit, fiecare procesor poate opera pe biii unui operand n perioada fiecrui ciclu de memorie. Pentru a opera comod la nivel de bit, ntreaga memorie trebuie gndit ca fiind format din mai multe plane de bii, datele putnd fi memorate vertical de sus n jos ca n figura 2.18. Accesul la toi biii unui plan al memoriei se poate face simultan, deci, i operaiile la nivelul unui plan de bii se pot executa simultan. Prin reprezentarea vertical a datelor, algoritmii care opereaz la nivel de bit pot fi independeni de numrul datelor, dac sistemul dispune de suficiente procesoare astfel nct, fiecrei date s i se aloce cte un procesor. n acest fel, timpul necesar efecturii operaiilor depinde numai de numrul de bii utilizai n reprezentarea datelor. Pentru a ilustra acest lucru, s considerm urmtoarea aplicaie tipic de determinare a numrului cu valoarea maxim dintr-o mulime de numere naturale. Procedeul este urmtorul: iniial, toate numerele mulimii sunt candidai la a avea valoarea maxim i ncepem examinarea planelor de bii pornind de la planul cu biii cei mai semnificativi (planul n-1). Cu ajutorul unei operaii logice AND se vor elimina toate numerele care au bii cu valoarea zero n planul respectiv i se vor reine numai numerele care au n acest plan bii cu valoarea 1. Se trece apoi la planul imediat inferior i se procedeaz la fel, .a.m.d. pn se proceseaz i ultimul plan de bii (planul 0). Dac se ntmpl ca ntr-un

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

101

plan toi biii s aib valoarea zero, atunci se vor reine toate numerele (pentru a nu fi eliminate toate la examinarea din acest plan) i se trece la planul urmtor.
Bitul 1 ai fiecrui numr Planul 0 de bii Planul 1 de bii . . . Planul r de bii . . . Planul n-1 de bii Bitul n-1 ai fiecrui numr

N U M R 1

N U M R 2

N U M R 3 ...

N U M R m

Figura 2.18. Reprezentarea vertical a patru numere cu lungimea de n bii. Un exemplu concret este ilustrat n tabelul 2.4 pentru mulimea de numere naturale {4, 13, 1, 12, 5, 8, 9}. Tabelul 2.4. Algoritm paralel la nivel de bit pentru determinarea numrului cu valoarea maxim
4 13 1 12 5 8 9

0 1 0 0

1 1 0 1

0 0 0 1

1 1 0 0

0 1 0 1

1 0 0 0

1 0 0 1

O alt aplicaie tipic este determinarea sumei unei mulimi de N numere:

102 I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

S = xi
i =1

Utiliznd tehnica dublrii recursive (reducerea secvenelor) prezentat in paragraful 2.6.4, timpul necesar nsumrii a celor N numere este proporional cu log2 N (este n O(log2 N)), dac se neglijeaz ntrzierile datorate transferurilor de date. Cnd operaia se execut pe un sistem paralel organizat pe bit, operaiile aritmetice sunt repartizate pe procesoare astfel nct s se realizeze cea mai bun utilizare posibil a tuturor procesoarelor. Astfel, la pasul k al dublrii recursive, o operaie de adunare x i( k ) + x (jk ) poate fi divizat ntre procesoarele disponibile n felul urmtor: un grup de procesoare poate opera asupra biilor cei mai semnificativi, n timp ce alt grup de procesoare poate opera asupra biilor cel mai puin semnificativi. S considerm suma a patru numere x1 + x2 + x3 + x4 utiliznd patru procesoare P1, P2, P3, P4 (figura 2.19).

Presupunem c, iniial, numerele x1 + x2 + x3 + x4 sunt memorare cte unul n procesoarele P1, P2, P3, P4 . Algoritmul este urmtorul: Pasul 1: procesoarele P1, P2 vor efectua amndou suma S1 = x1 + x2 iar procesoarele P3, P4 , suma S2 = x3 + x4 (spre exemplu: P1, respectiv P3 biii cei mai semnificativi, iar P2, respectiv P4 biii cei mai puin semnificativi); Pasul 2: procesoarele P1, P2, P3, P4 vor efectua mpreun S = S1 + S2 .

P1, P2, P3, P4 (x1 + x2) +(x3 + x4) P1, P2 (x1 + x2) P1 x1 x2 P2 x3 P3 x4 P3, P4 (x3 + x4) P3

Figura 2.19. Repartizarea procesoarelor pentru efectuarea adunrii S considerm un exemplu concret lund numerele x1 = 1000 (8), x2 = 1011 (11), x3 = 0111 (7) i x4 = 1101 (13) memorate n procesoarele P1, P2, P3 i P4 care au memoria structurat n planuri de bii conform figurii 2.17 (tabelul 2.5):

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

103

Tabelul 2.5.
x1 1 0 0 0 P1 x2 1 0 1 1 P2 x3 0 1 1 1 P3 x4 1 1 0 1 P4

Pasul 1: P1 = 1000 + 1000 = 10000 (P1 nsumeaz primi doi bii cei mai semnificativi ai lui x1 i x2) P2 = 0000 + 0011 = 00011 (P2 , cei mai puin semnificativi 2 bii ai acelorai numere) P3 = 0100 + 1100 = 10000 (P3 nsumeaz primi doi bii cei mai semnificativi ai lui x3 i x4) P4 = 0011 + 0001 = 00100 (P4 , cei mai puin semnificativi 2 bii ai acelorai numere) Pasul 2: P1 = P1 + P2 + P3 + P4 = 10000 + 00011 + 10000 + 00100 = 100111(2) = 39(10)

corect.

Dar, x1 + x2 + x3 + x4 = 8 + 11 + 7 + 13 = 39. Deci, rezultatul este

2.9.2. Algoritmi de evaluare a funciilor numerice la nivel de bit

Ideea de baz n construirea algoritmilor care opereaz pe bit este aceea de a face ca biii operanilor diferii s fie procesai simultan. Operaiile implicate vor fi n general cele de nmulire i mprire, deci, timpul de execuie va fi comparabil cu cel al unei singure instruciuni de nmulire sau mprire. nainte de a descrie metoda general de obinere a unui asemenea algoritm, pentru o mai uoar nelegere, s lum urmtorul exemplu: S se calculeze n paralel valoarea funciei exponeniale f ( x) = e x , pentru 0 < x < 1. Presupunem c valorile e m pentru m = 2 m (m = 1, 2, ..., n) sunt memorate ntr-un tabel. Dac scrierea lui x n binar are precizia dorit, x = 0.a1a2..an atunci,
x = a1 1 + a 2 2 + ... + a n n

(2.38)

104 I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

e x = e a11 e a2 2 ... e an n
Atunci calculm Em (m = 1, 2, 3, ...) astfel:

(2.39)

E 0 = 1,

E m 1 e m daca a m = 1; Em = E m 1 daca a m = 0.
x

(2.40)

iar n final, E n = e . Acest mod de calcul este foarte potrivit unei execuii efectuate pe un calculator cu arhitectur SIMD orientat pe bit, valorile fiind memorate pe vertical ca n figura 2.17. Dup acest exemplu, s prezentm cazul general. Fie relaia Y = F(X) pentru care dorim s calculm n paralel o mulime de valori ale lui Y care corespund unor valori X date (problema discret), sau dorim s calculm valorile lui X = F -1 (Y) care corespund unor valori Y date (problema invers). Se prezint mai jos ideea de baz a metodei:
Pasul 1 - prin transformri convenabile se aduc valorile X i/sau Y respectiv la x i/sau y, pentru a face ca ordinul coordonatelor s fie cuprins ntr-un interval dat n care y variaz monoton, neted i niciodat mai rapid sau mai lent dect x. Vom nota curba rezultat prin y = f(x). Pasul 2 - se deduce o formul exact pentru f(x+x) n funcie de x, f(x) i x. Pasul 3 - se alege un punct de pornire ( 0 , 0 ) de pe curb i o mulime fix de creteri 1 , 2 ,..., n astfel nct toate valorile x pot fi atinse (cu precizia dorit) pornind de la 0 prin utilizarea acestor creteri: x = 0 + 1 1 + 2 2 + ... + n n

(2.41)

Valorile i , (i = 1, 2, ..., m) vor fi alese dintr-o anumit mulime T care conine dou elemente, de obicei {0, 1} sau {-1, 1}. De asemenea, trebuie s fie posibil calcularea lui f(x+x) cu ajutorul formulei de la Pasul 2, atunci cnd x = m m , prin utilizarea, dac este necesar, a unui tabel predefinit.

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

105

n problema direct, algoritmul este urmtorul: Definim x = 0 , y 0 = 0 , x m = x m 1 + m m unde m T este astfel ales nct xm este o aproximaie mai bun a lui x dect xm-1, i calculm ym = f (xm ) La sfrit rezult y n = f ( x n ) cu precizia dorit. n problema invers, algoritmul este urmtorul: Vom interpreta valorile x m 1 + m m ( m T ) ca fiind valori de ncercare i vom alege pe m astfel nct f ( x m ) = f ( x m 1 + m m ) s fie o aproximaie mai bun a lui y dect f ( x m 1 ) . Atunci yn = y i xn = f -1 (y) cu precizia dorit. Alegerea creterilor. Acest lucru se face att pentru a uura determinarea valorilor m T i calcularea valorilor ym la fiecare etap, ct i pentru a face accesibile toate valorile lui x din intervalul dorit. Pentru T = {0, 1} exist urmtoarea teorem care d o condiie necesar i suficient de realizare a acestei ultime cerine, n cazul la limit n , fiind un ghid pentru cazul finit. Teorem.
0 m
m =1

Fie 1 2 ... 0 . Atunci orice x care satisface

poate fi exprimat sub forma

m =1

m cu m {0,1} dac i

numai dac

m =1

n 1 pentru toi n = 2, 3, ...

Folosind acest procedeu se pot calcula funciile rdcin patrat, exponenial, logaritmic, sinus, cosinus i altele.

106 I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

2.10. Aritmetica binar paralel n NC


NC reprezint clasa problemelor care pot fi rezolvate pe un model teoretic PRAM n timp polilogaritmic i cu lucru polinomial. Condiia ca lucrul s fie polinomial poate fi nlocuit de condiia ca numrul procesoarelor s fi polinomial. Apartenena unei probleme la NC este o dovad c ea poate fi rezolvat rapid n paralel cu un numr rezonabil de procesoare. Se va prezenta n continuare operaiile aritmetice elementare de adunare, nmulire i imprire binar.
2.10.1. Adunarea

Fie date dou numere ntregi oarecare x i y, n-binare (reprezentate n binar pe n bii). S se calculeze suma z = x + y, z fiind (n+1) binar. Utiliznd un algoritm secvenial, cifrele binare ale lui z se calculeaz prin adunarea biilor din aceleai ranguri binare ale numerelor x i y de la dreapta la stnga, memornd de fiecare dat transportul rezultat, pentru a fi adunat la rangul superior urmtor. Complexitatea unui astfel de algoritm este n O(n). Pentru paralelizarea operaiei de adunare, se propune proiectarea unui algoritm paralel optimal care sa aib ca finalitate obinerea transportului ci (i = 1, n), c0 = 0 .

Dac se aeaz numerele x, y, z exprimate n binar, unele sub altele ca la aritmetic, avem. x = x n 1 x n 2 . . . x1 x 0
y = y n 1 y n 2 . . . y1 y 0 z = z n 1 z n 2 . . . z1 z 0 Se poate constata uor c z i = x i y i c i ; i = 0, n (2.43) (2.42)

Pentru realizarea algoritmului paralel optimal, va fi necesar s evalum cifrele transportului c pe fiecare rang, fr s se atepte calculul celor precedente. Se observ c:

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

107

xi = yi = 0, atunci ci+1 = 0, indiferent de valoarea lui ci; xi = yi = 1, atunci ci+1 = 1, indiferent de valoarea lui ci; xi yi = 1, atunci ci+1 = ci, transportul se propag i notm acest lucru cu p. S considerm urmtorul semigrup ({0, 1, p}, ) n care: 0 x = 0; 1 x = 1; p x = x, pentru x (0, 1, p). n aceste condiii, folosind un vector u ale crui componente ui , i = 0, n se definesc astfel:

dac dac dac

u 0 = 0; 0 pentru xi = yi = 0; ui +1 = 1 pentru xi = yi = 1; p pentru xi yi = 1; pentru i = 0, n 1 Analiznd relaiile de mai sus, se constat c pentru i = 0, n , se poate scrie, ci = ui ui 1 . . . u 0 (2.44) Deci, biii de transport ci sunt sumele sufix ale lui u n raport cu operaia . Avnd n vedere cele prezentate mai sus, pentru operaia de adunare, se poate scrie urmtorul algoritm structurat n trei pai: 1. Se calculeaz vectorul u, n O(1) timp paralel folosind relaiile descrise anterior; 2. Se calculeaz sumele sufix ale vectorului u (biii de transport ci pentru fiecare rang binar), n O(logn) timp paralel; 3. Se calculeaz n paralel biii rangurilor binare ale sumei utiliznd relaia (2.43) n O(1) timp paralel.
Exemplu. Fie numerele x i y exprimate n binar pe 15 bii:

(2.44)

x= 0100101011101011 y= 0110101001010001 suma Utiliznd algoritmul prezentat mai sus, s se efectueze n paralel z = x + y, z fiind exprimat pe 16 bii.

108 I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

Rezolvare:

u = 1 p 0 1 0 1 0 p 1 p p p 0 p 1 0 c = 1 0 0 1 0 1 0 1 1 0 0 0 0 1 1 0 + x = y = z 1 0 0 1 0 1 0 1 1 1 0 1 0 1 1 + 1 1 0 1 0 1 0 0 1 0 1 0 0 0 1 +

= 1 0 1 1 0 1 0 1 0 0 1 1 1 1 0 0
2.10.2. nmulirea

Fie date dou numere ntregi oarecare x i y n-binare. S se calculeze produsul z = x y, z fiind (2n- binar). Utiliznd algoritmul secvenial uzual, z se determin ca suma a n produse pariale 2n-binare. Vom folosi urmtorul procedeu: n loc s adunm produsele pariale dou cte dou, le grupm cte trei i, n timp paralel de O(1), nlocuim suma fiecrui grup de trei numere cu suma a dou numere cu un bit n plus. Astfel, problema se reduce de la n-1 adunri ale celor n numere, la 2n adunarea a numere. Se repet acest pas pn cnd se obin doar dou 3 numere pentru a cror sum se aplic algoritmul de adunare prezentat n paragraful anterior. Numrul termenilor descrete geometric, ceea ce nseamn c vor fi necesare logn etape. Deci, algoritmul paralel se va executa n timp paralel de O(logn), iar lucrul este n O(n2). Cheia algoritmului const n utilizarea unei metode prin care se nlocuiete suma a trei numere binare cu suma a dou numere ce se pot determina n timp paralel constant. S considerm trei numere ntregi n-binare x, y, z: x = xn1 xn 2 . . . x1 x0 ; y = y n1 y n2 . . . y1 y0 ; z = z n1 z n 2 . . . z1 z 0

Pentru fiecare rang binar i de calculeaz n paralel perechile de bii uivi utiliznd relaia:
ui vi = xi + yi + z i ; i = 0, n

(2.45)

2. REALIZAREA APLICAIILOR DE PRELUCRARE PARALEL

109

Se poate verifica imediat c dac formm numerele u = u n1 u n2 . . . u1 u0 0 (u este (n+1)-binar) i v = vn1 vn2 . . . v1 v0 , atunci
u+v = x+ y+ z

(2.46)

Timpul paralel pentru construcia lui u i v este constant.


Exemplu. Fie produsele pariale x, y i z:

x = 1 0 1 0 1 0; y = 1 1 1 0 0 1; z = 1 0 0 1 1 1

Utiliznd algoritmul prezentat mai sus, s se efectueze n paralel suma x + y + z = u + v.


Rezolvare:

Se calculeaz mai nti biii numerelor (vectorilor) u i v adunnd biii de pe acelai rang ai numerelor x, y, z, ncepnd de la dreapta la stnga, ca n tabelul urmtor:
x : y : z :

1 0 1 0 1 0 + 1 1 1 0 0 1 + 1 0 0 1 1 1 1 0 1 0 0 1 1 0 0 1

1 1
u v

Se calculeaz apoi suma numererelor u i v care va fi suma celor trei numere x, y i z .


u v

: :

1 0 1 0 1 1 0 0 0 0 1

1 1 0 + 1 0 0 0 1 0

u+v = 1

110 I.POPA - INTRODUCERE N CALCULUL PARALEL I DISTRIBUIT. ALGORITMI

2.10.3. mprirea

Fie date dou numere oarecare d i y n-binare. S se determine numerele q i r astfel nct d = q y + r, (0 r < y). Pentru a prezenta procesul de mprire, s artm mai nti cum se 1 al unui numr binar dat. poate aproxima inversul y Utiliznd metoda lui Newton pentru a determina o rdcin a funciei derivabile f(x) pornind de la o valoare iniial x0, se construiete irul de aproximri: f ( xi ) (2.47) xi +1 = xi f ( xi ) 1 Dac se consider c f ( x) = y , se obine xi +1 = 2 xi yxi2 . d Se alege x0 ca fiind unica putere fracionar a lui 2 din intervalul
1 1 , . 2y y

Se poate verifica uor c irul aproximrilor este cresctor: 1 1 1 1 x i < 2i . < x0 x1 x2 . . . i y 2y y 2 y Deci, dup k = log log d iteraii, vom avea 1 yxk <
y

y . d

Dar,

deoarece xk <
y

1 d , se obine 0 dx k < 1 , ceea ce nseamn c partea y y

ntreag a lui d este

dxk sau dxk .

Restul se obine prin scdere. Analiznd algoritmul, se constat c fiecare iteraie Newton necesit O(logn) timp paralel, dac se extinde algoritmul descris mai sus i pentru numere fracionare, scderea fiind similar adunrii. Dar, numrul iteraiilor este k = log log d = O(log n) . Deci, algoritmul necesit un timp paralel n
y

O(log n) i lucru polinomial.


2

Alegerea aproximaiei x0 se poate face n timpul paralel O(logn) astfel: se determinim unica putere a lui 2 din intervalul [y, 2y). Se face inversarea acestui numr inversnd ordinea biilor i plasnd punctul binar dup primul 0.

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