Algoritmi Paralleli e Distribuiti
a.a. 2008/09
Lezione del 13/03/2009
Prof.ssa ROSSELLA PETRESCHI
a cura del Dott. SAVERIO CAMINITI
Broadcast con eco in una qualsiasi
rete a connessione fissa
Per risolvere il problema della terminazione si usa l’eco
Servono connessioni bidirezionali
begin
Peco:
Neco= { q : q è un vicino di Peco }
send messaggio ad ogni q in Neco
conteco = 0
while conteco < | Neco |
receive messaggio da un vicino
incrementa conteco
termina
Pi≠ eco: receive messaggio da un vicino p che chiamo padre
Ni = { q  p : q è un vicino di Pi }
send messaggio ad ogni q in Ni
conti = 0
while conti < | Ni |
receive messaggio da un vicino
incrementa conti
send messaggio al padre p
end
In una rete di n nodi, vengono inviati O(m) messaggi in O(d) passi
Algoritmi Paralleli e Distribuiti a.a. 2008/09
2
Esempio broadcast con eco 1
Processore non raggiunto dal Broadcast
Processore raggiunto dal Broadcast (all’interno
sono riportati i valori di conti e di |Ni|)
Messaggio di Broadcast
Peco
Processore che ha ricevuto conferma da
tutti i vicini (incluso l’eco)
0/4
Messaggio di eco
Ogni processore manda solo due messaggi: uno di broadcast ai suoi vicini
dopo averlo ricevuto dal padre (prime istruzioni del processore Pi) e uno di
eco dopo aver ricevuto messaggi da tutti i suoi vicini (al termine del ciclo
while). La distinzione tra messaggi di broadcast e di eco è soltanto logica, di
fatto i messaggi sono identici.
Passo 1: Inizializzazione
Pa
1/4
0/2
Pc
0/4
Pd
Passo 2
2/2
Pb
1/2
Nell’esempio, al passo 2, abbiamo due tipi di processori che ricevono
messaggi: quelli ancora in attesa del padre e quelli che già sono nel ciclo
while. In particolare il processore Pc riceve un messaggio sia da Pa che da Pb.
Supponiamo che Pa sia il padre, in quanto il messaggio da lui inviato è finito
in testa alla coda. Pc invierà subito un messaggio a Pb, che incrementa il suo
contatore, mentre invierà un messaggio a Pa soltanto dopo aver ricevuto Nc
messaggi dai suoi vicini (incluso quello inviato da Pb).
Il contatore di Pd ha già raggiunto il suo valore massimo e quindi Pd è pronto
per mandare un eco al padre.
Algoritmi Paralleli e Distribuiti a.a. 2008/09
3
Esempio broadcast con eco 2
2/2
2/2
2/2
1/4
4/4
0/2
1/1
1/4
2/2
2/4
2/2
Passo 3
Passo 4
2/2
4/4
Passo 5
Passo 6
Algoritmi Paralleli e Distribuiti a.a. 2008/09
4
Sistemi sincroni e asincroni
Sistema sincrono
Sistema asincrono
Un messaggio spedito da un
La trasmissione dei messaggi ha
nodo ad un suo vicino arriva
durata variabile
sempre in tempo costante
L'assenza
di
informazione
segnale
è L'assenza di segnale
fornisce informazione
non
La computazione locale ha costo zero
Algoritmi Paralleli e Distribuiti a.a. 2008/09
5
Complessità distribuita
• complessità dei messaggi (Md): è il numero totale di messaggi spediti tra nodi vicini
durante la computazione;
• complessità temporale (Td): tempo speso per la comunicazione durante la computazione
del caso peggiore fino a quando l’output richiesto è stato raggiunto (o il sistema va in halt)
Ad esempio durante una esecuzione dell’algoritmo di Broadcast con eco vengono inviati in
totale Md = 2m messaggi (2 per ogni arco). L’algoritmo però richiede soltanto Td = O(d)
passi di comunicazione (dove d è il diametro della rete).
Per quanto riguarda la complessità temporale, nel modello sincrono il suo calcolo si riduce
essenzialmente a contare il numero delle pulsazioni che trascorrono durante la
computazione, mentre nel modello asincrono consiste nel calcolare il numero di messaggi
nella più lunga catena casuale della forma “ricevi un messaggio e spedisci un messaggio
come conseguenza”, calcolata su tutte le possibili esecuzioni dell’algoritmo e su tutte le
possibili strutture del grafo G.
Come sempre, queste misure sono considerate nel caso peggiore e in forma asintotica in
funzione di n e m, nodi e archi di G.
Algoritmi Paralleli e Distribuiti a.a. 2008/09
6
Complessità parallela
• Tempo di esecuzione (Tp): si calcola come differenza tra il tempo in cui
tutti i processori hanno terminato il loro lavoro e il tempo di inizio del primo
processo.
• Numero di processori (Np): viene considerato il massimo numero di
processori utilizzati.
• Costo (Cp): di un algoritmo è dato dal prodotto del tempo di esecuzione per
il numero di processori.
• Speed-up (Su): è una misura utile a determinare quanto un algoritmo
parallelo sia veloce rispetto al migliore algoritmo seriale conosciuto per lo
stesso problema. Si calcola come rapporto tra il tempo impiegato nel caso
pessimo dal miglior algoritmo seriale e il tempo del nostro algoritmo
parallelo. Su = Ts / Tp.
• Efficienza (Eff): è il rapporto tra la complessità nel caso pessimo
dell'algoritmo seriale ottimo e il costo dell'algoritmo parallelo. Eff = Ts / Cp .
Algoritmi Paralleli e Distribuiti a.a. 2008/09
7
Speed-up / efficienza
Lo speed-up è una misura utile a determinare quanto un algoritmo parallelo sia veloce
rispetto al migliore algoritmo seriale conosciuto per lo stesso problema. Se si considera
lo speed-up a partire da un algoritmo seriale ottimo, lo speed-up ideale è uguale al
numero di processori, poiché un algoritmo che lavora su Np processori può essere al più
Np volte più veloce del corrispondente algoritmo seriale. Quando si raggiunge lo speedup ottimo si ottiene l'algoritmo parallelo ottimo (se lo era il seriale). Nel caso in cui lo
speed-up sia maggiore di Np, l'algoritmo seriale utilizzato non è ottimo e se ne può
trovare uno migliore eseguendo serialmente i passi dell'algoritmo parallelo utilizzato.
L'efficienza deve risultare minore o uguale a 1. Se risultasse maggiore di 1 allora l'algoritmo
seriale non sarebbe ottimo e sarebbe possibile trovarne uno migliore simulando
l'algoritmo parallelo con l'esecuzione seriale degli stessi calcoli dell'algoritmo parallelo
su di un unico processore.
Bisogna ricordare che il numero Np di processori risulta vincolato da considerazioni di
carattere tecnologico ed economico (costo iniziale e di manutenzione); in pratica si
cerca di rendere Np indipendente dalla dimensione n del problema e comunque
abbastanza piccolo. Volendo esprimere il rapporto esistente tra Np ed n, possiamo
utilizzare un'equazione del tipo:
Np
= f(n) = n1-x
con 0 ≤ x ≤ 1
Algoritmi Paralleli e Distribuiti a.a. 2008/09
8
Accelerated Cascading
Abbiamo visto come l’algoritmo di somma parallelo non sia ottimo perché
costa O(n log n) (ovvero n processori per log n tempo), mentre il
miglior algoritmo sequenziale richiede tempo O(n). La tecnica
dell’accelerated cascading ci permette di ridurre il costo dell’algoritmo
parallelo a O(n).
La tecnica consiste nel dividere l’algoritmo in due fasi:
1° fase: si applica l’algoritmo sequenziale su k sotto-istanze del
problema di piccola dimensione h in modo da ridurre la dimensione
totale dello intero problema. Tempo parallelo O(h).
2° fase: si applica l’algoritmo parallelo sui k risultati del passo
precedente. Tempo parallelo O(log k)
Costo = O(P (h + log k))
Algoritmi Paralleli e Distribuiti a.a. 2008/09
9
Somma con la tecnica
dell’Accelerated Cascading
Si adoperano P processori
SommaAC(A, n)
begin
k=P
h = n/k
for i = 0 to k-1 pardo
Pi: bi = i * h
for j = 1 to h -1 do
if bi + j < n then A[ bi ] = A[ bi ] + A[ bi + j ]
B[ i ] = A[ bi ]
Somma(B, k)
end
// algoritmo di somma parallela standard
Tempo parallelo O(h + log k)
Algoritmi Paralleli e Distribuiti a.a. 2008/09
10
Esempio di somma con la tecnica
dell’Accelerated Cascading
n = 12
P=4
P0
P1
24
1° fase
sequenziale
2° fase
parallela
32
10
11
7
size = 3
P2
16
9
45
P3
2
19
31
24
11
9
19
56
18
54
50
66
34
56
55
122
89
5
211
Algoritmi Paralleli e Distribuiti a.a. 2008/09
11
Analisi dell’algoritmo SommaAC
Per ottenere costo Cp=O(n) e quindi Eff=1, dobbiamo scegliere
O(n/log n) processori, assegnando a ciascuno O(log n) elementi
da sommare sequenzialmente.
La 1° fase pertanto richiede tempo paralello O(log n) per generare
O(n/log n) elementi. Con O(n/log n) processori si opera con
l’algoritmo di somma parallelo su gli O(n/log n) elementi,
impiegando un tempo parallelo pari a:
log (n/log n) = log n – log log n = O(log n)
Costo totale = O(n/log n (log n + log n)) = O(n)
Algoritmi Paralleli e Distribuiti a.a. 2008/09
12