Documente Academic
Documente Profesional
Documente Cultură
Exemplul 1
Distanta intr-o lista inlantuita: calculati d[i] = distanta fata de
ultimul element din lista
0, if next[i]=nil
d[i] =
d[next[i]]+1, if next[i]nil
CURS II (2)
Rank_Computation
(1) forall i in parallel do
(2)
if next [i]=nil then d [i] 0 else d [i] 1
(3)
endif
(4) endfor
(5) while there exists a node i such that next [i]
nil do
(6)
forall j in parallel do
(7)
if next [j] nil then
(8)
d [j] d [j] + d [next [j]]
(9)
next [j] next [next [j]]
(10)
endif
(11) endfor
(12) endwhile
CURS II (3)
Implementare
CRCW PRAM: liniile (2), (7), (8), (9) totul este OK
linia (5) pe masini cu fuziune (AND)
CREW PRAM: liniile (2), (7), (8), (9) totul este OK
linia (5) se inlocuieste cu
for k=1 to [log n] do
EREW PRAM: procesoarele Pi si Pj pot citi simultan d [i] daca
next [j]=i. Se inlocuieste
d [j] d [j] + d [next [j]]
cu
temp [j] d [next [j]]
d [j] d [j] + temp[j]
CURS II (4)
Exemplul 2
Calculul prefixului: pentru vectorul (x1 , x2 , . . . xn) si o operatie
asociativa , sa se claculeze elementele vectorului (y1 , y2 , . . .
yn) , unde
x1 , daca i =1
yi =
CURS II (6)
Exemplul 3
Calculul distantei intr-un arbore binar: pentru un arbore binar
sa se calculeze distanta de la fiecare nod la radacina.
Arborele se da sub forma a 3 vectori: tata[i], st[i], dr[i].
CURS II (8)
Tehnica ciclului Eulerian: ciclu care traverseaza fiecare muchie o
singura data, chiar daca poate trece de mai multe ori prin acelasi
nod.
Construim un graf orientat atasat arborelui.
1.Fiecarui nod din arbore ii atasam un grup de 3 noduri in graf:
A,B,C. Fiecarui astfel de nod ii atasam un procesor.
2.Structura arborelui este pastrata pentru grupurile de 3 noduri
-arc intre fiecare procesor A dintr-un nod si procesorul A al fiului
stang, daca exista, altfel procesorul B din acelasi nod
-arc intre fiecare procesor B dintr-un nod si procesorul A al fiului
drept, daca exista, altfel procesorul C din acelasi nod
-arc intre fiecare procesor C dintr-un nod si procesorul B al tatalui,
daca el este descendent stang, sau procesorul C al tatalui, daca este
descendent drept. Procesorul C din radacina indica nil
CURS II (9)
A
A
B
A
C
B
C
B
C
B
C
B
C
B
CURS II (10)
Pas 1: turul Eulerian formeaza o lista ciclu care incepe cu
procesorul A al radacinii si se termina cu procesorul C al radacinii.
Aceasta constructie se poate face in O(1)
Initializam cu
CURS II (11)
A
1
-1
C
B
0
1
-1
-1
-1
0
-1
-1
0
-1
0
-1
0
-1
0
CURS II (12)
Pas 2: calculam prefixul pentru aceasta lista unde operatia este cea
de adunare. Distanta in arbore se va afla in procesorul C.
A
1
1
2
2
3
3
4
2
3
3
4
2
3
3
4
CURS II (13)
Corectitudine
Vizitarea oricarui subarbore nu are efect asupra distantei
Fiecare procesor A contribuie cu 1 la calculul distantei
Fiecare procesor B contribuie cu 0 la calculul distantei deoarece
distanta decendentului drept egalizeaza distanta descendentului
stang
Fiecare procesor C scade distanta cu 1 corespunzator urcarii
unui nivel in arbore
Eficienta
Lista produsa de itinerariul Eulerian se calculeaza in O(1)
Avem 3n procesoare
Timpul de executie in paralel este O(log n)
Se poate implementa pe EREW PRAM
CURS II (14)
Evaluarea performantei algoritmilor PRAM
Fie P o problema de dimensiune n:
TS(n): timpul celui mai bun algoritm secvential
TP(p,n): timpul algoritmului PRAM cu p procesoare
Costul algoritmului PRAM: C(p,n) = p.TP(p,n)
Timpul de lucru PRAM: W(p,n) = suma timpilor fiecarui
procesor
Accelerarea PRAM: S(p,n) = TS(n) / TP(p,n)
Eficienta PRAM: E(p,n) = S(p,n) / p
CURS II (15)
Propozitia 1.
Fie A un algoritm ce ruleaza pe un PRAM cu p procesoare in
timp t si cost c. Atunci A poate fi rulat pe un PRAM cu p< p
procesoare in timp O(t.p/p) si cost cel mult 2c.
Demonstratie.
Fiecare pas din A rulat pe primul PRAM se poate simula printr-o
secventa de p/p pasi in al doilea
CURS II (16)
Teorema lui Brent.
Fie A un algoritm ce necesita m operatii pe un PRAM cu un
numar nedefinit de procesoare in timp t. Atunci A poate fi rulat
pe un PRAM cu p procesoare in timp O(m/p+t).
Demonstratie.
La fiecare pas i, A executa m(i) operatii. Pasul i poate fi simulat
printr-o secventa de m(i)/p m(i)/p +1 pasi.