Brand new for mpi4py. calculate pi example from the tutorial is as follows:
Side of the master (or parent or client):
#!/usr/bin/env python from mpi4py import MPI import numpy import sys comm = MPI.COMM_SELF.Spawn(sys.executable, args=['cpi.py'], maxprocs=5) N = numpy.array(100, 'i') comm.Bcast([N, MPI.INT], root=MPI.ROOT) PI = numpy.array(0.0, 'd') comm.Reduce(None, [PI, MPI.DOUBLE], op=MPI.SUM, root=MPI.ROOT) print(PI) comm.Disconnect()
Side of the worker (or subsidiary or server):
#!/usr/bin/env python from mpi4py import MPI import numpy comm = MPI.Comm.Get_parent() size = comm.Get_size() rank = comm.Get_rank() N = numpy.array(0, dtype='i') comm.Bcast([N, MPI.INT], root=0) h = 1.0 / N; s = 0.0 for i in range(rank, N, size): x = h * (i + 0.5) s += 4.0 / (1.0 + x**2) PI = numpy.array(s * h, dtype='d') comm.Reduce([PI, MPI.DOUBLE], None, op=MPI.SUM, root=0) comm.Disconnect()
Sorry for the stupid question, but: How do I run this? If I make mpirun from the command line, it looks like it creates 4 instances of the parent code, not just the child code. (I get 4 outputs in STDOUT.) If I try to run inside python via import or execfile, it will not start. Gives the error "error analysis parameters". Also, I assume the child code is called "cpi, py"? Thank you I know a terrible basic question. If I could find the answer, I would not bother you guys.