You are on page 1of 17

Projektovanje paralelnih

algoritama III
Primeri paralelnih algoritama, II deo
 Dve verzije paralelnog algoritma za sortiranje
sa spajanjem podnizova

1
I verzija paralelnog algoritma
sortiranja sa spajanjem podnizova
Za serijski algoritam T(n) = (n lg n)
Serijski algoritm koristi pristup podeli-i-zavladaj
 Paralelizacija korišćenjem ugnježdenog paralelizma
 Prvi rekurzivni poziv postaje izmrešćen poziv:

Merge-Sort-P(A, p, r) Kao njegov serijski dvojnik,


1.if p < r Merge-Sort-P sortira podniz A[p..r]
2. q = (p+r)/2 Procedura čeka završetak dva
3. spawn Merge-Sort-P(A, p, q) rekurzivna poziva putem iskaza
4. Merge-Sort-P(A, q+1, r) sync u liniji 5
5. sync Iza toga poziva proceduru Merge
6. Merge(A, p, q, r) koju koristi i serijski dvojnik

2
Analiza procedure
Merge-Sort-P (1/2)
Rad:
 Pošto je procedura Merge serijska, njen rad i raspon
su oba (n)
 Rekurencija za rad T1(n) procedure Merge-Sort-P:
T1(n) = 2 T1(n/2) + (n) = (n lg n)
 Rad je dakle isti kao T(n) serijskog dvojnika
Raspon:
 Kako se dva rekurzivna poziva mogu izvršavati u ||:
T∞(n) = T∞(n/2) + (n) = (n)
Paralelizam: T1(n)/T∞(n) = (lg n)
3
Analiza procedure
Merge-Sort-P (2/2)
Ova procedura može da ostvari linearno
ubrzanje na nekoliko procesora
 Ali ne može se efektivno skalirati na 100-ne procesora

Gde je usko grlo paralelizma?


 To je serijska procedura Merge
Prirodno serijska radnja? Da li se može ||?
 Da, spajanje je moguće paralelizovati korišćenjem
ugnježdenog paralelizma

4
Strategija podeli-i-zavladaj za
paralelno spajanje podnizova (1/3)
Spaja dva sortirana podniza:
 T[p1..r1] dužine n1 = r1- p1+1 i
 T[p2..r2] dužine n2 = r2- p2+1
 u drugi podniz A[p3..r3] dužine n3 = r3- p3+1
Uprošćavajuća pretpostavka: n1  n2
Dva ključna koraka na početku:
 Pronaći srednji element x = T[q1], podniza T[p1..r1],
gde je q1 = (r1+p1)/2; q1 je median!
 Pronaći indeks q2 niza T[p2..r2] takav da podniz ostaje
sortiran nakon umetanja x između T[q2-1] i T[q2].

5
Strategija podeli-i-zavladaj za
paralelno spajanje podnizova (2/3)

Nakon odrđivanja q1 i q2, sledi samo spajanje:


1. Postavi q3 = p3 + (q1 – p1) + (q2 – p2)
2. Kopiraj x u A[q3]
3. Rekurzivno spajaj T[p1..q1-1] i T[p2..q2-1] i smesti rezultat u podniz
A[p3..q3-1]
4. Rekurzivno spajaj T[q1+1..r1] i T[q2..r2] i rezultat smesti u podniz
A[q3+1..r3] 6
Strategija podeli-i-zavladaj za
paralelno spajanje podnizova (3/3)
Prilikom računanja q3 vrednost:
 q1 – p1 je broj prethodnih elem. iz podniza T[p1..q1-1]
 q2 – p2 je broj prethodnih elem. iz podniza T[p2..q2-1]
 Njihova suma je broj elemenata koji prethode
elementu x u podnizu A[p3..r3]
Osnovni slučaj: za n1=n2=0  nema posla
Kako je n1  n2, osnovni slučaj: n1=0
Ako je samo jedan od podnizova prazan, to
mora biti podniz T[p2..r2] (jer je n1  n2)

7
Procedura Binary-Search(x, T, p, r)
Binary-Search(x, T, p, r) Uzima ključ x i podniz T[p..r] i vraća
1.low = p jedan od sledeća tri rezultata:
2.high = max(p, r + 1) 1. Ako je T[p..r] prazan (r < p), onda
3.while low < high vraća indeks p
4. mid = (low+high)/2
2. Ako je x  T[p], pa time manji ili
5. if x  T[mid]
jednak od svih elemenata T[p..r],
6. high = mid
onda vraća indeks p
7. else low = mid + 1
8.return high 3. Ako je x > T[p], onda vraća najveći
indeks q, u opsegu p < q  r + 1,
takav da je T[q-1] < x

8
Analiza Procedure Binary-Search
Poziv procedure uzima (lg n) serijskog
vremena u najgorem slučaju
 gde je n = r – p + 1 veličina podniza na kom se
procedura izvršava
Pošto je Binary-Search serijska procedura, njen
rad i raspon su u najgorem slučaju (lg n), oba

9
Procedura P-Merge
(paralelno spajanje ponizova)
P-Merge(T, p1, r1, p2, r2, A, p3) Spaja podnizove
1.n1 = r1 – p1 + 1 T[p1..r1] i T[p2..r2] u
2.n2 = r2 – p2 + 1 podniz A[p3..r3]
3.if n1 < n2 // osiguraj da je n1 n2 3-6: n1  n2
4. zameni p1 sa p2
7: osnovni slučaj?
5. zameni r1 sa r2
6. zameni n1 sa n2 9-15: realizuju
7.if n1 == 0 // oba podniza prazna? strategiju podeli-i-
8. return zavladaj
9.else q1 = (p1+r1)/2 10-11: q2 i q3
10. q2 = Binary-Search(T[q1], T, p2, r2) 12: direktno kopira
11. q3 = p3 + (q1 – p1) + (q2 – p2) T[q1] u A[q3]
12. A[q3] = T[q1] 13-15: ugnježdeni
13. spawn P-Merge(T, p1, q1 – 1, p2, q2 – 1, A, p3) paralelizam
14. P-Merge(T, q1 + 1, r1, q2, r2, A, q3 + 1)
15. sync
10
Analiza procedure P-Merge (1/4)
Raspon:
 Dva podniza sadrže ukupno n =n1+n2 elemenata
 Rekurzivni pozivi rade ||. Koji je skuplji?
 Ključ: max br. elemenata u bilo koja od ta dva
rekurzivna poziva može biti najviše 3n/4
 Kako je n2  n1, sledi: n2 = 2n2/2  (n1+n2)/2 = n /2
 U najgorem slučaju, jedan od dva rekurzivna poziva spaja
n1/2 elemenata podniza T[p1..r1] sa svih n2 elemenata
podniza T[p2..r2], tj. ukupno spaja ovoliko elemenata:
n1/2 + n2  n1/2 + n2/2 + n2/2 = (n1 + n2)/2 + n2/2
 n/2 + n/4 = 3n/4

11
Analiza procedure P-Merge (2/4)
 Dodavanjem cene (lg n) za pozive procedure Binary-
Search u liniji 10, dobija se sledeća rekurencija:
T∞(n) = T∞(3n/4) + (lg n)
 Za osnovni slučaj raspon je (1)
 Jer se linije 1-8 izvršavaju u konstantnom vremenu
 Rešenje je T∞(n) = (lg2 n), što se metodom smene
može lako proveriti

12
Analiza procedure P-Merge (3/4)
Rad:
 Pošto svaki od n elemenata mora biti iskopiran iz niza
T u niz A, sledi da je T1(n) = (n)
 Drugo, pokažimo da je T1(n) = O(n)
 Bin. pretraga u liniji 10 uzima (lg n) vremena
 što dominira nad drugim radom izvan rekurzivnih poziva
 Već pokazano: jedan rekurzivni poziv radi na najviše
elemenata 3n/4, pa je:
T1(n) = T1(n) + T1((1 - )n) + (lg n)
 Parametar  leži u opsegu 1/4    3/4

13
Analiza procedure P-Merge (4/4)
 Sledi dokaz da je rešenje ove rekurentne jednačine
T1(n) = O(n)
 Metod zamene: pretpostavimo da je T1(n)  c1n – c2lg n za
neke pozitivne konstante c1 i c2. Zamenom:
 T1(n)  (c1n – c2lg(n)) + (c1(1 - )n – c2lg((1 - )n)) +
(lg n)
 = ... = c1n – c2lg n – (c2(lg n + lg((1 - ))) – (lg n))
  c1n – c2lg n
 c2 se izabere dovoljno veliko, tako da član c2(lg n + lg((1 -
))) dominira nad (lg n)
 c1 se bira dovoljno veliko da se zadovolji rekurenciju
 Znači T1(n)= (n), pa je paralelizam T1(n)/T∞(n) =
(n/lg2 n).
14
II verzija paralelnog algoritma
sortiranja sa spajanjem podnizova
Poziv P-Merge-Sort(A, p, r, B, s) sortira
elemente iz A[p..r] i smešta ih u B[s..s+r–p]
P-Merge-Sort(A, p, r, B, s) 1: izračuna broj elemenata n
1.n = r – p + 1 2-3: osnovni slučaj
2.if n == 1 4: dodeljuje privremeni niz T
3. B[s] = A[p] 5: računa indeks q niza A[p..r]
4.else neka je T[1..n] novi niz radi njegove podele na dva
5. q = (p+r)/2 podniza A[p..q] i A[q+1..r]
6. q’ = (q – p) + 1 6: računa broj elemenata q ’ u
7. spawn P-Merge-Sort(A, p, q, T, 1) prvom podnizu A[p..q]
8. P-Merge-Sort(A, q+1, r, T, q’+1) 7-8: izmrešćeni i običan
9. sync rekurzivni poziv
10.P-Merge(T, 1, q’, q’+1, n, B, s) 10: spaja T[1..q ’] i T[q ’+1..n]
u izlazni podniz B[s..s+r–p]

15
Analiza procedure
P-Merge-Sort (1/2)
Rad:
 Pošto je rad procedure P-Merge TPM1(n)= (n), rad
procedure P-Merge-Sort je:
T1(n) = 2 T1(n/2) + TPM1(n)
= 2 T1(n/2) + (n)
 Rešenje je T1(n) = (n lg n), prema drugom slučaju
master teoreme
Raspon:
 Pošto dva rekurzivna poziva rade logički u paraleli,
jedan od njih se može ignorisati

16
Analiza procedure
P-Merge-Sort (2/2)
 Pošto raspon procedure P-Merge iznosi (lg2 n),
raspon procedure P-Mereg-Sort je:
T∞(n) = T∞(n/2) + TPM∞(n)
= T∞(n/2) + (lg2 n)
 Master teorema ne može. Rešenje T∞(n) = (lg3 n),
se može proveriti metodom smene
Paralelizam:
 T1(n)/T∞(n) = (n lg n)/(lg3 n) = (n / lg2 n)
 Paralelizam Merge-Sort-P je bio samo (lg n)
 (n / lg2 n) je znatno bolje
 Deo se može žrtvovati ukrupnjavanjem osnovnog slučaja

17

You might also like