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

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

Estratégias Pipelined. Estratégias pipelined O problema é dividido em uma série de tarefas que devem ser completadas uma após a outra Cada tarefa é executada.

Apresentações semelhantes


Apresentação em tema: "Estratégias Pipelined. Estratégias pipelined O problema é dividido em uma série de tarefas que devem ser completadas uma após a outra Cada tarefa é executada."— Transcrição da apresentação:

1 Estratégias Pipelined

2 Estratégias pipelined O problema é dividido em uma série de tarefas que devem ser completadas uma após a outra Cada tarefa é executada por um processo separado ou processador P0P0 P1P1 P2P2 P3P3 P4P4 P5P5

3 Exemplo Somar todos os elementos de um array a em uma soma acumulativa for (i=0; i < n; i++) sum = sum + a[i]; O loop pode ser desdobrado em: sum = sum + a[0]; sum = sum + a[1]; sum = sum + a[2]; sum = sum + a[3]; sum = sum + a[4];

4 Pipeline para um loop desdobrado s in s out a a[0] s in s out a a[1] s in s out a a[2] s in s out a a[3] s in s out a a[4] sum

5 Filtrando um sinal f in f out f0f0 Sinal sem a freqüência f 0 f in f out f in f out f in f out f in f out f(t) f1f1 f2f2 f3f3 f4f4 Sinal sem a freqüência f 1 Sinal sem a freqüência f 2 Sinal sem a freqüência f 3 Sinal filtrado

6 Utilização de pipeline Dado que um determinado problema pode ser dividido em uma série de tarefas seqüenciais, a estratégia de pipeline pode ser utilizada para aumentar a velocidade de processamento em três casos: 1.Se mais de uma instância do problema completo deve ser executada 2.Se uma série de dados deve ser processada e cada um dos dados requer múltiplas operações 3.Se a informação para iniciar a próxima tarefa pode ser passada a frente antes que o processo que a gera tenha completado todas as suas operações internas

7 Diagrama espaço-tempo para tipo 1 Instância 1 Instância 2 Instância 3 Instância 4 Instância 5 Instância 6 Instância 7 Instância 1 Instância 2 Instância 3 Instância 4 Instância 5 Instância 6 Instância 7 Instância 1 Instância 2 Instância 3 Instância 4 Instância 5 Instância 6 Instância 7 Instância 1 Instância 2 Instância 3 Instância 4 Instância 5 Instância 6 Instância 7 Instância 1 Instância 2 Instância 3 Instância 4 Instância 5 Instância 6 Instância 1 Instância 2 Instância 3 Instância 4 Instância 5 Tempo P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 p - 1 m

8 Diagrama espaço-tempo alternativo Tempo P0P0 P1P1 P2P2 P3P3 P4P4 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P5P5 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 Instância 0 Instância 1 Instância 2 Instância 3 Instância 4

9 Diagrama espaço-tempo para tipo 2 Seqüência de dados: d 9 d 8 d 7 d 6 d 5 d 4 d 3 d 2 d 1 d 0 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5 d6d6 d7d7 d8d8 d9d9 Tempo P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 P8P8 P9P9 p-1 n

10 Diagrama espaço-tempo para tipo 3 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 Tempo Transferência de informação suficiente para iniciar nova tarefa P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 Tempo

11 Particionando processos entre processadores Se o número de estágios é maio que o número de processadores, um grupo de estágios pode ser designado para cada um dos processadores P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 P8P8 Processador 1 Processador 2Processador 3

12 Plataforma computacional para aplicações pipelined Computador host Multiprocessador

13 Soma com pipeline P0P0 P2P2 P3P3 P4P4 P1P1

14 Pseudo-código O código básico para o processador P i : recv(&accumulation, P i-1 ); accumulation = accumulation + number; send(&accumulation, P i+1 ); Para o processador P 0 : send(&number, P 1 ); Para o processador P n-1 : recv(&number, P n-2 ); accumulation = accumulation + number;

15 Programa SPMD Pseudo-código If (proces > 0) { recv(&accumulation, P i-1 ); accumulation = accumulation + number; } if (process < n-1) send(&accumulation, P i+1 ); O resultado final está no último processo Outras operações aritméticas podem ser executadas

16 Adição de números com processo mestre e configuração em anel d n-1...d 2 d 1 d 0 P0P0 P1P1 P n-1 Escravos sum Processo mestre

17 Adição de números com acesso direto aos processos escravos P0P0 P1P1 P n-1 Escravos sum Processo mestre Números d n-1 d1d1 d0d0

18 Análise de complexidade O primeiro exemplo é do tipo 1 e cada processo executa ações similares em cada ciclo de pipeline Tempo total de execução:

19 Análise de complexidade Para uma instância Para múltiplas instâncias: um ciclo de pipeline

20 Particionamento de dados com múltiplas instâncias do problema Aumentando a partição de dados d, o impacto na comunicação diminui, mas diminui o paralelismo e aumenta o tempo de execução

21 Ordenação por inserção ,3 4,3,1 4,3,1,2 4,3,1,2,5 P0P0 P1P1 P2P2 P3P3 P4P4

22 Pseudo-código O algoritmo básico para o processo P i é: recv(&number, P i-1 ); if (number > x) { send (&x, P i+1 ); x = number; } else send (&number, P i+1 ); Com n números, o processo i aceita n-1 números e passa a frente n-i-1 números.

23 Pipeline para inserção x max compara P0P0 P1P1 P2P2 Maior número Próximo maior número Menores números Série de números x n-1...x 1 x 0

24 Ordenação utilizando configuração bidirecional d n-1...d 2 d 1 d 0 P0P0 P1P1 P n-1 Escravos sum Processo mestre

25 Pseudo-código right_procno=n-i-1; recv(&x, P i-1 ); for (j = 0; j < right_procno; j++) { recv(&number, P i-1 ); if (number > x) { send (&x, P i+1 ); x = number; } else send (&number, P i+1 ); send (&x, P i-1 ); for (j = 0; j < right_procno; j++) { recv(&number, P i+1 ); send (&number, P i-1 ); }

26 Análise de complexidade

27 Geração de números primos - Método de Eratóstenes Para encontrar os números primos entre 2 e n, gera-se a série de todos os números até n O número 2 é o primeiro número primo e todos os múltiplos de 2 são removidos da lista, pois não podem ser primos Considera-se o próximo número da lista e removem-se seus múltiplos até chegar a n Somente se analisam os números até, porque os números maiores que já foram examinados

28 Código seqüencial for (i =2; i < n; i++) prime[i] = 1; for (i =2; i < =sqrt_n; i++) if (prime[i] == 1) for (j = i + 1; j < n; j = j + i) prime[j] = 0; Análise de complexidade –Existem múltiplos de 2, múltiplos de 3

29 Análise de complexidade Existem múltiplos de 2, múltiplos de 3

30 Pipeline para geração de números primos Compara múltiplos P0P0 P1P1 P2P2 Primeiro número primo Segundo número primo Números não múltiplos do primeiro número primo Série de números x n-1...x 1 x 0 Terceiro número primo

31 Pseudo-código Para cada processador P i : recv(&x, P i-1 ); recv(&number, P i-1 ); if ((number %x) != 0 ) send (&number, P i+1 ); Como a quantidade de números não é a mesma e é desconhecida para cada processador, utiliza-se uma mensagem de finalização recv(&x, P i-1 ); for (i = 0; i < n; i++) { recv(&number, P i-1 ); if (number == terminator) break; if (number % x ) != 0) send (&number, P i+1 ); }

32 Resolvendo um sistema de equações lineares Exemplo do tipo 3, os processos podem continuar depois de passar informação Exemplo: –resolver sistema de equações lineares da forma triangular superior:

33 Resolução por substituição Encontra-se primeiro x 0 da última equação: Esse valor é substituído na próxima equação para encontrar x 1 E assim por diante:

34 Solução utilizando pipeline Calcula x 0 Calcula x 1 Calcula x 2 Calcula x 3 x0x0 x0x0 x0x0 x0x0 x1x1 x1x1 x2x2 x1x1 x2x2 x3x3 P0P0 P1P1 P2P2 P3P3

35 Solução utilizando pipeline O processo i recebe os valores x 0,x 1,x 2,...,x i-1 e calcula x i através da equação:

36 Código seqüencial x[0] = b[0]/a[0][0]; for (i = 1; i < n; i++) { sum = 0; for (j = 0; j < i; j++) sum = sum + a[i][j]*x[j]; x[i] = (b[i] - sum)/a[i][i]; }

37 Código paralelo for (j = 0; i< j; j++) { recv(&x[j], P i-1 ); send (&x[j], P i+1 ); } sum = 0; for (j = 0; j < i; j++) sum = sum + a[i][j]*x[j]; x[i] = (b[i] - sum)/a[i][i]; send (&x[i], P i+1 ); }

38 Diagrama espaço-tempo para processo pipeline para resolução de sistemas lineares P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 Tempo Passou primeiro valor adiante Valor final calculado

39 Análise de complexidade Não pode assumir que o esforço computacional será o mesmo em todos os estágios do pipeline O primeiro processo executa uma divisão e um envio de mensagem O processo i executa i envios e i recebimentos de mensagens, i multiplicações/adições, uma divisão/subtração e um envio final, em um total de 2i+1 tempos de comunicação e 2i+2 passos de computação O último processo executa n-1 recebimentos, n-1 multiplicações/somas e uma divisão/subtração, totalizando n-1 tempos de comunicação e 2n-1 passos de computação


Carregar ppt "Estratégias Pipelined. Estratégias pipelined O problema é dividido em uma série de tarefas que devem ser completadas uma após a outra Cada tarefa é executada."

Apresentações semelhantes


Anúncios Google