Estratégias de Particionamento e Divisão e Conquista.
Transcript of Estratégias de Particionamento e Divisão e Conquista.
![Page 1: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/1.jpg)
Estratégias de Particionamento e Divisão e Conquista
![Page 2: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/2.jpg)
Estratégias de particionamento
• Divide o problema em partes
• Exemplo: – Soma de uma seqüência de números: divide a seqüência em m partes e as soma de forma independente
criando somas parciais
+ +
+
+
x0…x(n/m)-1 xn/m…x(2n/m)-1 x(m-1)n/m…xn-1
Somas parciais
Soma
![Page 3: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/3.jpg)
Utilizando send()s e receive()s separados
• Mestres = n/m;
for (i=0, x=0; i < m; i++, x=x+s)
send (&numbers[x], s, Pi);
sum = 0;
for (i=0; i < m; i++) {
recv(&part_sum, Pany);
sum=sum+part_sum; }
• Escravorecv(numbers, s, Pmaster);
part_sum=0;
for (i=0; i < s; i++)
part_sum=part_sum+numbers[i];
send (&part_sum,Pmaster);
}
![Page 4: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/4.jpg)
Utilizando rotina broadcast()• Mestre
s = n/m;
bcast(numbers, s, Pslave_group);
sum = 0;
for (i=0; i < m; i++) {
recv(&part_sum, Pany);
sum=sum+part_sum; }
• Escravobcast(numbers, s, Pmaster);
start=slave_number * s;
end=start + s;
part_sum=0;
for (i=start; i < end; i++)
part_sum=part_sum+numbers[i];
send (&part_sum,Pmaster);
}
![Page 5: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/5.jpg)
Utilizando rotinas scatter() e reduce()
• Mestres = n/m;
scatter(numbers, &s, Pgroup,root=master);
reduce_add(&sum, &s,Pgroup,root=master);
• Escravoscatter(numbers, &s, Pgroup,root=master);
.
.
reduce_add (&part_sum,&s, Pgroup,root=master);
![Page 6: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/6.jpg)
Análise de complexidade
• Seqüencial: n-1 somas
• Paralela: Utilizando rotinas send e receive
– Fase 1: Comunicação
– Fase 2: Computação
– Fase 3: Comunicação: retorno dos resultados parciais
– Fase 4: Computação: acumulação final
– Tempo total de execução: Pior que seqüencial
)(nOts
)(1 datastartupcomm tmntmt
11 mntcomp
)(2 datastartupcomm ttmt
12 mtcomp
)(2)(2 mnOmnmtmnmtt datastartupp
![Page 7: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/7.jpg)
Divisão e conquista
• Divide o problema em subproblemas que são da mesma forma que o problema maior e divisões posteriores podem ser realizadas por recursão
• Exemplo– Uma definição recursiva seqüencial para adicionar uma lista de númerosint add (int *s){ if (number(s) <= 2) return (n1 + n2); else { divide (s, s1, s2); part_sum1 = add(s1); part_sum2 = add(s2); return(part_sum1 + part_sum2); }}
![Page 8: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/8.jpg)
Construção da árvore
Problema inicial
Divide oproblema
Tarefas finais
![Page 9: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/9.jpg)
Implementação paralela
Lista original
P0
P0
P0
P4
P2 P6P4
P3 P4 P5 P6 P7P2P1P0
x0 xn-1
![Page 10: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/10.jpg)
Implementação paralela
P3 P4 P5 P6 P7P2P1P0
P0 P2 P6P4
P0
x0 xn-1
Soma final
P0 P4
![Page 11: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/11.jpg)
Código paralelo
• Suponha que foram criados 8 processos estáticamenteProcesso P0
divide(s1, s1, s2);send(s2, P4);divide(s1, s1, s2);send(s2, P2); divide(s1, s1, s2);send(s2, P1);part_sum = *s1;recv(&part_sum1, P1);part_sum=part_sum + part_sum1;recv(&part_sum1, P2);part_sum=part_sum + part_sum1;recv(&part_sum1, P4);part_sum=part_sum + part_sum1;
![Page 12: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/12.jpg)
Código paralelo
Processo P4
recv(s1, P0);divide(s1, s1, s2);send(s2, P6); divide(s1, s1, s2);send(s2, P5);part_sum = *s1;recv(&part_sum1, P5);part_sum=part_sum + part_sum1;recv(&part_sum1, P6);part_sum=part_sum + part_sum1;send(&part_sum, P0);
![Page 13: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/13.jpg)
Análise de complexidade• Assuma que n é uma potência de 2 e tstartup não é
incluído– Fase 1: Comunicação - Divisão
– Fase 2: Combinação
– Fase 3: Tempo total de comunicação
– Computação
– Tempo total
datadatadatadatadatacomm tp
pnt
p
nt
nt
nt
nt
)1(...
8421
ptt datacomm log2
pttp
pnttt datadatacommcommcomm log
)1(21
pp
ntcomp log
pp
nptt
p
pnt datadatap loglog
)1(
![Page 14: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/14.jpg)
Árvore para operador OR
OR
OR OR
Achou/Não achou
![Page 15: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/15.jpg)
Dividir e conquistar M-ário
• As tarefas são divididas em mais de uma parte em cada estágio
• Exemplo: Uma tarefa é quebrada em 4 partes. A definição recursiva poderia ser
int add (int *s)
{ if (number(s) <= 4) return (n1 + n2+n3+n4); else { divide (s, s1, s2,s3,s4); part_sum1 = add(s1); part_sum2 = add(s2); part_sum3 = add(s3); part_sum4 = add(s4); return(part_sum1 + part_sum2+part_sum3 + part_sum4); }}
![Page 16: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/16.jpg)
Exemplos utilizando divisão e conquista
• Ordenação utilizando bucket sort– O intervalo de números é dividido em m regiões iguais, 0 até a/m-1, a/m
até 2a/m-1, 2a/m até 3a/m-1, …
– Um balde ( bucket) é designado para armazenar os números que estão em uma determinada região
– Os números são colocados nos baldes associados
– Os números de cada balde serão ordenados através de um algoritmo de ordenação seqüencial
– Funciona bem, se números estiverem distribuídos de forma uniforme em um intervalo conhecido 0 até a-1
![Page 17: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/17.jpg)
Bucket sort
Baldes
Ordenação do conteúdodos baldesListas concatenadas
Números desordenados
Números ordenados
![Page 18: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/18.jpg)
Análise de complexidade para o bucket sort
• Tempo seqüencial
• Tempo paralelo– Designando um processador para cada balde, teremos que o segundo
termo da equação acima será reduzido para quando forem utilizados p processadores, onde p=m.
))log(()log())log()(( mnnOmnnnmnmnmnts
)log()( pnpn
![Page 19: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/19.jpg)
Uma versão paralela para o bucket sort
Baldes
Ordenação do conteúdodos baldesListas concatenadas
Números desordenados
Números ordenados
p processadores
![Page 20: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/20.jpg)
Maior paralelização
• Particiona a seqüência em m regiões, uma para cada processador
• Cada processador mantém p baldes pequenos e separa os números nas suas regiões nos seus próprios baldes menores
• Esses baldes menores são esvaziados nos p baldes finais, que requer que cada processador envie um balde pequeno para cada um dos outros processadores (balde i para processador i)
![Page 21: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/21.jpg)
Versão paralela do bucket sort
Baldesgrandes
Ordenação do conteúdodos baldesListas concatenadas
Números desordenados
Números ordenados
p processadores
n/m números
Baldespequenos
Esvazia baldespequenos
![Page 22: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/22.jpg)
Análise de complexidade– Fase 1: Computação e Comunicação - Particionando os números
– Fase 2: Computação (ordenação nos baldes menores)
– Fase 3: Comunicação (envio para os baldes maiores)
– Computação (ordenação nos baldes maiores)
– Tempo total
datastartupcomm
comp
nttt
nt
1
1
pntcomp 2
))()(1( 23 datastartupcomm tpntpt
)log()(4 pnpntcomp
)log()())()(1( 2 pnpntpntppnnttt datastartupdatastartupp
![Page 23: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/23.jpg)
Uso da rotina all-to-all na fase 3
0 n-1 0 n-1
Processo 1 Processo n-1
Processo 0
0 n-1 0 n-1
Processo 0 Processo n-2
Processo n-1
Buffer deenvio
Buffer derecebimento
Buffer deenvio
![Page 24: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/24.jpg)
Efeito da rotina all-to-all
A0,0 A0,1 A0,2 A0,3
A1,0 A1,1 A1,2 A1,3
A2,0 A2,1 A2,2 A2,3
A3,0 A3,1 A3,2 A3,3
A0,0 A1,0 A2,0 A3,0
A0,1 A1,1 A2,1 A3,1
A0,2 A12 A2,2 A3,2
A0,3 A1,3 A2,3 A3,3
![Page 25: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/25.jpg)
Integração numérica
• Uma técnica geral de divisão e conquista consiste em dividir a região continuamente em partes e existe uma função de otimização que decide quando certas regiões estão suficientemente divididas
• Exemplo: – Integração numérica: divide a área em partes separadas e cada uma delas
pode ser calculada por um processo separado
b
adxxfI )(
![Page 26: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/26.jpg)
Integração numérica utilizando retângulos
• Cada região pode ser calculada por uma aproximação utilizando retângulos
a p q b x
f(p) f(q)
f(x)
![Page 27: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/27.jpg)
Integração numérica utilizando retângulos (uma aproximação melhor)
• Alinhamento dos retângulos
a p q b x
f(p) f(q)
f(x)
![Page 28: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/28.jpg)
Integração numérica utilizando o método trapezoidal
a p q b x
f(p) f(q)
f(x)
![Page 29: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/29.jpg)
Designação estática
• Pseudo código SPMDProcesso Pi
if (i == master) { printf (“Entre com o número de intervalos “); scanf (“%d”, &n);}bcast(&n, Pgroup);region = (b-a)/p;start=a + region * i;end = start + region;d=(b-a)/n;area=0.0;for (x = start; x <end; x = x+d) area = area +f(x) + f(x+d);area=0.5 * area * d;reduce_add(&integral, &area, Pgroup);
![Page 30: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/30.jpg)
Método da quadratura adaptativa
• Solução se adapta ao formato da curva
• Exemplo:– Utilize 3 áreas A, B e C. A computação termina quando a área calculada
para a maior das regiões entre A e B tiver um valor suficientemente próximo à soma das áreas para as outras regiões
![Page 31: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/31.jpg)
Construção pelo método da quadratura adaptativa
f(x)
A B
C
![Page 32: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/32.jpg)
Método da quadratura adaptativa
f(x)
A B
A=B e C=0
![Page 33: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/33.jpg)
Problema dos N-corpos
• Encontrar as posições e movimentos de corpos no espaço que estão sujeitos a forças gravitacionais dos outros corpos segundo as leis de Newton
• A força gravitacional entre dois corpos de massas ma e mb é dada por
onde G é uma constante e r a distância entre os corpos
• Submetido a uma força um corpo acelera segundo a segunda Lei de Newton:
2r
mGmF ba
maF onde m é a massa do corpo, F a força a que
ele está submetido e a a aceleração resultante
![Page 34: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/34.jpg)
Problema dos N-corpos
• Seja o intervalo de tempo t. Então para um corpo com massa m, a força é dada por
• a nova velocidade por
• e a mudança de posição
• Depois que os corpos se movem para as novas posições, as forças mudam e o cálculo tem que ser repetido
m
tFvv tt
1
)( 1
t
vvmF
tt
tvxx tt 1
![Page 35: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/35.jpg)
Espaço tridimensional
• Temos as coordenadas (x,y,z) e a distância entre os corpos em (xa,ya,za) e (xb,yb,zb) é dada por
• e as forças são resolvidas nas 3 direções por
222 )()()( ababab zzyyxxr
r
zz
r
mGmF
r
yy
r
mGmF
r
xx
r
mGmF
abbaz
abbay
abbax
2
2
2
![Page 36: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/36.jpg)
Código seqüencial para N-corpos
for (t = 0; t , tmax; t++) {
for (i = 0; i < N; i++) {
F=Force_routine(i);
v[i]new = v[i[ + F * dt/m;
x[i]new = x[i] + v[i]new * dt;
}
for (i = 0; i < N; i++) {
x[i] = x[i]new;
v[i] = v[i]new;
}
}
![Page 37: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/37.jpg)
Código paralelo para N-corpos
• O algoritmo seqüencial tem complexidade O(n2) para cada iteração pois cada um dos N corpos é influenciado pelos outros N-1 corpos
• Não é possível utilizar o algoritmo seqüencial diretamente para os problemas mais interessantes onde N é grande
• A complexidade pode ser reduzida observando-se que um grupo de corpos distantes pode ser aproximado com um único corpo distante com a massa total dos corpos do grupo e situado no centro de massa do grupo
![Page 38: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/38.jpg)
Algoritmo Barnes-Hut
• Inicie com um espaço único no qual um cubo contém todos os corpos
• Divida esse cubo em 8 subcubos• Se um subcubo não contém corpos, o subcubo é retirado da lista
de subcubos a serem analisados• Se um subcubo contém mais de um corpo, ele é recursivamente
dividido em subcubos, até que cada subcubo contenha apenas um corpo
• Esse processo cria uma octtree, 8 arestas de cada nó• As folhas representam os subcubos com um corpo só• Em cada nó, armazenam-se a massa total e o centro de massa de
cada subcubo
![Page 39: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/39.jpg)
Algoritmo Barnes-Hut
• A força de cada corpo pode ser obtida atravessando a árvore construída a partir da raíz, parando quando a aproximação de agrupamento pode ser usada, isto é, quando:
• onde é uma constante tipicamente com valor 1.0 ou menor
• A complexidade para construção da árvore é O(nlogn), complexidade do método O(nlogn)
d
r
![Page 40: Estratégias de Particionamento e Divisão e Conquista.](https://reader035.fdocumentos.tips/reader035/viewer/2022062318/552fc0fd497959413d8baf06/html5/thumbnails/40.jpg)
Algoritmo Barnes -Hut