I have written a program that uses mpi4py to do some job (making an array) in the node of rank 0 in the following code. Then it makes another array in the node of rank 1. Then I plot both the arrays. The array in node 0 is broad casted to node 1. However the code gives a bizarre error. I used the following command:
mpiexec -n 2 -f mfile python mpi_test_4.py
The program goes as:
from mpi4py import MPI
import matplotlib.pyplot as plt
import numpy as npcomm = MPI.COMM_WORLD
rank = comm.rankx = np.linspace(-2*np.pi,2*np.pi,100)
if (rank == 0 ):y1 = np.sin(x)
else:y1 = None
y1 = comm.bcast(y1,root=0)
if ( rank == 1 ):y2 = np.cos(x)fig = plt.figure()ax = fig.gca()ax.plot(x,y1) ax.plot(x,y2)plt.savefig('test.png')print(rank)
Error message is:
0
QXcbConnection: Could not connect to display ===================================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= PID 6804 RUNNING AT 192.168.1.106
= EXIT CODE: 134
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
[proxy:0:0@alankar-Aspire-E5-571] HYD_pmcd_pmip_control_cmd_cb (/home/alankar/mpich3/mpich-3.2/src/pm/hydra/pm/pmiserv/pmip_cb.c:885): assert (!closed) failed
[proxy:0:0@alankar-Aspire-E5-571] HYDT_dmxu_poll_wait_for_event (/home/alankar/mpich3/mpich-3.2/src/pm/hydra/tools/demux/demux_poll.c:76): callback returned error status
[proxy:0:0@alankar-Aspire-E5-571] main (/home/alankar/mpich3/mpich-3.2/src/pm/hydra/pm/pmiserv/pmip.c:206): demux engine error waiting for event
[mpiexec@alankar-Aspire-E5-571] HYDT_bscu_wait_for_completion (/home/alankar/mpich3/mpich-3.2/src/pm/hydra/tools/bootstrap/utils/bscu_wait.c:76): one of the processes terminated badly; aborting
[mpiexec@alankar-Aspire-E5-571] HYDT_bsci_wait_for_completion (/home/alankar/mpich3/mpich-3.2/src/pm/hydra/tools/bootstrap/src/bsci_wait.c:23): launcher returned error waiting for completion
[mpiexec@alankar-Aspire-E5-571] HYD_pmci_wait_for_completion (/home/alankar/mpich3/mpich-3.2/src/pm/hydra/pm/pmiserv/pmiserv_pmci.c:218): launcher returned error waiting for completion
[mpiexec@alankar-Aspire-E5-571] main (/home/alankar/mpich3/mpich-3.2/src/pm/hydra/ui/mpich/mpiexec.c:344): process manager error waiting for completion
However when I plot on node 0 which is the node I am using to issue the command: mpiexec -n 2 -f mfile python mpi_test_4.py the code works. For example this:
from mpi4py import MPI
import matplotlib.pyplot as plt
import numpy as npcomm = MPI.COMM_WORLD
rank = comm.rankx = np.linspace(-2*np.pi,2*np.pi,100)
if (rank == 1 ):y1 = np.sin(x)
else:y1 = None
y1 = comm.bcast(y1,root=1)
if ( rank == 0 ):y2 = np.cos(x)fig = plt.figure()ax = fig.gca()ax.plot(x,y1) ax.plot(x,y2)plt.savefig('test.png')print(rank)