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