estratégias pipelined. estratégias pipelined o problema é dividido em uma série de tarefas que...
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