Wie kann ich den Rang eines Prozesses als Tag an die Funktion mpi4py.MPI.COMM_WORLD.Send() übergeben und richtig mit mpi4py.MPI.COMM_WORLD.Recv() empfangen?mpi4py Senden/Recv mit Tag
Ich beziehe mich auf das folgende Codebeispiel für sending and receiving messages between two processes using Send and Recv functions
#passRandomDraw.py
import numpy
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
randNum = numpy.zeros(1)
if rank == 1:
randNum = numpy.random.random_sample(1)
print "Process", rank, "drew the number", randNum[0]
comm.Send(randNum, dest=0)
if rank == 0:
print "Process", rank, "before receiving has the number", randNum[0]
comm.Recv(randNum, source=1)
print "Process", rank, "received the number", randNum[0]
ich den Rang des Sendeprozesses als Tag übergeben werden soll, so dass der Empfangsvorgang es, falls es mehrere Absender sind zu identifizieren. Das ist, was ich tue
#passRandomDraw.py
import numpy
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
randNum = numpy.zeros(1)
rnk = -1 # EDIT
if rank == 1:
randNum = numpy.random.random_sample(1)
print "Process", rank, "drew the number", randNum[0]
comm.Send(randNum, dest=0, tag=rank) # EDIT
if rank == 0:
print "Process", rank, "before receiving has the number", randNum[0]
print "Sender rank:", rnk
comm.Recv(randNum, 1, rnk) # EDIT
print "Process", rank, "received the number", randNum[0]
print "Sender rank:", rnk # EDIT
ich den Wert von RNK erwarten 1 für den Empfangsprozess zu sein (was hat Rang = 0), aber es ist immer noch -1.
Kann mir jemand sagen, was ich hier falsch mache? Vielen Dank!
Das ist sehr detailliert. Vielen Dank! Einige davon wurden klarer, als ich mehr in das Tutorial las. – user1953384