Anda di halaman 1dari 52

PROCESSAMENTO PARALELO

AULA # 8
AVALIAO DE DESEMPENHO
EM PROGRAMAS PARALELOS

Universidade Estadual de Santa Cruz


Bacharelado em Cincia da Computao
Prof. Dany Sanchez Dominguez

INTRODUO
Ao criarmos um programa paralelo desejamos
resolver grandes problemas em curtos intervalos
de tempo.
Se nosso programas seriais fossem rpidos o
suficiente para resolver todos os problemas, no
enfrentaramos os desafios e dificuldades dos
programas paralelos.
At agora, temos discutido a criao de
programas paralelos, entretanto temos omitido
uma parte fundamental do processo: a estimao
do desempenho.

INTRODUO
Nesta aula, discutimos alguns mtodos para
estimar o desempenho de programas paralelos.
O desempenho de programas seriais
geralmente
estimado
utilizando
mtodos
asntoticos com resultados satisfatrios.
Infelizmente, mtodos asntoticos no so
apropriados para estimar o desempenho de
programas
paralelos,
porem
formulaes
empricas so geralmente utilizadas.

DESEMPENHO DE PROGRAMAS SERIAIS


Para um algoritmo dado, antes de escrever
qualquer linha de cdigo podemos obter uma
estimativa do desempenho do programa
envolvendo constantes simblicas arbitrrias (c1,
c2, ... , ck) pela estimao do nmero de
instrues executadas.
Ao escrever nosso programa, podemos substituir
as constantes simblicas com valores numricos,
validos para uma arquitetura, SO e compilador
em particular.

DESEMPENHO DE PROGRAMAS SERIAIS


Geralmente expressamos o tempo de execuo
de um programa serial T (n ) em funo do
tamanho de seus dados de entrada n .
Este enfoque apresenta algumas inconsistncias:
1. no considera as caractersticas do hardware que
ser utilizado (RISC, CISC, ...)
2. no considera a linguagem de programao e o
compilador utilizado (a forma em que as
instrues de alto nvel so convertidas em
linguagem de mquina)

DESEMPENHO DE PROGRAMAS SERIAIS


3. no considera detalhes dos dados de entrada,
alm de seu tamanho (existem algoritmos que
para o mesmo n tem comportamento diferente
dependendo da distribuio dos dados, ex:
algoritmos de ordenao, melhor caso, pior caso,
caso mdio)
Alm das inconsistncias mencionadas, a
contagem do nmero de instrues e os analises
asntoticos mostraram-se uteis para estimar
desempenho em programas seriais.

DESEMPENHO DE PROGRAMAS SERIAIS


Ilustramos os conceitos discutidos at agora com
um exemplo.
Exemplo: estimar o tempo de execuo do
programa serial da regra do trapzio
Algoritmo:
1. Leitura de dados [a, b] e n (nro. de trapzios)
2. computar rea de cada trapzio i, i=1...n-1
3. fazer a soma das reas
4. imprimir o resultado

DESEMPENHO DE PROGRAMAS SERIAIS


O ncleo do programa pode ser escrito na forma:
h = (b-a)/n;
integral = (f(a) + f(b))/2.0;
x = a;
for (i=1; i<n-1; i++){
x += h;
integral += f(x);
}
integral = integral * h;

O nmero de instrues antes e depois do lao


independem do nmero de trapzios n,
caracterizamos o tempo de execuo dessas
instrues pela constante c1.

DESEMPENHO DE PROGRAMAS SERIAIS


Consideramos que a avaliao da funo f(x)
requer um nmero constante de instrues,
ento a quantidade de instrues executadas em
cada passo do lao constante e pode ser
caracterizada por c2.
Podemos estimar o tempo de execuo como:
T (n ) = c1 + c2 ( n 1 )

Sendo T (n ) um polinmio linear de n, podemos


reagrupar a expresso anterior na forma:
T (n ) = k1n + k2

DESEMPENHO DE PROGRAMAS SERIAIS


Para este programa simples podemos considerar
que os tempos de execuo de cada instruo
so

aproximadamente

iguais

(instrues

aritmticas e de atribuio),
Consideramos ainda, que o nmero de instrues
dentro do lao muito maior que fora do lao

k1n  k2 , ento:
T (n ) k1n

DESEMPENHO DE PROGRAMAS SERIAIS


Baseado

na

expresso

anterior,

se

incrementarmos n em um fator r, esperamos que


T (n ) incremente no mesmo fator,
T (n ) = t
T (rn ) = rt

Realizamos tomadas de tempo para (f(x) = e-x^2,

a=-2 e b=2), os resultados so mostrados na


seguinte tabela.

DESEMPENHO DE PROGRAMAS SERIAIS


n

512

1024

1536

2048

T(n) em ms

11.4

22.8

34.2

45.6

os valores medidos confirmam a expresso


obtida,
utilizamos os valores medidos para calcular

k1=22.3x10-6
Em nossa analise temos omitido as operaes
I/O (scanf e printf),

DESEMPENHO DE PROGRAMAS SERIAIS


existem diferenas significativas no tempo de
execuo das operaes que utilizam apenas
CPU e RAM, e aquelas que envolvem
dispositivos I/O,
portanto, no recomendvel incluir operaes
I/O em analises como o anterior,
as operaes I/O devem ser tratadas
separadamente

T (n ) = Tcal (n ) + TIO (n )

no exemplo anterior (3 leituras, 1 impresso)

TIO (n ) = 1.2 ms

DESEMPENHO DE PROGRAMAS PARALELOS


Uma clara diferena entre o desempenho de
programas seriais e programas paralelos, que
o tempo de execuo de programas paralelos
depende de duas variveis: tamanho da
entrada n e nmero de processos p.

T (n ) T (n, p)
T (n, p) , o tempo transcorrido desde que o
primeiro processador comea a execuo, at
que o ltimo processador completa a execuo
da ltima instruo.

DESEMPENHO DE PROGRAMAS PARALELOS


Em muitos programas, T (n, p) simplesmente o
tempo de execuo do processo responsvel
pelas operaes de I/O do programa.
Para todos os analises que faremos a seguir,
assumimos que cada processo de nosso
programa executado no processador fsico
diferente (processos concorrentes?).
Geralmente, ao discutirmos desempenho de um
programas paralelo, comparamos ele com o
programa serial que resolve o mesmo problema.

DESEMPENHO DE PROGRAMAS PARALELOS


As

grandezas

mais

utilizadas

para

avaliar

desempenho de programas paralelos speedup e


eficincia.
Speedup: a razo do tempo de execuo do
programa serial T (n ) com o tempo de execuo
do programa paralelo T (n, p).

T (n )
S (n, p) =
T (n, p)

DESEMPENHO DE PROGRAMAS PARALELOS


para evitar ambigidades consideramos:

T (n ) tempo de execuo do programa serial


mais
rpido
executado
em
processador da mquina paralela,

um

T (n, p) tempo de execuo do programa paralelo


em p processadores da mquina paralela.
Para um valor fixo de p, temos que

0 < S (n, p) < p

DESEMPENHO DE PROGRAMAS PARALELOS


Se S (n, p) = p , teremos speedup linear, o qual
logicamente uma rara ocorrncia pois a
maioria das solues paralelas introduzem
alguma sobrecarga produto da comunicao
entre processos.
Se a comunicao entre processos for excessiva,
teramos uma sobrecarga muito grande, ento o
tempo de execuo do programa paralelo ser
maior que o do serial, situao indesejvel,
chamada de slowdown S (n, p) < 1 .

DESEMPENHO DE PROGRAMAS PARALELOS


Eficincia: a medida de utilizao dos
processos em um programa paralelo em relao
ao programa serial.

S (n, p)
T (n )
E (n, p) =
=
p
pT (n, p)
Se E (n, p) = 1 , o programa exibe speedup linear
SeE (n, p) = 1 p , o programa exibe slowdown.

DESEMPENHO DE PROGRAMAS PARALELOS


Em muitos momentos ao longo do curso,
temos dito que as operaes de comunicao,
assim
como
as
operaes
I/O
so
significativamente mais custosas que as
operaes locais de clculo.
Com o objetivo de fazer estimativas razoveis
de programas paralelos, o custo das operaes
de
comunicao
deve
ser
avaliado
separadamente das operao de clculo e I/O.
T (n, p) = Tcal (n, p) + TIO (n, p) + Tcom (n, p)

DESEMPENHO DE PROGRAMAS PARALELOS


Suponhamos o intercambio de mensagens
entre dois processos, o processo q envia uma
mensagem ao processo r.
As seguintes instrues esto envolvidas:
MPI_Send(messasge, count, datatype,
r, tag, comm);
MPI_Recv(messasge, count, datatype,
r, tag, comm, &status);

Os detalhes das operaes que so feita a


nvel de hardware dependem de mltiplos
fatores
(protocolos
de
comunicao,
arquitetura de mquinas paralelas, ...)

DESEMPENHO DE PROGRAMAS PARALELOS


Entretanto, na maioria dos sistemas as
seguintes fases so identificadas:
1. Fase de inicio
2. Fase de comunicao
3. Fase final
Fase de inicio: a mensagem copiada a uma
rea de memria (buff) controlada pelo
sistema
operacional,
so
anexadas

mensagem algumas informaes adicionais


(source, destinatiom, tag, comm).

DESEMPENHO DE PROGRAMAS PARALELOS


Fase

de

comunicao:

efetivamente

transmitidos

os

dados

entre

os

so
dois

processadores ( do buffer de q ao buffer de r)


Fase final: a mensagem copiada da rea de
armazenamento temporrio de r, memria
controlada pelo programa.
O tempo de execuo de cada fase vria de
um sistema para outro.

DESEMPENHO DE PROGRAMAS PARALELOS


Entretanto,

podemos

utilizar

constantes

simblicas para representar cada um desses


tempos de execuo,
Usamos ts para representar os tempos de
execuo das fases de inicio e final,
Usamos tc para representar o tempo de
transmisso de uma unidade de dados de um
processador a outro,

DESEMPENHO DE PROGRAMAS PARALELOS


Usando a notao anterior, o tempo de
comunicao para enviar uma mensagem que
contm k unidades de dados

ts + ktc

ts chamado de latencia,
e o recproco de tc chamado de largura de
banda.

extremamente

difcil

obter

confiveis para as grandezas ts e tc.

estimativas

DESEMPENHO DE PROGRAMAS PARALELOS


A melhor alternativa escrever um pequeno
programa de intercambio de mensagens e
realizar tomadas de tempo.
Entretanto,

na

maioria

dos

sistemas

as

seguintes relaes so aceitas:


tc, tem a mesma ordem de grandeza que o
tempo de uma operao aritmtica, ta
ts de uma a trs ordens de grandeza superior
a tc.

DESEMPENHO DE PROGRAMAS PARALELOS


Valores de tc, ts e ta para alguns sistemas:
Mquina
Cray T3D
Intel iPSC/2
IBM SP-2
Meiko CS2
nCUBE
Ethernet

SO
MAX 1.2.0.2
NX 3.3.2
MPI
Solaris
Vertex
TCP/IP

ta

ts

tc

0.011
0.0042
0.010
0.50
-

21
370
35
83
170
500

0.30
2.9
0.23
0.19
4.7
8.9

tempos em s

DESEMPENHO DE PROGRAMAS PARALELOS


Os valores reportados na tabela anterior so
meramente ilustrativos, pois os fabricantes
trabalham continuamente na diminuio dos
mesmos.
Exemplo: Estimar o tempo de execuo e o
speedup do programa paralelo da regra do
trapzio.
Ao igual que na analise do programa serial
omitimos as operaes I/O.

DESEMPENHO DE PROGRAMAS PARALELOS


As instrues
paralelo:

fundamentais

do

programa

h = (b-a)/n;
local_n = n/p;
local_a = a + rank * local_n * h;
local_b = local_a + local_n * h;
integral = Trap(local_a, local_b,
local_n, h);
MPI_Reduce(&integral, &total, 1, MPI_FlOAT,
MPI_SUM, 0, MPI_COMM_WORLD);

DESEMPENHO DE PROGRAMAS PARALELOS


chamadas a funes (Trap e
MPI_Reduce) todas as instrues consomem
um
tempo
constante
e
podem
ser
caracterizadas pela constante c1.
A funo Trap executa o cdigo serial da regra
do
trapzio,
discutido
anteriormente,
entretanto, ele computa n/p trapzio (e no
n), por tanto a funo Trap tem um tempo de
execuo de
c2 ( n / p 1 ) + c3
Salvo

as

DESEMPENHO DE PROGRAMAS PARALELOS


Consideremos que a implementao da funo
MPI_Reduce corresponde ao seguinte esquema
TEMPO (T)

1
2
3

1
2

0
0

1
6 1

a quantidade de operaes e dada por log2(p)

DESEMPENHO DE PROGRAMAS PARALELOS


em cada transferncia entre processos
enviamos um float e realizamos uma operao
aritmtica,
o tempo de execuo da funo MPI_Reduce
dado por
c4 log2 (p)[ ts + tc + ta ] + c5
O tempo total de execuo do programa
paralelo dado por
T (n, p) = c1 + c2 ( n p 1 ) + c3 +

c4 log2 (p)[ ts + tc + ta ] + c5

DESEMPENHO DE PROGRAMAS PARALELOS


Agrupamos a expresso anterior e obtemos:
n
T (n, p) = k1 + k2 log2 (p) + k3
p

Para elevados valores de n e p a constante k3


pode ser omitida
n
T (n, p) = k1 + k2 log2 (p)
p

O valor de k1 foi estimado em 22.3s na


analise do programa serial.
Utilizando os valores de ts, tc e ta reportados
na tabela anterior estimamos k2 como
k2 = 170s + 4.7 s + 0.5s 175s

DESEMPENHO DE PROGRAMAS PARALELOS


Finalmente, a estimao do
execuo dada pela expresso

tempo

de

n
T (n, p) = 22.3 + 175 log2 (p)
p

E a estimao de speedup por


n
22.3
p
S (n, p) =
n
22.3 + 175 log2 (p)
p

Comparamos ento nossa predio com os


valores reais de speedup para a mquina
nCUBE (f(x) = e-x^2, a=-2 e b=2), (ver tabela)

DESEMPENHO DE PROGRAMAS PARALELOS

n
512

1024

1536

2048

1.9

2.0

2.0

2.0

2.0

2.0

2.0

2.0

3.6

3.6

3.8

3.8

3.8

3.9

3.9

3.9

5.8

5.7

6.8

6.7

7.1

7.1

7.3

7.4

16

8.1

7.6 10.7 10.4 12.1 11.8 12.8 12.7

32

9.3

8.1 14.4 13.4 17.6 16.3 19.8 19.0

DESEMPENHO DE PROGRAMAS PARALELOS


Speedup (Estimado - Real)
20.0
32

Speedup

15.0

16

10.0

8
4

5.0

0.0
512

1024

1536

Nmero de trapzios

2048

DESEMPENHO DE PROGRAMAS PARALELOS


Da analise da tabela e o grfico anterior,
observamos que os valores estimados so
satisfatrios,
entretanto, nossa estimativa se deteriora com
o aumento de p.
Se ajustarmos os valores das constantes k1 e
k2 da frmula aos dados experimentais
teremos k1*=22.2 e k2*=190. Observamos,
que temos subestimado ligeiramente o
processo de comunicao na operao de
reduo global.

DESEMPENHO DE PROGRAMAS PARALELOS


Tomadas de tempo:
1. Garantir na medida do possvel exclusividade
na utilizao do processador.
2. sincronizar os processo no inicio do cdigo,
3. fazer uma tomada de tempo (start),
4. sincronizar os processo no final do cdigo,
5. fazer uma tomada de tempo (finish),
6. Informar o tempo transcorrido (finish-start)

DESEMPENHO DE PROGRAMAS PARALELOS


Tomadas de tempo ...
Para sincronizar os processos utilizamos a
funo MPI_Barrier(comm)
Para tomadas de tempo utilizamos a funo
double MPI_Wtime()

Exemplo:
double start, finish;
MPI_Barrier(comm);
start = MPI_Wtime();
.
. /* Codigo que se deseja cronometrar */
.
MPI_Barrier(comm);
start = MPI_Wtime();
if(rank==0) printf(Tempo:%f, finish-start);

Lei de Amdahl
A lei de Amdahl, foi formulada por Gene
Amdahl em 1967.
Consideremos a existncia de um problema,
formado por um conjunto de operaes de
clculo, e um conjunto de dados de entrada
que caracterizam operaes I/O.
Considere, que um programa serial leva um
tempo T para resolver o problema.

Lei de Amdahl
O programa tem uma frao r de instrues
que so perfeitamente paralelizveis, isto ,
independentemente do nmero de processos
envolvidos (p), esta frao do programa
apresenta speedup linear e tempo de execuo

rT p

quando

processos.

paralelizada

com

Lei de Amdahl
Entretanto, temos uma frao (1-r) que
inerentemente serial, isto , independentemente
do valor de p, o tempo de execuo destas
instrues (1 r )T, quando paralelizada com p
processos (Ex: operaes I/O).
Avaliamos ento o speedup deste programa ao
ser paralelizado com p processos:
T
1
S (p ) =
=
(1 r )T + r T p
(1 r ) + r p

Lei de Amdahl
Derivamos a expresso anterior em relao a p
dS (p)
r
=
0
2
dp
[ (1 r )p + r ]

a derivada sempre positiva implica que S(p)


uma funo crescente.
Calculamos o limite de S(p) quando p
1
S (p )
1r

a funo S(p) limitada superiormente pela


funo (1-r)-1

Lei de Amdahl
Lei de Amdahl: o speedup que podemos
obter ao paralelizar um programa limitado
por (1-r)-1.
Exemplos:
1. r = 0.50, mximo speedup = 2, para p>2, E diminui
2. r = 0.75, mximo speedup = 4
3. r =0.99, mximo speedup = 100
4. se executarmos o programa do caso 3 com 10000
processos teremos uma eficincia de 0.01.

Lei de Amdahl
A lei de Amdahl desencoraja a utilizao de
paralelismo massivo, i.e. utilizar centos ou
mieis de processos para resolver um
problema.
A formulao da lei de Amdhal
matematicamente correta.
Entretanto, devemos discutir se suas hiptesis
so corretas:
1. em todo

programa

existe um conjunto de

(1-r) instrues que no so paralelizveis,

Lei de Amdahl
Lei de Amdahl hiptesis...
2. excessivamente otimista supor que as
restantes

paralelizveis,

instrues
sempre

so

perfeitamente

teremos

alguma

sobrecarga produto da paralelizao


3. a principal deficincia da lei de Amdhal que
no considera o tamanho do problema na
formulao

Lei de Amdahl
Exemplo: se no programa da regra do trapzio
aumentarmos n, a frao de instrues seriais
fica consideravelmente menor,
instrues seriais (4), instrues paralelas (4
fora do lao, 2 dentro do lao)
n
256
512
1024
2048

I ser.
4
4
4
4

I par.
516
1028
2052
4100

1-r

0.992
0.996
0.998
0.999

0.008
0.004
0.002
0.001

Lei de Amdahl
Escalavilidade: um programa escalvel se
podemos

manter

constante

eficincia,

incrementando o tamanho do problema n ao


mesmo tempo que incrementamos o nmero de
processos p.
Para

fundamentarmos

conceito

de

escalavilidade introduzimos os conceitos de


trabalho (W) e sobrecarga (To).

Lei de Amdahl
O trabalho de um programa serial justamente
seu tempo de execuo
W (n ) = T (n )

O trabalho de um programa paralelo a soma


do trabalho feito por cada processo
W (n, p) = pT (n, p)

A sobrecarga do programa paralelo, a


diferena entre o trabalho feito pelo programa
paralelo e o programa serial correspondente
To (n, p) = W (n, p) W (n ) = pT (n, p) T (n )

Lei de Amdahl
A eficincia do programa paralelo definida
como

T (n )
E (n, p) =
T (n, p)

Escrevemos

eficincia

em

funo

da

sobrecarga, substituindo o denominador pela


definio de sobrecarga e obtemos
E (n, p) =

1
To (n, p)
+1
T (n )

Lei de Amdahl
Se ao incrementarmos p (aumenta a
sobrecarga) incrementamos n de forma que a
frao To (n, p)/T (n ) permanea constante,
podemos manter a eficincia constante e
aumentar o nmero de processos.
As fontes de sobrecarga em um programa
paralelo so:
1. comunicao entre processos
2. inatividade de processos
3. clculos
adicionais
(provocados
paralelizao)

pela

Lei de Amdahl
Durante as dcadas de 70 e 80, a lei de Amdahl
foi amplamente aceita nos crculos cientficos.
Nos ltimos anos o conceito de escalavilidade
tem

aberto

novos

paralelismo massivo.

horizontes

ao

uso

de

Anda mungkin juga menyukai