Carregar apresentação
A apresentação está carregando. Por favor, espere
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 P0 P1 P2 P3 P4 P5
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
sum sin sout sin sout sin sout sin sout sin sout
5
Filtrando um sinal Sinal sem a freqüência f0 Sinal sem a freqüência f1
filtrado f0 f1 f2 f3 f4 f(t) fin fout fin fout fin fout fin fout fin fout
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 P4 Instância 1 Instância 2 Instância 3 Instância 4 Instância 5 Instância 6 P3 Instância 1 2 3 4 5 6 7 P2 Instância 1 Instância 2 Instância 3 Instância 4 Instância 5 Instância 6 Instância 7 P1 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 P0 Tempo
8
Diagrama espaço-tempo alternativo
Instância 0 P0 P1 P2 P3 P4 P5 Instância 1 P0 P1 P2 P3 P4 P5 Instância 2 P0 P1 P2 P3 P4 P5 Instância 3 P0 P1 P2 P3 P4 P5 Instância 4 Tempo
9
Diagrama espaço-tempo para tipo 2
Seqüência de dados: d9d8d7d6d5d4d3d2d1d0 p-1 n P9 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 P8 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 P7 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 P6 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 P5 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 P4 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 P3 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 P2 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 P1 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 P0 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 Tempo
10
Diagrama espaço-tempo para tipo 3
Transferência de informação suficiente para iniciar nova tarefa P3 P3 P2 P2 P1 P1 P0 P0 Tempo 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 Processador 1 Processador 2 Processador 3 P0 P1 P2 P3 P4 P5 P6 P7 P8
12
Plataforma computacional para aplicações pipelined
Multiprocessador Computador host
13
Soma com pipeline P0 P1 P2 P3 P4
14
Pseudo-código O código básico para o processador Pi:
recv(&accumulation, Pi-1); accumulation = accumulation + number; send(&accumulation, Pi+1); Para o processador P0: send(&number, P1); Para o processador Pn-1: recv(&number, Pn-2);
15
Programa SPMD Pseudo-código O resultado final está no último processo
If (proces > 0) { recv(&accumulation, Pi-1); accumulation = accumulation + number; } if (process < n-1) send(&accumulation, Pi+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
Escravos dn-1...d2d1d0 P0 P1 Pn-1 sum
17
Adição de números com acesso direto aos processos escravos
Processo mestre Números Escravos dn-1 d0 d1 P0 P1 Pn-1 sum
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
4,3,1,2,5 1 2 4,3,1,2 5 2 3 4,3,1 5 1 4 4,3 5 2 3 1 5 4 5 2 4 2 6 5 3 1 3 1 7 5 4 2 2 8 5 4 3 1 1 9 5 4 3 2 10 5 4 3 2 1
22
Pseudo-código O algoritmo básico para o processo Pi é:
recv(&number, Pi-1); if (number > x) { send (&x, Pi+1); x = number; } else send (&number, Pi+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
Menores números P1 P2 Série de números xn-1...x1x0 compara xmax Próximo maior número Maior número
24
Ordenação utilizando configuração bidirecional
Processo mestre Escravos dn-1...d2d1d0 P0 P1 Pn-1 sum
25
Pseudo-código right_procno=n-i-1; recv(&x, Pi-1);
for (j = 0; j < right_procno; j++) { recv(&number, Pi-1); if (number > x) { send (&x, Pi+1); x = number; } else send (&number, Pi+1); send (&x, Pi-1); recv(&number, Pi+1); send (&number, Pi-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 Análise de complexidade 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
Números não múltiplos do primeiro número primo P0 P1 P2 Série de números xn-1...x1x0 Compara múltiplos Primeiro número primo Segundo número primo Terceiro número primo
31
Pseudo-código Para cada processador Pi:
recv(&x, Pi-1); recv(&number, Pi-1); if ((number %x) != 0 ) send (&number, Pi+1); Como a quantidade de números não é a mesma e é desconhecida para cada processador, utiliza-se uma mensagem de finalização for (i = 0; i < n; i++) { if (number == terminator) break; if (number % x ) != 0) send (&number, Pi+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 x0 da última equação: Esse valor é substituído na próxima equação para encontrar x1 E assim por diante:
34
Solução utilizando pipeline
x0 x0 x0 Calcula x0 x0 Calcula x1 Calcula x2 Calcula x3 x1 x1 x1 x2 x2 x3
35
Solução utilizando pipeline
O processo i recebe os valores x0,x1,x2,...,xi-1 e calcula xi 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], Pi-1);
send (&x[j], Pi+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], Pi+1);
38
Diagrama espaço-tempo para processo pipeline para resolução de sistemas lineares
Valor final calculado P3 P2 P1 Passou primeiro valor adiante P0 Tempo
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.