pdpa_rel_t2.pdf
TRANSCRIPT
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 1/11
Faculdade de Engenharia da Universidade do Porto
Mestrado Integrado em Engenharia Informática e Computação
Programação Distribuída e Paralela
Trabalho II
Cálculo de π por integração
Autor
Daniel Botelhoei000!"fe#up#pt
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 2/11
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 3/11
Índice! $ E%posição do pro&lema tratado#########################################################################! $ 'olução se(uencial############################################################################################!
) $ Medição do tempo se(uencial para vários valores de n####################################* $ 'olução paralela# Paraleli+ação efectuada# ,eterminação da comple%idade dopro&lema em processamento#################################################################################- $ Para cada valor de n medir o tempo de e%ecução o&tido para váriosprocessadores#########################################################################################################-. $ Medidas de desempenho###################################################################################-- $ /i&liografias 1efer2ncias################################################################################.3ppendi%#################################################################################################################4
5og/oo6##############################################################################################################4 7empo dispendido###########################################################################################4,etalhes##########################################################################################################4
Índice de Tabelas 7a&le !8 Mediç9es se(uenciais################################################################################ 7a&le 8 Mediç9es dos tempos na versão MPI#########################################################-
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 4/11
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 5/11
Cálculo de π por integração
1 - !"osição do "roblema tratado#
:este tra&alho pretende$se mostrar a vantagem do uso da programaçãodistri&u;da< em comparação com a programação se(uencial usando apenas umprocessador#
Para mostrar isso< vou desenvolver duas aplicaç9es em C< para o cálculo do valorPI por integração# :a versão se(uencial< apenas um processador = responsávelpor computar todos os dados e na versão distri&u;da< consoante o n>mero deprocessadores e%istentes< o processamento = distri&u;do por cada má(uina#
3 f?rmula usada para calcular o PI foi a seguinte8
π =*h∑i=!
n
f h∗i−!
< com
f x =!
! x
2 - $olução se%uencialserial/pi.cpp:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define DEBUG 0
double f(double x){
return (float)((1.0)/(1.0+pow(x,2)));
}
int main(int argc, char *argv[]){
int n= atoi(argv[1]);
printf("Vai calcular o valor de PI com n=%d\n",n);
double h= 1.0/n;
double sum=0.0;
double i;
for( i=1.0 ; i<= n; i++ ){
sum+= f(h*(i-(1.0/2.0)));
if(DEBUG)
printf("i:%f val:%.20f\n",i,f(h*(i-(1.0/2.0))));
}
Programação Distribuída e Paralela - 1
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 6/11
Cálculo de π por integração
printf("Valor de PI é %.20f\n",4.0*h*sum);
return 0;
}
serial/makefile:CC = g++
CFLAGS = -Wall
EXEC = pi_mpi
SRC = pi.cpp
build:
$(CC) $(CFLAGS) $(SRC) -o $(EXEC)
run:
./$(EXEC) 5000000
./$(EXEC) 50000000
./$(EXEC) 500000000clean:
rm $(EXEC)
& - 'edição do tem"o se%uencial"ara ()rios (alores de n#
* tem"o +alor de PI-000000 0#@-0000 )#!*!-A.-).!)4-4A*.!
-0000000 4#.00000 )#!*!-A.-)-@A-444)4)
-00000000 4.#**0000 )#!*!-A.-)-A)4*!4))
Table 1 !ediç"es se#uenciais
, - $olução "aralela# Paraleliaçãoe.ectuada# Determinação dacom"le!idade do "roblema em"rocessamento
:esta a&ordagem o processo B0 fica D espera (ue todos os outros processadoresenviem o (ue fi+eram< unta todos os valores (ue rece&e< fa+ a sua parte dacomputação e apresenta o resultado#
Programação Distribuída e Paralela - $
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 7/11
Cálculo de π por integração
mpi/pi.cpp/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "mpi.h"
#define DEBUG 0
double f(double x){
return (float)((1.0)/(1.0+pow(x,2)));
}
double process_function(int pid,double h,int begin, int end){
double sum=0.0;
//int offset = rank*n_rank;
int i;
if(DEBUG)
printf("Process:%d\n",pid);
for( i = (begin==0)? 1:begin ; i < end ; i++ ){
sum += f(h*((i)-(1.0/2.0)));
if(DEBUG)
printf("[p:%d] offset:%d val:%.20f
i:%d\n",pid,begin,f(h*((i)-(1.0/2.0))),i);
}
printf("Process:%d sum:%.20f\n",pid,sum);
return sum;
}
int main(int argc, char *argv[]){
MPI_Status s;
int size, // numero de processadores
rank, // processador corrente
n, // numero total de particoes
n_rank // numero de iterações feitas por cada processo
;
MPI_Init (&argc, &argv);
MPI_Comm_size (MPI_COMM_WORLD, &size);
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
n = atoi(argv[1]);
n_rank = n/size;
double h= 1.0/n;
double sum=0.0;
double val=0.0; // valor de retorno de cada processo
int i;
if (rank == 0){
printf("Vai usar %d processadores; cada processador processa %d
valores\n",size,n_rank);
printf("Vai calcular o valor de PI com n=%d\n",n);
for( i=1 ; i< size; i++ ){
MPI_Recv ((void *)&val, 1, MPI_DOUBLE, i, 0xACE5,
Programação Distribuída e Paralela - %
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 8/11
Cálculo de π por integração
MPI_COMM_WORLD, &s);
if(DEBUG)
printf ("[%d] sent %f\n", i, val);
sum+= val;
}
sum+=process_function(rank,h,rank*n_rank+1,rank*n_rank+n_rank+1);
printf("Valor de PI é %f\n",4.0*h*sum);
}else{
val= process_function(rank,h,rank*n_rank+1,rank*n_rank+n_rank+1);
MPI_Send ((void *)&val, 1, MPI_DOUBLE, 0, 0xACE5, MPI_COMM_WORLD);
}
MPI_Finalize();
return 0;
}
mpi/makefile:CC = mpiCC
CFLAGS = -Wall
EXEC = pi_mpi
SRC = pi.cpp
build:
$(CC) $(CFLAGS) -o $(EXEC) $(SRC)
run:
mpirun -np 3 $(EXEC) 5000000
mpirun -np 3 $(EXEC) 50000000 mpirun -np 3 $(EXEC) 500000000
deploy:
recon -v mpihostfile
lamboot -v mpihostfile
lamnodes
remote:
recon -v -ssi ssh_agent "ssh -x" mpihostfile
lamboot -v -ssi ssh_agent "ssh -x" mpihostfile
lamnodes
clean:
rm $(EXEC)
reset:
lamclean -v
Programação Distribuída e Paralela - &
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 9/11
Cálculo de π por integração
- Para cada (alor de n medir otem"o de e!ecução obtido "ara
()rios "rocessadores#
*"rocess * tem"o +alor de PI
-000000 0#.4!04* )#!*!-A.-).!)4-4A*.!
-0000000 .#.0.*-0 )#!*!-A.-)-@A-444)4)
-00000000 ..#-4.-) )#!*!-A.-)-A)4*!4))
Table $ !ediç"es dos tempos na 'ersão !P(
- 'edidas de desem"enho#
,adas as limitaç9es de processadores (ue tive D disposição para reali+ar estetra&alho< apenas pude verificar o algoritmo com dois processadores# ,e(ual(ueira maneira pude verificar (ue mesmo usando apenas doisprocessadores< a versão distri&u;da era ligeiramente mais rápida (ue a versão
se(uencial# Como = evidente< será de esperar (ue para valores mais altos de Bne aumentando tam&=m o n>mero de processadores a versão distri&u;da tenhaum aumento considerável na performance em comparação com a versãose(uencial#
Programação Distribuída e Paralela - )
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 10/11
Cálculo de π por integração
- Bibliogra.ias 3e.er4ncias• Introduction to Parallel Programming
http8ist#uGaterloo#caeGsaGparallel
• Im"lementação de algoritmos "aralelos5 "i e multi"licação dematries em uma m)%uina multi"rocessadahttp8GGG#inf#ufrgs#&rprocpardiscinf0!00@tra&alhossem00$!HuilhermePiMatri%#+ippdpt!#html
• di..time http8GGG#cplusplus#comreferencecli&rarctimedifftime#html
• 6*I man "ages / gettimeo.da8 92: http8dell-#ma#ute%as#educgi$&inman$cgiJgettimeofdaK
• Parallel Programming in ; <ith 'PI and ="en'P B8 'ichael >a8?uinnhttp8&oo6s#google#com&oo6sJidLt,%:H'g-ICprintsec
• @PPTA Part IIb - 'essage Passing Inter.ace and "rogramminge!am"leshttp8GGG#nus#edu#sg3CE'seminars00!eGoutpptPart&#ppt
• The 'essage Passing Inter.ace 9'PI: standardhttp8GGG$uni%#mcs#anl#govmpi
• @eBooA Designing and Building Parallel Programs 9=nline: http8GGG$uni%#mcs#anl#govd&ppte%t&oo6#html
• Cii"edia // E'F'PIhttp8en#Gi6ipedia#orgGi6i53MMPI
• Programação Distribuída e Paralela // Ecetatos e outroshttp8paginas#fe#up#ptN&ar&osaensinoP,P00.$004acetatos
Programação Distribuída e Paralela - *
7/22/2019 pdpa_rel_t2.pdf
http://slidepdf.com/reader/full/pdparelt2pdf 11/11
Cálculo de π por integração
E""endi!
ogBoo
Tem"o dis"endido
Tem"o Total 6sado 9h/m:PDPE !4800
Detalhes
• 0&F0F07 Ouinta• !-8*-$!A8!-QR)h)0mS P,P3Q Preparar tra&alho
• 0FF07 ,omingo• !@800$!A8)0QR)0mS P,P3Q Preparar tra&alho8 5i ate T@#) Hlo&al
perationsT
• 0GF0F07 7erça• !.8)0$!@8)0QRh)0mS P,P3Q Fa+er tra&alho
• 08)0$!800QR)0mS P,P3Q Fa+er tra&alho
• )800$!8)0QRh)0mS P,P3Q Fa+er tra&alho
• 1F0F07 7erça• !4800$0800QR)hS P,P3Q P
• 21F0&F07 'egunda• !.800$!@8)0QRh)0mS P,P3Q Fa+er tra&alho K 1elatorio
• 0800$!8)0QR!h)0mS P,P3Q Fa+er 1elatorio
• 8)0$)800QR)0mS P,P3Q Fa+er 1elatorio
Programação Distribuída e Paralela - +