From 73cc9da0f3fec55dd3ce5b34cb1fae8614973e58 Mon Sep 17 00:00:00 2001 From: Neil Gershenfeld <gersh@cba.mit.edu> Date: Thu, 6 Feb 2020 07:24:04 -0500 Subject: [PATCH] wip --- Python/mpipi.py | 37 ------------------------------------- Python/mpipi2.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 37 deletions(-) delete mode 100755 Python/mpipi.py create mode 100755 Python/mpipi2.py diff --git a/Python/mpipi.py b/Python/mpipi.py deleted file mode 100755 index 42c54d9..0000000 --- a/Python/mpipi.py +++ /dev/null @@ -1,37 +0,0 @@ -# -# mpipi.py -# Neil Gershenfeld 2/6/20 -# calculation of pi by an MPI Numba sum -# pi = 3.14159265358979323846 -# - -import time -from numba import jit -from mpi4py import MPI - -@jit(nopython=True) -def calc(istart,iend): - sum = 0.0 - for i in range(istart,iend+1): - sum += 0.5/((i-0.75)*(i-0.25)) - return sum - -NPTS = 100000000000 -comm = MPI.COMM_WORLD -rank = comm.Get_rank() -nproc = comm.Get_size() -if (rank == 0): - start_time = time.time() - istart = int(1 + NPTS*((rank+0)/nproc)) - iend = int(NPTS*((rank+1)/nproc)) - pi = calc(istart,iend) - comm.reduce(pi,op=MPI.SUM,root=0) - end_time = time.time() - mflops = NPTS*5.0/(1.0e6*(end_time-start_time)) - print("NPTS = %d, pi = %f"%(NPTS,pi)) - print("time = %f, estimated MFlops = %f"%(end_time-start_time,mflops)) -else: - istart = int(1 + NPTS*((rank+0)/nproc)) - iend = int(NPTS*((rank+1)/nproc)) - pi = calc(istart,iend) - comm.reduce(pi,op=MPI.SUM,root=0) diff --git a/Python/mpipi2.py b/Python/mpipi2.py new file mode 100755 index 0000000..d6df623 --- /dev/null +++ b/Python/mpipi2.py @@ -0,0 +1,48 @@ +# +# mpipi2.py +# Neil Gershenfeld 2/6/20 +# calculation of pi by an MPI Numba sum +# pi = 3.14159265358979323846 +# + +import time +from numba import jit +from mpi4py import MPI + +NPTS = 1000000000 +NLOOP = 10 + +comm = MPI.COMM_WORLD +rank = comm.Get_rank() +nproc = comm.Get_size() + +@jit(nopython=True) +def calc(istart,iend): + sum = 0.0 + for i in range(istart,iend+1): + sum += 0.5/((i-0.75)*(i-0.25)) + return sum + +if (rank == 0): + istart = 1+rank*NPTS; + iend = (rank+1)*NPTS; + max = 0 + for j in range(NLOOP): + comm.Barrier() + start_time = time.time() + sum = 0.0; + sum = calc(istart,iend) + pi = comm.reduce(sum,op=MPI.SUM,root=0) + end_time = time.time() + mflops = nproc*NPTS*5.0/(1.0e6*(end_time-start_time)) + print("processes = %d, NPTS = %d, pi = %f"%(nproc,NPTS,pi)) + if (mflops > max): + max = mflops + print("time = %f, estimated MFlops = %f, max = %f"%(end_time-start_time,mflops,max)) +else: + istart = 1+rank*NPTS + iend = (rank+1)*NPTS + for j in range(NLOOP): + comm.Barrier() + sum = calc(istart,iend) + comm.reduce(sum,op=MPI.SUM,root=0) -- GitLab