Advertisement
calcpage

myPI_mpi_v05.py

Jan 29th, 2020
775
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.12 KB | None | 0 0
  1. #!/usr/bin/python
  2. #mpirun -np 4 python ./myPI_mpi_v05.py
  3. from mpi4py import MPI
  4. import math, timeit
  5.  
  6. def f(x):
  7.     return 4.0/(1+x**2)
  8.  
  9. def Rsum(a,b,n,start=0,step=1):
  10.     area=0.0
  11.     for i in range(start,n,step):
  12.         area=area+(b-a)/n*f(a+(b-a)/n*(i+1))
  13.     return area
  14. '''
  15. def compute_pi(n, start=0, step=1):
  16.    h=1.0/n
  17.    s=0.0
  18.    for i in range(start, n, step):
  19.        x=h*(i+0.5)
  20.        s+=4.0/(1.0+x**2)
  21.    return s*h
  22. '''
  23. comm=MPI.COMM_WORLD
  24. nprocs=comm.Get_size()
  25. myrank=comm.Get_rank()
  26.  
  27. if myrank==0:
  28.     n=1000000
  29.     start_time=timeit.default_timer()
  30. else:
  31.     n=None
  32.    
  33. n=comm.bcast(n, root=0)
  34. #mypi=compute_pi(n,myrank,nprocs)
  35. mypi=Rsum(0.0,1.0,n,myrank,nprocs)
  36. pi=comm.reduce(mypi,op=MPI.SUM,root=0)
  37.  
  38. if myrank==0:
  39.     rel_error=pi-math.pi
  40.     abs_error=abs(rel_error)
  41.     print('pi   = ' + str(math.pi))
  42.     print('area = '+ str(pi))
  43.     print('relative error = '+ str(rel_error))
  44.     end_time = timeit.default_timer()
  45.     print('start time = ' + str(start_time))
  46.     print('end time   = ' + str(end_time))
  47.     print('cpu time   = ' + str(end_time-start_time) + ' seconds')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement