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

Post on 16-Apr-2015

103 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 por um processo separado ou processador

P0 P1 P2 P3 P4 P5

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

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

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

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

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

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

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

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

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

Plataforma computacional para aplicações pipelined

Computadorhost

Multiprocessador

Soma com pipeline

P0 P2 P3 P4P1

1

i 2

1

i 3

1

i 4

1

i 5

1

i

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;

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

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

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

Escravos

sum

Processo mestre

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

P0 P1 Pn-1

Escravos

sum

Processo mestre

Númerosdn-1d1d0

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

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

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

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

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.

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

Ordenação utilizando configuração bidirecional

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

Escravos

sum

Processo mestre

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

}

Análise de complexidade

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

)(2

1

Paralelo2

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

Seqüencial

nttnttt

ttt

t

nnnnt

datastartupcommcomptotal

datastartupcomm

comp

s

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

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

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

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

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

}

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

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

Solução utilizando pipeline

Calcula x0 Calcula x1 Calcula x2 Calcula x3

x0x0

x0x0

x1x1x2

x1x2x3

P0 P1 P2 P3

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,

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

}

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

}

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

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

top related