【发布时间】:2013-07-06 08:23:38
【问题描述】:
这是关于 MPI 的一个问题。我需要两个处理器来不断修改一个变量,并且我希望两个处理器都能访问具有最新值的变量。
from mpi4py import MPI
from time import sleep
comm = MPI.COMM_WORLD
rank = comm.rank
assert comm.size == 2
msg = 0
sec = 10
if comm.rank == 0:
for i in range(sec):
print msg
sleep(1)
msg = comm.bcast(msg,root = 1)
else:
for i in range(sec*2):
msg += 1
sleep(0.5)
comm.bcast(msg,root = 1)
所以我希望程序打印如下内容:0 2 4 ...
但程序结果显示:0 1 2 3 4 5 6 7 8 9
我很好奇 mpi4py 中是否有一种机制使得变量 msg 由两个处理器共享?也就是说,每当处理器 1 修改 msg 时,新值立即可供处理器 0 使用。换句话说,我希望处理器 0 访问 msg 而不是等待处理器 1 对 msg 所做的所有更改。
【问题讨论】:
-
您的代码广播排名 1 的值,该值在每次迭代中递增 1,因此是观察到的输出。
-
抱歉误导。我已经更改了代码。我的问题是,在 1 秒时,等级 1 已经将 msg 增加到 2,但是为什么等级 0 仍然将 msg 打印为 1?我需要一种方法来使等级 0 接受值为 2 而不是 1 的味精。