【发布时间】:2014-02-01 00:42:30
【问题描述】:
如何将进程的等级作为标记传递给 mpi4py.MPI.COMM_WORLD.Send() 函数并使用 mpi4py.MPI.COMM_WORLD.Recv() 正确接收它?
我指的是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]
我想将发送进程的等级作为标签传递,以便接收进程可以在有多个发送者的情况下识别它。我就是这样做的
#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
对于接收进程(rank=0),我希望 rnk 的值为 1,但它仍然是 -1。
有人可以告诉我我在这里做错了什么吗?谢谢!
【问题讨论】: