Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoSonia Basile Modificato 10 anni fa
1
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 31/03/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI
2
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/09 2 0001001100010011 0000101100001011 0000101100001011 0000011100000111
3
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). 0001001100010011 0000101100001011 0000101100001011 0000011100000111 0010001100100011 0100010101000101 1000011010000110
4
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).
5
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 ). 0123456 s=1 pari8592436 s=1 dispari5829346 s=2 pari5283946 s=2 dispari2538496 s=3 pari2354869 s=3 dispari2345689 Fine2345689
6
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).
7
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 0 3 1 5 2 5 3 7 4 8 x iniz 0 7 1 5 2 3 3 8 4 5 C 0 3 1 1 2 0 3 4 4 2 Risultati dei confronti effettuati i j 01234 0 FVVFV 1 FFVFF 2 FFFFF 3 VVVFV 4 FVVFF
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.