Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi 2 operazioni fondamentali Lezione n°2 Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi 1
Interconnessione tramite Reti La comunicazione tra processori avviene passando attraverso opportuni canali direttamente dalla memoria locale di un processore a quella di uno o più processori adiacenti. Esempi di reti di interconnessione: Vettore Matrice (mesh) Albero binario completo Ipercubo etc AA 2010 - 2011 2 2
Broadcast su rete a Vettore Si adoperano N processori Input su P0 Broadcast(x) begin P0: a0 = x for i = 1 to N-1 do Pi: ai = ai-1 end Tempo parallelo N x 0 1 2 N-1 AA 2010 - 2011 3 3
Si adoperano RxC processori Broadcast su mesh Si adoperano RxC processori Input su P0,0 Broadcast(x) begin P0,0: a0,0 = x for j = 1 to C-1 do P0,j: a0,j = a0,j-1 for i = 1 to R-1 do for j = 0 to C-1 pardo Pi,j: ai,j = ai-1,j end Tempo parallelo C+R x 0 1 2 C-1 1 2 R-1 AA 2010 - 2011 4 4
Broadcast su albero binario Con n foglie e 2n-1 processori Input alla radice Broadcast(x) begin P1: a1 = x for i = 0 to log n -1 do for j = 2i to 2i+1-1 pardo Pj: a2j = aj a2j+1 = aj end Tempo parallelo logaritmico a2 a4 a5 a3 a6 a7 a1 AA 2010 - 2011 5 5
Si adoperano n=2d processori Broadcast su ipercubo Si adoperano n=2d processori Input su P0 Broadcast(x) begin P0: a0 = x for i = 0 to d-1 do for j = 0 to 2i-1 pardo Pj: aj+2i = aj end Tempo parallelo d = log n x 000 001 101 111 110 010 100 011 AA 2010 - 2011 6 6
Si adoperano n processori Tecnica della prima metà Somma su P-RAM EREW Si adoperano n processori Per semplicità assumiamo n potenza di 2 Somma(A) 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 Tempo parallelo logaritmico Tecnica della prima metà 4 2 7 4 1 6 3 8 5 8 10 12 15 20 35 AA 2010 - 2011 7 7
Si adoperano RxC processori Somma su mesh Si adoperano RxC processori Ciascun processore ha un proprio valore nella variabile a Somma_Mesh() begin for i = 1 to R-1 do for j = 0 to C-1 pardo Pi,j: ai,j = ai,j + ai-1,j for j = 1 to C-1 do PR-1,j: aR-1,j = aR-1,j + aR-1,j-1 return aR-1, C-1 end Tempo parallelo R+C S a AA 2010 - 2011 8 8
Somma su albero binario (1) Con n foglie e 2n-1 processori Input alle foglie output alla radice Numerazione dalla radice alle foglie Somma(x) begin for i = n to 2n-1 pardo Pi: ai = read() /* input alle foglie */ for i = log n -1 to 0 do for j = 2i to 2i+1-1 pardo Pj: aj = a2j + a2j+1 return a1 end Tempo parallelo logaritmico X1+…+x4 X1+x2 X3+x4 X5+…+x8 X5+x6 X7+x8 X1+…+x8 x1 x2 x3 x5 x6 x7 x8 P2 P1 P4 P8 P5 P6 P7 P3 P15 AA 2010 - 2011 9 9
Somma su albero binario (2) Con n foglie e 2n-1 processori Input alle foglie output alla radice Numerazione dalle foglie alla radice Somma(x) begin for i = 1 to n pardo Pi: ai = read() /* input alle foglie */ for i = log n -1 to 0 do for j = 2i to 2i+1-1 pardo P2n-j: a2n-j = a2n-2j + a2n-(2j+1) return a1 end Tempo parallelo logaritmico X1+…+x4 X1+x2 X3+x4 X5+…+x8 X5+x6 X7+x8 X1+…+x8 x1 x2 x3 x5 x6 x7 x8 P13 P15 P9 P1 P10 P11 P12 P14 P8 AA 2010 - 2011 10 10
Si adoperano n=2d processori Somma su ipercubo Si adoperano n=2d processori Ciascun processore ha un proprio valore nella variabile a Somma_Ipercubo() begin for i = d-1 to 0 do for j = 0 to 2i-1 pardo Pj: aj = aj + aj+2i return a0 end Tempo parallelo d = log n S a2 a3 a0 a1 a6 a7 a4 a5 AA 2010 - 2011 11 11
Caricare n valori distinti in un vettore Si adoperano N processori begin for h = 0 to N-1 do for i = 0 to h pardo Pi: if (i = 0) then a0 = read(); b0 = a0 else ai = ai-1; bi = ai end Poiché bisogna caricare N elementi il tempo è pari a N c b a AA 2010 - 2011 12 12
Caricare RxC valori distinti in una mesh Si adoperano RxC processori begin for k = 1 to R do for h = 0 to C-1 do for j = 0 to h pardo P0,j: if (j = 0) then a0,0 = read(); b0,0 = a0,0 else a0,j = a0,j-1; b0,j = a0,j if (k < R) then for i = 1 to k pardo for j = 0 to C-1 pardo Pi,j: ai,j = ai-1,j; bi,j = ai,j end Poiché bisogna caricare RC elementi il tempo è pari a RC c b a f e d a i h g l k j f e d g a AA 2010 - 2011 13 13