2017-01-30 2 views
-1

j'ai écrit un programme qui utilise mpi4py pour faire quelques tâches (faire un tableau) dans le noeud de rang 0 dans le code suivant. Ensuite, il fait un autre tableau dans le nœud de rang 1. Ensuite, je trace les deux tableaux. Le tableau dans le noeud 0 est large casted au noeud 1. Cependant le code donne une erreur bizarre. je la commande suivante:En utilisant matplotlib sur la non-0 rang MPI cause « QXcbConnection: Impossible de se connecter pour afficher »

mpiexec -n 2 -f mfile python mpi_test_4.py 

Le programme se déroule comme:

from mpi4py import MPI 
import matplotlib.pyplot as plt 
import numpy as np 

comm = MPI.COMM_WORLD 
rank = comm.rank 


x = 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) 

message d'erreur:

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:[email protected]] 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:[email protected]] 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:[email protected]] main (/home/alankar/mpich3/mpich-3.2/src/pm/hydra/pm/pmiserv/pmip.c:206): demux engine error waiting for event 
[[email protected]] 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 
[[email protected]] 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 
[[email protected]] 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 
[[email protected]] main (/home/alankar/mpich3/mpich-3.2/src/pm/hydra/ui/mpich/mpiexec.c:344): process manager error waiting for completion 

Cependant quand je conspire sur le noeud 0 qui est le nœud que je suis en utilisant pour exécuter la commande: mpiexec -n 2 -f mfile python mpi_test_4.py le code fonctionne. Par exemple:

from mpi4py import MPI 
import matplotlib.pyplot as plt 
import numpy as np 

comm = MPI.COMM_WORLD 
rank = comm.rank 


x = 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) 
+1

Vous continuez à éditer votre question, la modification du code qui provoque chaque erreur avant que quelqu'un d'autre peut répondre à expliquer ce qui se passe. Avez-vous encore une "erreur bizarre" ou avez-vous déjà tout résolu? – Blckknght

+0

@Blckknght toujours l'avoir –

+0

Salut @AlankarDutta d'où vient le 'rank'? –

Répondre

0

Cette erreur n'est en aucun cas bizarre. "Impossible de se connecter à l'affichage" signifie que quelque chose ne fonctionne pas. Étant donné que les processus MPI peuvent s'exécuter sur des nœuds de calcul distincts, vous n'avez aucune garantie que n'importe quel rang puisse le faire. Selon this answer, vous devriez être en mesure de forcer matplotlib en utilisant un back-end différent:

import matplotlib 
matplotlib.use('Agg')