Sunteți pe pagina 1din 28

Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Un Model de Programare

•  Un program paralel / distribuit = colectie de procese


secventiale comunicante - Communicating Sequential
Processes

Ø Bazat pe modelul CSP al lui Hoare


Ø Folosit in multe limbaje si biblioteci paralele /
distribuite
Ø Adaptat pentru modelele
Ø  comunicare de mesaje (message passing) si

Ø date partajate (shared data)

Algoritmim paraleli si distribuiti 1


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Pseudocod

•  Modelul proceselor secventiale comunicante este


adoptat in limbajul pseudocod utilizat in descrierea
algoritmilor, in acest curs
•  Pseudocodul include notatii de reprezentare a
–  proceselor secventiale
–  comunicatiei intre ele

Algoritmim paraleli si distribuiti 2


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Descrierea datelor

Tipuri de baza

boolean bool
întreg int
real real / double
caracter char
şir string [lung-max]

Algoritmim paraleli si distribuiti 3


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Declararea variabilelor

tip id = expresie;

ex. int i, j=1;


double sum=0.0;

Definirea constantelor

const tip id = expresie;

ex. const int c=1;

Algoritmim paraleli si distribuiti 4


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Tablouri

tip id [domeniu] = expresie;

int a[5]; sau int a[1:5];


int b[1:10];

int c[1:5] = ([5] 0);

double c[15,15] = ([15] ([15] 1.0));

Algoritmim paraleli si distribuiti 5


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Tipuri definite de utilizator

enum id {enumerare_simboluri};
enum zile {l, ma, mi, j, v, s, d};

typedef struct {definitie_campuri} id;


typedef struct {
int front=1;
int rear=1;
int size=0;
int contents[5];} queue;
queue q1, q2[5];
Algoritmim paraleli si distribuiti 6
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Instrucţiuni
Atribuirea variabila = expresie;

Interschimbarea variabila_1 :=: variabila_2;

Instructiune inoperanta skip;

Iesirea dintr-o instructiune compusa exit;

Decizia (if)
if (conditie) instructiune;

if (conditie) {bloc instructiuni};

Algoritmim paraleli si distribuiti 7


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Decizia (if) - continuare


if (conditie) {bloc instructiuni}
else if (conditie) {bloc instructiuni}
else {bloc instructiuni};

Ex.:

if (x>y) m = x;

else if (y>x) m = y;

else m = x+y;

Algoritmim paraleli si distribuiti 8


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Iteraţia (while)

while (conditie) {bloc instructiuni};

Algoritmim paraleli si distribuiti 9


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Ciclul cu contor (for)

for [cuantificatori] {bloc instructiuni}


Un cuantificator are forma:
variabila = val_init to val_finala st B

Corpul ciclului este executat o dată pentru fiecare valoare a


variabilei contor, dacă valoarea expresiei booleene B este
true (such that B).
În cazul mai multor cuantificatori, corpul ciclului se execută
pentru fiecare combinaţie de valori ale variabilelor contor, cu
variabila cea mai din dreapta variind cel mai rapid.

Algoritmim paraleli si distribuiti 10


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Exemple:

for [i=1 to n, j=i+1 to n] m[i,j]:=:m[j,i];

for [i=1 to n, j=i+1 to n st a[i]>a[j]]


a[i]:=:a[j];

Algoritmim paraleli si distribuiti 11


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Proceduri

tip_rez p_id(tip_1 f1, … ,tip_n fn){


declaraţii
instrucţiuni – pot contine return
}

O procedură fără return este apelată prin:


call p_id(e1,...,en)
O funcţie (include return) apare ca operand într-o expresie:
x = p_id(e1,...,en).

Algoritmim paraleli si distribuiti 12


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Proceduri

Exemplu: calculul factorialului.

int fact(int i){


if (i<0) return -1;
else if (i==0 OR i==1) return 1;
else return i*fact(i-1);
}

Algoritmim paraleli si distribuiti 13


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Executie concurenta
co S1 || S2 || ... || Sn oc
Ex.1
int x=0, y=0, z;
co x = x+1; || y =y+1; oc
z=x+y;

co [cuantificator]{Sj}
Ex. 2
co [j=1 to n] {a[j]=0; b[j]=0;}

? Ex. 2: Exista dependente intre procese ?

Algoritmim paraleli si distribuiti 14


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Procese concurente
real a[1:n,1:n],b[1:n,1:n],c[1:n,1:n];
process Prod [i = 1 to n, j= 1 to n] {
real sum = 0;
for [k = 1 to n]
sum = sum + a[i,k]*b[k,j];
c[i,j] = sum;
}

•  Nu mai apare cuvantul cheie co


•  Variabile partajate si locale
•  ? Dependenta intre procese ?
Algoritmim paraleli si distribuiti 15
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Sincronizarea si Actiuni Atomice


int y= 0; z= 0;
co x=y+z; || y=1; z=2; oc

•  Executia: este (cf. model CSP) o intretesere a actiunilor


atomice
•  ex. de actiuni atomice: read si write ptr o variabila.
•  Instructiunea x=y+z
se executa astfel
–  citeste valoarea lui y si memoreaza intr-un registru R
–  citeste valoarea lui z si adauga la valoarea din R
–  scrie rezultatul din R in x
Algoritmim paraleli si distribuiti 16
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Sincronizarea si Actiuni Atomice (2)


int y= 0; z= 0;
co x=y+z; || y=1; z=2; oc
Observatii
–  citirea lui y in x=y+z; se poate face inainte sau dupa
modificarea ei prin operatia y=1
–  la fel pentru z
•  La sfarsit, x poate avea oricare valoare dintre 0,1,2,3.

Problema: Cum eliminam comportamentul nedeterminist?

Solutie: in cursul evaluarii unei expresii, variabilele din acea


expresie nu trebuie modificate de alte procese

Algoritmim paraleli si distribuiti 17


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Atomicitatea poate fi asigurata prin doua mecanisme:

sincronizare (“await”)

atomicizarea actiunilor (<, >).

Forma generala: <await (B) S;>

Forme particulare: <await (B);>

<S;>

Algoritmim paraleli si distribuiti 18


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Exemplu: excludere mutuala


Fiecare proces Proc[i] al unei colectii de procese Proc[i=1 to n]
executa ciclic

–  operatii intr-o sectiune critica in care are acces exclusiv la


anumite resurse partajate urmata de

–  o sectiune necritica in care foloseste doar resurse locale.

Problema: cum se asigura ca, in orice moment, cel mult un


proces se afla in sectiunea critica?

Solutia: se controleaza accesul la sectiunea critica

Obs. exemplul arata cum se sincronizeaza procesele care


folosesc aceeasi resursa, fara a produce erori unul altuia
Algoritmim paraleli si distribuiti 19
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Solutie
int s = 1; /*s=1 – resursa liberă*/
/*s=0 – resursa folosita*/
process P[i=1 to n]{
while (true){
<await (s>0) s = s-1;>;
/*acaparare resursa*/
Sectiune critica;
<s = s+1>;
/*eliberare resursa*/
Sectiune necritica
}
}
Algoritmim paraleli si distribuiti 20
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Problema producător-consumator

•  Un (proces) producător și un consumator comunică printr-


un tampon partajat care poate memora o singură valoare;
•  producătorul păstrează într-un tablou a[1:n] valorile pe
care le trimite, una cate una, la tampon;
•  consumatorul preia una cate una valorile din tampon si le
pune în tabloul b[1:n];
•  soluția trebuie să asigure că valorile ajung în tabloul b în
același număr și în aceeași ordine ca în a.
Obs. exemplul arata cum se orchestreaza operatiile unor
procese care coopereaza intr-o aceeasi aplicatie

Algoritmim paraleli si distribuiti 21


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Producator-consumator
Pentru sincronizarea accesului la buf, procesele folosesc doua
variabile
p – nr valori trimise de producer in buf
c – nr valori preluate de consumer din buf

Algoritmim paraleli si distribuiti 22


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Producator-consumator: solutia
int buf, p=0, c=0;
/*p = numarul de valori transmise in buf*/
/*c = numarul de valori preluate din buf*/

process producer{ process consumer{


int a [1:n]; int b [1:n];
while (p<n){ while (c<n){
/* asteapta ca buf /* asteapta ca buf
sa fie gol */ sa fie plin */
<await (p==c);> <await (p>c);>
buf = a[p+1]; b[c+1] = buf;
p = p+1 c = c+1
} }
} }

Algoritmim paraleli si distribuiti 23


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Bariere de sincronizare

Un calcul iterativ - Fiecare iteratie co co


depinde in intregime de rezultatele
iteratiei precedente (algoritmi data
parallel) oc
oc
while (true){ co
co

timp
co [k = 1 to n]
{cod_proces-k;}
} oc
oc
co
co
co – se creeaza n procese
“oc” – cele n procese sunt distruse
oc
!! se consuma timp oc
Algoritmim paraleli si distribuiti 24
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

co co folosim un co
mecanism de
sincronizare
a tuturor barrier
oc
oc proceselor;
co à la sfarsitul
co fiecarui ciclu,
timp

bariera
sincronizeaza barrier
oc toate
oc
co procesele
co à procesele
trec sincron
la urmatoarea oc
oc iteratie !
oc
Algoritmim paraleli si distribuiti 25
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Varianta cu bariere

co[k = 1 to n]{
co
while (true){

cod_proces_k; barrier
barrier;
}

timp
}
barrier

Procesele sunt create si distruse


o singura data
oc
Nu se mai consuma timp cu
distrugerea si crearea repetata
a proceselor !

Algoritmim paraleli si distribuiti 26


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Exemplu: calcul grila

Calcul grila = operaţii asupra unor structuri matriceale


Ex. o metodă cu diferenţe finite (Jacobi)

Tiparul prelucrărior este următorul:


iniţializează matricea
in paralel pentru fiecare punct
while (neterminat) {
calculează o nouă valoare ca media aritmetică a valorilor
celor mai apropiaţi patru vecini
evaluează terminarea
}

Algoritmim paraleli si distribuiti 27


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Exemplu: calcul grila


real grila[0:n+1, 0:n+1], noua[0:n+1, 0:n+1];
bool converge = false;
process CalculGrila[i=1 to n, j=1 to n]{
while (not converge){
noua[i,j] = (grila[i-1,j]+grila[i+1,j]+
grila[i,j-1]+ grila[i,j+1])/4;
barrier;
test_convergenta;
barrier;
grila[i,j] = noua[i,j];
barrier;
}
}
Algoritmim paraleli si distribuiti 28

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