pdpa_rel_t2.pdf

11
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 Botelho ei000!"fe#up#pt

Upload: sonny

Post on 08-Feb-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: pdpa_rel_t2.pdf

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

Page 2: pdpa_rel_t2.pdf

7/22/2019 pdpa_rel_t2.pdf

http://slidepdf.com/reader/full/pdparelt2pdf 2/11

Page 3: pdpa_rel_t2.pdf

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#########################################################-

Page 4: pdpa_rel_t2.pdf

7/22/2019 pdpa_rel_t2.pdf

http://slidepdf.com/reader/full/pdparelt2pdf 4/11

Page 5: pdpa_rel_t2.pdf

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

Page 6: pdpa_rel_t2.pdf

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 - $

Page 7: pdpa_rel_t2.pdf

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 - %

Page 8: pdpa_rel_t2.pdf

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 - &

Page 9: pdpa_rel_t2.pdf

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

Page 10: pdpa_rel_t2.pdf

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 - *

Page 11: pdpa_rel_t2.pdf

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 - +