estratégias pipelined. estratégias pipelined o problema é dividido em uma série de tarefas que...

39
Estratégias Pipelined

Upload: internet

Post on 16-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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

Estratégias Pipelined

Page 2: 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

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

Page 3: 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

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];

Page 4: 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

Pipeline para um loop desdobrado

sin sout

a

a[0]

sin sout

a

a[1]

sin sout

a

a[2]

sin sout

a

a[3]

sin sout

a

a[4]

sum

Page 5: 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

Filtrando um sinal

fin fout

f0

Sinal sem a freqüência

f0

fin fout fin fout fin fout fin foutf(t)f1 f2 f3 f4

Sinal sem a freqüência

f1

Sinal sem a freqüência

f2

Sinal sem a freqüência

f3

Sinal filtrado

Page 6: 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

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

Page 7: 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

Diagrama espaço-tempo para tipo 1

Instância1

Instância2

Instância3

Instância4

Instância5

Instância6

Instância7

Instância1

Instância2

Instância3

Instância4

Instância5

Instância6

Instância7

Instância1

Instância2

Instância3

Instância4

Instância5

Instância6

Instância7

Instância1

Instância2

Instância3

Instância4

Instância5

Instância6

Instância7

Instância1

Instância2

Instância3

Instância4

Instância5

Instância6

Instância1

Instância2

Instância3

Instância4

Instância5

Tempo

P0

P1

P2

P3

P4

P5

p - 1 m

Page 8: 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

Diagrama espaço-tempo alternativo

Tempo

P0 P1 P2 P3 P4

P0 P1 P2 P3 P4

P5

P5

P0 P1 P2 P3 P4 P5

P0 P1 P2 P3 P4 P5

P0 P1 P2 P3 P4 P5

Instância 0

Instância 1

Instância 2

Instância 3

Instância 4

Page 9: 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

Diagrama espaço-tempo para tipo 2

Seqüência de dados: d9d8d7d6d5d4d3d2d1d0

d0 d1 d2 d3 d4 d5 d6 d7 d8 d9

d0 d1 d2d3 d4 d5 d6 d7 d8

d9

d0 d1d2 d3 d4 d5 d6 d7 d8

d9

d0 d1d2 d3 d4 d5 d6 d7 d8

d9

d0 d1d2 d3 d4 d5 d6 d7 d8

d9

d0 d1d2 d3 d4 d5 d6 d7 d8

d9

d0 d1d2 d3 d4 d5 d6 d7 d8

d9

d0 d1d2 d3 d4 d5 d6 d7 d8

d9

d0 d1d2 d3 d4 d5 d6 d7 d8

d9

d0 d1d2 d3 d4 d5 d6 d7 d8

d9

Tempo

P0

P1

P2

P3

P4

P5

P6

P7

P8

P9

p-1 n

Page 10: 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

Diagrama espaço-tempo para tipo 3

P0

P1

P2

P3

P4

P5

Tempo

Transferênciade informaçãosuficiente para

iniciar novatarefa

P0

P1

P2

P3

P4

P5

Tempo

Page 11: 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

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

P0 P1 P2 P3 P4 P5 P6 P7 P8

Processador 1 Processador 2 Processador 3

Page 12: 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

Plataforma computacional para aplicações pipelined

Computadorhost

Multiprocessador

Page 13: 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

Soma com pipeline

P0 P2 P3 P4P1

1

i 2

1

i 3

1

i 4

1

i 5

1

i

Page 14: 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

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

accumulation = accumulation + number;

Page 15: 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

Programa SPMD

• Pseudo-códigoIf (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

Page 16: 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

Adição de números com processo mestre e configuração em anel

dn-1...d2d1d0 P0 P1 Pn-1

Escravos

sum

Processo mestre

Page 17: 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

Adição de números com acesso direto aos processos escravos

P0 P1 Pn-1

Escravos

sum

Processo mestre

Númerosdn-1d1d0

Page 18: 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

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:

m

tt

pm

pmttt

t

totala

commcomptotal

total

:por dado é computação de médio tempoO

pipeline de estágios e problema do instâncias existem onde

)1)((

ciclos) de númeropipeline)( de ciclo um para (tempo

Page 19: 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

Análise de complexidade

• Para uma instância

• Para múltiplas instâncias: um ciclo de pipeline

)(deComplexida

)1)(2(

)(2

1

nO

nttt

ttt

t

datastartuptotal

datastartupcomm

comp

1)(2

)1)(1)(2(

datastartuptotal

a

datastartuptotal

ttm

tt

nmttt

Page 20: 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

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

)1)()(2(

)(2

dnmdttt

ttt

dt

datastartuptotal

datastartupcomm

comp

Page 21: 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

Ordenação por inserção

5 4 3 2 15 4 3 2

5 4 3 1

5 4 2

5 3 1

5 2

5 2

5

5

1

2

13

24

3

10

1

2

12

4

3

7

6

5 1

98

44,3

4,3,1

4,3,1,2

4,3,1,2,5

P0P1 P2 P3 P4

Page 22: 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

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.

Page 23: 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

Pipeline para inserção

xmax

compara

P0 P1 P2

Maior número Próximo maior número

Menores números

Série de númerosxn-1...x1x0

Page 24: 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

Ordenação utilizando configuração bidirecional

dn-1...d2d1d0 P0 P1 Pn-1

Escravos

sum

Processo mestre

Page 25: 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

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

for (j = 0; j < right_procno; j++) {

recv(&number, Pi+1);

send (&number, Pi-1);

}

Page 26: 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

Análise de complexidade

)12))((21()12)((

)(2

1

Paralelo2

)1(12...)2()1(

Seqüencial

nttnttt

ttt

t

nnnnt

datastartupcommcomptotal

datastartupcomm

comp

s

Page 27: 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

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

n

n

Page 28: 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

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 12 n 13 n

)(:seqüencial deComplexida

1...15

13

12

2nO

n

nnnnts

Page 29: 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

Análise de complexidade

• Existem múltiplos de 2, múltiplos de 3 12 n 13 n

)(:seqüencial deComplexida

1...15

13

12

2nO

n

nnnnts

Page 30: 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

Pipeline para geração de números primos

Comparamúltiplos

P0 P1 P2

Primeironúmeroprimo

Segundonúmeroprimo

Números não múltiplosdo primeiro número primo

Série de númerosxn-1...x1x0

Terceironúmeroprimo

Page 31: 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

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çãorecv(&x, Pi-1);

for (i = 0; i < n; i++) {

recv(&number, Pi-1);

if (number == terminator) break;

if (number % x ) != 0) send (&number, Pi+1);

}

Page 32: 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

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:

000

111,100,1

222,211,200,2

111,122,111,100,1

.

.

...

bxa

bxaxa

bxaxaxa

bxaxaxaxa nnnnnnn

Page 33: 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

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:

0,0

00 a

bx

1,1

00,111 a

xabx

2,2

11,200,222 a

xaxabx

Page 34: 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

Solução utilizando pipeline

Calcula x0 Calcula x1 Calcula x2 Calcula x3

x0x0

x0x0

x1x1x2

x1x2x3

P0 P1 P2 P3

Page 35: 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

Solução utilizando pipeline

• O processo i recebe os valores x0,x1,x2,...,xi-1 e calcula xi

através da equação:

ii

i

jjjii

i a

xab

x,

1

0,

Page 36: 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

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];

}

Page 37: 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

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

}

Page 38: 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

Diagrama espaço-tempo para processo pipeline para resolução de sistemas lineares

P0

P1

P2

P3

P4

P5

Tempo

Passou primeirovalor adiante

Valor finalcalculado

Page 39: 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

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