Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 31/03/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI
Circuito di fusione Il circuito di fusione fonde due sequenze ordinate costruite sullo stesso alfabeto sfruttando il fatto che, date due sequenze ordinate entrambe crescenti (o decrescenti) x e y, la sequenza che si ottiene concatenando x con z=y rovesciata è bitonica (linversione della stringa y si realizza semplicemente variando le connessioni). La profondità del circuito è logaritmica e il numero di comparatori ad ogni passo è n/2. Algoritmi Paralleli e Distribuiti a.a. 2008/
3 Circuito di ordinamento In figura è riportato un circuito di ordinamento che realizza lordinamento connettendo iterativamente diversi circuiti di fusione (la base di questa costruzione sta nel fatto che ogni sequenza di due elementi è bitonica). Poiché concateniamo un numero logaritmico di circuiti di fusione, otteniamo una profondità del circuito O(log 2 n)
Algoritmi Paralleli e Distribuiti a.a. 2008/09 4 Applicando il teorema di Brent Il circuito di ordinamento, O, è un circuito combinatorico di profondità d = O(log 2 n), di dimensione pari al numero di comparatori c = O(n log 2 n), fan in e fan out limitati. Per il Teorema di Brent, lalgoritmo di ordinamento che lavora su O può essere simulato da una algoritmo che lavora su una PRAM EREW con N processori in tempo O(c / p + d), ovvero O((n log 2 n) / p + log 2 n). Quando p = O(n) si ha che la complessità temporale dell'ordinamento su una PRAM EREW è O(log 2 n) e il costo O(n log 2 n).
Algoritmi Paralleli e Distribuiti a.a. 2008/09 5 Algoritmo pari/dispari Lidea base è quella di far lavorare prima tutti i processori di indice pari e poi quelli di indice dispari per evitare letture e scritture concorrenti nei confronti. for s = 1 to n/2 do for i = 0 to i < n-1 step 2 pardo P i : if x[i] > x[i+1] then swap(x[i], x[i+1]) for i = 1 to i < n-1 step 2 pardo P i : if x[i] > x[i+1] then swap(x[i], x[i+1]) Richiede tempo O(n) su una PRAM EREW con O(n) processori. Il costo complessivo è O(n 2 ) s=1 pari s=1 dispari s=2 pari s=2 dispari s=3 pari s=3 dispari Fine
Algoritmi Paralleli e Distribuiti a.a. 2008/09 6 Algoritmo pari/dispari con p < n processori Ogni processore P i gestisce un blocco S i composto di b = n/p elementi. for i = 0 to p-1 pardo P i :ordina S i in modo sequenziale for s = 0 to p/2 do for i = 0 to i < p-1 step 2 pardo P i :S i ' = Merge(S i, S i+1 ) S i = S i ' [0, b-1] S i+1 = S i ' [b, 2b-1] for i = 1 to i < p-1 step 2 pardo P i :S i ' = Merge(S i, S i+1 ) S i = S i ' [0, b-1] S i+1 = S i ' [b, 2b-1] I tempo richiesto è T p = O(n/p log (n/p)) + p/2 O(n/p). Quando abbiamo p = O(log n) il tempo T p diventa O(n): in tal caso il costo totale è O(n log n).
Algoritmi Paralleli e Distribuiti a.a. 2008/09 7 Ordinamento su PRAM CRCW Sfruttiamo la scrittura concorrente per ottenere un semplice algoritmo di ordinamento. Assumiamo una PRAM CRCW con scrittura concorrente della somma dei valori scritti. for i = 0 to n-1 pardo for j = 0 to n-1 pardo P i,j :if(x[ i ] > x[ j ]) or (x[ i ] = x[ j ] and i > j) then c[ i ] = 1 for i = 0 to n-1 pardo P i,1 :x[ c[ i ] ] = x[ i ] Con n 2 processori il tempo richiesto è O(1), Il costo totale è quindi O(n 2 ). x fin x iniz C Risultati dei confronti effettuati i j FVVFV 1 FFVFF 2 FFFFF 3 VVVFV 4 FVVFF