2015-08-27 27 views
6

Sono nuovo di zecca per mpi4py. Il calculate pi example from the Tutorial va in questo modo:come eseguire un codice mpi4py di base

Master (o un genitore, o client) lato:

#!/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() 

Worker (o un bambino, o server) side:

#!/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() 

Scusate per la domanda stupida, ma : Come eseguo questo? Se eseguo mpirun dalla riga di comando, sembra che stia creando 4 istanze del codice padre, non solo il codice figlio. (Ottengo 4 output su STDOUT). Se provo a eseguire Python tramite un'importazione o un file exec, non verrà eseguito. Fornisce un errore "errore durante l'analisi dei parametri". Inoltre, presumo che il codice figlio sia denominato "cpi, py"? Grazie. Una domanda orribilmente semplice, lo so. Se potessi aver trovato la risposta, non ti disturberei ragazzi.

+0

Quale distribuzione MPI è stata installata? (versione). Inoltre, quale sistema operativo? –

+1

Trovo sorprendente che il manuale non menzioni in alcun modo come eseguire effettivamente il codice. +1 per chiedere – oarfish

risposta

6

Beh, era una di quelle cose così semplici che era difficile. Corro con mpirun dalla riga di comando, con un solo processo. Il codice genitore stesso genera gli altri:

mpirun -np 1 python parent_code.py