diff --git a/Python/mpipi.py b/Python/mpipi.py deleted file mode 100755 index 42c54d9d903b0ab57300a6c642965a45a2cbce8d..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..d6df623da40087d0be251d17eace694b5488000f --- /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)