Try putting the import petsc4py and petsc4py init AFTER the import mpi4py


> On Mar 1, 2017, at 11:40 AM, Rodrigo Felicio <[email protected]> 
> wrote:
> 
> Thanks, Barry and Matt, for your prompt responses. I really appreciated them.
> 
> Sorry I forgot to mention that I am using petsc 3.6.1, petsc4py 3.6.0 and 
> mpi4py 2.0.0. (and also tested with mpi4py 1.2.2)
> 
> from running env I get:
> 
> PYTHONPATH=/home/XXXXX/Enthought/Canopy_64bit/User/lib/python2.7/site-packages:/home/XXXXX/dev/myPy:/home/XXXXX/ipnotebooks
> 
> and also
> 
> PETSC_DIR=/home/XXXXX/mylocal/petsc-3.6.1
> PETSC_ARCH=arch-linux2-c
> I_MPI_ROOT=/apps/tools/centos54-x86_64-intel14//impi/4.1.3.04
> 
> 
> Funny thing is that  only inside a python session I see the directory where 
> both petsc4py and mpi4py are installed in the python path, i.e.,
> 
> only after
> import sys
> sys.path
> 
> I see  '/home/XXXX/.local/lib/python2.7/site-packages'
> 
> 
> Anyway, after running
> time mpirun -n 1 python ./dyn_mem_ex.py
> 
> I get the error msg  (once I killed the process running dyn_mem_ex.py. Mind 
> you I edited out the the IP of the machine with XXX.XX.XX.XX)
> =====================================================================================
> =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
> =   EXIT CODE: 15
> =   CLEANING UP REMAINING PROCESSES
> =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
> =====================================================================================
> Fatal error in PMPI_Init_thread: Invalid port, error stack:
> MPIR_Init_thread(674).....:
> MPID_Init(320)............: spawned process group was unable to connect back 
> to the parent on port 
> <tag#0$description#v1n29$port#51319$ifname#XXX.XX.XX.XX$>
> MPID_Comm_connect(206)....:
> MPIDI_Comm_connect(579)...: Named port 
> tag#0$description#v1n29$port#51319$ifname#XXX.XX.XX.XX$ does not exist
> MPIDI_Comm_connect(415)...:
> dequeue_and_set_error(628): Communication error with rank 0
> Fatal error in PMPI_Init_thread: Invalid port, error stack:
> MPIR_Init_thread(674)..:
> MPID_Init(320).........: spawned process group was unable to connect back to 
> the parent on port <tag#0$description#v1n29$port#51319$ifname#XXX.XX.XX.XX$>
> MPID_Comm_connect(206).:
> MPIDI_Comm_connect(432): Named port 
> tag#0$description#v1n29$port#51319$ifname#XXX.XX.XX.XX$ does not exist
> Fatal error in PMPI_Init_thread: Invalid port, error stack:
> MPIR_Init_thread(674)..:
> MPID_Init(320).........: spawned process group was unable to connect back to 
> the parent on port <tag#0$description#v1n29$port#51319$ifname#XXX.XX.XX.XX$>
> MPID_Comm_connect(206).:
> MPIDI_Comm_connect(432): Named port 
> tag#0$description#v1n29$port#51319$ifname#XXX.XX.XX.XX$ does not exist
> Fatal error in PMPI_Init_thread: Invalid port, error stack:
> MPIR_Init_thread(674)..:
> MPID_Init(320).........: spawned process group was unable to connect back to 
> the parent on port <tag#0$description#v1n29$port#51319$ifname#XXX.XX.XX.XX$>
> MPID_Comm_connect(206).:
> MPIDI_Comm_connect(432): Named port 
> tag#0$description#v1n29$port#51319$ifname#XXX.XX.XX.XX$ does not exist
> APPLICATION TERMINATED WITH THE EXIT STRING: Terminated (signal 15)
> 
> real    0m9.987s
> user    0m36.714s
> sys     0m11.541s
> 
> if I comment out the lines that import PETSc and initialize petsc4py on the 
> code for the cpi.py (codes attached below)
> 
> import pestc4py
> #petsc4py.init(sys.argv)
> #from petsc4py import PETSc
> from mpi4py import MPI
> 
> Then it runs without problems and the output is
> 
> time mpirun -n 1 python ./dyn_mem_ex.py
> proc 2 of 4
> proc 3 of 4 proc 1 of 4
> 
> proc 0 of 4
> proc 0 of 4, Adim=[10]
> proc 1 of 4, Adim=[10]
> proc 2 of 4, Adim=[10]
> proc 3 of 4, Adim=[10]
> Adata = [ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.]Adata = [ 0.  1.  2.  3.  4. 
>  5.  6.  7.  8.  9.]
> 
> Adata = [ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.]Adata = [ 0.  1.  2.  3.  4. 
>  5.  6.  7.  8.  9.]
> 
> 3.14160098692
> 2.65258238441e-06
> 
> real    0m0.535s
> user    0m0.431s
> sys     0m0.633s
> 
> 
> 
> the codes that I used in this example,  have just minor modifications 
> compared to old examples from petsc4py. For reference, I am also attaching 
> them
> 
> #---------------------------------
> # dyn_mem_ex.py
> # ------------------------------------
> import numpy
> import sys
> import petsc4py
> #petsc4py.init(sys.argv)
> #from petsc4py import PETSc
> from mpi4py import MPI
> mypath = '/home/XXX/study/mpi4py/'
> comm = MPI.COMM_SELF.Spawn(sys.executable,
>                           args=[mypath + 'cpi.py'],
>                           maxprocs=4)
> 
> N = numpy.array(100, 'i')
> Adata = numpy.array(numpy.arange(10), dtype='f')
> Adim = numpy.array(Adata.shape[0], dtype='i')
> 
> 
> comm.Bcast([N, MPI.INT], root=MPI.ROOT)
> comm.Bcast([Adim, MPI.INT], root=MPI.ROOT)
> comm.Bcast([Adata, MPI.FLOAT], root=MPI.ROOT)
> PI = numpy.array(0.0, 'd')
> comm.Reduce(None, [PI, MPI.DOUBLE],
>            op=MPI.SUM, root=MPI.ROOT)
> print(PI)
> print(PI/numpy.pi - 1.0)
> 
> comm.Disconnect()
> 
> 
> #---------------------------------
> # cpi.py
> # ------------------------------------
> 
> import numpy
> import sys, petsc4py
> #petsc4py.init(sys.argv)
> #from petsc4py import PETSc
> from mpi4py import MPI
> 
> parent = MPI.Comm.Get_parent()
> size = parent.Get_size()
> rank = parent.Get_rank()
> 
> print("proc {} of {} ".format(rank, size))
> N = numpy.array(0, dtype='i')
> Adim = numpy.zeros(1, dtype='i')
> 
> parent.Bcast([N, MPI.INT], root=0)
> parent.Bcast([Adim, MPI.INT], root=0)
> 
> Adata = numpy.zeros(Adim[0], dtype='f')
> parent.Bcast([Adata, MPI.FLOAT],root=0)
> print("proc {} of {}, Adim={}".format(rank, size, Adim))
> print("Adata = {}".format(Adata))
> h = 1.0 / N; s = 0.0
> for i in range(rank, N, size):
>    x = h * (i + 0.5)
>    #print(rank,size,Adim.shape)
>    s += 4.0 / (1.0 + x**2)
> PI = numpy.array(s * h, dtype='d')
> parent.Reduce([PI, MPI.DOUBLE], None,
>            op=MPI.SUM, root=0)
> 
> parent.Disconnect()
> 
> 
> kind regards,
> Rodrigo
> 
> 
> ________________________________
> 
> 
> This email and any files transmitted with it are confidential and are 
> intended solely for the use of the individual or entity to whom they are 
> addressed. If you are not the original recipient or the person responsible 
> for delivering the email to the intended recipient, be advised that you have 
> received this email in error, and that any use, dissemination, forwarding, 
> printing, or copying of this email is strictly prohibited. If you received 
> this email in error, please immediately notify the sender and delete the 
> original.
> 

Reply via email to