2015-08-27 10 views
6

laufen lässt, ist zu mpi4py nagelneu. Die calculate pi example from the Tutorial geht in etwa so:, wie man einen grundlegenden mpi4py Code

Master (oder ein Elternteil oder Client) Seite:

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

Arbeiter (oder Kind oder Server) Seite:

#!/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 für die dumme Frage, aber : Wie führe ich das? Wenn ich mpirun über die Befehlszeile ausfühle, sieht es so aus, als würde es 4 Instanzen des Eltern-Codes erstellen, nicht nur den Kind-Code. (Ich bekomme 4 Ausgaben zu STDOUT.) Wenn ich versuche, innerhalb von Python über einen Import oder eine Exec-Datei zu laufen, wird es nicht ausgeführt. Ergibt einen Fehler "parsing parameter parameter". Außerdem nehme ich an, dass der Kind-Code "cpi, py" heißt? Vielen Dank. Eine schrecklich grundlegende Frage, ich weiß. Wenn ich die Antwort gefunden hätte, würde ich Sie nicht stören.

+0

Welche MPI-Verteilung haben Sie installiert? (Ausführung). Auch welches Betriebssystem? –

+1

Ich finde es erstaunlich, dass das Handbuch nirgendwo erwähnt, wie man den Code tatsächlich ausführt. +1 für die Nachfrage – oarfish

Antwort

6

Nun, es war eines dieser Dinge so einfach, dass es schwer war. Ich laufe mit mpirun von der Kommandozeile mit nur einem Prozess. Der Elterncode selbst erzeugt die anderen:

mpirun -np 1 python parent_code.py