Complessità e Trasportabilità
Lezione n°3
Algoritmi Avanzati
a.a.2010/2011
Prof.ssa Rossella Petreschi
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 .
AA 2010-2011
2
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
AA 2010-2011
3
Elemento combinatorio
Def: Un elemento combinatorio è un qualunque elemento di
circuito che abbia un numero costante di input e output e che
esegua una funzione ben precisa.
Esempi:
• Porte logiche
• Comparatore
• ecc…
not
and
min{x, y}
x
y
or
comp
max{x, y}
Più elementi combinatori possono essere collegati tra di loro
formando una rete combinatoria dove l'output di un
elemento può essere l'input di uno o più altri elementi.
AA 2010-2011
Rete combinatoria
Una rete combinatoria C può essere vista come un grafo diretto aciclico
GC avente un nodo per ciascun elemento combinatorio c e un arco diretto
(c',c") se l’output di c' è input di c".
La dimensione di una rete combinatoria è il numero di nodi del grafo e la
profondità è il diametro del grafo.
Il fan-in di un elemento c è il grado entrante del nodo c in GC e
corrisponde al numero di input dell’elemento.
Il fan-out di un elemento c è il grado uscente del nodo c in GC.
È da notare che non necessariamente il numero di output di un elemento
combinatorio è uguale al suo fan-out, infatti un elemento combinatorio
con un solo filo di output può “servire” un numero qualunque di altri
elementi.
AA 2010-2011
5
Teorema di Brent
Teorema (CREW): ogni algoritmo che lavora su
una rete combinatoria di profondità d e dimensione
n che sia a fan-in limitato, può essere simulato da un
algoritmo che lavora su una PRAM CREW con p
processori in O(n/p+d) tempo.
Teorema (EREW): ogni algoritmo che lavora su
una rete combinatoria di profondità d e dimensione
n che sia a fan-in e fan-out limitato, può essere
simulato da un algoritmo che lavora su una PRAM
EREW con p processori in O(n/p+d) tempo.
AA 2010-2011
Teorema di Brent - Esempio
Profondità: d = 5
Dimensione: n = 22
Processori: p = 3
AA 2010-2011
7
Dimostrazione del teorema di Brent
•Modelli di calcolo:
- PRAM-EW con p processori p0, p1, …, pp-1.
- Rete combinatoria C di profondità d e dimensione n = ∑ni , i=1..d, con ni
numero di elementi al livello i.
L’input del circuito combinatorio si considera disponibile nella memoria
condivisa. Il fan-in limitato evita che la memoria condivisa non sia sufficiente a
memorizzare i risultati intermedi del calcolo.
•Idea della dimostrazione: Ogni processore simula un componente del primo
livello della rete e fornisce l’output che può essere immagazzinato nella memoria
condivisa. Si ripete l’operazione per un numero di volte pari alla profondità del
circuito utilizzando l’output di ogni livello come input del livello successivo. Nel
caso in cui p sia minore del massimo numero di elementi combinatori presenti in
uno stesso livello, si dovrà effettuare un numero di passi seriali proporzionale al
rapporto tra il numero di elementi del livello i e p.
AA 2010-2011
8
Modelli CREW ed EREW nel
Teorema di Brent
• La complessità tiene conto della profondità del circuito e dei passi seriali
necessari a simulare un livello.
• Tp = ∑ ⎡ni /p⎤ ≤ ∑ (ni /p +1) = n / p + d
con i=1..d
• Abbiamo detto che il processore che simula l’elemento combinatorio fornisce
l’output che può essere immagazzinato nella memoria condivisa. Se più processori
richiedono in input quello stesso valore si deve accettare che la P-RAM sia a
lettura concorrente. Se si accetta l’ipotesi che anche il il fan-out sia limitato, si
può considerare che in tempo costante l’output del circuito combinatorio sia
direttamente copiato nell’input dei circuiti che lo richiedono. Questa limitazione
permetterebbe la simulazione su una P-RAM a lettura esclusiva.
AA 2010-2011
9
Modello Work and Depth
Il modello di computazione WD è caratterizzato:
• dal numero totale di operazioni elementari svolte durante la
computazione (Work); le operazioni si possono pensare in forma
concorrente e/o esclusiva;
• dalla catena più lunga di dipendenze sequenziali fra le operazioni nella
computazione (Depth).
E’ da notare l’affinità fra i concetti Work e Depth nel modello WD e dimensione
e profondità in una rete combinatoria
AA 2010-2011
10
WD vs PRAM
Un modello di computazione parallela si può “leggere” in
termini di sequenza di intervalli paralleli unitari all’interno
dei quali debbono essere eseguite concorrentemente sequenze
di istruzioni.
La differenza fra il modello PRAM e quello WD sta nel
numero di istruzioni da eseguire:
- costante (uguale a p) nella PRAM;
- variabile (massimo numero possibile) nel WD.
AA 2010-2011
11
Equivalenza fra WD e PRAM
Sia A un algoritmo nel modello WD richiedente x(n) operazioni
elementari e d(n) tempo (profondità).
A può essere implementato su una PRAM con p(n) processori in
tempo O(x/p + d) con le stesse convenzioni di concorrenza in
scrittura e lettura adoperate nel modello WD
AA 2010-2011
12
Trasportabilità fra P-RAM con
diverso numero di processori
Teorema (p' < p): ogni algoritmo A che lavora in tempo parallelo O(t) su
una PRAM con p processori può essere simulato da un algoritmo A' che
lavora su una PRAM con p' processori (p' < p) in tempo O(t p / p').
Dimostrazione: durante ognuno dei t passi dell’esecuzione di A, i p
processori lavorano parallelamente in tempo O(1). Durante ogni passo
della esecuzione di A', ciascuno dei p'<p processori eseguirà un blocco
seriale di p/p' operazioni in tempo O(p/p'). Pertanto il tempo parallelo
relativo alla esecuzione di A' sarà O(tp/p').
Il costo dei due algoritmi A e A' rimane pari a O(tp).
AA 2010-2011
13
Numero di processori limitato (1)
Vogliamo sommare n numeri, con la tecnica della prima metà, avendo a disposizione un
numero fissato a priori di p processori (p < n).
Ricordiamo come si lavora con n processori
•begin
• for i = 1 to log n do
•
for j = 0 to n/2i -1 pardo
•Pj: A[ j ] = A[ j ] + A[ j+n/2i ]
• return A[ 0 ]
•end
P1 P2 P3 P4
4
2
7
4
5
8
10 12
1
6
3
8
15 20
35
AA 2010-2011
14
Numero di processori limitato (2)
p=2
Vediamo cosa cambia con p <n processori
4
AA 2010-2011
2
7
4
1
6
3
8
2
10
4
1
6
3
8
8
10 12
s=0
•begin
5
s=1
• for i = 1 to log n do
i=2
•
for s = 0 to (n/2i) / p -1 do
5
s=0
i
•
for j = 0 to min(n/2 , p) -1 pardo
i=3
15
•
if (j+s*p < n/2i) then
s=0
•Pj: A[ j+s*p ] = A[ j+s*p ] + A[ j+s*p +n/2i ] 35
• return A[ 0 ]
•end
i=1
P1 P2
20
15
Trasportabilità degli algoritmi
Dati due differenti modelli di computazione M e M’, si dice
che un algoritmo A progettato per la computazione C sul
modello M è trasportabile sul modello M’ se l’algoritmo A’
che computa C sul modello M’ è ottenibile da A tramite
l’applicazione di un insieme finito di regole fisse.
Il broadcast su PRAM è un primo esempio di trasportabilità
di un algoritmo:
se su una PRAM CR tutti i processori vogliono leggere la
stessa informazione, pagando un tempo O(logn) per il
broadcast si può trasportare l’algoritmo su una PRAM ER.
Vediamo come affrontare la trasportabilità della scrittura
concorrente da PRAM CW a PRAM EW.
AA 2010-2011
16
Simulazione della scrittura concorrente:
stessa informazione
Sia dato un algoritmo per PRAM CW con scrittura concorrente di valori identici. L’operazione compiuta
da tutti i processori di scrivere nella stessa locazione R viene simulata su PRAM EW dal solo processore
P0, dopo aver controllato che tutti i valori ai scritti dai rispettivi Pi siano uguali*. Questo controllo si
effettua usando un vettore A con tutti i valori da scrivere e un vettore di booleani utilizzato per riportare le
eventuali diversità nei valori di A:
for j = 0 to n pardo
Pj:
A[ i ] = ai; B[ i ] = true
for i = 1 to log n do
for j = 0 to (n/2i -1) pardo
Pj:
if A[ j ]  A[ j+ n/2i ] or not B[ j ] or not B[ j+ n/2i ] then
B[ j ] = false
P0: if B[ 0 ] then R = A[ 0 ]
Il tempo parallelo richiesto è O(log n)
* Questo controllo su PRAM CW si suppone effettuato a livello hardware
AA 2010-2011
17
Simulazione della scrittura concorrente:
funzione dei valori
La simulazione di PRAM CW con scrittura del massimo valore (o della
somma o di qualsiasi altra funzione commutativa f dei valori) viene
eseguita su PRAM EW semplicemente utilizzando la tecnica della metà
per il computo di f su un vettore A:
for j = 0 to n pardo
Pj:
A[ i ] = ai
for i = 1 to log n do
for j = 0 to (n/2i -1) pardo
Pj:
A[ j ] = f ( A[ j ], A[ j+ n/2i ] )
P0: R = A[ 0 ]
Con lo stesso schema si può simulare anche la scrittura concorrente basata
su priorità (ad esempio in funzione dell’indice del processore che vuole
scrivere).
In entrambi i casi la simulazione richiede tempo parallelo logaritmico.
AA 2010-2011
18