Sunteți pe pagina 1din 74

UNIVERSITATEA "VASILE ALECSANDRI"

din BACU
FACULTATEA de TIINE

ALGORITMI PARALELI l
DISTRIBUII
Note de curs

COLECIA
TIINE
Gloria Cerasela Crian

Editura ALMA MATER - BACU


2014

U n i v e r s i t a t e a V a s i l c A l e c s a n d r i " din Bacu


Facultatea de tiine
D e p a r t a m e n t u l de M a t e m a t i c , I n f o r m a t i c i tiinele E d u c a i e i

Algoritmi paraleli i distribuii


Note de curs

Universitatea
.VASILE A L E C S A N D R T
din Bacu
BiDlioteca
Cota
IV

Universitatea din Bacau

l.ect. univ. dr. Gloria C e r a s e l a C r i a n

Bacu
2014

CUPRINS
Introducere

1. L i m i t e l e p r o c e s r i i s e c v e n i a l e i n e c e s i t a t e a

programrii paralele sau distribuite


1.1 Arhitectura de tip von Xeumann
1.2 Calcul concurent, calcul paralel, calcul distribuit
1.3 Caracteristicile aplicaiilor concurente
1.4 Metode de scriere a aplicaiilor concurente

7
8
12
16

2. P a r a l e l i s m i m p l i c i t
2.1. Procesare de tip linie de asamblare
2.2. Procesare super-scalar
2.3. Procesare cu spaii mari de memorie
2.4. Folosirea ierarhiilor de memorii cache
2.5. Utilizarea datelor contigue
2.6. Software-ul i paralelismul implicit

19
19
20
22
23
24
25

3. Paralelism explicit
3.1. Controlul n aplicaiile paralele
3.2. Comunicaiile n aplicaiile paralele

27
27
30

4. R e z o l v a r e a u n e i p r o b l e m e p r i n c a l c u l c o n c u r e n t
4.1. Graful de preceden
4.2. Metode de descompunere a rezolvrii unei probleme

43
43
46

5. T e h n i c i e f e c t i v e d e p a r a l e l i z a r e
5.1. Paralelizarea calculului numeric
5.2. Paralelizarea rezolvrii de probleme prin programare
dinamic
5.3. Paralelizarea sortrii i a problemelor conexe

49
49
54

6. P r o b l e m e a c t u a l e a l e c a l c u l u l u i p a r a l e l
6.1. De la TSP la MDPVRPTW

69
69

6.2. Potenialul actual al calculului paralel

59

75

7. P r o b l e m e a c t u a l e a l e c a l c u l u l u i d i s t r i b u i t

77

Bibliografic

79

Introducere

Complexitatea lumii n care trim, globalizarea i necesitatea deciziilor rapide i


corecte au condus la dependena aproape total a societii actuale de sistemele de calcul i de
comunicaii. Puine sunt zonele de pe glob lipsite de invazia" reelelor de calculatoare sau a
telefoanelor mobile, dar influena indirect a tehnologiei actuale este omniprezent. De
exemplu, zone nelocuite sunt cartografiate cu ajutorul sateliilor, modelele climatice descriu
evoluia condiiilor atmosferice de pe ntregul glob, sistemele gco-staionarc permit
localizarea cu o precizie uimitoare, chiar spaiul extraterestru este acum studiat.
Sistemele de calcul individuale, reelele de calculatoare i dispozitivele de
comunicaie sunt astzi ajutoare nepreuite, indispensabile societii in care trim, iar cei care
contribuie la utilizarea i mai ales la dezvoltarea lor rezolv eficient problemele actuale i
construiesc lumea de mine. De aceea, specialitii n tehnologie, calculatoare i informatic,
bazndu-se pe solide cunotine, coopereaz pentru a oferi celor interesai produse, modele i
soluii.
Care sunt specializrile actualc oferite de universiti?
Dezvoltarea fr precedent a metodelor i a mainilor electronice de calcul a condus la
existena n Romnia a trei specializri de licen, care se ntreptrund, dar care ofer viziuni
i compctcnc diferite:

Tehnologia informaiei, care se refer n special la partea hardware, de arhitectur


i reele de calcul;
tiinfa calculatoarelor,
care se ocup cu fundamentarea teoretic, tiinific a
modelelor, realiznd legtura cu matematica i tiinele computaionale, axndu-se
pe proiectarea algoritmilor i inteligena artificial;
Informatica,
axat pe software i legtura cu utilizatorii, care asigur prin
limbajele de programare interfaa ntre problemele vieii reale, metodele teoretice
de abordare a lor i resursele disponibile.
Cui se adreseaz acest curs?
Cursul Algoritmi paraleli i distribuii" arc drept scop familiarizarea studenilor cu
programarea concurent, pentru a putea nelege i utiliza eficient sistemele moderne de
calcul.
Cursul de fa se adreseaz studenilor Universitii Vasile Alecsandri" din Bacu,
att celor din anul III de la specializarea Informatic a Facultii de tiine, ct i celor de la
specializarea Calculatoare i tehnologia informaiei de la Facultatea de Inginerie. Cuprinsul
cursului urmeaz att fia disciplinei n vigoare, ct i suporturile de curs recunoscute pe plan
mondial i cele predate la alte universiti din ar.

Capitolul 1
Limitele procesrii secveniale i necesitatea p r o g r a m r i i
paralele sau distribuite

Modelul clasic de execuie a unei aplicaii const in procesarea sa secvenial,


instruciune cu instruciune. Astfel, se consider c exist un indicator al instruciunii aflate n
execuie, care parcurge aplicaia (nu neaprat in ordine), ncepnd cu prima instruciune.
Instruciunea curent preia din memorie datele ncccsarc, Ic prelucreaz (pc procesorul
sistemului de calcul), apoi realizeaz n memorie actualizrile ncccsarc (dac este cazul) i
pred urmtoarei instruciuni care trebuie cxccutatc controlul unitii de procesare. Acest
grup de activiti sc realizeaz pn cnd aplicaia se nchcic. Acest model descrie execuia
unei aplicaii pc un sistem de calcul mono-procesor, realizat conform arhitecturii von
Ncumann.

1.1. Arhitectura de tip von Neumann


Savantul american de origine ungar John von Neumann a propus n 1945 cel mai
cunoscut model al unui calculator. Aceast descriere conceptual, realizat cnd tehnologia
era la nivel de pionierat, este i astzi considerat una dintre cele mai importante etape n
dezvoltarea tiinei calculatoarelor.
Modelul descris n [13] (cunoscut mai trziu sub
numele de modelul von Neumann sau arhitectura
Princeton) stabilete urmtoarele caracteristici ale unui
sistem de calcul:
Calculatorul este compus din: memorie, unitatea
aritmetico-logic, unitatea de control i
periferice;
in timpul execuiei, programul este stocat n
memorie;
La un anumit moment, memoria poate fi
acccsat fie dc unitatea de control, fie de
unitatea aritmetico-logic;
Instruciunile programului sc execut secvenial.
John von Neumann
(1903-1957)
La momentul respectiv, sistemul dc calcul era considerat independent, procesorul
(alctuit din unitatea aritmetico-logic i unitatea dc control) realiznd accesul la memorie.
Pe lng faptul c instruciunile programului se execut secvenial, memoria nu poate fl
accesat simultan de unitatea de control i de unitatea aritmetico-logic (adic nu se pot
produce modificri n starea programului simultan cu transferul de date), deoarece exist o

singur magistral de date ntre memorie i procesor. O alternativ la modelul von Neumann
este modelul Harvard, caracterizat prin tipuri diferite de memorii: unul pentru date (de tip
citire/scriere) i altul pentru program (de tip read-only). Astfel, se pot executa simultan
schimbri in starea programului i citiri/scrieri dc date. Modelul Harvard modificat permite
ca memoria dedicat programului s fie tot de tip read/write. Acest model este utilizat de
diveri productori de procesoare (familia ARM9 este un exemplu) sau este folosit pentru
dispozitive specializate (microcontrolere).
Dezvoltarea tehnologic ulterioar i necesitile tot mai mari de putere de calcul au
evideniat limitele modelului von Neumann. astfel c au aprut diverse metode de cretere a
vitezei de execuie a unui program. Dc exemplu, memoriile intermediare de tip cache ofer
acces mai rapid la datele necesare execuiei unei instruciuni. Posibilitatea accesului rapid la
date i dezvoltrile hardware au dus la realizarea n 2005 a primelor proccsoare dual-cores.
carc sunt de fapt dou procesoare cu aspect fizic unitar, care posed un sistem de memorii
cache. Au urmat apoi proccsoare din ce n ce mai complexe, cu arhitecturi care utilizeaz
ierarhii din ce n ce mai dezvoltate de memorii cache. cum este cel din figura 1.

UiJOWi
lli.MKB)
| llaiUKB)

111 *4M.

KIC

Cot P2
' Fttsl

u (JwerB.

iiii^re

LII > 64KB i

L1C.W6.

Licaere.

LleiUl:6< | HoiMKBI "|

Cc< F9>

Cot Psj

Cf5

Coe

FCF*:

Ftrsj

KMS

lloOK>t [ llc.UKB j ii-

Cote PSC

l2.2C4e*6.

Cot

f
Figura 1. Arhitectura procesorului 8-cores AMD FX - Bulldozer [18]

FLfeT
j

La un alt nivel arhitectural, aceeai problem a necesitii de resurse de calcul din ce


n ce mai puternice, a fost rezolvat n anii 70 ai secolului trecut prin apariia calculatoarelor
multi-proccsor: sisteme de calcul carc includ mai multe procesoare alturate, concctate prin
magistrale i care partajeaz memorie comun, astfel nct manevra datelor s fie rapid.
Supercalculatoarele actuale sunt sisteme de calcul multi-procesor cu caracteristici uimitoare
fiind utilizate in cercetarea fenomenelor globale [28].
Din momentul n care s-au putut cupla mai multe procesoare s-a deschis posibilitatea
executrii pe un sistem de calcul a mai multor aplicaii simultan. De asemenea, conectarea
calculatoarelor independente n reele a realizat efectiv modelul cuplrii prin magistrale
externe plcilor de baz a mai multor sisteme independente de calcul. Programarea
secvenial devine de acum o opiune, nu o cerin (impus de modelul von Neumann).
Calea ctre programarea paralel sau distribuit a fost deschis dc dezvoltarea
hardware, de explozia comunicaiilor electronice i de ncccsitilc n continu cretere ale
societii.

1.2 Calcul concurent, calcul paralel, calcul distribuit


Sistemul de operare al unui calculator mono-procesor este pus n situaia de a
coordona mai multe procese i a le executa n mod concurent. De exemplu, transferurile dc
date dc la/ctre perifericele de intrarc-ieirc, execuia unor aplicaii, ctc. se realizeaz

simultan din punctul dc vedere al utilizatorului, fr ca acesta s observe sincope. Pc dc alt


parte, arhitectura mono-procesor impune execuia unei singure aplicaii la un anumit moment
de timp. Metoda prin care se realizeaz aceste procese sc numete multitasking i nseamn
partajarea timpului de lucru al procesorului n intervale disjuncte i alocarea acestor intervale
diverselor proccsc aflate n execuie. Cum aceste intervale sunt foarte scurte, utilizatorul nu
percepe schimbrile realizate de sistemul de operare, ci arc impresia c toate procesele se
desfoar simultan.
Calculul concurent este o caracteristic software, opus calculului serial, care permite
execuia simultan a mai multor aplicaii. Dc exemplu, pc un procesor mono-nuclcu, calculul
concurent sc poate realiza prin muhitasking (programele n execuie primesc intervale
disjuncte de timp pentru accesarea procesorului; la fiecare moment dc timp un singur
program se execut; la expirarea timpului alocat, starea programului n execuie se salveaz i
se d controlul procesorului altui program; aceste schimbri se realizeaz des. astfel nct
utilizatorul arc senzaia c toate programele sc cxccut n paralel). Pe un calculator multiprocesor, care deci este alctuit din mai multe procesoare care partajeaz memorie comun,
calculul concurent se realizeaz efectiv sub forma calculului jxiralel (care este deci o
proprietate hardware). Pc dc alt parte, n cazul reelelor de calculatoare, alctuite din sisteme
independente, cu memorii independente, calculul concurent capt forma calculului distribuit
(care este, de asemenea, caracteristic hardware).
Dup modelul dc succes al sistemelor dc operare, care gestioneaz simultan zeci de
proccsc. programatorii actuali ar trebui s cunoasc limbajele de programare care permit
execuia n paralel. A scrie o aplicaie paralel este ins mult mai dificil dect a scrie o
aplicaie secvenial, deoarece necesit nelegerea profund a problemei, descompunerea
acesteia n sub-problemc care se pot rezolva n paralel, rezolvarea sub-problcmelor i
compuncrca rezultatului problemei iniiale din soluiile sub-problemelor. Se poate ntmpla
ca o aplicaie paralel s fie, n anumite cazuri, mai incficicnt dect aplicaia secvenial.
Ctigurile aduse ns dc aplicaiile paralele cficicnte, proiectate i realizate pentru abordarea
unor probleme complexe, ale vieii reale, sunt ns motive temeinice pentru ca programatorii
s nvee limbajele calculului paralel i distribuit.
Un exemplu n acest sens este studiul vitezei dc execuie a aplicaiei secveniale i a
celei paralele utilizate pentru calcularea unui termen al irului lui Fibonacci. Vom nota cu
Fib(n) termenul generic al irului lui Fibonacci; acesta sc pate calcula cu formula rccursiv:
Fib{ 0) = Fib( 1) = I
Fib{n) = Fib{n -1) + Fib{n - 2),

Vn> 2

Pentru a calcula n mod iterativ valoarea lui Fib(n) se poate folosi urmtoarea metod:
Functionfin)
if(n < 2) return 1
x- 1
y=l
z =2
k =2
while (k < n)
x=y

k =k + I
return z
Aceast metod (iterativ) are avantajul c urmeaz ablonul matematic al construirii
valorilor irului din aproape n aproape. Exist ns o alt metod, mai apropiat dc obiectul
acestui curs. care face trecerea spre abordarea concurcnt a acestei probleme, i anume
metoda recursiv:
Function g(n)
if(n < 2) return 1
return g(n - l)+g(n - 2)
Aceast metod ncccsit cunotine mai avansate dc programare i este mai nceat
(sau produce depiri dc memorie) la execuia n limbajul C, chiar pentru valori comune ale
lui n. Avantajul ei este ns c se auto-apeleaz (pentru n > 2) cu factor dc multiplicare 2.
Aceasta nseamn, de exemplu, c pentru aflarea lui #(8) se lanseaz o copie a sa care
calculeaz g(7) i nc una pentru gsirea lui #(6). Fiecare dintre accstca lanseaz alte dou
execuii, ctc.
n tabelul 1 este prezentat modul n care lucreaz funcia g dac este apelat pentru
valoarea n = 4. Coloanele tabelului arat modul de ncrcare pe stiv a copiilor Iui g, pn
cnd se calculeaz valoarea g(4). Rndurile tabelului arat succcsiunea temporal a cxccuiei
proccdurii g pentru valoarea 4. Apelul 1 este apelul procedurii, care lanseaz imediat pc stiv
apelul 2, adic o copie a codului pentru valoarea n = 3 i apoi intr n ateptare (idle) pn
cnd primete valoarea
3), adic 3. Apelul 2 lanseaz o nou copie a aplicaiei, pentru a
calcula g(2), etc. Starea dc execuie este indicat prin culoarea de fundal gri; starea idle a unui
anumit proces este indicat prin diagonalele trasate. Dc exemplu, apelul 3 ocup timp de 4
uniti dc timp o unitate dc procesare (ncepnd cu momentul 3), din carc jumtate st n
ateptare (este idle). Se observ c pe stiv, pentru n = 4, vor exista cel mult 4 copii n
execuie i c unele copii stau in ateptare destul de mult timp. astfel explicndu-se faptul c
execuia lui g este mai nceat dect cea a l u i / pentru aceeai valoare a lui n.
Apel 1
(main)
realizat de:
Momente de
timp
1
2
3
4
5
6
7
8
9
10
11

Apel 2

Apel 3

Apel 4

Apel 1

Apel 2

Apel 3

8(4)
8(3)

8(2)

X
8(2)-2

10

g(D
return 1

8(1)= 1
8(0)
return 1

8(0)-1
rctum 2

Apel 2

Apel 1
(w ain)

Apel 3

Apel 4

Apel 1
Apel 2
Apel 3
realizat de:
12
B(0
1
return 1
13
14
g(l)=l
rctum 3
15
16
g(3) = 3
17
g<2)
18
8(0
\ /
return 1
19
20
g(D=l
21
g(0)
return 1
22
23
K(0)=1
return 2
24
25
8(2) = 2
return 5
26
Tabelul 1. Evoluia temporal a apelului recuri v g(4)

V/
A
/ \

Trecerea spre execuia pe mai multe fire urmeaz modelul din tabelul 1 i presupune
c sunt disponibile uniti dc procesare astfel nct s poat prelua execuia la nevoie i astfel
firele dc cxccuic s nu atepte mai mult dect este necesar. Pentru lansarea succesiv a
apelurilor se introduc dou funcii specifice calculului concurent, care permit multiplicarea
execuiei i respectiv nchiderea tuturor firelor lansate i continuarea execuiei n clasicul mod
serial. Aceste dou noi comenzi sunt:
spawn - procedur prin care un proces (printe) lanseaz un proces (fiu)
sync - proccdur prin care se atept ncheierea tuturor proceselor lansate in apelul
curent prin spawn i continuarea numai cu procesul printe.
Folosind aceste dou noi comenzi, procedura recursiv concurent pentru calculul
valorii generice din irul lui Fibonacci devine:
Function h(n)
i f f n < 2) return 1
x = spawn h(n- 1)
//dc aici aplicaia arc 1 fir-printe + 1 fir-fiu
y spawn h(n - 2)
//de aici aplicaia are 1 fir-printe + 2 fire-fiu
sync
//aici se ajunge dup ce fii se ncheie
return x + y
n tabelul 2 sunt evideniate apelurile succesive realizate de spawn i sync, pentru
fiecare apel este menionat i apelul su-printe (de exemplu, apelurile 4 i 5 sunt lansate de
apelul 2). Apelul principal h(4) lanseaz iniial n execuie pe alt unitate de procesare
calculul variabilei x ca valoarea ntoars la apelul h(3) i continu execuia lansnd la
momentul imediat urmtor, pe o alt unitate dc procesare, calculul valorii variabilei y ca
valoarea ntoars dc /;(2). Fiecare dintre aceste apeluri ocup apoi alte dou uniti de
procesare. Se observ c la momentul 5 de timp. sunt necesare 9 uniti de procesare, din carc
9

5 lucreaz i 4 sunt n starea idle. Se observ de asemenea c apelul /;(4) necesit 12 uniti
de timp pentru execuie, pe cnd apelul #(4) are nevoie de 26 uniti de timp i de cel mult 4
execuii simultane.
La fel ca n tabelul 1, zonele gri reprezint intervalele de timp n care procesoarele
sunt alocatc, iar zonele care au diagonale sunt intervalele de timp n care procesoarele stau in
ateptare {idle). Observm ins c apelul 1 avanseaz i la momentul 2, cnd realizeaz
lansarea apelului 3, spre deosebire de situaia prezentat n tabelul 1. cnd este deja in
ateptare. i n acest caz se observ un dezechilibru al ncrcrii procesoarelor, dc exemplu
ultimele 5 proccsc lucreaz 2 intervale de timp. pe cnd primul procesor este ocupat toate
cclc 12 intervale de timp.
Apel 1
(main)
fiul lui:
Momc
nte de
timp
1
2
3
4
5

Apel 2

Apel 3

Apel 4

Apel 5

Apel 6

Apel 7

Apel 8

Apel 9

Apel 1

Apel 1

Apel 2

Apel 2

Apel 3

Apel 3

Apel 4

Apel 4

h( 2)

h(2)

h( 1)
return
1

AO)
retum
1

h(0)

h{ 1)
retum
1

h( 4)
/>(3)

XX
X
h( 1)=1

7
8

h( 1)=1
A(0)=1
retum
2

9
10

h( 2 ) - 2

11
12

A(1)=1

retum
1

m
retum
1

h( O M
retum
2

h{iy=2
rctum
3

rctum
5
Tabelul 2. Evoluia temporal a apelului recursiv paralel h(4)

1.3 Caracteristicile aplicaiilor concurente


Arhitectura von Neumann reprezint modelul unui sistem dc calcul cu un singur
element de procesare. Natura ns a evoluat dintotdeauna prin proccsc concurente. In accst
sens pot fi considerate:

dezvoltarea unui organism, alctuit din organe cu rol specific, care lucreaz
conform scopului lor dar i n corelare cu celelalte organe;
evoluia unui sistem social (sistem complcx, alctuit din indivizi oarecum
asemntori care intcracioneaz, dc exemplu: un stup de albine, un banc de peti,
o turm de animale, populaia unui contincnt, posesorii de conturi Facebook, etc.).
Acest model este preluat n zilele noastre cu succes de reelele de calculatoare sau de
telefonie mobil, dc sistemele intcrconectatc dc calcul care permit tranzaciile online, dar i

12

dc supcrcalculatoarc, carc ofer n mod curcnl acces simultan la mii de procesoare. Calculul
concurent nu este dect modelul actual a ceea ce natura face de milioane de ani: se dezvolt
prin evoluii simultane ale ecosistemelor, populaiilor, evenimentelor geologice, etc.
Tehnologia ne permite ca micarea planetelor, evenimentele climatice, migraiile psrilor,
servirea clienilor la un magazin, conduccrca corporaiilor trans-naionale, tranzaciile
bancare sau vizionarea filmelor s fie acum studiate sau realizate prin sisteme de calcul
paralel sau distribuit. Globalizarea lumii n care trim este posibil i datorit dezvoltrii
calculului concurent.
Odat cu dezvoltarea tehnologic i apariia sistemelor de calcul care pot oferi acces
simultan la mai multe uniti de procesare, cercettorii au realizat diverse clasificri ale
acestor sisteme. Clasificarea urmtoare se refer la funcionalitatea sistemelor dc calcul, deci
la modul n care aplicaia realizeaz prelucrarea datelor.
Clasificarea Flynn (Michacl Flynn. 1966)
Una dintre ccle mai vechi clasificri ale prelucrrilor clectronicc consider numrul de
prelucrri care se pot realiza simultan i de fluxuri de date care se pot proccsa n acelai timp.
Conform acestei clasificri, calculul electronic se poate realiza prin:
Single Jnstruction Singe Data (S/SD) - proccsarc serial, aplicaia avanseaz
instruciune cu instruciune, pe un singur fir de execuie, cu un singur set de date.
Un astfel de exemplu este calculul pe un PC dotat cu un procesor mono-nucleu.
Single Jnstruction Multiple Data (S/MD) - aplicaia avanseaz instruciune cu
instruciune, pe un singur fir de execuie, procesnd simultan mai multe seturi de
date. O astfel dc situaie este ntlnit n cazul procesorului vectorial, care
manevreaz simultan datele, utiliznd un vector dc memorii. Astfel dc procesoare
sunt utilizate cnd exist colecii dc date carc ncccsit acccai prelucrare; dc
exemplu, procesarea grafic pentru jocuri.
Multiple Jnstruction Single Data (MJSD) - aplicaia const din mai multe fire de
cxccuic carc proccscaz acelai set dc date. Accstc arhitecturi nu apar foarte des
n practic, unul dintre cazuri este calculul dc toleran zero la erori, cnd se
prelucreaz pe mai multe fire dc cxccuic acclai set de date, n vederea mascrii
(eliminrii) erorilor.
Multiple Jnstruction, Multiple Data (M/MD) - aplicaia const din mai multe fire
de execuie care proceseaz mai multe seturi de date. n general, un fir de execuie
este alocat unui nucleu. Acest tip dc procesare este realizat de marea majoritate a
supcrcalculatoarclor din Top 500 actual [28]. La rndul lor, procesrile de tip
MIMD pot fi:
O Single Program, Multiple Data (SPMD) - cnd copii ale aplicaiei se
execut pe mai multe seturi de date, fiecare proces avnd evoluie proprie
(deoarece seturile diferite de date conduc la trasee diferite n execuie,
controlate de instruciuni i f , case/switch. while, do-while sau for). Accstca
sunt cel mai des ntlnite situaii, cnd codul unei aplicaii dcscric
procesrile fiecrui fir de execuie,
o Multiple Program. Multiple Data (MPMD) - cnd o aplicaie dc tip mater
lanseaz pe alte uniti de procesare (nuclci - cores) alte aplicaii dc tip
slave.

13

Aplicaiile concurente sc pot evalua folosind clasicele msuri software, destinate


tuturor categoriilor de aplicaii. Aceste msuri se pot clasifica astfel:
msuri cantitative: numr de linii dc cod. mrimea (n bii) a fiierului cxccutabil.
viteza dc execuie, numrul dc orc dc programare necesare proiectrii, dezvoltrii
i testrii, etc.;
msuri calitativc: corectitudine (rezolv problema propus), completitudine
(rezolv toate cazurile posibile), scalabilitatc (capabil de a procesa chiar i
volume de date mai mari dect cele ateptate, sau se poate uor dezvolta astfel
nct s le accepte), mentcnabilitate (uurina in exploatare i actualizare), etc.
Msurile software specificc programelor care se avanseaz simultan pc mai multe fire
dc cxccuic se refer att la caracteristicile de consum total ale resurselor implicate (timp dc
procesare, numr de procesoare), ct i la economiile realizate prin utilizarea acestora (ct
timp se ctig dac utilizez in paralel mai multe procesoare, dect dac folosesc un singur
procesor). In continuare sunt prezentate cteva msuri specifice calculului concurent.
Acceleraia (speed-up) este raportul dintre timpul dc cxccuic pc o singur unitate de
procesare i timpul de execuie pe n astfel de uniti. Este o msur a-dimensional, care n
mod normal este supraunitar - dac aplicaia are o acceleraie subunitar. atunci varianta
paralel nu sc justific, deoarccc necesit un timp de execuie mai mare dect varianta serial.
Dac sc noteaz:
T(n) timpul ncccsar execuiei pe n uniti dc procesare (nuclci),
atunci acceleraia are expresia:
T(n)
in cazul unei descompuneri ideale pe n fire dc cxccuic, fr costuri suplimentare
datorate comunicaiilor i dac cele n fire de execuie reuesc fiecare s se ncheie n timpul

rp)

. .

.,

, atunci acceleraia este n. Din formula acceleraiei sc dcducc deci c o valoare teoretic
maxima a acestei mrimi este //.
Eficiena (jiarallel ejficiency) este o msur derivat din acccicraic, fiind raportul
dintre accasta i numrul de procesoare utilizate:
n
n baza observaiei anterioare, deducem c eficiena unei aplicaii concurente are
ntotdeauna o valoare subunitar, iar eficiena unei aplicaii concurente ideale este 1.
Echilibrul (balance) sc refer la o caracteristic general a cxccuici pe diverse uniti
de procesare (poate fi i timpul necesar execuiei), msurat prin valorile qt 1 <i<n unde n
este numrul nucleilor:
B(n) =
De exemplu, dac ne referim la q t 1 < / <, n ca fiind timpul de execuie pc procesorul
/", atunci echilibrul aplicaici h care lucreaz ca n Tabelul 2 este B(n) =

= 16,7%. in

general, sc urmrete ca aplicaiile concurente s fie cchilibratc, adic B(n) s fie ct mai
aproape de 100%.

14

Din punct de vedere constructiv, calculatoarelor paralele li se pot aplica diverse


msuri: numrul de nuclei, memoria RAM. consumul de energie, viteza de procesare. O
msur a vitezei de procesare ieit din uz este numrul de instruciuni pe secund. Cum
aceste instruciuni pot ncccsit intervale dc tip dc lungimi diferite pentru execuie, acum se
utilizeaz numrul de operaii in virgul mobil pe secund (floating poinl operations per
second-FLOP/s).
Multiplii unitii de msur FLOP/s
1 kFLOP/s - IO3 FLOP/s
1 MFLOP/s = IO6 FLOP/s
1 GFLOP/s - 10" FLOP/s
1 TFLOP/s - IO12 FLOP/s
1 PFLOP/s= 10''FLOP/s
1 EFLOP/s = IO18 FLOP/s
1 Z FLOP/s = IO21 FLOP/s
1 YFLOP/s = IO24 FLOP/s

sunt:
(kilo)
(mega)
(giga)
(tera)
(peta)
(exa)
(zctta)
(yotta)

Procesoarele actuale pot realiza 4 operaii in virgul mobil pe unitate dc ceas (clock
cvcle). Un procesor de 2.5 GHz cu 4 nuclei poate realiza deci
4-4-2,5 GFLOP / s = 40 GFLOP / s.
Dezvoltarea tehnologic a fost surprins n anii '60 de o observaie empiric, al crei
adevr s-a meninut pn acum. Acest enun este cunoscut ca Legea lui Moore (Gordon
Moore, 1965) i trebuie neles ca o constatare empiric observat a Fi adevrat din 1965 i
pn azi:
Performanele procesoarelor (msurate prin numrul de tranzistoare care formeaz
un circuit integrat) se dubleaz la fiecare 2 ani.
Legea lui Amdahl (Gene Amdahl, 1967)
Acceleraia aplicaiilor paralele are o cretere sub-liniar odat cu creterea
numrului de procesoare.
Presupunem o aplicaie concurent oarecare, pentru carc notm T(\) = a + b, unde a
este intervalul de timp ncccsar execuiei prii nc-paralelizabile i b este timpul ncccsar
cxccuici prii paralclizabile pe o singur unitate de procesare. nlocuind aceste valori n
formula acceleraiei, obinem:
v

'

b
a+ n
n ca/ul unui echilibru perfect i dac nu sunt ncccsare alte instruciuni pentru
repartizarea, controlul firelor de execuie, colectarea datelor, ctc.. atunci pe n uniti dc
b
procesare se poate cxccuta accast parte a aplicaici n timpul a + ~ . Trecnd la limit, avem
n
c:
,. c, , a + b
hmS(n) =
m-*m
(j
Cum accast valoare este o constant carc depinde de aplicaia n cauz. nseamn c
exist un prag al numrului dc procesoare ncepnd de la care adugarea de noi procesoare nu
mai determin o mbuntire semnificativ a aecclcraici. Aceast concluzie se menine chiar
n cazul unei aplicaii pcrfcct echilibrate.

15

Legea lui Gustafson (John Gustafson. 1988)


Pe o configuraie hardw are dat (numrul de procesoare n fixat) se pot scrie aplicafii
paralele care au acceleraie liniara.
Cu notaiile anterioare avem c:

lim S(n) = lim - = n

b-*x

b-*x

b n
Deci dac partea paralelizabil este suficicnt de mare, atunci acceleraia este aproximativ
egal cu numrul de procesoare. Legea lui Gustafson specific o regul simpl: dac vrem s
ne apropiem dc eficiena ideal a unei aplicaii paralele, partea paralelizat trebuie s fie ct
mai consistent.

Gordon Earl Moore (1929 - )

Gene Myron Amdahl (1922 - )

John Gustafson (1955 - )

1.4 Metode de scriere a aplicaiilor concurente


Paralelizarea aplicaiilor seriale deja scrise necesit o nelegere profund a problemei
rezolvate serial, pentru a obine o aplicaie eficient. Cum la momentul scrierii codului nu sc
cunoate arhitectura pe care se va executa, programatorul ar trebui s aleag o metod carc s
funcioneze ct mai eficicnt n ct mai multe cazuri, cu diverse date de intrare. Una dintre
provocrile calculului concurent este proiectarea firelor dc cxecuie astfel nct acestea s
lucreze echilibrat (conform definiiei din subcapitolul anterior).
Un exemplu n acest sens este modul n care se adun n paralel, pe un multicalculator cu 4 procesoare, 16 valori numerice, stocate ntr-un vector a(i)lii{l6. Presupunem
c datele sunt stocate pc fiecare procesor. Dac s-ar mpri vectorul n 4 zone:
{fl(l),a(2),a(3),fl(4)},
{a(5),a(6),a(7),a(8)},
{<i(9),a(10),a(l l).a(12)}
i
{tf(13).a(14),0(15).a(16)}, fiecare alocat unui proccsor, atunci toate cele 4 procesoare ar fi
perfect echilibrate deoarece ar lucra acelai interval de timp pentru a calcula suma parial
corespunztoare zonei dc vector alocatc, iar la sfrit unul dintre ele ar colecta valorile gsite
de celelalte 3 i ar afia rezultatul obinut. Aceast metod este cea care asigur echilibrul cel
mai bun pentru aplicaia paralel.
Dac ns avem la dispoziie 16 calculatoare legate ntr-o reea local (LAN) peer-topeer de tip inel i cte o component a vectorului este stocat pc ficcare calculator, atunci

16

adunarea distribuita eficient accstor valori va ine cont i dc timpul ncccsar comunicaiilor.
O metod eficient (din punctul de vedere al ncrcrii procesoarelor) este prezentat n
tabelul 3. Prima dat se realizeaz 8 transferuri simultane de date ntre vecini, la finalul
crora, de exemplu, procesorul I stocheaz suma valorilor a( I) i a(2). specificat n tabel pe
primul rnd ca 0(1-2). La pasul urmtor lucreaz doar 4 procesoare care trimit valoarea
stocat ctre un procesor aflat la distan 2 (de exemplu, procesorul 3 trimite valoarea 0(3-4)
ctre procesorul I. care dup recepionare va aduna propria valoare stocat i deci va
cunoate valoarea a( I -4).
Dac la pasul 1 se realizeaz 8 transferuri ntre vecini. nseamn c pe reea se vor
nregistra 8 transferuri simultane dc date. Considernd costul comunicrii unei valori intre
dou calculatoare din reea ca fiind numrul de calculatoare prin carc trccc valoarea
transferat, atunci costul realizrii pasului 1 este 8. la fel ca i n etapa a doua. Pasul 3 const
n transferul valorilor stocatc pe calculatoarele 5 i 12. cu cost total 8. iar n ultima etap doar
calculatorul 16 realizeaz o concxiunc dc cost 1 cu sistemul 1. vecinul su, prin circularitatc.
Accast metod ncccsit deci 4 uniti dc timp i are cost 25.
pasul 0
0(1)
(2)
a(3)

pasul 1
a( 1-2)

pasul 2
fld-4)

pasul 3
a{ 1-8)

t
0(3-4)

0(4)

a<5)

a(5-6)

0(5-8)

a( 6)
a( 7)

a( 7-8)

0( 8)

a( 9)
a( 10)

i
a( 9-10)

pasul 4
0(1-16)

a(ll)

a( 12)

a(l1-12)

0(13)

0(14)

0(13-14)

fl(15)

i
0(9-12)

i
i
i

(15-16)
0(13-16)
0(9-16)
0(16)
cost
4*2 = 8
8*1=8
2*4 = 8
1*1 = 1
comunicaii
cost total
25
comunicaii
Tabelul 3. Etapele adunrii distribuite a 16 valori ntr-o reeapeer-to-peer
Aceste consideraii arat c o aplicaie simpl, de adunare a unor valori, poate fi
eficientizat doar dac se cunosc informaii suplimentare legate de configuraia pe care se va
executa i dac programatorul tie care este critcriul de eficientizare urmrit. Unele aplicaii
concurente pot avea acces la un numr practic nelimitat de uniti de procesare, altele pot
utiliza reele de tip broadband, altele manevreaz volume mari de date. care nu pot fi
transmise pe distane mari. n concluzie, nu exist o reet universal pentru scrierea unei

bune aplicaii concurente. Este nevoie de experien i cunotine avansate pentru a realiza
coduri paralele sau distribuite eficiente.

17

Capitolul 2
P a r a l e l i s m implicit

Arhitectura sistemului de calcul poate fi orientat prin diverse dezvoltri tehnologice


spre creterea vitezei de procesare. Aceste metode fizice de paralelizare alctuiesc facilitile
de paralelism implicit, oferite dc caracteristicile resurselor dc calcul utilizate. In contrast,
programarea concurent, adic specificarea prin program a proccsclor care sc desfoar
simultan reprezint paralelismul explicit, care va fi abordat n capitolul urmtor.
Paralelismul implicit speculeaz noile faciliti tehnologice; acum procesoarele nu
mai execut secvenial instruciunile unui program, ci exist diverse metode prin care acestea
se pot suprapune temporal. Accste metode sunt:
procesare de tip linie de asamblare
procesare super-scalar
folosirea procesoarelor care manevreaz cuvinte lungi
ierarhiile de memorii cache
utilizarea datelor contigue (ine de programare, dar folosete stocarea la adrese
fizice a datelor).

2.1. Procesare de tip linie de asamblare


Procesarea de tip linie de asamblare (pipelining) se refer la fragmentarea
instruciunilor cxccutatc pc un procesor, astfel nct s fie posibil cxccuia lor simultan,
asemntor lucrului pc o linie de asamblare. La nivel teoretic, se consider c o instruciune
se realizeaz pe procesor n 5 faze: instruction fetch (1F - ncrcarea instruciunii), decode (D
- traduccrc), data fetch (DF - ncrcarea datelor) execute (E - proccsarc cfcctiv) i write-back
(WB - scriere a rezultatului n memorie). Practic ns, ficcare procesor are propriile faze de
lucru. De exemplu, AMD FX are 15 faze pentru procesarea valorilor ntregi.
Executarea unei aplicaii, dac operaiile de manevr a datelor permit, s-ar putea
desfura la nivel optim ca n figura 2 (se execut integral 6 instruciuni n 10 uniti de ceas).

Timpul
1
IF

2
D
IF

3
DF
D
IF

4
E
DF
D
IF

5
WB
E
DF
D
IF

WB
E
WB
DF
E
WB
D
DF
E
WB
IF
D
DF
E
Figura 2. Dezvoltarea temporal pentru o proccsarc ideal dc tip pipeline

WB

n situaia ideal prezentat n figura 2 se observ c procesoarele modeme pot


executa n paralel mai multe faze din instruciuni diferite (n intervalul 5 sunt deja n execuie

19

toate fazele, cte una din primele 5 instruciuni). Aceast situaie nu apare mereu n realitate,
deoarece pot aprea ntrzieri. De exemplu:
dac instruciunea curent arc nevoie de ncrcarea unor date (faza DF) carc la
momentul respectiv sunt actualizate printr-o faz dc WB a unei instruciuni
anterioare. n acest caz ateptarea este obligatorie.
dac instruciunea din care se dorete cxccuia fazei IF face parte dintr-o
instruciune alternativ (if-then-else), dar nc nu s-a produs faza E din aceasta,
deci la momentul respectiv nu se cunoate pe care ramur avanseaz aplicaia. n
acest caz se pot utiliza resurse suplimentare pentru ncrcarea simultan a ambelor
ramuri ale instruciunii i f , iar cnd se cunoate care ramur este cea aleas, se
renun la cealalt. Accast rezolvare se utilizeaz n mod curent, deoarece situaia
apare des n programare - aproximativ 15% din instruciunile unei aplicaii sunt
instruciuni alternative. Sub numele dc descompunere speculativ, aceeai idee
este tratat n subcapitolul 4.2.
Proccsarca dc tip pipeline este numit i procesare scalar, dcoarccc permite
cretcrea vitezei dc procesare liniar cu creterca numrului dc faze din instruciuni diferite
care se pot executa simultan.

2.2. Procesare super-scalar


O alt posibilitate dc realizare a paralelismului implicit este construcia unor
procesoare super-scalare,
prin adugarea de resurse suplimentare. De exemplu, prin
utilizarea a dou uniti aritmetico-logice, se poate considcra c un procesor poate lucra
simultan cu dou linii dc execuie (ca n figura 3), controlate de o unitate specific, numit
dispecer.

Timpul
1
IF
IF

2
D
D
IF
IF

4
DF
DF
D
D
IF
IF

E
E
DF
DF
D
D
IF
IF

WB
WB
E
E
DF
DF
D
D
IF
IF

WB
WB
E
WB
WB
E
WB
DF
E
WB
DF
E
WB
D
DF
E
E
WB
D
DF
WB
DF
E
IF
D
WB
D
DF
E
IF
Figura 3. Dezvoltarea temporal pentru o procesare ideal cu dou fluxuri pipeline
Acest tip de procesare asigur, n cazul ideal, o vitez dubl fa de proccsarca pc un
singur flux pipeline (n exemplul din figura 3 se execut integral 12 instruciuni n 10 uniti
de ceas). Exemplul urmtor arat c modul de programare este esenial pentru viteza efectiv
de execuie [7].
S presupunem c dorim s adunm 4 valori ntregi, stocate fiecare pe 4 octei, n
variabilele a, b, c i d, aflate n memorie nccpnd cu adresa hexazecimal 1000. Prima

20

versiune a codului in limbaj de asamblare realizeaz ((a + />) + (< + </)). Figura 4 arat timpul
necesar acestei versiuni.
Versiunea 1
1
2
3
4
5
6

load Rl, 01000


load R2, 01008
add Rl, 61004
add R2, G100C
add Rl, R2
store Rl, 92000

Timpul
10

IF
IF

D
D
IF
IF

DF
DF
D
D
IF

II

DF
DF
D
IF
DF
WB
Figura 4. Dezvoltarea temporal pentru versiunea 1 cu 2 fluxuri pipeline

D1

n acest caz, instruciunile 1 i 2 se pot lansa simultan, dcoarccc sunt independente.


Fiind instruciuni dc preluare n rcgitri. nu mai conin i fazele execute i write-back. La fel.
pcrcchca dc instruciuni 3 i 4 sc lanseaz simultan. Instruciunea 6 este dependent dc a
cincca, astfel c faza data fetch este ntrziat. i instruciunea 5 este nevoit s atepte
finalizarea cclor dou prcccdcntc pentru a intra n faza data fetch. Astfel, ntreaga secvcn de
cod necesit 10 uniti de timp.
Considernd acum aceeai metod de calcul, dar inter-schimbnd instruciunile 2 i 3,
obinem:
Versiunea 2
1
2
3
4
5
6

load Rl, 01000


add Rl, 01004
load R2, 01008
add R2, 01OOC
add Rl, R2
store Rl, 02000

Aceast schimbare care pare minor conduce la prelungirea timpului de procesare, aa


cum este artat n figura 5.
Timpul
0
1
IF
D
IF
IF

10
DF
D
D
IF
IF

DF
E
DF
DF 1 E
1)
DFI
E J
D
1
IF
DF 1 E I WB
Figura 5. Dezvoltarea temporal pentru versiunea 2 cu 2 fluxuri pipeline

21

II

Dc accast dat, perechea de instruciuni 1 i 2 nu se mai poate lansa la acelai


moment, deoarccc sunt dependente. La fel se ntmpla cu perechea urmtoare; instruciunea 5
ateapt ncheierea instruciunii 4 pentru a intra n faza data fetch. Instruciunea 6 se lanseaz
imediat dup lansarea instruciunii 5 i astfel versiunea 2 propus mai sus necesit 11 uniti
de timp.
O alt posibilitate pentru adunarea celor patru valori este prezentat n continuare: se
utilizeaz un singur registru de memorie, folosind adunri succesive: (((a + b) + c) + d). in
acest ultim caz, figura 6 prezint modul de cxccuic.
Versiunea 3
1
2
3
4
5

load Rl, 81000


add Rl, 91004
add Rl, 01008
add Rl, 8100C
store Rl, 82000

11

WB
Figura 6. Dezvoltarea

3 cu 2 fluxuri pipeline

in acest caz, toate instruciunile sunt dependente, astfel c ntrzierile se propag i se


amplific. Acest al treilea mod dc rezolvare ncccsit 12 uniti de timp, fiind astfel cel mai
ineficient din acest punct dc vedere, dar este cel mai cficicnt din punct dc vedere al memoriei
utilizate pe procesor (un singur registru).
Discuia celor trei situaii de mai sus arat importana cunoaterii arhitecturii pe care
se execut aplicaia i utilizarea eficient a accstcia.

2.3. Procesare cu spaii mari de memorie


O alt metod de realizare a paralelismului implicit este folosirea procesoarelor cu
spaii mari de memorie alocate pentru instruciuni (very long instruction word processors VLIWprocessors). Procesoarele au evoluat dc la cuvinte de memorie de 2 octei (16 bii) la
cele de 4 octei (32 de bii), iar cele actuale utilizeaz cuvinte de memorie de 8 octei (64 dc
bii). n cazul n carc instruciunile au cel mult 4 octei, arhitecturilc modeme pot deci prelua
simultan din codul obicct (rezultat la compilare) cte dou instruciuni. Aceasta este ns o
metod static, dcoarece la compilare se produce mpachetarea grupurilor de cte dou
instruciuni carc sc pot executa n paralel.
Metoda nu conduce deci la o njumtire a timpului de proccsare, deoarece:
nu toate instruciunile se pot mpachcta n grupuri de cte dou;
timpul de execuie al grupului este egal cu cel mai mare dintre timpii de execuie
al instruciunilor din grup.

22

2.4. Folosirea ierarhiilor de memorii cache


Cea de-a patra metod dc paralelizare implicit const in utilizarea ierarhiilor de
memorii cache, care permit scderea timpului de transfer al datelor din memoria principal
(RAM) n memoria intern (regitri), pentru a fi proccsatc dc programul n execuie.
Caracteristicile sistemului de calcul care sunt implicate n viteza dc transfer a datelor ctre
procesor sunt: latena (timpul de la lansarea cererii i pn la nceperea sosirii datelor) i
lrgimea de band (raportul dintre cantitatea de date i timpul necesar ajungerii lor n
memoria intern). n situaia n care nu sunt utilizate memorii intermediare dc tip cache,
datele aflate n RAM pot ntrzia major procesarea, aa cum rezult din urmtorul exemplu.
Exemplu. Presupunem un procesor cu frecvena de 1 GHz. care poate executa 4 instruciuni
pc ciclu dc ccas. conectat la o memorie RAM cu laten de 100 ns. Frecvena dc 1 GHz - 10"
Hz conduce la execuia unei instruciuni n IO"9 s = 1 ns (nanosccund). Pentru adunarea a doi
vectori sc cxccut n mod repetat codul urmtor:
1
2
3
4

load Rl, e a(i]


load R2, 9 b[i)
add Rl, R2
store Rl, 0 c[i]

Dac presupunem c grupul format din cele patru instruciuni se lanseaz


concomitent, atunci primele dou se ncheie dup 100 (latena) + 1 (execuie) = 101 ns.
Adunarea se ncheie dup 102 ns (dup cc se cunosc termenii adunrii mai este nevoie de 1
ns pentru a se afla suma lor), iar stocarea n RAM a valorii obinute mai are nevoie de nc
101 ns (1 ns pentru execuie i 100 ns transferul sumei n RAM). n final, valoarea variabilei
c[lj ajunge n RAM dup 203 ns, iar procesarea pentru aflarea valorii c[2) poate nccpe dup
ce prima instruciune s-a nchciat, adic dup 101 ns. Registrul Rl este blocat dc
instruciunile corespunztoare valorii c/7/, deci instruciunea
load Rl, 9 a[2]

sc execut n intervalul 203-304 ns. Dei instruciunea


load R2, 8 b[2)

se execut mai devreme, dcoarccc registrul R2 este eliberat la momentul 102 ns. valoarea din
R2 ateapt depunerea valorii variabilei a[2] n Rl i deci instruciunea
add Rl, R2

sc execut n intervalul 304-305 ns. Transferul valorii a[2] + b[2) sc facc n intervalul 305406 ns. n concluzic, execuia repetat a blocului dc 4 instruciuni se face n blocuri de 203
ns, deci timpul total nccesar este de n 203 ns n cazul n care vectorii au cte n componente.
Dintre cele 4 instruciuni necesare aflrii unui element din vectorul-sum. trei (prima,
a doua i a patra) necesit 101 ns pentru execuie i cea de-a treia se execut ntr-o
nanosecund; dc asemenea, primele dou se pot executa concomitent, ns ultimele dou se
cxccut secvcnial dup ce primele dou s-au nchciat.
Dac ns se folosesc memorii cache, care pot stoca integral cei trei vectori i dac
presupunem c lrgimea de band permite transferul datelor ntr-o singur faz, atunci prima

23

dat se aduc toate datele de intrare n cache (100 ns), apoi se calculeaz toate valorile
vectorului c (aproximativ n ns deoarece se pot executa 4 instruciuni in paralel, iar aflarea
unei valori din vectorul c necesit tot 4 instruciuni) i n final toate valorile se trec in RAM
n 100 ns. in accst caz timpul total este dc n + 200 ns. dc aproximativ 200 de ori mai mic
dcct n cazul n carc nu sc utilizeaz memorii cache.

2.5. Utilizarea datelor contigue


Creterea vitezei dc proccsare a datelor prin metode implicite sc mai poate realiza prin
eliminarea accesrii datelor stocate la distan (stride elimination). Aducerea datelor din
memoria secundar (de exemplu, hard-disc) n memoria principal (RAM) nu se face
individual, ci prin intermediul paginilor de memorie - un grup de adrese adiacente in
memorie, care include i valoarea cerut de procesor Un grup de date alturate in memorie se
numesc date contigue (contiguous data). De obicei o pagin de memorie are 4 kB i aceast
metod a fost implementat deoarece s-a considerat c, de obicci, aplicaiile folosesc date
stocate n zone alturate. Acest principiu poate fi utilizat n reducerea timpului de procesare a
matricelor mari. Programatorii nu dau mare importan ordinii de parcurgere a unei matricc,
dar n cele ce urmeaz vom vedea c n cazul unor matrice mari. aceasta are impact major
asupra timpului dc cxccuic.
Exemplu. Considerm c matricea A arc dimensiunea (1000, 1000) i c este ncccsar o
aplicaie carc s genereze un vector b cu 1000 dc componcntc, fiecare dintre accstca fiind
suma elementelor din A situate pe cte o linie.
Versiunea 1 dc rezolvare a problemei este:
f o r (i - 0; i < 1000; i++)
b [ i ] - 0;
f o r (i = 0; i < 1000; i++)
f o r ( j - 0; j < 1000; j+*)
b l j ) +*a [ j j [ i l ;
n acest caz. pentru i fixat, la fiecare exccuic a ultimei instruciuni, este adus n RAM o alt
pagin de memorie, deoarece, dup cum se tie, matricele se stochcaz pe linii. Dac tipul dc
date este de 4 octei, atunci o pagin stocheaz 1000 de valori. Dei sunt adui de fiecare dat
cte 4 kB de date, este utilizat doar o singur valoare - i anume a [ j ] [ i ) . Pentru a sc
executa complet structura f o r interioar sunt necesare deci 1000 de transferuri din hard-disc
n RAM.
O simpl interschimbare a celor doi indici conduce la:
Versiunea 2
f o r (i = 0; i < 1000; i++)
b [ i ] - 0;
f o r (i = 0; i < 1000; i++)
f o r <j - 0; j < 1000; j++>
b [ i ] += a f i l 1 3 ] ;
n accst caz, pentru / fixat, execuia complct a structurii f o r interne necesit doar cteva
transferuri dc date dc pe hard-disc (n funcic de tipul dc dat utilizat i dc poziia n pagina
dc memorie a valorii a [ i ] I j ]).

24

2.6. Software-ul i paralelismul implicit


n concluzie, exist metode implicite pentru creterea vitezei de execuie a unei
aplicaii, bazate att pe facilitile hardware, ct i pe folosirea cunotinelor de arhitectura
calculatoarelor. Un hun programator nu este cel care stpnete doar tehnicile i metodele de
programare. Pentru aplicaiile complexe ale zilei de azi, este nevoie i de cunotine din
tiina calculatoarelor i Tehnologia informaiei.
Dac avem la dispoziie un singur procesor, modul n care se realizeaz programarea
activitilor se reflect n timpul total, necesar ncheierii tuturor activitilor. Exemplul
urmtor arat importana programrii eficiente a mai multor activiti pe un singur procesor i
subliniaz faptul c sistemul de operare este o aplicaie esenial n exploatarea eficient a
resurselor de calcul. Alegerea unui sistem de operare se va face i analiznd eficiena
dispecerului de activiti (aplicaic-nuclcu care se ocup cu gestionarea proceselor
concurente).
Kxemplu. Presupunem c avem la dispoziie un singur procesor i c pe acesta
trebuiesc programate dou activiti. Al i A2. Fiecare dintre acestea const ntr-o niruire dc
patru sarcini, care vor fi specificate prin timpul necesar (n secunde) i o caracteristic: p dac
utilizeaz procesorul sau /', dac nu necesit procesare (sarcina respectiv poate fi de exemplu
o listare).
Al:2p 1/2p li
A2: 3p 1/ 1 p 31
Pentru a realiza cele dou activiti, vom folosi mai nti o metod greedy: vom
programa pe procesor sarcinile disponibile care necesit timpul cel mai ndelungat. n figura
7, pe axa orizontal a timpului sunt evideniate sarcinile rezolvate de procesor, iar in paralel
cu acestea, sarcinile care nu necesit intervenia procesorului.
timp procesare (p) msurat in secunde
H
Al
A2
1 A2 B
Al M
1
5
6
7
8
9
10
3
4
2
1
timp idle (/') msurat n secunde
A2
IXAI^r
A2
1
1
1
1 Al
1
1
4
5
6
7
8
9
10
Figura 7. Programarea greedy pe un singur procesor

11

12

II

12

Se observ c aceast strategie conduce la ncheierea activitilor dup 9 s, dac


ultimele sarcini din fiecare activitate se pot executa n paralel (de exemplu, prima este o
listare iar a doua este o copiere dc fiiere). Dac nu este posibil, atunci programarea va dura
10 s pentru c ultima sarcin a activitii Al se va executa dup ce se ncheie integral
activitatea A2.
O alt programare poate ncepe cu Al i continu cu sarcinile care se pot lansa cnd
procesorul este eliberat (ca n figura 8). in cel de-al doilea caz, ncheierea ambelor activiti
s-a tcut dup 11 s. Acest exemplu arat din nou importana metodelor eficiente dc
implementare a paralelismului implicit. De asemenea, arat complexitatea algoritmilor
implementai de o aplicaie de tip dispecer dc activiti.

25

A2

10

11

12

10

11

12

A2

Figura 8. Alt programare a acelorai activiti

Paralelismul implicit se refer la exploatarea eficient a caracteristicilor harjwareului pe care se executa aplicaiile. Un programator preocupat de calitatea aplicaiei pe care
o proiecteaz i realizeaz nu poate ignora aceste caracteristici.

26

Capitolul 3
Paralelism explicit

Acest capitol este dedicat arhitccturilor cu mai multe uniti de procesare, care permit
specificarea explicit a proceselor care se pot desfura concurent. Spre deosebire de
capitolul anterior (Paralelism implicit), care trateaz cazul unei arhitecturi mono-procesor.
acest capitol descrie facilitile oferite de coleciile de procesoare.
Trecerea de la programarea secvenial la programarea paralel nu este uoar.
Metoda paralelizrii unor aplicaii secveniale deja scrise nu este cea mai eficient. Pot exista
caractcristici ale problemei care nu sunt speculate de aplicaiile secveniale i care scap
ateniei programatorilor i in cazurile paralele. Pe de alt parte, scrierea de la nceput a unor
aplicaii paralele este o activitate dificil, care necesit solide i moderne cunotine de
programare.

3.1. Controlul n aplicaiile paralele


Aa cum n cazul aplicaiilor secveniale controlul (adic paii aplicaiei) este
spccificat prin instruciuni, n cazul aplicaiilor paralele este necesar specificarea controlului
(ce face fiecare proces) dar i a modelului de comunicare (cum/cnd/cine/ce comunic).
O aplicaie paralel lipsit de comunicaii poate fi gndit ca o cxccuic n izolare a
proceselor, deci ar putea fi nlocuit cu nlnuirea secvenial a proceselor pe un singur
procesor. n acest caz. timpul de execuie ar fi egal cu suma timpilor de execuie a fiecrui
proces, ctigul adus de procesarea paralel fiind reducerea vitezei de procesare (folosind
formulele din Capitolul I, n cazul a n procese perfect echilibrate ca timp de execuie,
acceleraia este n i eficiena este 1). Dei acesta este o situaie extrem de eficient,
rezolvarea unor probleme complexe a dovedit c o descompunere n procese care comunic
reuete s gseasc soluii mai bune dect dac nu exist comunicare ntre procese. O
strategie de comunicare prin care procesele s schimbe inteligent date este cheia pentru a
obine soluii de calitate la problemele dificile ale lumii actuale.
Controlul procesrii reflect granularitatea paralelizrii:
dac paralelizarea este de granularitatc mare (coarse-grained), atunci se execut
pe fiecare unitate de procesare cte un program (aceste programe pot fi identice
sau diferite ntre ele) cu propria evoluie, deci propriul control;
dac paralelizarea este de granularitatc mic (fine-grained), atunci se execut o
singur aplicaie, asigurndu-se un control unic i se prelucreaz simultan seturi
diferite de date.
Exemplu de control la nivel de program (granularitate mare)
n arhitectura MIMD (Multiple Instructions Multiple Data) se pot implementa
aplicaii paralele in care fiecare unitate independent de procesare execut un proces
secvenial. Cea mai comun situaie este utilizarea unei reele de calculatoare mono-procesor,
fiecare dotate cu aplicaii i sistem de operare i care execut diverse procese din aplicaia
27

paralel. Aceast soluie este general (se poate utiliza pentru o clas larg de aplicaii
paralele), flexibil (se poate echilibra n funcie dc consumul de resurse), dar necesit spaii
suplimentare de memorie, dcoarccc fiecare sistem dc calcul este controlat independent (figura
9). Sistemele bazate pe multiple proccsoare (CPUs) sunt construite pentru a scdea latena:
memoria cache este destinat mririi anselor ca datele neccsarc s fie deja
disponibile, datorit precedentelor transferuri din memoriile externe
procesorului;
unitatea de control (UC) permite predicia ramificrii codului (branch
prediction - codul sc execut n avans, pe ramura cea mai probabil a
structurilor dc decizie, dar exist i instrumente de restaurare i avans pe
celelalte ramuri. n cazul n carc predicia s-a dovedit a fi incorect).
Structurile de decizie pot fi: instruciunea if-then-else, instruciunea
case/switch sau cclc carc realizeaz controlul instruciunilor repetitive (dac sc
reiau sau sc trccc la urmtoarea instruciune).
unitatea de control (UC) pe mii te utilizarea rapid a valorilor calculate recent
(dala fonvarding) prin mecanisme dc urmrire a locului din aplicaie n care
este ncccsar o valoare tocmai calculat i utilizarea acestei valori dei aceasta
nu a fost nc depus n zona de memoria secundar (pe hard-disc).
Orientarea ctre eliminarea latenei face ca sistemele de calcul bazate pe CPU s fie
extrem de eficiente n cazul aplicaiilor secveniale. Industria hardware a urmrit, de la
nceputuri, eficientizarca acestor aplicaii. Doar dup ce s-a pus problema calculului paralel,
au nceput s apar preocupri n eficientizarca hardware pe accast direcie.

Figura 9. CPU - Uniti de procesare care posed individual uniti de control

O alt soluie (modern) este oferit de accelcratoarclc grafice (arhitectur SI MD Single lnstruction Multiple Data), care rezolv o clas mai restrns de probleme cu un cost
sczut - necesit memorie puin, existnd un singur punct dc control (figura 10). Aplicaiile
care utilizeaz facilitile GPU (Graphics Processing Unit) speculeaz arhitectura lor,
specializat pentru eficientizarca unui mare numr de procese, care manevreaz in acelai fel
seturi diferite de date.

Figura 10. GPU - Uniti de procesare controlate de o singur unitate de control

28

Controlul este deci exterior unitilor de procesare, care nu mai ofer facilitile
branch prediction sau data J'orwarding. Unitile aritmetico-logice (UALs) sunt numeroase,
eficiente energetic i permit cxccuic dc tip pipeline. Dei memoria disponibil pentru GPU
inducc o laten mult mai mare dect n cazul unui CPU (lipscsc facilitile descrise n lista
precedent), numrul marc dc operaii care se pot suprapune (arhitectura este putcmic
oriental ctre suprapunerea de tip pi>eline) face ca aproape la fiecare ciclu de ceas sa fie
ncheiat execuia unei instruciuni. Aceste caracteristici fac ca dispozitivele hardware de tip
GPU s poat executa mult mai eficient unele aplicaii paralele dect dispozitivele CPU.
Exemplu dc control la nivel dc instruciune (granularitate mic)
in cazul arhitecturii SIMD (Single lnstruction Multiple Data) se pot executa
concomitent operaii pe fiecare component a unei structuri de date. De exemplu, dac dorim
s adunm doi vectori a i b cu ctc 1000 dc componente i s stocm valorile rezultate ntrun alt vector c, atunci aplicaia secvenial va coninc instruciunile:
for (i - 0; i < 1000; i++)
c[i) - a[il + b[ij;

iar dac dorim folosirea facilitilor SIMD, atunci codul paralel (care aloc o poziie din
vectorul c unui proces i fiecare proces are acces la componentele corespunztoare din cei doi
vectori dc intrare) va coninc instruciunea:
c[currentJ = afeurrent) + b[current];

n primul caz procesorul execut 2000 de atribuiri (sunt necesare 1000 dc atribuiri
pentru contorul / i 1000 de atribuiri pentru elementele vectorului c). n al doilea caz se
execut simultan 1000 dc atribuiri pentru variabila local current i apoi simultan 1000 de
atribuiri pentru calculul valorii corespunztoare din vectorul c.
Situaia sc complic dac exist instruciuni decizionale n codul secvenial. De
exemplu, dac exist instruciunea:
if (x -- 0) z - y; else z = y/x;

execuia sa pe seturi diferite dc date ncccsit doi


variabilei z pentru toate procesele care au valoarea 0
valoarea y/x variabilei z pentru restul proceselor. n
valorile curente (locale procesului) ale variabilelor.
este:
where <x

pai: nti se atribuie valoarea din y


stocat n variabila x i apoi se atribuie
toate procesele paralele, se lucreaz pe
Instruciunea pentru versiunea paralel

0) z - y; elsewhere z - y/x;

Presupunnd c aceast instruciune se execut pe patru seturi de date (D1-D4):

nainte dc
where

Dl
x 0
y 7
z

D2
JC 2
y 8
z

D3
* 3

D4
x 0

.V 3
z

y 2
z

n etapa 1 n execuia instruciunii where const n alocarea valorilor variabilei z din


v i l e Dl i D4:

29

etapa 1 din
where

Dl
r 0
y 7
z 7

D2
x 2
z

D3
.r 3
.v 3
z

D4
* 0
2
: 2

i a doua etap aloc valori pentru variabila r din seturile D2 i D3:

etapa 2 din
where

Dl
* 0
v 7
I- 1

D2
x 2
v 8
r 4

D3
.r 3
y 3
z 1

D4
x 0
v 2
z 2

Aceast metod de rezolvare folosete o mascare a activitii (activity niask),


permind separarea proceselor n grupuri care execut aceeai prelucrare pe seturi diferite de
date. Cu ct structurile de dccizic sunt mai numeroase sau mai complcxc (de exemplu
instruciunea c a s e / s w i t c h ) , cu att masca de activitate mparte proccsclc n tot mai multe
grupuri. ntrziind execuia aplicaiei paralele.

3.2. Comunicaiile n aplicaiile paralele


Comunicaia este esenial pentru cficientizarea aplicaiilor paralele. Scrierea unor
aplicaii care se desfoar simultan ftr ca acestea s comunice nu mbuntete dect
timpul total de execuie, fr ns a economisi resursele de calcul, aa cum am vzut la
nceputul acestui capitol. n loc s executm n paralel procesele, acestea sc pot nscria i
cxccut pe un singur procesor, evident n timp mai lung. dar cu aceleai costuri totale.
Comunicaia ntre procese sc poate executa:
prin spaiu partajat de adrese (shared address space)
prin schimb de mesaje (messagepassing).
Aceste metode de comunicaie sunt destinate exploatrii a dou tipuri de arhitecturi.
Din nou, subliniem faptul c aplicaiile paralele actuale sunt proiectate astfel nct s utilizeze
extrem de eficicnt caracteristicilc platformei pe care urmeaz a se implementa. O aplicaie
paralel nu poate fi cficientizat pentru toate arhitecturile.
3.2.1. Comunicaiile prin spaiu partajat de adrese
Principiul comunicaiilor prin spaiu partajat de adrese este des ntlnit n natur, fiind
o alternativ la mai des ntlnitul principiu al schimbului de mesaje. n locul sincronizrii
expeditorului cu destinatarul de fiecare dat cnd este necesar o transmisie de date (schimb
de mesaje), comunicaia prin adrese partajate nu necesit sincronizare: expeditorul depune n
spaiul comun valoarea pe care dorete s o transmit i destinatarul o acceseaz atunci cnd
are nevoie de valoarea respectiv.
Aceeai metod este ntlnit n natur la coloniile de furnici, care depun pe sol o
substan specific (feromon) pe care o recunosc i o interpreteaz cele care trec ulterior prin
acelai loc. Dei sunt insecte aproape oarbe, furnicile reuesc s gseasc n scurt timp
drumul cel mai scurt de la sursa de hran la cuib. Un alt model este partajarea vehiculelor,
pentru economisirea carburantului, micorarea emisiilor poluante i descongestionarea
oselelor. n figura 11 este prezentat indicatorul pentru benzile HOV (high-occupancy vehicle
lanes) dedicate, iar n figura 12 se afl o imagine a unei astfel de benzi. Controlul utilizrii

30

r^enzilor HOV se face prin sisteme automate de captare i interpretare a imaginilor,


asigurndu-se acces liber doar autovehiculelor n care se afl cel puin dou persoane
t posesorii celorlalte autovehicule sunt amendai).

HCV 2- CNLY
? OR MC
PCRSOtK
f LH VLHlC.t

Figura 11. Indicatorul rutier High-occupancy vehicle (HOV) n vigoare n SUA

Figura 12. Band dedicat HOV]n California, SUA [29)


Sistemele de calcul care suport programarea de tip SPMD se numesc sisteme muliprocesor. Dac timpul pentru accesarea memoriei este identic pentru Fiecare spaiu dc
memorie, atunci platforma este de tip Uniform Memory Access (UMA) (figura 13). In caz
contrar, platforma este de tip Non-uniform Memory Access (NUMA) (figura 14).
Comenzile de scriere n memoria comun sunt complexe la nivelul implementrii,
deoarece necesit mecanisme dc blocare, specificate n continuare, in acest subcapitol.

Figura 13. Platform UMA. spaiu partajat de memorie

31

Figura 14. Platform NUM A, spaiu partajat dc memorie

Cea mai eficient arhitectur cu adrese partajate este oferit de memoria P R A M


(Parallel Random Access Machine): mai multe proccsoare acceseaz un spaiu comun dc
memorie. Un model asemntor este metoda didactic a rezolvrii la tabl a unei probleme:
profesorul scrie informaiile la tabl, iar elevii le preiau, asigurndu-se c la momentul cnd
profesorul terge tabla i depune noi informaii pe tabl, cele precedente au fost deja utilizate
(nvate sau scrisc n caictc) i dcci nu mai este necesar prezena lor n spaiul comun (adic
tabla).
Accst model este cunoscut n Inteligena Artificial sub numele dc modelul
Bluckboard [31], fiind folosit pentru a rezolva probleme complexe care se descompun n subproblcmc dependente, avnd urmtoarele componente:
baze de cunotine (knowledge sources) stocate distribuit; fiecare astfel de baz poate
rezolva independent o sub-problem;
o zon de memorie la carc au acces bazele de cunotine, care conine problema
iniial, sub-problemele n care aceasta s-a descompus, soluiile acestor sub-problcme,
modul n care se utilizeaz aceste soluii n rezolvarea altor sub-probleme sau a
problemei iniiale, ctc.;
un modul de control, care asigur desfurarea eficient a procesului de rezolvare a
problemei iniiale, carc definete i urmrete strategia dc rezolvare a acesteia. Scopul
modulului este de a mpiedica deduciile nefolositoare rezolvrii problemei.
Proiectarea i programarea accstui modul este esenial i arat importana
conccptului dc oportunism in informatic. Spccularea oricror informaii i metode
care ajut la rezolvarea rapid a problemelor ajunge s fie o art, carc se bazeaz pe
cunotine avansate, pc experiena i pe cooperarea echipei de specialiti care lucreaz
la rezolvarea problemei respective.
Cteva sisteme open-source destinate implementrii modelului tablei sunt [21,31].
Cea mai dificil activitate n cazul spaiului partajat dc memorie o reprezint
asigurarea transferului corect de date. Pe parcursul execuiei aplicaiei paralele, se pot
produce transferuri de date n alt mod dect cel intenionat la proiectarea algoritmului. Dc
exemplu, dac mai multe proccsc doresc simultan s serie acccai zon de memorie, atunci
unele dintre valorile care se intenioneaz a se stoca sc pierd, deci activitatea realizat de
aceste procese este irosit. Strategia utilizat n cazul PRAM poate fi:

Exclusive Read, Exclusive Write (EREW) - modelul cel mai restrictiv, cnd att
citirilc ct i scrierile se execut sccvcnial; dac la un anumit moment, procesele
ncearc s scrie simultan aceeai zon de memorie, atunci acestea sunt serializate.
La fel se ntmpl i la tentativa de citire simultan. Asigurnd cel mai nalt grad
de securitate a datelor, acest model produec i cea mai marc ntrziere, prin

32

serializarea proceselor care n celelalte cazuri (descrise in continuare) s-ar putea


desfur n paralel.
Concurrent Read. Exclusive Write (CREW) - modelul cel mai ntlnit, care
serializcaz scrierile, dar permite citirile simultane din aceeai zon de date.
Exclusive Read. Concurrent Write (ERCW) - modelul care serializcaz citirile
accicai zone de memorie, dar permite scrierea simultan n acelai loc.
Concurrent Read. Concurrent Write (CRCW) - cel mai puternic model PRAM.
carc elibereaz programatorul dc grija operaiilor dc intrare/ieire. Toate operaiile
de citire/scriere carc doresc s acceseze simultan o zon de memorie sc execut
(unele avnd efectul scontat dc programatorul procesului, altele nu) i aplicaia nu
ntrzie.

Accesul concurent este lsat Ia decizia protocoalelor dc tratare a evenimentelor carc ar


putea aprea. Cum am vzut deja. proccsclc acceseaz concurent aceeai zon de memorie,
ins nu este garantat succesul tuturor accesrilor. Dac citirea simultan nu pune probleme,
deoarece nu este important o eventual scrializare dect din punctul de vedere al timpului
necesar, scricrca simultan este rezolvat prin unul dintre urmtoarele protocoale de
rezolvare a conflictelor:
Common: scrierea se realizeaz doar dac toate proceselc ncearc s scrie aceeai
valoare, altfel toate procesele eueaz n tentativa de scriere i apoi toate continu
cxccuia.
Arbitrary: unul (oarecare) dintre procese scrie efectiv i celelalte eueaz; apoi
toate continu.
Prioritv: scrie procesul care are cea mai nalt prioritate, celelalte eueaz i apoi
toate continu. Acest protocol presupune c fiecrui proces i se aloc (la creare) o
prioritate.
Suni (sau orice alt operator asociativ): se scrie suma (sau rezultatul aplicrii
operatorului) valorilor pe care intenioneaz s le scrie fiecare proces i apoi
fiecare proces i continu cxccuia.
3.2.2. Comunicaiile prin schimb de mesaje
Principiul schimbului de mesaje este asemntor sistemului potal clasic: pentru a
prelua o informaie, expeditorul trimite o scrisoare destinatarului, folosind un plic pe carc
specific datele dc identificare ale cclor doi, n care mpacheteaz mesajul. Att destinatarul
ct i expeditorul pot nelege mesajul, fiind deci n posesia unor faciliti de procesare i
stocare a mesajului. La fel, unitile dc procesare care schimb mesaje posed spaii exclusive
dc memorie (figura 15), au identificatori unici carc i individualizeaz n grupul dc posibili
participani la schimbul de mesaje i pot folosi funciile dedicate: Send sau Receive.

UP

UP

UP

Figura 15. Platform cu spaiu exclusiv dc memorie, pentru comunicare


prin schimb de mesaje

33

Limbajele de programare care permit schimbul de mesaje implementeaz ablonul


general MPI (Message Passing Interjace). aflat acum la versiunea 3 [32]. Printre cele mai
utilizate implementri MPI menionm [23. 25, 26].
Sistemele distribuite (cu spaii exclusive de memorie) folosesc comunicarea prin
schimb de mesaje, pe cnd metoda alternativ (comunicarea prin acces la memoria comun)
este potrivit sistemelor de calcul paralel.
Schimbul de mesaje se realizeaz ntotdeauna ntr-un context (un grup), care definete
o submulimc a calculatoarelor legate n reea care pot comunica. La un moment dat. intr-o
aplicaie distribuit, pot exista mai multe grupuri, dar o comunicaie are loc ntr-un anumit
grup. O comunicaie presupune existena a cel puin unui expeditor (surs) i a cel puin unui
destinatar.
In funcie de participanii la comunicaie, acestea pot fi de urmtoarele tipuri:
1 - 1 (one-to-one), cnd schimbul de mesaje se realizeaz prin perechea dc
comenzi Send (la surs)//teci/ve (la destinaie);
I - toi (one-to-all), cnd sursa trimite cte un mesaj fiecrui proces din grup.
folosind una dintre comenzile Broadcast sau Seat ier,
toi - 1 fall-to-one), cnd un singur destinatar colecteaz mesaje dc la toi
participanii din grup, cu ajutorul comcnzilor Gather sau Reduce.
In comunicarea de tip / - / exist o singur surs i un singur destinatar, fiecare dintre
aceste proccse cunoscnd identificatorul procesului cu care corespondeaz. Schimbul de date
se realizeaz printr-o zon de memorie dedicat ( b u f f e r ) , care se utilizeaz ca spaiu de
stocare intermediar i permite eliberarea memoriei celor doi participani Ia schimb (figura
16).

Memorie surs
(MS)

Buffer surs
(BS)

mesaj

Buffer destinaie
(BD)

Surs

Memorie destinaie
(MD)

Destinaie

Figura 16. Transmiterea unui mesaj ntre surs i destinaie


Pentru realizarea transmisiei, sursa trebuie s execute o comand Send, iar destinaia
arc de executat o comanda Receive. n modelul general, parametrii acestor comenzi sunt:
Send (mesaj, destinatar, eticheta, grup)
Receive (mesaj, sursa, eticheta, grup. stare)
unde: mesaj descrie identificatorul structurii locale de date care conine mesajul,
destinatar/sursa sunt identificatorii celuilalt proces, eticheta permite mperecherea corect a
celor dou comenzi, deoarece identific mesajul n mod unic, grup reprezint contextul n
care se realizeaz comunicarea, iar stare este o structur de date care reflect modul n care sa realizat efectiv comunicaia.
Existena buffcr-ului care intermediaz schimbul permite urmtoarele variante de
comunicare:
hlocking. n care sursa rmne n execuia comenzii Send pn cnd bufler-ul su
(BS din figura 16) poate fi rescris. De asemenea, destinaia st n execuia
comenzii Receive pn cnd bufler-ul su (BD din aceeai figur) conine ntreg
mesajul transmis. Dup ce se ndeplinete condiia corespunztoare lui, fiecare
proces poate inccpc execuia urmtoarei instruciuni. Accast variant presupune
dcci c procesele nu pot avansa dect dup ce comunicaia s-a realizat efectiv
(deci se poate spune comunicaia a sincronizat procesele").

34

non-blocking. in care fiecare dintre comenzile Send/Receive este mprit n dou


faze, ntre carc fiecare proccs poate cxccuta alte comenzi:
o iniierea comunicrii
o testarea realizrii comunicrii.
Aceast variant permite ca aplicaiile s avanseze ne-sincron, nefiind necesar
c.xccuia n acciai timp a comcnzii Send la surs i a comenzii Receive la
destinaie.

in ambele variante, n funcie de rspunsul la ntrebarea Ce se poate spune despre


procesul Destinaie, dac procesul Surs a ncheiat comanda Send?", exist mai multe moduri
de implementare a comunicaici:
standard, cnd nu se cunoate starea n care se afl procesul Destinaie,
programatorul nu se poate baza nici mcar pe faptul c BD conine mesajul:
buffered, cnd comanda Send a procesului Surs sc poate ncheia fr ca procesul
Destinaie s fi nceput execuia comenzii Receive;
sychronous, cnd la nchcicrca comcnzii Send a procesului Surs, procesul
Destinaie a nceput execuia comenzii Receive i mesajul a nccput s fie
recepionat;
ready, cnd comanda Send a proccsului Surs poate ncepe numai dup ce
comanda Receive din procesul destinaie i-a nceput execuia.
in cazul comunicrii de tip 1 - toi, se presupune existena unui grup, n cadrul cruia
exist un proces Surs, care transmite cte un mesaj fiecrui proces din grup. inclusiv lui
nsui. Comanda Broadcast transmite acelai mesaj tuturor proceselor din grup:
Broadcast (mesaj, sursa, grup)
Pentru a se realiza difuzarea mesajului n grup, fiecare proces execut comenzi
Broadcast idcnticc; dac presupunem c grupul este format din n calculatoare, atunci cele n
comenzi Broadcast sunt echivalente cu n comenzi Send executate de Surs i cte o comand
Receive executat de fiecare proces. Dac grupul este mare, atunci Sursa poate provoca
aglomerri pe canalul de comunicaie. Aceast problem va fi tratat n continuare, n acest
subcapitol. In figura 17 este prezentat un grup de 4 calculatoare carc au identificatorii 1 - 4,
n carc sursa comcnzii Broadcast este proccsul cu identificatorul 1 i mesajul conine
valoarea variabilei a.

O
35
y
2
c.

date
a
1
1
2
3
4

Broadcast (a. 1, grup)

1
2
3
Q. 4

date
a
7
7
7
7

Figura 17. Efectul unei comenzi Broadcast ntr-un grup de 4 procese


Comanda Scatter transmite mesaje diferite tuturor proceselor care compun un grup:
Scatter (colecie, element, sursa, grup)

35

Aceast comand este generalizarea comenzii Broadcast, n sensul c o colecie de


date stocat la surs este fragmentat i fiecare element este transmis unui proces, n ordinea
identificatorilor proceselor din grup. Dac presupunem c grupul arc n calculatoare, atunci
comenzile Scatter executate dc fiecare sunt echivalente cu n comenzi Send executate de Surs
i cte o comand Receive executat de fiecare proces. n figura 18 este prezentat rezultatul
unei comenzi Scatter executat pe fiecare dintre cele 4 procese ale unui grup, in carc procesul
1 este sursa i trimite fiecrui proces din grup (in ordinea identificatorilor) cte o component
a vectorului A.
date

date
A

1
av 2
3
c. 4

b
5 | 2

A
Scatter (A. b, 1, grup)

1
'.j
t/j 2
3
CL 4

b
7
3
5
2

Figura 18. Efectul unei comenzi Scatter ntr-un grup de 4 procese


Comunicaiile de tip toi - 1 presupun colectarea la destinaie a mesajelor transmise de
fiecare proces din grup. Comanda Gather este opus comcnzi Scatter. deoarece proccsul
destinaie construiete n ordinea identificatorilor proceselor participante o structur de date
prin rccepionarea mesajelor transmise de fiecare proccs:
Gather (element, colecie, destinatie, grup)
n cazul unui grup de /; calculatoare, comenzile Gather executate de fiecare sunt
echivalente cu n comenzi Receive executate de Destinaie i cte o comand Send executat
de fiecarc proces. n figura 19 sc prezint efectul comenzii Gather cu destinaia 1 ntr-un grup
dc 4 proccsc.
date

date
A
1
S
2
a>
3
a. 4

b
2
9
4
6

A
Gather (b. A, 1. grup)

1
8
2
a>
3
c. 4

2 | 9

4 | 6

b
2
9
4
6

Figura 19. Efectul unei comenzi Gather ntr-un grup de 4 procese


Comanda Reduce presupune utilizarea unui operator asociativ (fie predefinit, fie
definit n aplicaie) - exemplul din Figura 20 se refer la operatorul de adunare (SUM). Prin
comanda Reduce, la destinaie se colecteaz valorile obinute prin aplicarea repetat a
operatorului specificat, pentru fiecare dintre structurile de date primite de la Fiecare proces
din grup. Dac presupunem c grupul are n calculatoare, atunci comenzile Reduce executate
de fiecarc sunt echivalente cu n comenzi Receive executate de Destinaie, cte o comand
Send executat de fiecarc proces i o prelucrare a rezultatelor finale. n figura 20, fiecarc
dintre cele 4 componente ale vectorului B se obine prin adunarea componentelor
corespunztoare din fiecare vector A, stocat pe fiecare calculator din grup. De exemplu, B[l]
este suma valorilor stocate n A(l] de ctre fiecare proces.

36

date

date

A
1
2
* 3
c. 4
8

0
4
1
1

Reduce (A, B. SUM. 1. grup)

Figura 20.

unei comenzi Reduce intr-un

2
1
3
0

2
3
0
2

1
0
1
1

1
K
2
V
3
c. 4

7 | 6

3 | 6

de 4 procese

Conectarea unitilor de procesare


Reelele alctuite prin conectarea mai multor uniti dc procesare destinate calculului
paralel sunt de obicei reele regulate, cu o topologie strict orientat ctre viteze mari de
transmisie a mesajelor i distane scurte ntre procesoare. Dc aceea, reelele mici sunt
complete de cele mai multe ori. iar cele mari respect urmtoarele topologii [7]:
Stea (s/ar): un procesor este legat la toate cclclaltc proccsoare. Dc obicci este o
reea eterogen, procesorul central asumndu-i rolul de server, iar celelalte - pe
cel de client.
Vector (cu sau far circularitatc; n primul caz obinem reeaua de tip inel): toate
procesoarele sunt conectate la o magistral (bus).
Arbore (tree): topologia este dc arbore (graf neorientat concx i ftr circuite). n
figura 21 a) este prezentat un arbore binar cu 8 noduri terminale. Cea mai dificil
problem a acestei topologii este aglomerarea mesajelor n zona rdcinii,
dcoarccc muchiile conexe rdcinii fac trecerea ntre sub-arborelc stng i cel
drept al acesteia. Din acest motiv, arborii sunt cficicntizai prin creterea lrgimii
de band pentru conexiunile din apropierea rdcinii, ca n figura 21 b).
Plas (mesh): procesoarele sunt legate cu vecinii aflai n nodurile unei reele cu
dou sau mai multe dimensiuni. Reeaua poate fi cu circularitate (toroidal) sau
deschis. n figura 22 sunt prezentate cclc dou cazuri pentru o plas 2D cu 9
noduri. n figura 23 sc afl o reea mesh 3D cu 27 de noduri. Pentru cazul general,
se definete reeaua de tip k-d mesh: o plas din k noduri n d dimensiuni. O reea
2-d mesh este denumit hipercub. n figura 24 este prezentat seria 2-0 (a), 2-1
(b), 2-2 (c), 2-3 (d) i 2-4 (e) de hipercuburi.

a)
b)
Figura 21. Reea arbore (tree) i arbore masiv (fat tree)

37

<

<

<

a)
Figura 22. Reea plas 2D

a) deschis

t-

b)
b) circular

Figura 23. Reea plas 3D, deschis |7)

a)

b)

c)

d)
e)
Figura 24. Hipercuburi in k = O - 4 dimensiuni [7J

38

Metode eficiente de comunicare multipl


jn cazul comunicaiilor multiple se pot produce aglomerri pe canale, cu consecine
negative n ce privete viteza transferului, implicit a aplicaiei de calcul paralel. Sincronizarea
tuturor proceselor care particip n comunicaia colectiv conduce la avansarea lor la
urmtoarea instruciune numai dup ce i cel mai ntrziat proces a ajuns i a executat
comunicaia respectiv, in figura 25 este prezentat influena unei comunicaii colective ntrun grup dc 5 procese, care au ajuns la momente diferite dc timp la execuia acestei
comunicaii. Proccselc i pot continua cxccuia numai dup ce procesul PI (cel mai ntrziat)
a ajuns n punctul de sincronizare. Procesele P2-P5 sunt nevoite s atepte procesul PI
i timpul de ateptare este figurat prin linie punctat).
PI
P2
P3
P4
timp
Figura 25. ntrzierea (linie ntrerupt) indus de sincronizarea comunicaiilor colective
La nivelul implementrii comenzilor colective este deci extrem de important modul n
care acestea se realizeaz. Cteva astfel de situaii, determinate de topologia conexiunilor,
sunt prezentate n continuare.
Implementarea unei comenzi Broadcast pe un inel de 8 calculatoare
Dac presupunem c sursa este calculatorul cu identificatorul 0 i c sensul de
parcurgere a reelei este cel din figura 26. atunci sgeile punctate descriu o metod de
transmisie n 3 pai a mesajului ctre toate celelalte calculatoare din inel.

<D

<D

G>

Figura 26 Implementarea optim a comenzii Broadcast pe inel (7]

39

Primul pas consta in comunicaia intre 0 i 4. La pasul 2 se efectueaz dou


comunicaii: 0-2 i 4-6. La pasul 3 se realizeaz 4 schimburi de mesaje: 0-1, 2-3, 4-5 i 6-7.
Dac fiecare hop (calculator intermediar) dintr-o comunicaie este traversat ntr-o unitate dc
timp, atunci pentru ncheierea comenzii Broadcast pc cclc 8 calculatoare sunt necesare: 4 + 2
+ 1 = 7 uniti de timp, adic timpul optim, deoarece doar comunicaia 0 - 7 (cel mai lung
traseu) necesit 7 uniti dc timp. Metoda descris (care se numete metoda dublrii
recursive, deoarece la fiecare pas se dubleaz numrul de transmisii de date) are o proprietate
foarte important: //ea//v canal de comunicaie este parcurs mereu de cel mult un mesaj, deci
niciun canal nu este aglomerat.
Implementarea unei comenzi Broadcast pe o reea mesh 2D cu 16 calculatoare [7]
Considernd c sursa este calculatorul cu identificatorul 0. atunci metoda dublrii
recursive realizeaz comunicaia n 4 pai. astfel (figura 27):
pasul 1: 0 - 8, un singur transfer, realizat n 2 uniti de timp
pasul 2: 0 - 4 i 8 - 12, dou transferuri simultane, care necesit o unitate dc timp
pasul 3: 0 - 2, 4 - 6, 8 - 10 i 12 - 14. patru trasferuri n paralel, pentru carc sunt
necesare 2 uniti de timp
pasul 4: 0 - 1, 2 - 3, 4 - 5. 6 - 7, 8 - 9, 10 - 11, 12 - 13 i 14 - 15, opt schimburi
simultane de mesaje, efectuate ntr-o unitate de timp.
n total au fost necesare 6 uniti de timp, ceea ce reprezint un timp optim, deoarece
cel mai ndeprtat calculator de 0 (i anume cel cu identificatorul 15) poate recepiona
mesajul dup ce acesta trece prin cel puin alte 5 calculatoare (se poate observa c distana
Hamming ntre colurile opuse ale reelei mesh 2D din figura 27 este 6). Comanda colectiv
este realizat Jr aglomerri i metoda dublrii recursive este din nou cea mai eficient.

Figura 27 Implementarea optim a comcnzii Broadcast pe reea mesh 2D

40

t-menlarea unei comenzi Broadcast pe o reea mesh 3D cu 8 calculatoare [7]


Pentru reeaua mesh 3D din figura 28, execuia unei comenzi Broadcast cu sursa 0
r r a rr.etoda dublrii recursive conducc la 3 faze n transmisie, evideniate prin sgeile
i r r r r j p t e care sunt numerotate corespunztor:
o prim comunicaie ntre 0 i 4, care dureaz o unitate dc timp;
dou transmisii efectuatc n paralel, 0 2 i 4 6, care dureaz tot o unitate dc
timp;
patru schimburi simultane dc mesaje. 0 - 1 . 2 - 3 , 4 - 5 i 6 - 7 . care de asemenea
dureaz o unitate de timp.
Metoda dublrii recursive este optim, deoarece realizeaz transmisia n cel mai scurt
j t calculatoarele 0 i 7 au nevoie dc 3 uniti de timp pentru a transfera un mesaj) i nu
ct. - :J aglomerare pe canalele de comunicaie.

Figura 28. Implementarea optim a comenzii Broadcast pe reea mesh 3D


in concluzie, implementarea comenzilor colective este extrem de important n cazul
i r . :aiilor distribuite i depinde att de topologia reelei, ct i de surs/destinaie. Modelele
rrezentate sunt ideale, n sensul c reelele reale nu sunt nici echilibrate, nici statice i foarte
rar au 8 sau 16 componente.
Pentru o eficientizare a comunicaiilor in calculul distribuit este deci nevoie de
r+noaterea reelei, a dinamicii acesteia, a frecvenei schimburilor de mesaje i a ncrcrii
canalelor de comunicaie. Experiena i cunotinele programatorului sunt deci extrem de
-tportante pentru scrierea unor aplicaii distribuite eficiente.

41

Capitolul 4
R e z o l v a r e a unei p r o b l e m e prin calcul c o n c u r e n t

Proiectarea unui bun algoritm concurent este dificil, dcoarecc trebuie s rcspcctc
mncipiile generale dc cficicn. carc s i asigure succcsul indiferent dc condiiilc dc
execuie, dar s i in cont de particularitile problemei rezolvate. Principiile generale de
e-'cien sunt prezentate n continuare, exemplificate pentru cteva probleme simple;
rrogramatorul care este pus in situaii efective de rezolvare a unei probleme poate astfel
iplica aceste principii i le poate adapta situaiei sale concrete, in capitolul urmtor sunt
iescrisc cteva probleme reale, care apar des n proiectele software i pentru care principiile
pencralc dc cficicn sunt discutatc.

4.1. Graful de preceden


Folosirea acestui instrument vizual uureaz proiectarea algoritmilor concureni,
ieoarece permite observarea modului n care intcracioncaz procesele. Graful de prcccden
descrie ordinea n care proccsclc sc execut pentru a rezolva problema n mod concurent.
Graful de preceden este graful orientat aciclic n carc nodurile sunt procese i arcul
. J) arat c procesul j poate nccpc numai dup ce procesul i s-a ncheiat. Reamintim c un
vraf orientat G este o pereche dc mulimi ( V , E ) unde V este mulimea nodurilor, iar E este
-nulimea arcelor. E C.V xV . Graful este aciclic dac nu exist un drum nchis (o succesiune
de arce care s nceap i s se ncheie n acelai nod), in figura 29 este prezentat un graf
orientat ciclic, iar n figura 30 este unul aciclic, obinut din cel din figura precedent prin
schimbarea direciei unui singur arc. evideniat prin sgeat groas.

Figura 30. Graf orientat aciclic

Figura 29. Graf orientat ciclic

Eiemple de grafuri de prcccdcn


Problema I: Plecnd de la matricea ptrat A(n,n) i de la vectorul b{n), s se
calculczc cu ajutorul formulei c = A b valorile stocatc n vectorul c.
Pentru rezolvarea prin programare concurent a accstci probleme, putem alege o granularitatc
fin. crend n procese i repartiznd fiecrui proces Pt,]<i<n
calculul clementului cr
Astfel. procesul Pt are nevoie de linia i din matricea A i de vectorul b. Procesele sunt
independente, pot fi realizate simultan n cazul ideal, cnd se pot repartiza fiecare unei uniti
43

de procesare, sau se pot executa n orice ordine atunci cnd nu sunt suficiente uniti de
procesare. Graful de preceden are deci n noduri i niciun arc (figura 31).
0
1

o
...

n- 1

Figura 31. Graful de preceden pentru n procese independente


n cazul n care se implementeaz o granularitate constant k, indiferent de
dimensiunile matricei A, atunci cele k procese se aloc astfel:

P\ calculeaz

cl,c2,...,cll;
~k

Pi calculeaz cn

calculeaz c

,cn

,...,c;

,c

U-lP+l
(4-D-+2
k
k

,...,c.

n figura 32 este prezentat graful de preceden pentru k = 4.


O
1

O
3

Figura 32. Graful de preceden pentru 4 procese independente


Problema 2: Plecnd de la comanda SQL
SELECT * FROM CARS
WHERE MODEL = "LOGAN" AND AN = 2012 AND
(CULOARE = "ALB" OR CULOARE = "GRI");
s se descrie cum se poate executa eficient (rapid) n paralel.
Rezolvare. Aceast comand SELECT folosete un singur tabel (CARS), din care
extrage articolele care ndeplinesc o condiie complex. Vom nota sub-mulimile de articole
din CARS care sunt implicate n aceast execuie astfel:

A este format din mainile Logan;

A conine mainile produse n anul 2012;

A are date despre mainile albe;

A se refer la mainile gri.


Comanda SELECT are deci scop listarea elementelor mulimii
A=
A,r\A2r\(A3UA4).
Elementele mulimii A se pot afla n paralel n mai multe moduri. n cele dou cazuri
pe care le vom analiza, paralelismul execuiei va fi evaluat, folosind graful de preceden.
Rezolvarea 1. O posibil rezolvare a problemei construiete mulimea^ astfel:

As=AlC\A2

A
=A,UA4
A = A5r\A6.

44

Dac exist procesoare disponibile, atunci graful de preceden pentru acest mod de
rezolvare a problemei este prezentat n figura 33 (mulimile As i Ab se pot gsi n paralel).

A,

O-

Aa
Figura 33. Graful de preceden pentru rezolvarea 1
Gradul de concuren este dat de numrul de procese care se pot desfura simultan. n acest
: i z . gradul mediu de concuren este

^ = 2,33. Dac presupunem c durata de

n rcuie a proceselor este aceeai (n lipsa unor informaii privind durata lor real), atunci
mimul critic n graful de preceden din figura 33 are lungimea 2. Reamintim c drumul
: -;.v ntr-un graf aciclic este lungimea celui mai mare drum care leag dou noduri.
Rezolvarea 2. O rezolvare cu un grad mediu de concuren mai sczut poate construi
mulimea^ astfel:
.
A5 = A}\JA4
.

A6 =

A2r\A5

A =

A]C\A6.

Figura 34. Graful de preceden pentru rezolvarea 2


;
, ,
,
4 + 1 + 1 + 1 , ^ . ,
, ..
In acest caz, gradul mediu de concurena este
= 1,75 i drumul critic are
Msmea

5.

45

n capitolul urmtor vom prezenta o problem pentru care vom analiza din nou efectul
ordinii efecturii unor operaii asociative. Aici am considerat c durata proceselor este
identic; n subcapitolul 5.2 vom vedea care este impactul unor durate diverse asupra
timpului total de execuie al unei aplicaii paralele.
Evaluarea paralelismului
n cazul unei aplicaii paralele, programatorii sunt interesai de optimizarea
urmtoarelor caracteristici:
gradul maxim de concuren, care arat numrul maxim de uniti de procesare
disponibile, fiind deci o valoare limitat de configuraia hardware pe care se
execut aplicaia;
gradul mediu de concuren, care arat ct de paralelizat" este o aplicaie, fiind
o imagine a eficienei algoritmului;
drumul critic al grafului de preceden, care este lungimea maxim a drumurilor n
graf, obinut prin ponderarea nodurilor cu timpii corespunztori de execuie.
Aceast valoare arat timpul total de execuie.
Aceste msuri sunt caracteristice aplicaiilor concurente, adugndu-se msurilor
cantitative generale ale aplicaiilor (complexitate, numr de linii de cod, timp de execuie,
etc.) i celor calitative, specifice Ingineriei software (portabilitate, claritate, mentenabilitate,
etc.). Cele dou probleme concrete prezentate anterior arat cum graful de preceden este un
instrument general, care poate evalua eficiena unei metode concurente de rezolvare.

4.2. Metode de descompunere a rezolvrii unei probleme


Realizarea unei aplicaii concurente presupune (printre altele) i partajarea activitii
ntre mai multe procese desfurate concurent. Descompunerea se refer att la efortul de
procesare (descompunere funcional), ct i la repartizarea datelor pe mai multe procese
(idescompunerea domeniului). De fapt, aceast clasificare urmeaz clasificarea Flynn
(descris n subcapitolul 1.3), considernd dimensiunea proceselor (pentru descompunerea
funcional) i a datelor (pentru descompunerea domeniului). O aplicaie complex poate
folosi diverse tipuri de descompunere, caz n care descompunerea sa devine hibrid.
4.2.1. Descompunere funcional
Descompunerea
funcional
descrie modul n care efortul computaional se
repartizeaz unor procese care avanseaz concurent. Problema care se rezolv poate avea o
descompunere natural" n procese - caz n care programatorul o poate folosi. Exist ns i
metode generale, care se pot aplica unor categorii de probleme.
Descompunerea recursiv este o descompunere funcional care lanseaz recursiv
procese, care rezolv fiecare cte o sub-problem. Dac metoda de rezolvare este de tip
divide-et-impera, atunci fiecare sub-problem se poate rezolva folosind un proces, lansat prin
recursivitate; soluiile sub-problemelor sunt colectate de procesul iniial, care construiete din
acestea soluia problemei. Comunicaiile n acest caz se rezum doar la lansarea recursiv a
noilor procese i la colectarea soluiilor, deoarece sub-problemele derivate prin divide-etimpera sunt independente. Dac problema se rezolv prin programarea dinamic, atunci tot
prin recursivitate se pot genera procese destinate rezolvrii sub-problemelor. Modelul
comunicaiilor va fi mai complicat, deoarece n acest caz sub-problemele sunt dependente.

46

Exemple de paralelizare prin descompunere recursiv sunt: calculul termenului


iszsmc din irul lui Fibonacci (prezentat n Capitolul 1), sau sortarea prin metoda rapid
,iuDct-sorr).
Descompunerea speculativ este descompunerea funcional n care se lanseaz (pe
T : c e s o a r e care altfel nu ar avea ncrcare) n avans procese-alternative:
procese care
- .oe eaz ramurile unei instruciuni if-then-else sau case/switch. Cnd procesul-printe
. a r c e la respectiva instruciune i decide care este ramura pe care se va avansa, atunci se
inc - i toate procesele-fiu i se preia starea procesului-ftu corespunztor ramurii alese.
4.2.2. Descompunerea domeniului
Descompunerea domeniului se refer la repartizarea datelor problemei pe diverse
rrccese. care le vor prelucra n paralel. La nevoie, n final, rezultatele proceselor se
s^r.?!eaz n soluia problemei.
Un exemplu de descompunerea a domeniului este descompunerea exploratorie, n
re spaiul de soluii este partajat n mulimi disjuncte, fiecare apoi fiind repartizat unui
rrcces spre investigare. Fiecare proces gsete o soluie optim n mulimea sa; aceste soluii
r c a m e sunt preluate de un proces i este aleas cea mai bun dintre ele, care devine soluia
rcc clemei. O astfel de problem este alegerea mutrilor ntr-un joc (de exemplu, n jocul de
xil- algoritmul poate dezvolta un arbore, care are n rdcin starea curent i fii rdcinii
smt toate mutrile posibile. Fiecare dintre fii rdcinii este repartizat (ca fiind starea curent)
zrui proces, care alege cea mai bun mutare, innd cont i de mutrile adversarului. Apoi se
ilege dintre aceste soluii foarte bune, pe cea mai bun.
Un alt exemplu este descompunerea datelor, cnd se partajeaz datele pe procese
aceeai idee ca n cazul SIMD din clasificarea Flynn). Datele de intrare se partajeaz dac se
execut o interogare pe o baz de date distribuit: de la fiecare centru de stocare se
recepioneaz rezultatele intermediare, care sunt asamblate pe sistemul clientului.
Descompunerea datelor de ieire se poate realiza dac se consider calculele numeric
tensive, de exemplu problema 1 de la subcapitolul 4.1.
Descompunerea problemei este extrem de important n calitatea aplicaiei care o
-ezoh , deoarece determin echilibrul, ncrcarea i comunicaiile ntre procese.

47

Capitolul 5
Tehnici efective de paralelizare
n acest capitol sunt prezentate cteva metode de paralelizare pentru aplicaii des
ntlnite n proiectele software. Am ales dou exemple din calculul numeric i cteva
rrobleme conexe sortrii, pentru a ilustra posibiliti diverse de paralelizare; la fiecare
rroblem am evideniat specificul su, avantajele metodei alese, dar i dezavantajele sale.
Rmne ca programatorul s decid modul efectiv de implementare a paralelizrii, n funcie
de problem, infrastructur i propria experien.

5.1. Paralelizarea calculului numeric


Calculul numeric este un domeniu n care utilizarea resurselor de calcul n paralel
aduce mari avantaje i se realizeaz relativ uor, existnd situaii n care descompunerea
problemei este oarecum natural. Dintre probleme care se preteaz abordrii prin calculul
paralel, n continuare este prezentat n detaliu Metoda lui Gauss a eliminrii succesive
pentru rezolvarea sistemelor liniare de ecuaii. Vom ncepe cu descrierea problemei, vom
continua cu metoda secvenial de rezolvare, urmat de o metod paralel i vom ncheia cu
cteva concluzii.
A rezolva un sistem de ecuaii liniare nseamn a gsi variabilele reale (jc,) lsis ,
n e N care satisfac simultan ecuaiile:
"ax, + al2x2+...alrtx

=bx

a2lxl+a22x2+...a2nxn

=b2

a^x+an2x2+...annxn

=bn

unde (a iy ) IMS i (b,)Kiin

sunt numere reale.

Aceast problem este echivalent cu gsirea unui vector x cu n elemente reale care s
satisfac ecuaia matriceal A-x-b,
unde A este matricea coeficienilor i b este vectorul
termenilor liberi ai sistemului considerat.
n acest curs vom considera c sistemul are o soluie unic i c toate operaiile de
mprire descrise n metoda de rezolvare se pot executa (la nevoie ecuaiile se permut).
Metoda lui Gauss a eliminrii succesive const din dou etape:
1. ecuaiile se transform n mod repetat pn cnd sistemul ajunge la forma
triunghiular-superioar
x

+ c x

u2
x =d [
x2 +... c2n Xn d2
xn = dn

2. se rezolv sistemul de jos n sus".

49

5.1.1. Exemplu de rezolvare prin metoda lui Gauss


Pentru a avea o perspectiv asupra metodei generale de rezolvare, vom ncepe prin a
rezolva prin metoda lui Gauss urmtorul sistem liniar de 3 ecuaii cu 3 necunoscute
( Xj X2 5 Xj ^ ^
2x, + 2x2 + 2x} =
< 2xt + 4x2 + 6x3 =
3.x, -6x2

-9x3

6
12

= -12

Prima etap ncepe prin mprirea coeficienilor primei ecuaii la 2, pentru a se obine
coeficientul lui xj egal cu 1 (.se normalizeaz prima ecuaie):
"i- X2

x] + 4jc, +6a: 3 =

12

- -12

3xt - 6x2 - 9x3

Pasul urmtor const n eliminarea variabilei x j din ecuaiile 2 i 3. Pentru a atinge


acest el vom nmuli prima ecuaie cu 2 i o vom scdea din cea de-a doua. La fel, o vom
nmuli pe prima cu 3 i o vom scdea din a treia:
x3 =
3
Xj
X2 X
3|(2)|(3)
2xt + 4x2 + 6X3

12

2X2 + 4jc3 =

- 9X2 -1 2JC3 = 21

3x. 6X2 - 9 X 3 = - 1 2

ncepnd de la acest moment, prima ecuaie va rmne neschimbat pn la sfritul


acestei etape. Ultimele dou ecuaii constituie un sistem de dou ecuaii cu dou necunoscute,
pentru care aplicm din nou metoda reducerii. Vom mpri prima dintre aceste dou ecuaii
cu 2 (o vom normaliza) i astfel sistemul devine:
^1

x2 + 2x} =

3
3

9x2 - 1 2 X 3 = - 2 1
La pasul urmtor se nmulete aceast ecuaie cu (-9) i se scade din ultima:
Xj I X'y I

X^
2jc3 =

-9x2

x, = 3

x2 + 2;c3 = 3

3|(-9)

-12*3 =21

6X3 = 6

Am ajuns la ultima prelucrare, cnd normalizarea ultimei ecuaii conduce la sistemul:


= 3
X'2 1

=3
= 1

Cea de-a doua etap ncepe prin atribuirea valorii 1 variabilei xj, conform ultimei
ecuaii. Aceast valoare se introduce n toate celelalte ecuaii, obinndu-se sistemul:
xl+ x2 = 3 1
x2

=3-2-1

x, = 1

x^ "i- X2

x2 = 1
X, = 1

Procedeul se repet pentru sistemul triunghiular alctuit din primele dou ecuaii:
variabila x^ ia valoarea 1, care se nlocuiete n prima ecuaie:

50

-v,

x] = 1

= 2 - 1

x 2 = 1 => - x2 = 1
x3 = 1

Sistemul este rezolvat, soluia unic fiind tripletul (1, 1, 1).


5.1.2. Metoda lui Gauss - versiunea secvenial
Pentru descrierea la nivel general a primei etape vom utiliza A*, matricea extins a
- >:emului, obinut prin adugarea la A a coloanei termenilor liberi:
A'
=(A\b)
deci A are n linii i n + 1 coloane. Toate operaiile se vor realiza pe aceast matrice i
> vom considera transformri de variabile, deci vom utiliza acelai nume pentru elementele
A . dei valorile se modific. De exemplu, coeficientul lui X2 din a doua ecuaie va fi
mereu
dei va avea diverse valori ( a ^ este deci o variabil).
Varianta secvenial a etapei 1 (triangularizarea matricei extinse)
f o r (i = 1; i <= n; i++)
// normalizarea rndului i:
f o r ( j = 1; j <= n; j++)
a

ij

= aij

t a

b,=b,/an
II eliminarea variabilei x, din toate rndurile k de dup rndul;':
f o r (k = i + 1; k <= n; k++)
f o r ( j = i ; j <= n; j++)
% =

kj-aki-aij

K =K~aklbi
' arianta secvenial a etapei 2 (rezolvarea efectiv a sistemului):
f o r (i = n; i >= 1; i )
// eliminarea necunoscutei x,
= b,
II nlocuirea valorii gsite n toate rndurile k de deasupra rndul i:
f o r (k = 1; k <= i - 1; k++)
h =hk~

k, 'b,

5.1.3. Metoda lui Gauss - versiunea paralel


Una dintre metodele de paralelizare consider n procese, care stocheaz fiecare cte o
:nie din matricea extins, o prelucreaz i la nevoie transmite celorlalte procese valorile
raxate. Dac alegem o sincronizare a proceselor la sfritul fiecrei iteraii controlate de
. inabila / de mai sus, atunci varianta paralel a metodei descrise mai sus evolueaz astfel:
/Etapa 1, prima iteraie: se prelucreaz prima coloan din matricea extins
//(lucreaz toate procesele):
procesul Pt realizeaz normalizarea primei linii

51

procesul Pl transmite proceselor P2- Pnvalorile

a]2...au

(valoarea aflat n au

este 1, deci nu se mai transmite)

procesele P2 - Pn realizeaz transformri liniare ale valorilor stocate, astfel ca


fiecare dintre valorile stocate pe prima poziie (variabilele an,

2<i<n)

s fie

zero
//iteraia 2: se prelucreaz a doua coloan din matricea extins
//(lucreaz procesele P2- Pn):

procesul P2 realizeaz normalizarea celei de-a doua linii

procesul P2 transmite proceselor P,- Pn valorile a2i...aZn

(a22= 1, deci nu se mai

transmite)

procesele P} - Pn realizeaz transformri liniare ale valorilor stocate pe ultimele n


poziii, astfel ca fiecare dintre valorile stocate pe a doua poziie (variabilele ai2, cu
3 < j < n ) s fie zero

//aceti pai se repet astfel c la penultima iteraie a etapei 1 lucreaz doar procesele
Pn

procesul /*_, realizeaz normalizarea penultimei linii

procesul

procesul Pn realizeaz o transformare liniar ale valorilor stocate pe ultimele 2

transmite procesului Pn valoarea an_, n

poziii, astfel ca a n s fie zero


//la ultima iteraie a etapei 1, procesul Pn asigur coeficientul 1 pentru ultima ecuaie,
care are o singur necunoscut i care face posibil nceperea etapei 2, de rezolvare
efectiv a sistemului de ecuaii liniare:

procesul Pn realizeaz normalizarea ultimei linii (ecuaia devine deci xn = bn)

//etapa 2, prima iteraie (lucreaz toate procesele: variabila xn are deci valoarea bn, pe
care procesul Pn o transmite tuturor celorlalte procese; fiecare dintre acestea i
recalculeaz termenul liber corespunztor):
procesul Pn transmite proceselor Pl faptul c variabila xn are valoarea bn
(aceasta este prima necunoscut aflat, sistemul triunghiular rezolvndu-se de jos
n sus")

fiecare dintre procesele Px-Pn_x actualizeaz cte o valoare b]..bt^]

(la sfritul

acestei iteraii, penultima ecuaie a sistemului nostru devine xn_x = bn_x)


//etapa 2, a doua iteraie (lucreaz procesele P] - Pn_x: valoarea bn_t a necunoscutei
xn_, este transmis proceselor Pl - Pn_2 de ctre procesul

, iar fiecare dintre acestea

recalculeaz termenul su liber):


procesul />_, transmite proceselor P{ - Pn_2 faptul c variabila xn_x are valoarea
V,

fiecare

dintre procesele P} - Pn_2 actualizeaz valoarea variabilei corespunztoare

dintre b,...b
I nZ,
//aceti pai se repet astfel c la penultima iteraie a etapei 2 lucreaz doar procesele
P, i Pi procesul P2 transmite procesului Pt valoarea b2 pentru variabila x2

52

procesul P] actualizeaz valoarea variabilei b}


la. sfritul acestui algoritm, procesul f\ este n posesia valorii pentru necunoscuta

.r,, fiecare proces cunoate cte o necunoscut i o poate afia:

fiecare dintre procesele Pt - Pn afieaz valoarea necunoscutei corespunztoare din


secvena

xl...xn.

Observaii privind eficiena acestei metode de paralelizare


Aa cum am prezentat n capitolul 4, vom utiliza graful de preceden i metoda de
descompunere a problemei pentru a analiza eficiena aplicaiei.
n figura 35 este prezentat graful de preceden pentru iteraia k a primei etape, iar n
ngura 36 se afl graful de preceden pentru iteraia k din etapa a doua.

Figura 35. Graful de preceden pentru iteraia k, etapa 1

Figura 36. Graful de preceden pentru iteraia k, etapa 2

1. Aa cum am menionat deja, metoda rezolv doar sistemele compatibile unic


determinate (care au soluie unic), cnd elementele au sunt nenule, permind
normalizarea ecuaiilor.
2. Sincronizarea implicit, produs de comunicaiile colective (un proces transmite i
un grup de procese recepioneaz) este inerent nceat, aa cum se prezint n
subcapitolul 3.2.
3. n medie, jumtate dintre procese lucreaz, n timp ce cealalt jumtate este n
stare idle, ceea ce este ineficient. Pentru realizarea primei etape a algoritmului, de
exemplu, toate procesele lucreaz la nceput, iar pe msur ce prima etap
avanseaz, numrul proceselor care ateapt crete cu o unitate la fiecare iteraie.
La fel se ntmpl i n a doua etap.
4. Descompunerea problemei este att funcional, ct i n domeniu, deci este
hibrid (conform clasificrii din subcapitolul 4.2).
Aceast metod nu este eficient, dar a fost aleas cu scop didactic, deoarece se
bazeaz pe metoda secvenial i se dezvolt cu minime transformri. Exist multe alte

53

metode de paralelizare a rezolvrii sistemelor de ecuaii liniare. Programatorul o va alege pe


cea care se potrivete arhitecturii i restriciilor problemei sale. De exemplu, ntr-o reea n
care comunicaiile au costuri nalte, ar putea alege alocarea unui grup de ecuaii unui singur
proces, pentru a scdea numrul de comunicaii. Sau, dac matricea corespunztoare
sistemului are multe elemente nule (sparse matrix), ar putea folosi metode mai elaborate,
cum ar fi cele dedicate matricelor tri-diagonale, care apar n modelarea fenomenelor de
difuzie.

5.2. Paralelizarea tehnicilor de programare dinamic


Una dintre provocrile vieii contemporane este complexitatea problemelor abordate:
situaiile actuale sunt att de complicate, cu att de muli parametri care sunt interdependeni,
cu mulimi att de mari de cazuri posibile, nct sunt eseniale metodele care speculeaz orice
caracteristic i reuesc s reduc din resursele consumate pentru a gsi o soluie. A specula
n acest sens nu are deloc conotaii negative, deoarece implic o cunoatere profund a
problemei abordate, un grad nalt de expertiz n alegerea resurselor utilizate, a metodelor de
rezolvare sau a platformei de calcul. Scopul este ntotdeauna eficientizarea procesrii
electronice, pentru a obine cu costuri minime (timp de procesare, uniti de procesare,
transmisii de date, etc.) o soluie de calitate ct mai bun la problema abordat.
Un exemplu care ilustreaz importana metodei n abordarea unei probleme este
prezentat n continuare.
Primria municipiului Bucureti are n vedere trimiterea unei scrisori de felicitare
tuturor femeilor n vrst de peste 70 de ani, cu ocazia zilei de 8 Martie. Consultnd baza de
date de la Direcia General de Eviden a Persoanelor cu domiciliul n Municipiul Bucureti,
se cunoate c exist 2 milioane de locuitori, dintre care 1 milion de femei i 20.000 de
persoane n vrst de peste 70 de ani. Se mai cunoate c un test al unui articol din baza de
date se realizeaz ntr-o nanosecund i c sistemul de gestiune al bazei de date are
implementat un modul de optimizare a interogrilor, care nu mai testeaz i al doilea operand
al unei expresii logice compuse, n cazul n care operatorul este AND, iar primul operand
returneaz valoarea FALSE. Vom studia diverse metode de rezolvare a acestei probleme.
Una dintre comenzile SQL care s-ar putea utiliza este:
SELECT * FROM TABEL WHERE SEX = "F" AND VARSTA >=70;
care testeaz toate cele 2 milioane de articole din TABEL, dar n cazul celor 1 milion
de femei se mai execut i testul de vrst, deci sunt necesare 2.000.000 + 1.000.000 =
3.000.000 teste, care se realizeaz n 3 IO6 10~9 = 0,003 s.
O alt posibilitate ar fi comanda:
SELECT * FROM TABEL WHERE VARSTA >=70 AND SEX = "F";
care difer de precedenta doar prin interschimbarea operanzilor din condiia de test. In
acest caz, se realizeaz 2.000.000 + 20.000 = 2.020.000 teste, care necesit 0,00202 s. Dei
timpul necesar nu difer n mod esenial de cel obinut n primul caz, raportul lor arat o
cretere a vitezei de calcul cu aproximativ 32% . Aceasta este o situaie care ar putea aprea o
dat pe an, de 8 Martie, dar exist scenarii care apar frecvent. Un astfel de exemplu este
interogarea bazei de date a autoturismelor nmatriculate n Romnia (aproximativ 4,5
milioane de uniti) n cazul unui eveniment rutier n care nu s-a putut afla numrul de
nmatriculare, ci doar culoarea i marca. Conform observaiilor anterioare, este mai eficient
testarea prima dat a condiiei mai restrictive.
Exemplul urmtor este mult mai elaborat, apare mult mai des n tiinele
computaionale i arat impactul major al folosirii unor metode inteligente.

54

nmulirea matricelor este o operaie frecvent n cazul modelrii proceselor


-.dustriale; de exemplu, comportarea aerodinamic a unui vehicul se poate modela folosind
etoda elementului finit {Finite Element Analvsis - FEA), care rezolv numeric sisteme de
ec -arii difereniale. nmulirea matricelor este o operaie comun, care se nva n primele
.-arsuri de programare a calculatoarelor. n majoritatea cazurilor, programatorii nu dau atenie
icestei operaii, considernd c nu pot interveni n optimizarea costului su. Dac ns
ancele sunt de dimensiuni mari i nmulirea lor este frecvent, atunci se pune problema
icamizrii calculelor. Vom studia n continuare problema ordinii optime pentru nmulirea
ii multor matrice. Vom ncepe printr-un exemplu.
Problema 1
Se dau matricele ,4,(10,20), A2 (20,30) i ^ ( 3 0 , 4 0 ) . S se afle ordinea nmulirii lor
; - consum minim de resurse (cu ct mai puine operaii de nmulire).
Rezolvare
Pentru aflarea fiecrui element al produsului matricelor A(m,n)i
B(n, p) sunt
necesare n nmuliri; cum matricea rezultat C = A - B are m p elemente, nseamn c pentru
i nmuli matricele A i B sunt necesare m-n- p nmuliri.
Produsul matricelor din problema noastr se poate realiza n dou moduri:
cazul 1. (A]xA2)xA3,
cnd se realizeaz mai nti 10-20-30 = 6.000 de
nmuliri i apoi matricea rezultat (care are dimensiunile 10, 30) se nmulete cu
A}. Ultima operaie necesit nc 10-30-40 = 12.000 nmuliri, deci n total sunt
necesare 18.000 de nmuliri.
cazul 2. A1x(A2xA3),
cnd sunt necesare mai nti 2 0 - 3 0 - 4 0 = 24.000 de
nmuliri i apoi matricea rezultat (care are dimensiunile 20, 40) se nmulete cu
A,. Acest lucru mai adaug 10-20-40 = 8.000 nmuliri, deci n total sunt
necesare 32.000 de nmuliri.
Se observ cum ordinea efecturii operaiilor a condus la o diferen foarte mare n ce
pnvete consumul de resurse: n cel de-al doilea caz, au fost necesare cu peste 75% mai multe
nmuliri dect n primul caz. Cazul 1 reprezint deci alegerea optim.
Problema 2

(Generalizare)

Se

matrice

dau

A x.-t- x...xAtl.

(Af(rt c,.)),<,.<

se

dorete

obinerea

matricei

produs

S se afle ordinea optim (cu ct mai puine nmuliri) n care ar trebui s fie

nmulite.
Discuie
Evident, pentru a putea nmuli matricele, avem c ; = rM, 1 < i < n.
Dac ne-am propune rezolvarea problemei prin metoda forei brute, ar trebui
inspectate toate posibilitile. A numra soluiile posibile nseamn a numra n cte moduri
se poate realiza nmulirea a n matrice, cu alte cuvinte, n cte moduri putem ordona cele
t - 1 produse. Acest lucru nseamn s alocm fiecrui semn x din A,xA2 x...xAn
cte un
numr din mulimea {l,2,..., l}. Alocarea se poate face n (w-1)! moduri, deci
:omplexitatea problemei crete exponenial n funcie de numrul de matrice. Fora brut este
ieci exclus, rmne s gsim o alt metod care s asigure o rezolvare eficient. Aceast
rezolvare se bazeaz pe programarea
dinamic.
Programarea dinamic este o metod de rezolvare a problemelor complexe prin
descompunerea lor n probleme mai simple, care se rezolv (eventual prin repetarea
rrocedeului) uor i ale cror soluii se folosesc n construirea soluiei problemei iniiale. n

55

Informatic mai exist o metod de descompunere, numit divide-and-conquer


(divide et
impera), care impune ca sub-problemele s fie independente. Prin faptul c sub-problemele se
pot suprapune, Programarea dinamic este mai dificil de aplicat, deoarece soluiile subproblemelor au componente comune, care pot avea parametri diferii i deci compunerea lor
necesit atenie sporit. Provocarea n cazul programrii dinamice nu o reprezint
descompunerea problemei, ci gsirea metodei eficiente de re-compunere a soluiilor.
Problema propus este un exemplu de aplicare cu succes a programrii dinamice.
Vom prezenta nti varianta secvenial i apoi pe cea paralel.
Rezolvare
Vom nota prin C(i,j)
costul optim pentru realizarea A,*...* A,\ < i < j < n.
Soluia problemei este C(l,n) i n mod evident C(i,i) = 0,1 <i < n. Pentru i < j , vom cuta
o relaie care s permit calculul valorilor C(i,j)
C(k,j),

unde i<k

pe baza valorilor intermediare C(i,k)

< j.

Presupunem deci c i < j . Pe ultimul produs de matrice efectuat pentru obinerea cu


cost minim a A^.-.xAj
C(i,j)

l vom evidenia scriind (A, x . . . x Ak) x (Ak+l x...Ai),i<k

<j .

este deci valoarea dat de cel mai bun" k ales ntre i i j, astfel nct
C(i,k)

+ C(k + \,j)

+ costul ultimului

produs

s fie minim. Ultimul produs se realizeaz ntre dou matrice care au dimensiunile (ri, ck) i
(rM,Cj)

i este deci de cost rf rk+l cr

n concluzie, relaia care permite adugarea unui nou produs irului deja realizat de
produse de matrice este:

C(i,j)

\min(C(i,k) + C(k + l,j) +


= \f<J
[0, pentru i = j

rrrk+l-c.),pentrui<j

Aa cum am menionat n partea de Discuii de mai sus, gsirea acestei formule


reprezint dificultatea rezolvrii problemei propuse. De aici nainte, urmeaz o parte
algoritmic simpl, care pornete de la valorile C(i,i) = 0,\<i<n
i construiete iterativ
elemente de tip C(i, j), pn cnd ajunge la C(1,/j) .
Interesant este faptul c valorile sunt guvernate de 2 indici, nu avem de-a face cu un
ir, aa cum suntem obinuii din alte situaii. Se genereaz deci o matrice ptratic de
dimensiune n, n care sunt definite doar elementele aflate n triunghiul superior: se pornete
de la n elemente zero aflate pe diagonala principal i la fiecare pas se calculeaz cu unul mai
puine, poziionate paralel cu aceast diagonal, ctre dreapta-sus, pn se ajunge la
elementul aflat n colul din dreapta-sus, care reprezint i soluia problemei noastre.
Algoritmul
for

secvenial

( i = 1;

<= n ;

i++)

// iniializarea elementelor de pe diagonala principal:


C(i,i) = 0
for

(j = 1; j < n ; j++)
f o r ( i = 1 ; i <= n compute

return

C(i,i

j;

i++)

+ j)

C(l,/z)

56

Exemplu pentru nmulirea a 4 matrice


S presupunem c avem de nmulit 4 matrice, care au dimensiunile (10,20), (20,30),
:
- i i (40,50). Vom descrie grafic evoluia algoritmului, folosind ablonul de comunicaii
o u r.gura 37, n care nodurile conin cei doi indici, valoarea costului minim i dimensiunile
nacrxei corespunztoare. Observm c nodurile corespund elementelor matricei, care ar
j c e a fi alocate fiecare cte unui proces.
Primul pas cont n completarea valorilor pentru cele 4 noduri poziionate pe
; ir^oala principal: C(l,l), C(2,2), C(3,3) i C(4,4) primesc fiecare valoarea 0, iar
a ~ emisiunile matricelor sunt cele iniiale.
Urmeaz calcularea valorilor C(l,2), C(2,3) i C(3,4), conform sgeilor drepte i a
:c*?ervaiei anterioare (pentru a nmuli matricele A(m,n)i B(n,p) sunt necesare m n p
- Jiri). De exemplu, C(l,2) are valoarea 10 20-30 = 6.000, iar dimensiunea produsului
gemelor dou matrice este (10,30).
La etapa urmtoare se calculeaz C(l,3) i C(2,4). Pentru claritate, au fost desenate
i n i e subire arcele incidente nodului care calculeaz C(l,3). Conform definiiei,
C(l,3) = min {6.000 +10 30 40,10 20 40 + 24.000}
C(1.3) = min{18.000, 32.000} = 18.000 - observm c am regsit rezultatul de la
F'^oblema 1.
Similar, se calculeaz C(2,4):
C(2,4) = min {24.000 + 20 40 50, 20 30 40 + 24.000}
C(2,4) = min{64.000, 48.000} = 48.000

57

Ultima etap const n aflarea valorii C( 1,4), figurat n desen prin linii groase
C(l,4) = min {18.000 + 1 0 40 5 0 , 6 . 0 0 0 + 60.000 + 1 0 30 50,10 20 50 + 48.000}
C(l,4) = min {38.000,81.000, 58.000} = 38.000
Prin marcarea n graf a drumului care conduce la costul optim, aflm c n acest caz
cea mai eficient ordine a efecturii operaiilor este cea natural, de la stnga la dreapta.
Algoritmul
paralel
Paralelizarea algoritmului general (pentru matrice de dimensiune n) se poate realiza
folosind n procese care sincronizeaz la fiecare sfrit al iteraiei conduse de variabila j din
metoda secvenial descris deja.
Figura 37 sugereaz ablonul comunicaiilor pentru cazul general (n procese), care i
de aceast dat sunt colective (all-to-all), deoarece la flecare pas sunt necesare valori din
toate iteraiile precedente. Fiecare proces Pi construiete propria matrice C (care este deci
stocat redundant, dar astfel se scade numrul comunicaiilor), fie calculnd valorile de pe
coloana i, cea care i este alocat, fie primind de la celelalte procese valorile aflate pe
celelalte coloane.
Evoluia metodei paralele poate fi descris ca o und care pornete de pe diagonala
principal i nainteaz pn n colul din dreapta-sus al matricei C. In algoritmul paralel,
secvena repetitiv for_all desemneaz execuii n paralel.
for_all (k = 1; k <= n; k++)
process Pk computes
for (i = 1; i <= n; i++)
// iniializarea elementelor de pe diagonala principal:
C(i,/) = 0
for (j = 1; j < n; j++)
for_all (i 1; i <= n - j; i++)
process Pi+J computes C(i,i + j )
Broadcast {C(i,i + j ) , Pi+J , all)
process Pn writes C(l,w)
Dezvoltarea simultan ca o und a mai multor procese este ntlnit n natur
(valurile, fronturile atmosferice de exemplu) i este preluat n calculul paralel prin algoritmii
sistolici introdui n anii 80 ai secolului trecut [10],
Observaii privind eficiena acestei metode de paralelizare
Graful din figura 37 descrie modul n care se poate descompune algoritmul, alocnd
cte o valoare din matricea C pe fiecare proces. Acest mod de descompunere este extrem de
ineficient, deoarece din cele

^ procesoare, ar lucra simultan cel mult n.

O alt strategie ar fi descompunerea pe n procese, care s lucreze toate la nceput, iar


pe msur ce aplicaia avanseaz, s lucreze din ce n ce mai puine, asemntor cu exemplul
din subcapitolul anterior. Cele patru consideraii menionate acolo se menin i n cazul de
fa.

58

5.3. Paralelizarea sortrii i a problemelor conexe


Sortarea presupune ordonarea unei secvene dup un anumit criteriu. n prelucrarea
datelor, sortarea este o problem des ntlnit, creia i se acord o mare importan. Volumele
actuale de date i prelucrrile dese necesit metode eficiente de sortare. Conceptul Big Data
se refer tocmai la astfel de volume uriae de date complexe, crora nu li se mai pot aplica
prelucrrile tradiionale [11]. Facilitile hardware i de comunicaie recente permit
implementarea unor metode paralele de sortare, care sunt utilizate n abordarea altor
probleme, bazate pe sortare.
Necesitatea cunoaterii unor metode eficiente de sortare provine att din nevoile
intrinseci, de ordonare a unor volume mari de date, ct i extrinseci, n rezolvarea unor alte
probleme care presupun i sortri diverse [9], Aceste probleme sunt prezentate n continuare.
Toate aceste probleme manevreaz o secven de valori total ordonate (ntre oricare dou
elemente se poate stabili o ordine).
5.3.1. Problema gsirii optimului
Problema gsirii optimului const n aflarea celui mai mic (mare) element dintr-o
secven. n cele ce urmeaz vom trata cazul cutrii valorii minime. Algoritmul secvenial
const n preluarea primei valori din secven n variabila min i apoi parcurgerea secvenei
ncepnd de la al doilea element i pn la sfrit, compararea valorii curente cu valoarea
stocat n variabila min i actualizarea variabilei min dac valoarea sa este mai mare dect
valoarea curent:
min = a[1]
for (i = 2; i <= n; i++)
if (a[i] < min) then min

a[i]

n cazul paralel, algoritmul lucreaz dup modelul turneului. Vom ncepe cu


urmtorul exemplu: presupunem c avem de prelucrat 8 valori i strategia folosit va fi s
comparm perechi de elemente alturate, pstrnd cea mai mic valoare din fiecare pereche i
genernd la fiecare pas o nou secven, avnd jumtate din numrul anterior de elemente.
Procesul se oprete cnd lungimea secvenei este 1 i valoarea respectiv este deci cel mai
mic element din secvena iniial (valoarea 1 este ncercuit).

Valorile iniiale:
Pasul 1:
Pasul 2:

8
1

Pasul 3, final:

O versiune a metodei turneului care pstreaz constant lungimea secvenei lucreaz


astfel:

dist = 1
ct timp dist permite comparare:
o se compar elementele aflate la distana dist

59

se inter-schimb elementele comparate, dac 3_rcresctor


o se dubleaz dist
se preia n variabila min elementul de pe prima poziie.

Aceast descriere n limbaj natural lucreaz astfel pentru

Valorile iniiale:

Pasul 1:

3
j

Pasul 2:
Pasul 3, final:

x> _

2
1
V

tu. san: x i . - a t e

l
2

Observm c pentru gsirea optimului unei secvene de 1 . - g e * = Z


fost
necesari 3 = log2(8) pai. n cazul general, pentru n = 2 k , procedura
:r
ascrel
for (i = 1; i <= log2 (n) ; i++)
for_all(j = 0; j < n/21; j++)
if a[j*2i+l]>a[j*2i+2i~1+l] then
swap (a [ j *2 i +l ] , a [ j *2i+2i"1+l])
Observm din nou secvena repetitiv for all care desemneaz ; :
in paralel.
Pentru interschimbare s-a folosit metoda swap care are 2 a r g u m e n t Dac n_
: putere
a lui 2, atunci vor exista pai la care nu se vor putea realiza perech e : >c -or r a n s f e r a
valorile n etapa urmtoare, la fel cum n turnee unii juctori trec "-. raza -m-Jniere rar a
disputa meciul.
Paralelizarea cu sincronizare la fiecare actualizare a contorul-: necesn I procese
la pasul 1 i pe msur ce rezolvarea avanseaz, numrul acestora se in;
la fiecare
pas. Fiecare proces execut (la fiecare pas) o singur comparaie i ever.r_a : naer>cmbare.
Dac ns se alege o rezolvare prin memorie partajat, atunc. procesele icare r.terschimb eventual valori n perechi independente) pot lucra extrem de e n c i e m si iar a se
produce coliziunile la scriere descrise n subcapitolul 3.2. D e z a v a n t a j
memoriei
comune este faptul c scrierile se produc la aceleai momente de timp in : a:e procesele. Un
bun programator va ncerca s disperseze n timp accesul la memorie al proceselor paralele.
5.3.2. Problema gsirii rangului
Rezolvarea problemei rangului const n gsirea poziiei elementului x in secvena
sortat, far sortarea efectiv. Datele de intrare sunt deci o secven i un elemer. al acesteia,
iar rezultatul este poziia cutat.
Metoda secvenial const n numrarea n variabila r a elementelor mai mici dect x
i ntoarcerea valorii r + 1. Metoda cu mai multe procese i schimb de mesaje va utiliza un
proces conductor (mater) - Po, care gestioneaz ntreaga aplicaie, comand celorlalte
procese - executant (slave) sarcinile pe care le au de executat i colecteaz rezultatele printr-o
comanda colectiv (Reduce). Dac lungimea secvenei este foarte mare i exist uniti de
procesare care se pot utiliza, prin fragmentarea sarcinilor se poate ajunge la o foarte mare
economie de timp. De exemplu, mprirea unei secvene n 10 sub-secvene de lungimi

60

aproximativ egale i alocarea lor pe 10 procesoare identice conduce la micorarea de


(aproape) 10 ori a timpului de lucru (n cazul aplicaiilor paralele se adaug timpul necesar
transferurilor de date, al sincronizrii proceselor i al aciunilor specifice calculului paralel).
Etapele rezolvrii paralele sunt:
procesul P0 transmite fiecrui alt proces cte o sub-secven; acestea sunt
independente i de lungimi aproximativ egale (prin comanda Send);
procesul Pq transmite tuturor celorlalte procese valoarea x (prin comanda
Broadcast);
fiecare dintre procesele Pi-Pk afl n mod independent rangul lui x n sub-secvena
proprie, calculnd valoarea variabilei />;
procesul Po colecteaz valorile rk (prin comanda Reduce cu operatorul SUM);
procesul Po afieaz rezultatul comenzii Reduce.
Spre deosebire de problema precedent, cnd am vzut c ambele metode de
comunicaie se pot utiliza, aici este recomandat comunicarea prin schimb de mesaje.
Strategia de rezolvare de tip master/slave este determinat de o formul simpl de compunere
a rezultatelor sub-problemelor pentru obinerea rezultatului problemei iniiale (valorile se
nsumeaz; comanda Reduce fiind special conceput pentru astfel de situaii).
5.3.3. Problema seleciei
Problema seleciei const n gsirea ntr-o secven, fr sortarea prealabil a
secvenei, a elementului cu rangul j (adic n acea secven exist j-1 elemente mai mici dect
rspunsul la problem, n eventualitatea n care acesta exist). Datele de intrare sunt secvena
i valoarea variabilei j, iar rezultatul const ntr-una din valorile secvenei, care ndeplinete
cerina problemei, stocat n variabila x, sau faptul c problema nu are soluie.
Problema seleciei este inversa problemei gsirii rangului, dar este mai complex
dect aceasta, deoarece rezolvarea sa se face prin repetri ale rezolvrii problemei gsirii
rangului (ncercri repetate, ghidate de rezultatele anterioare).
Exist i versiuni mai complexe ale acestei probleme, de exemplu Problema celui deal n-lea element. Aceast problem are ca date de intrare o secven i o variabil n i cere o
permutare a secvenei astfel ca elementul aflat pe locul n (n secvena ordonat) s se afle pe
locul su, elementele din stnga sa s fie mai mici sau egale dect acesta i elementele din
dreapta sa s fie mai mari sau egale cu acesta (figura 38). n cele ce urmeaz vom trata
versiunea simpl, enunat la nceputul acestui fragment.

Fig. 38. Rearanjarea secvenei cu al 6-lea element corect poziionat [16]


Exemplu
Pentru secvena (13 15 12 17 11 14 16) ij = 5, metoda de rezolvare furnizeaz x :
15. Problema nu are soluie pentru j = 9 sau j = 0.

61

Algoritmul secvenial pentru rezolvarea acestei problerr.i r - : a i


:- are
stocat n secven i construiete sub-secvenele Al i A2. alean.;:; : - ; :
- ; ;
ici
sau egale, respectiv mai mari dect x. Rangul lui x este chiar n u r r J r . i ;
Al.
Dac numrul de elemente din Al este chiar j, atunci algoritmul
'. . I .. - *
de
elemente din Al este mai mare dect j, atunci se reia cutarea c_ _- ;
ac
?: se
reine faptul c valoarea cutat este mai mic dect x. Dac n u i r r - ae t z-'tra
- este
mai mic dect j, atunci se reia cutarea cu un element din AS >: se
iic - -I - ..rea
cutat este mai mare dect x. La cutrile ulterioare se aleg - : r
- s l : :ac i
informaiile memorate. O alt versiune ar fi marcarea valorilor nsoeraoe r e t e r - a nu se
repeta cutrile. Dac valorile lui / sunt n afara mulimii { 1 . 2 . . .
izjzc- r r : e ens r.u are
soluie.
if ( (j <= 0) or (j > n)) then STOP
x = a[1]
mark (a[1])
p = position_marked()
while (true) do
list Al, A2
for (i = 1; i <= n; i++)
if (i != P )
if (a[i] <= x) then append (Al, a
else append(A2, a[i])
k = length(Al)
if (k = j) then
write (x)
STOP
if (k > j) then x = primul_element_neciarcat Al
else x = primul_element_nemarcat(A2)
mark(x)
p = position_marked()
Observm c n algoritm s-au folosit metodele: position_-2r< ^ :
p e t n r . rre _area
poziiei ultimului element marcat, append(lista, elemer.r peccr_ a c j g t e a unui
element la sfritul unei liste, length (lista) pentru aflarea f r . r n ic clemente
dintr-o
lista,
mark (element)
pentru
marcarea
unu:
t-kt-s-i
primul_element_nemarcat (lista) pentru preluarea primului e.er".er'
dmtr-o
lista.
La fel c n cazul precedent, pentru rezolvarea paralel a p r : r l e m e ^ e c r e i . vom
folosi un model de tip master-slave, n care procesul mater (Po) aleg; a ; r
_"JL -.orile
pentru x i distribuie proceselor slave (Pi-Pk) valoarea x curent : sub-sec- er.ee oe ungimi
aproximativ egale. Fiecare proces P, calculeaz rangul r, al lui x i apoi procesul P execut
pe tot grupul o comand Reduce cu sum, obinnd valoarea r. Dac _ . a r ^ r e'.or; i r
sunt egale, atunci algoritmul se oprete. Dac r > j , atunci proces-. P . n a r e mai
mic dect precedenta valoare a lui x. Altfel, se alege o valoare ma: rr-are La
:a r s:r_aia
secvenial, se poate folosi intervalul de valori posibile, sau marcarea
: r ie;a testate,
pentru a scdea timpul de execuie.
5.2.4. Problema interclasrii
Problema interclasrii presupune existena a dou secvene - : r_a:e ? ;ere construirea
unei noi secvene sortate, alctuit din toate elementele celor c : _ secvene iniiale.
Interclasarea este o problem care apare des n practic. ncepnd
r.e
- f_nuelor. care

62

doresc s-i centralizeze stocurile sau vnzrile i mergnd pn la situaii complexe, de


statistici multinaionale sau interconectri de baze de date.
Versiunea secvenial presupune existena a trei indici, fiecare alocat unei secvene,
compararea elementelor indicate de indicii secvenelor iniiale, alimentarea secvenei finale
cu elementul cel mai mic i avansarea indicelui secvenei care a trimis valoarea n secvena
final. Dac acest indice nu mai poate avansa, atunci se transfer toate elementele rmase n
cealalt secven i algoritmul se ncheie.
i = 1 // indicele secvenei A, care are lungimea n
j = 1 // indicele secvenei B, care are lungimea m
k = 1 // indicele secvenei C
while ((i <= n) and (j <= m)) do
if (a [i] <= b[j]) then
c[k] = a[i]
i++
else
c[k] = b[j]
j++
k++
if (i > n) then
for (i = j; i <= m; i++)
c [i] = b[i]
else
for (j = i; j <= n; j++)
c[j ] = a [j ]
Pentru paralelizarea folosind trei procesoare se poate folosi strategia
productorconsumator: fiecare secven se stocheaz local i datele se transfer de la procesul Pi sau Pj
(productorii) la procesul P3 (consumatorul).
O alt posibilitate speculeaz prezena masiv a resurselor de calcul i aplic
problema gsirii rangului. Dac avem la dispoziie un numr mare de procesoare i secvenele
de interclasat sunt foarte lungi, atunci putem aplica urmtoarea metod de rezolvare:
procesul Po (mater) trimite fiecrui proces P, (slave) elementul de pe poziia i din
A i toat secvena B;
fiecare proces Pi (slave) calculeaz n paralel
= rangul n B al elementului aflat
pe poziia im A;
procesul Po (mater) colecteaz valorile
(prin comenzi Gather);
procesul Po (mater) construiete secvena C pe baza celor dou secvene iniiale
i ale valorilor colectate. Se vor prelua blocuri din B i cte un element din A, n
mod repetat, ca n exemplul urmtor.
Exemplu de construire a secvenei C
Presupunem c avem la dispoziie 6 procesoare i c se interclaseaz secvenele
A=(3
6 8 9 10)
B = (2 4 5 7 11)
Procesele P1-P5 vor returna valorile ni = 2, nj = 4, n? = 5, n4 = 5 i 5 = 5, care vor fi folosite
astfel de procesul Po pentru construirea secvenei C:
prima valoare (ni = 2) arat c pe prima poziie n C se aduce prima valoare din B,
urmat de prima valoare din A: C = (2 3...
a doua valoare (n? = 4), fiind cu 2 mai mare dect precedenta, arat c n C se
aduc urmtoarele 2 elemente din B i apoi urmtorul element din A: C = (2 3 4
5 6...

63

a treia valoare (? = 5), fiind cu 1 mai mare dect precedenta, arat c in C se


aduce urmtorul element din B i apoi urmtorul element din
C = (2 3 4 5
6 7 8...
a patra valoare ( i j = 5), fiind egal cu precedenta, arat c in C se ac-ce -rmtorul
element din A: C = (2 3 4 5 6 7 8 9...
a cincea valoare {ns = 5), fiind egal cu precedenta, arat c :n C se aduce
urmtorul element din A: C = (2 3 4 5 6 7 8 9 10...
nu mai exist alte valori, astfel c n C se aduc toate elementele rmase din B i
algoritmul se ncheie: C= (2 3 4 5 6 7 8 9
10 11).

Aceast metod este interesant deoarece permite execuie paralel masiv i


construiete secvena C numai pe baza informaiilor privind poziia. n ordine cresctoare, a
unui singur element din A n secvena B.
Eficiena aplicaiei de granularitate mare (folosind doar trei procesoare) este mare.
fiind dat de o descompunere natural a domeniului (descompunere n date). Dac ns
dispunem de multe procesoare i secvenele de sortat sunt lungi, atunci putem alege o
descompunere funcional, cum este cea din exemplul anterior. Aceast descompunere este
eficient, deoarece procesele sunt independente, deci ablonul comunicaiilor nu induce
ntrzieri.
5.2.5.

Problema sortrii

Problema sortrii nseamn a reordona o secven astfel nct componentele sale s


fie ntr-o anumit ordine (cresctoare sau descresctoare). i n acest caz, pentru a pstra
coerena rezolvrilor, vom prezenta sortarea cresctoare.
Una dintre metodele interesante de paralelizare a sortrii pornete de la reeaua de
comparatoare [5]. Un comparator este un instrument care realizeaz ordonarea a dou valori,
prin interschimbarea lor. Comparatorul poate fi imaginat ca un dispozitiv fizic, n care datele
circul pe orizontal, n sensul indicat n desen (figura 39). Reprezentarea unui comparator se
face printr-un segment vertical, iar valorile prelucrate sunt specificate la intrare i la ieire.
Ieirea dintr-un comparator se face ordonnd valorile cresctor, de sus n jos.

timp
Fig. 39. Ordonarea valorilor (8 4) folosind un comparator
Reeaua de comparatoare este o structur de astfel de comparatoare conectate.
Evoluia temporal se face de la stnga la dreapta, datele se schimb la fiecare unitate de timp
i dup mai multe astfel de etape se obine sortarea datelor care au intrat n reea.
Dac reeaua reuete sortarea oricrei secvene, atunci este o reea de sortare. Dac
toate comparatoarele lucreaz pe elemente adiacente, atunci reeaua este simpl. In figura 40
este prezentat o reea simpl de sortare pentru 6 elemente, care sorteaz n 6 uniti de timp
valorile [9 8 7 6 5 4 ] ,

64

5-

4 ,

5 1

7 ,

4,

timp

Fig. 40. Reea simpl pentru sortarea a 6 elemente

O reea de sortare simpl care permite la intrare o secven de n valori necesit cel
puin C] = ~~

comparatoare (deoarece un comparator poate produce cel mult o

inversiune - atunci cnd secvena este privit ca o permutare; datele descresctoare, ca n


exemplul din figura 40, necesit numrul maxim de inversiuni). Din acest punct de vedere,
reeaua din fig. 40 este optim, avnd exact C62 =15 comparatoare.
Eficiena reelei simple de sortare cu un numr minim de comparatoare este mare,
deoarece:
transferul de date se face n proximitate, consumul de resurse fiind minimal;
dispozitivele hardware (comparatoarele) sunt n numr minimal;
comparrile se pot realiza n paralel - acesta fiind singura caracteristic unde
intervin cunotinele programatorului i unde se pot obine execuii mai scurte.
Exemplul urmtor ilustreaz cum organizri diferite conduc la timpi diferii de
execuie.
Exemplu de sortare folosind reea de comparatoare: Metoda Bubble-sort
Paralelizarea sortrii prin reea de comparatoare este o problem dificil, n general. O
idee de paralelizare este abordarea individual, speculnd ideea de baz a metodei de sortare
avut n vedere. O alt abordare este tratarea recursiv la nivelul unei clase de metode,
folosind de exemplu formulele:
x = max(a,,a2,...,a)
sort(ax, a2,..., an) = (sort(delete(x,

a^,a1,...,an)'),x)

valabile n cazul sortrii cresctoare.


Aceste formule arat c procesul de sortare a n valori se face aeznd pe ultima
poziie cea mai mare valoare dintre cele n valori intrate n procesul de sortare, extrgnd
aceast valoare i sortnd cele n - 1 valori rmase. Reeaua de comparatoare care
implementeaz recursiv abordarea global a sortrii este reprezentat n figura 41.

65

Timpul necesar pentru implementarea sa secvenial este dat de urm:


recuren:
T(n) = ( -1) + T(n -1)

-elaie de

i cum T(2) = 1, avem c T(n) = (n -1) + (n - 2) + . . . +1 =


f
1

Bk

<D
-<2-> c<D
O G
sx JZ
o OJ

...

n- 1

timp

Fig. 41. Model de reea recursiv pentru sortarea secvenial a n elemente


Dac, ns, metoda de sortare permite utilizarea simultan a mai multor comparatoare,
atunci timpul de sortare poate scdea. De exemplu, prima comparare aferent Blocului pentru
sortarea a n - 1 elemente se poate realiza la momentul 3, nu se ateapt pn la momentul n.
Sunt necesare 9 uniti de timp, nu 15 cum ar rezulta din formula de mai sus pentru n = 6
(figura 42).

Fig. 42. Reea pentru sortarea a 6 elemente prin metoda

66

timp

Bubble-sort

Reeaua din figura 42 este simpl, optim din punct de vedere al numrului de
comparatoare (15), dar are nevoie de mai mult timp dect sortarea din fig. 40, care este mai
compact. Gradul de paralelizare al sortrii din ultima figur este mai sczut.
O alt idee de paralelizare este gsirea n paralel a optimului (valorii maxime) din
secvena de n elemente, folosind metoda turneului, prezentat deja n acest subcapitol.
Relaia de recuren pentru timpul de sortare n paralel devine astfel:
T(n) = log(/i) + T(n -1)
i cum T(2) = 1, avem c:
T(n) = logO?) + log(/7 - 1 ) + . . . + 1 = log(!) n log()
conform aproximrii Ramanujan [14].
Iat cum, dei procesele sincronizeaz la fiecare trecere la o secven mai scurt
(producnd ntrzieri inerente), paralelizarea produce o scdere semnificativ a timpului de
sortare.
La nevoie, dac problema are restricii semnificative de timp, atunci aceste dou idei
se pot combina. Algoritmul rezultat este mult mai complex, dar asigur un timp de execuie
extrem de sczut.
n acest capitol am prezentat cteva probleme pentru care rezolvrile
fost discutate. Dup cum am vzut, nu exist soluii unice de paralelizare,
avantajele sau dezavantajele sale. Dezvoltrile tehnologice sau noile limbaje
oricnd recomanda noi descompuneri sau noi abloane de comunicaie ntre

67

concurente au
fiecare avnd
concurente pot
procese.

Capitolul 6
Probleme actuale ale calculului paralel

Complexitatea situaiilor actuale impune utilizarea calculului paralel pentru obinerea


la timp a rezultatelor. Conducerea unor procese industriale (procese tehnologice robotizate),
managementul activitilor tiinifice (realizate de reactoare, urmrite de satelii) sau a celor
cu impact major (baraje, centrale atomice) nu se mai pot realiza cu succes fr sisteme de
calcul extrem de puternice i rapide, capabile s exploateze i s ntrein ct mai eficient
instalaiile/procesele respective.
Teoreticienii preiau n mod continuu provocrile vieii reale, le modeleaz folosind
aparatul matematic, realizeaz simulri ale fenomenelor reale i ncearc mereu s
mbunteasc metodele i algoritmii inclui n aplicaiile aflate n industrie, logistic sau
comunicaii. Evoluia unei astfel de probleme este prezentat n subcapitolul urmtor. Cel deal doilea subcapitol prezint cteva domenii moderne ale informaticii i matematicii aplicate,
n care calculul paralel se aplic acum cu succes.
Avansul tehnologic face ca aplicaiile paralele s fie din ce n ce mai rapide i
costurile lor s devin din ce n ce mai sczute. Parallela face parte din categoria
calculatoarelor multi-procesor ieftine, care se pot asambla acas i care pot fi folosite pentru
nvarea limbajelor paralele i pentru dezvoltatorii de tip freelancer [27], Calculatoarele de
tip mainframe sunt destinate instituiilor, firmelor sau bncilor i ofer resurse puternica la
preuri din ce n ce mai mici - de exemplu seria Intel z9 a fost lansat la aproximativ jumtate
din preul seriei anterioare. Supercalculatoarele sunt sistemele aflate n prima linie a puterii
de calcul. Centrele de calcul de nalt performan, universitile, companiile transnaionale
sunt cele care le achiziioneaz i care ofer locuri de munc specialitilor n calcul paralel.

6.1. De la TSP la MDPVRPTW


Problema comis-voiajorului (Traveling Salesman Problem - TSP) este una dintre cele
mai vechi probleme de optimizare, care (ntr-o form oarecum asemntoare) 1-a preocupat
pe Leonhard Euler [6]:
Un comis-voiajor trebuie s construiasc un ciclu hamiltonian de cost minim
ntr-un graf ponderat (fiecare nod cu excepia celui de start este vizitat o singur
dat, iar nodul de start este vizitat de dou ori).
TSP are un set infinit de instane; cnd se rezolv o instan, datele sunt complet
specificate i soluiile posibile se pot msura (figura 43). Problema este determinist; pentru
rezolvarea sa nu s-au gsit algoritmi polinomiali de rezolvare i nici nu s-a demonstrat c
(-!)!
astfel de algoritmi nu exist. Algoritmul exhaustiv, care inspecteaz toate cele
hamiltoniene (dac instana are n noduri) este deci

69

supra-polinomial.

cicluri

Figura 43. O instan TSP i o soluie [22]


Se consider c algoritmii de acest tip nu sunt folositori", deoarece instanele mari nu
se pot rezolva n timp util. De exemplu, doar n anul 2009 s-a rezolvat o instan cu 85.900 de
noduri [1],
Pentru evitarea lor exist urmtoarele alternative, care ofer n timp polinomial o
soluie apropiat de soluia optim:
Algoritmii euristici: dau rezultate bune n majoritatea cazurilor, adic produc
soluii apropiate de optim n timp rezonabil, fr s asigure ntotdeauna gsirea
unei soluii i fr a se putea prognoza ct de bun este soluia (dac este gsit).
Algoritmii aproximativi: dau ntotdeauna rezultate de o calitate minimal fixat, n
timp rezonabil [17]. Istoria algoritmilor aproximativi ncepe n anii '60, odat cu
dezvoltarea tehnicilor de optimizare combinatorie. La sfritul secolului trecut,
teoria acestor algoritmi a devenit bine fundamentat i a permis abordarea
problemelor cu adevrat dificile (de exemplu, Proiectul Genomului Uman [20]).
n situaia n care exist incertitudine n date, TSP devine mai dificil. Una dintre
versiunile sale este Problema cu intervale de date a comis-voiajorului. Deosebirea fa de
TSP const n faptul c fiecare muchie are un cost aflat ntr-un anumit interval, specific
muchiei respective (figura 44). Parcurgerea muchiei (0 1) cost ntre 1 i 3; cnd algoritmul
se lanseaz n execuie se precizeaz exact costul muchiei (la fel i pentru celelalte muchii)

[12].
[1, 31

Figura 44. O instan TSP cu intervale de date pentru costurile muchiilor [12]
Algoritmul care rezolv aceast problem trebuie s fie capabil s rezolve instana ct
mai aproape de optim, oricare ar fi costurile muchiilor (n intervalele specificate). O instan
are deci o infinitate de realizri efective (scenarii), fiecare furniznd o soluie care poate fi
evaluat.

70

O alt versiune a TSP este Problema probabilist a comis-voiajorului [8]. Fa de


varianta determinist, se consider c fiecare dintre cele n noduri emite (cu probabilitatea
Pi,\<i<n) comenzi zilnice. La momentul plecrii n curs, comis-voiajorul afl care sunt
nodurile de vizitat. Soluia problemei este un ciclu a priori, din care comis-voiajorul elimin
nodurile care nu se viziteaz la execuia curent a algoritmului. De exemplu, n Figura 45
sunt reprezentate a) soluia unei instane probabiliste cu 10 noduri i b) drumul curent, atunci
cnd nu se viziteaz nodurile 3, 7, 8.
1

a)

b)

Figura 45 [8]. a) Soluia instanei TSP probabilist

b) Drumul curent

Graful incomplet al unor instane TSP face ca uneori s nu existe soluii, sau costul
acestora s fie mare, fat de situaia n care ar fi fost permise muchii ntre orice dou noduri.
Un exemplu este prezentat n figura 46. Pentru vizitarea localitilor Slnic Moldova i
Agigea, este necesar parcurgerea de dou ori a muchiilor Slnic Moldova - Trgu-Ocna i
Agigea - Constana.
Pentru abordarea acestui caz, noiunea de soluie se va relaxa, astfel c algoritmul de
rezolvare va fi nevoit s lucreze cu un spaiu mult mai mare de soluii posibile. Conceptul de
relaxare este general i se refer la aproximarea unei probleme printr-o problem
asemntoare, care se poate rezolva mai uor. De exemplu, se renun la constrngerea ca
soluiile unei probleme s fie numere ntregi i se rezolv n cazul numerelor reale.

71

Figura 46. O instan TSP far soluie n sens clasic [3]

La nivelul actual, exist preocupri ale cercettorilor pentru investigaii


interdisciplinare. Un exemplu n acest sens este utilizarea serviciilor GIS (Geographic
Information Systems) pentru elaborarea cu acuratee a hrilor pentru instane TSP reale, care
ar putea folosi n Geoinformatic, Logistic, Comunicaii, Ingineria Mediului. In figura 47 se
afl reprezentarea primei instane naionale TSP care utilizeaz date vectoriale
(,romania2950.tsp), iar n figura 48 este prezentat soluia exact a acesteia.

72

Figura 47. Instan TSP cu date vectoriale

J~~i J
^

MoUe

V V D ^ r - e s ^

K >, r v >

j , V "} Roiii-itua
1

?SSY

hi
X

H"4
-1 >

C<l L
IM
-!' X ^ iviili*
? V i v n K i j v v j ^ V T *" " V P - C y
V

/-) -

tffefl

u j ) t y "

*f

Figura 48. Soluia exact a instanei

'

ir

rv\1

romania2950.tsp

Soluia din figura 48 a fost obinut folosind o aplicaie paralel pe 2 procesoare Intel
Xeon la 2,2 GHz i 64 MB RAM (aflat la adresa [24]).

73

O generalizare a TSP, abordat i formalizat de cercettori ca rspuns la cerinele


vieii reale este Problema rutrii vehiculelor (Vehicle Routing Problem - VRP):
Se cere servirea cu costuri minime a unor clieni aflai n diverse puncte geografice,
utiliznd un set de camioane care la nceputul zilei sunt parcate ntr-un depou i care
la sfritul zilei se ntorc la depou [4].

f
V
Depot

E >

ET7m>

a)

*
V1

4
1
;
1/
". Depot 'i'-

. .
/ " V

.
\

b)

Figura 49 [19] a) O instan VRP

b) o soluie

VRP este o problem extrem de important prin aplicaiile sale: aproape c nu exist
mrfuri care s nu includ costuri de transport, iar cum resursele neregenerabile (derivaii
petrolului) se mpuineaz, este evident preocuparea specialitilor pentru rezolvarea ct mai
eficient a situaiilor specifice de transport mrfuri. Au aprut versiuni tot mai complexe ale
VRP:
CVRP (Capacitated VRP) - camioanele au capaciti fixate de transport, care nu pot
fi depite la nici un moment; mai exist i versiunea n care aceste capaciti sunt
diferite, sau fiecare camion are compartimente, n care se pot transporta anumite
categorii de produse (de exemplu lichide care trebuie refrigerate, etc.);
VRPTW (VRP with time windows) - clienii au un program fix din zi cnd pot fi
aprovizionai; de exemplu, parcarea camionului n zon poate fi fcut pn la ora 9.
MDVRP (muli depot VRP) - exist mai multe depouri, fiecare camion se ntoarce la
depoul de unde a plecat;
PVRP (periodic VRP) - se consider mai multe zile succesive i fiecare client
specific un ablon propriu de aprovizionare (de exemplu o dat la 3 zile).
Aceste versiuni se pot combina, astfel c exist, de exemplu, MDPVRPTW. Aceast
problem este dificil deoarece orice metod de rezolvare s-ar implementa, se consum
resurse majore pentru verificarea tuturor restriciilor (de capacitate, de interval orar i de
ablon de aprovizionare, de testare a celui mai convenabil depou). De aceea, numai aplicaiile
paralele, cu module complexe de construire i evaluare a soluiilor pot acum s furnizeze
soluii eficiente [2].

74

6.2. Potenialul actual al calculului paralel


Calculul paralel reprezint viitorul aplicaiilor eficiente i puternice, dezvoltate
calculatoare muli-procesor. Urmtoarele domenii ofer un mare potenial specialitilor n
calcul paralel, fiind demne de luat n considerare de ctre tinerii specialiti.
6.2.1. Criptologia modern
Criptologia

este tiina comunicrii sigure. Cele dou subdomenii ale criptologiei

sunt:

Criptografia - se ocup cu asigurarea securitii comunicrii;


Criptologia - ncearc depirea barierelor criptografice de securitate.

Dezvoltarea fr precedent a metodelor de comunicaie electronic a dus la un progres


pe scar larg a modelelor criptografice, la noi reglementri legislative internaionale i deci
la un avnt deosebit n cercetarea i aplicaiile legate de criptologie.
Algoritmul de factorizare a ntregilor st la baza sistemelor moderne de
criptografie/criptanaliz. Factorizarea unui numr ntreg nseamn descompunerea acestuia
ntr-un produs de dou numere. Cea mai dificil factorizare are loc atunci cnd numrul
ntreg este semi-prim, adic este produs de dou numere prime, problema avnd deci o
singur soluie.
La ora actual nu exist o metod eficient (de complexitate polinomial) pentru
problema factorizrii, ceea ce este speculat de algoritmii de criptare. Dac se va gsi o astfel
de metod, atunci toate metodele moderne de criptare vor deveni vulnerabile i vor trebui
urgent schimbate.
Primul algoritm modern de criptare care a fost aplicat cu succes la nivel internaional
este RSA (Rivest-Shamir-Adleman). Acum exist algoritmi mai compleci, care elimin
aproape n totalitate ansa decriptrii prin fora brut a unui mesaj (SHA-384, ECDH-384,
etc.). Avnd n vedere marea miz a domeniului, aplicaiile eficiente sunt cele paralele.
6.2.2. Moneda virtual
Moneda virtual (virtual currency) este un concept modern, implementat i
recunoscut de instituiile financiare.
Prima moned virtual de succes a fost bitcoin, care i la nivelul anului 2014 este cel
mai rspndit i cel mai folosit astfel de mijloc de plat [30]. Banca Central a Europei
recunoate puterea circulatorie a monedei virtuale, definind-o n 2012 ca o moned digital,
lipsit de un control instituional, care este emis i controlat de dezvoltatorii si i folosit
de membrii unei comuniti virtuale".
Ideea bitcoin este interesant din punctul de vedere al calculului paralel: moneda se
creeaz prin mining - gsirea soluiei prin fora brut la o problem dificil - deci sunt
avantajai cei care posed resurse consistente de calcul i le folosesc n acest scop. Faptul c
este convertibil i asigur i o alt posibilitate de dobndire: prin schimb.
Tehnologia actual i faptul ca bitcoin a fost conceput cu o vitez de creare n
scdere, face ca acum costul energiei folosite s depeasc valoarea produs pe un sistem de
calcul obinuit, astfel c se folosesc alte soluii (de exemplu, plci grafice).

75

6.2.3. Calculul cuantic


Calculul cuantic este un model bazat pe bitul cuantic (quantic bit - qubit). Acum nu
exist calculatoare cuantice, dar modelul este intens studiat de cercettori, existnd
preocupri la nivel teoretic - spre deosebire de moneda virtual care exist i funcioneaz.
Un qubit generalizeaz noiunea de bit: aa cum un bit poate lua doar dou valori (0 sau 1),
un qubit poate fi orice combinaie liniar a valorilor 0 i 1 (n care ponderile sunt numere
complexe).
Dac notm cu | 0} (ket-0) qubitul care stocheaz valoarea 0 i cu j 1 )(ket-\)

qubitul

care stocheaz valoarea 1, atunci un qubit poate stoca orice valoare


V | 0 ) + z2-|l>
unde z,,z 2 e C , | z , | 2
|2=1.
Deci un qubit poate stoca orice pereche de numere complexe care au suma normelor
1, avnd deci o putere (teoretic) infinit de stocare. Modelul calculatorului cuantic este
extrem de interesant, iar ncercrile actuale de simulare sunt doar nceputul unei noi
paradigme de calcul [15].
Calculul paralel se refer la rezolvarea de probleme complexe folosind
calculatoare
multi-procesor. Centrele de cercetare, marile instituii sau corporaii investesc tot mai mult
n capaciti evoluate de calcul. Piaa muncii n acest domeniu este la nceput, avnd o
dezvoltare spectaculoas; specialitii n calcul paralel sunt cei de la care se atept
exploatarea eficient a resurselor puternice de calcul, care devin din ce n ce mai
disponibile.

76

Capitolul 7
Probleme actuale ale calculului distribuit
Calculul distribuit cunoate n zilele noastre o dezvoltare nemaintlnit: reelele de
calculatoare sunt o prezen obinuit n companii, n instituii sau la domiciliu. Suntem
posesori de telefoane inteligente, sau de alte dispozitive electronice (smart TV, router, GPS
pentru autovehicul, etc.) care ne fac viaa mai confortabil, prelundu-ne problemele i
rezolvndu-le.
Modelul distribuit nu este nou: reeaua de cale ferat, de exemplu, manifest
concuren (mai multe trenuri se afl pe acelai tronson), laten (trenurile ntrzie), toleran
la erori (un tren ntrziat nu are impact major asupra celorlalte), partajarea datelor
(evenimentele se anun n reea).
La nivelul reelelor de calcul, programatorii de aplicaii distribuite au tendina de a
ignora unele aspecte care pot influena calitatea produsului software. De exemplu, se
consider n mod eronat c:
reeaua este securizat
latena este zero
costul de transfer este zero
lrgimea de band este infinit
reeaua este omogen
componentele nu se defecteaz
topologia este fix
exist un singur administrator, care are o strategie constant de gestionare.
Toate aceste presupuneri trebuiesc ignorate de un programator bun de aplicaii
distribuite.
Reelele eterogene sunt cele care pun cele mai mari probleme dezvoltatorilor de
aplicaii; eterogenitatea se poate referi la:
arhitectura sistemelor de calcul
formatul local al datelor
ncrcarea local
viteza de calcul
dinamica ncrcrii reelei
i se trateaz diferit, n funcie de situaia la care se refer.
De exemplu, dac sistemele cad i aplicaia nu este proiectat s recupereze datele,
utilizatorul trebuie s o re-lanseze de la nceput; o bun abordare ar fi s se proiecteze puncte
de ntrerupere i salvare, astfel nct s se poat relua fr pierderea rezultatelor intermediare.
In cazul aplicaiilor mobile (apps) se realizeaz versiuni dedicate tuturor sistemelor majore de
operare (cel puin Android, iOs, Windows Mobile OS). In cazul aplicaiilor de cutare, se pot
implementa funcii de interogare a unor baze de date diverse - de exemplu, pentru proiectele
software dedicate cltoriilor de persoane, se pot realiza aplicaii multi-modale pentru
conexiuni avion - cale ferat - autocar.

77

Exemplu de aplicaie eterogen distribuit: Intelligent Transportation System


Un sistem inteligent de transport (Intelligent Transportation System - ITS) este un
sistem integrat de calcul care folosete datele primite de la utilizatori i pe cele captate din
mediu cu ajutorul senzorilor pentru a optimiza i gestiona traficul i pentru a oferi sfaturi
celor interesai. ITS integreaz date diverse, pe care le exploateaz n funcie de natura lor:
date GPS (Global Positioning Sv.s7em)/GLONASS (sistemul rusesc de poziionare
global)/Galileo (sistemul
european)/! RNSS (sistemul
indian)/Bei-Dou-2
(versiunea chinez);
date specifice telefoanelor inteligente, pe care le folosesc de exemplu pentru
aplicaiile turistice dedicate marilor orae (London Bus Checker, etc.);
date de tip GIS (Global Information System) referitoare la poziionarea exact pe
suprafaa globului;
date n format VT (Vehicle Telematics) care descriu vehiculele participante la
trafic, de exemplu n caz de accident, computerul de bord poate realiza
independent un apel de urgen, dac are instalat un sistem de tip eCall;
date n format TSM ( T r a f f i c Signal Monitors) care se preiau prin senzori statici,
amplasai pe osele i care realizeaz statistici de trafic sau colectarea automat a
taxelor de autostrad.
Sistemele inteligente de trafic sunt proiectate pentru comunicaii ad-hoc, realizate la
nevoie i far coordonare; aceste comunicaii pot fi de urmtoarele tipuri:
V2I (vehicle-to-infrastructure) de exemplu pentru aplicaiile de semnalare
accidente;
V2V (vehicle-to-vehicle) cnd dou autovehicule participante la trafic comunic
pentru evitarea unui potenial eveniment.
Dei sistemele inteligente de trafic ofer un ajutor preios, oferul este cel care i
asum responsabilitatea deplasrii i deine controlul asupra autovehiculului. Vehiculele
autonome (conduse de calculator) se afl nc la stadiul de teste, iar legislaia care s le
permit accesul pe osele este n vigoare n 4 state din SUA, n Singapore i n Marea
Britanie.
Sistemele de calcul distribuit sunt prezente sub forma cloud computing
(calcul
folosind resurse stocate distribuit n reea), mobile computing (aplicaii de telefonie mobil),
etc. Toate formele de calcul distribuit sunt acum n dezvoltare accelerat,
oferind
specialitilor posibiliti diverse de angajare.

78

Bibliografie
1. Applegate, D.L., Bixby, R.E., Chvatal, V., Cook, W., Espinoza, D.G., Goycoolea, M.,
Helsgaun, K. - Certification of an optimal TSP tour through 85,900 cities, Operations
Research Letters, 37, 1, 11-15, 2009
2. Crainic, T.G., Crian, G.C., Gendreau, M., Lahrichi, N., Rei, W. - Multi-thread
Cooperative Optimization for Rich Combinatorial Problems, IEEE International
Parai lei & Distributed Processing Symposium, Rome, Italy, 2284-2291, 2009
3. Crian G.C., Nechita E., Talmaciu M., Ptru B. - Using Centrality Indices in Ant
Systems, Proceedings of the International Conference on Computers, Communication
and Control ICCC2006, Oradea, 146-149, 2006
4. Dantzig, G.B., Ramser, J.H. - The Truck Dispatching Problem, Management
Science, 6, 1, 80-91, 1959
5. Dumitrescu B.A. - Algoritmi de calcul paralel, note de curs, Universitatea Politehnica
Bucureti, 2001
6. Euler, L. - Solution d'une question curieuse qui ne parat soumise aucune analyse,
Memoire de 1'Academie des Sciences de Berlin 15, 310-337, 1759, publicat n
Opera Omnia 1, 7, 26-56, 1766
7. Grama, A. Gupta, A., Karypis, G., Kumar, V. - Introduction to parallel computing,
Addison-Wesley; 2nd Ed., 2003
8. Jaillet, P. - Probabilistic Traveling Salesman Problem, Tez de Doctorat, MIT,
Cambridge, 1985
9. Knuth, D.E. - The Art of Computer Programming, Volume 3: Sorting and Searching.
10.
11.
12.
13.
14.
15.
16.

17.
18.
19.
20.
21.
22.
23.

2 n d Ed., 1998
Kung, H.T., Leiserson C.E. - Algorithms for VLSI processor arrays - Introduction to
VLSI systems, Addison-Wesley, 271-292, 1980
Mayer-Schonberger, V., Cukier, K. - Big Data: A Revolution That Will Transform
How We Live, Work, and Think, Eamon Dolan/Houghton Mifflin Harcourt, 2013
Montemanni, R., Barta, J., Mastrolilli, M., Gambardella, L.M. - The Robust Traveling
Salesman Problem with Interval Data, Transportation Science, 41, 3, 366-381, 2007
von Neumann, J. - First Draft of a Report on the EDVA, Pennsylvania University,
USA, 1945
Ramanujan, S. - The lost notebook and other unpublished papers, Springer Berlin,
1988
Stolze J., Suter, D. - Quantum Computing. Wiley-VCH, 2004
Tikhonova, A., Tanase, G., Tkachyshyn, O., Amato, N., Rauchwerger, L. - Parallel
Algorithms in STAPL: Sorting and the Selection Problem, Technical Report, TR05005, Parasol Laboratory, Department of Computer Science, Texas A&M University,
2005
Vazirani, V.V. - Approximation Algorithms. Berlin: Springer, 2003
http://en.wikipedia.0rg/wiki/File:Hwl0c.png#file
http://txemainlogisticsworld.wordpress.com
http://web.ornl.gov/sci/techresources/Human_Genome/index.shtml
http://www.gbbopen.org/
http://www.i-cherubini.it/mauro/blog/page/15/
http://www.lam-mpi.org
; Inv

79

j VASILE A L E C S A N D R I
din D a c u
Bibliotec
j Cot

fi/

%cH

24.
25.
26.
27.
28.
29.

http://www.math.uwaterloo.ca/tsp/concorde/index.html
http://www.mpich.org
http://www.open-mpi.org
http://www.parallella.org
http://www.top500.org
http://www.treehugger.eom/cars/california-to-extend-carpool-lane-access-to-40000plug-in-hybrids.html
30. https://bitcoinfoundation.org
31. https://code.google.eom/p/blackboardeventprocessor/
32. https://computing.llnl.gov/tutorials/mpi/

80