A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Estratégias de Particionamento e Divisão e Conquista.

Apresentações semelhantes


Apresentação em tema: "Estratégias de Particionamento e Divisão e Conquista."— Transcrição da apresentação:

1 Estratégias de Particionamento e Divisão e Conquista

2 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 x 0 …x (n/m)-1 x n/m …x (2n/m)-1 x (m-1)n/m …x n-1 Somas parciais Soma

3 Utilizando send()s e receive()s separados Mestre s = n/m; for (i=0, x=0; i < m; i++, x=x+s) send (&numbers[x], s, P i ); sum = 0; for (i=0; i < m; i++) { recv(&part_sum, P any ); sum=sum+part_sum; } Escravo recv(numbers, s, P master ); part_sum=0; for (i=0; i < s; i++) part_sum=part_sum+numbers[i]; send (&part_sum,P master ); }

4 Utilizando rotina broadcast() Mestre s = n/m; bcast(numbers, s, P slave_group ); sum = 0; for (i=0; i < m; i++) { recv(&part_sum, P any ); sum=sum+part_sum; } Escravo bcast(numbers, s, P master ); 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,P master ); }

5 Utilizando rotinas scatter() e reduce() Mestre s = n/m; scatter(numbers, &s, P group,root=master); reduce_add(&sum, &s,P group,root=master); Escravo scatter(numbers, &s, P group,root=master);. reduce_add (&part_sum,&s, P group,root=master);

6 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

7 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úmeros int 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); }

8 Construção da árvore Problema inicial Divide o problema Tarefas finais

9 Implementação paralela Lista original P0P0 P0P0 P0P0 P4P4 P2P2 P6P6 P4P4 P3P3 P4P4 P5P5 P6P6 P7P7 P2P2 P1P1 P0P0 x0x0 x n-1

10 Implementação paralela P3P3 P4P4 P5P5 P6P6 P7P7 P2P2 P1P1 P0P0 P0P0 P2P2 P6P6 P4P4 P0P0 x0x0 x n-1 Soma final P0P0 P4P4

11 Código paralelo Suponha que foram criados 8 processos estáticamente Processo P 0 divide(s1, s1, s2); send(s2, P 4 ); divide(s1, s1, s2); send(s2, P 2 ); divide(s1, s1, s2); send(s2, P 1 ); part_sum = *s1; recv(&part_sum1, P 1 ); part_sum=part_sum + part_sum1; recv(&part_sum1, P 2 ); part_sum=part_sum + part_sum1; recv(&part_sum1, P 4 ); part_sum=part_sum + part_sum1;

12 Código paralelo Processo P 4 recv(s1, P 0 ); divide(s1, s1, s2); send(s2, P 6 ); divide(s1, s1, s2); send(s2, P 5 ); part_sum = *s1; recv(&part_sum1, P 5 ); part_sum=part_sum + part_sum1; recv(&part_sum1, P 6 ); part_sum=part_sum + part_sum1; send(&part_sum, P 0 );

13 Análise de complexidade Assuma que n é uma potência de 2 e t startup 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

14 Árvore para operador OR OR Achou/ Não achou

15 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); }

16 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

17 Bucket sort Baldes Ordenação do conteúdo dos baldes Listas concatenadas Números desordenados Números ordenados

18 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.

19 Uma versão paralela para o bucket sort Baldes Ordenação do conteúdo dos baldes Listas concatenadas Números desordenados Números ordenados p processadores

20 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)

21 Versão paralela do bucket sort Baldes grandes Ordenação do conteúdo dos baldes Listas concatenadas Números desordenados Números ordenados p processadores n/m números Baldes pequenos Esvazia baldes pequenos

22 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

23 Uso da rotina all-to-all na fase 3 0 n-1 0 Processo 1 Processo n-1 Processo 0 0 n-1 0 Processo 0 Processo n-2 Processo n-1 Buffer de envio Buffer de recebimento Buffer de envio

24 Efeito da rotina all-to-all A 0,0 A 0,1 A 0,2 A 0,3 A 1,0 A 1,1 A 1,2 A 1,3 A 2,0 A 2,1 A 2,2 A 2,3 A 3,0 A 3,1 A 3,2 A 3,3 A 0,0 A 1,0 A 2,0 A 3,0 A 0,1 A 1,1 A 2,1 A 3,1 A 0,2 A 12 A 2,2 A 3,2 A 0,3 A 1,3 A 2,3 A 3,3

25 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

26 Integração numérica utilizando retângulos Cada região pode ser calculada por uma aproximação utilizando retângulos apq b x f(p)f(q) f(x)

27 Integração numérica utilizando retângulos (uma aproximação melhor) Alinhamento dos retângulos apq b x f(p)f(q) f(x)

28 Integração numérica utilizando o método trapezoidal apq b x f(p)f(q) f(x)

29 Designação estática Pseudo código SPMD Processo P i if (i == master) { printf (Entre com o número de intervalos ); scanf (%d, &n); } bcast(&n, P group ); region = (b-a)/p; start=a + region * i; end = start + region; d=(b-a)/n; area=0.0; for (x = start; x

30 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

31 Construção pelo método da quadratura adaptativa f(x) A B C

32 Método da quadratura adaptativa f(x) A B A=B e C=0

33 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 m a e m b é 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: onde m é a massa do corpo, F a força a que ele está submetido e a a aceleração resultante

34 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

35 Espaço tridimensional Temos as coordenadas (x,y,z) e a distância entre os corpos em (x a,y a,z a ) e (x b,y b,z b ) é dada por e as forças são resolvidas nas 3 direções por

36 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 ; }

37 Código paralelo para N-corpos O algoritmo seqüencial tem complexidade O(n 2 ) 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

38 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

39 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)

40 Algoritmo Barnes -Hut


Carregar ppt "Estratégias de Particionamento e Divisão e Conquista."

Apresentações semelhantes


Anúncios Google