【发布时间】:2019-01-16 20:20:13
【问题描述】:
我正在尝试使用Mpi4py 打印字典:
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.rank
if rank == 0:
data = {'a':1,'b':2,'c':3}
else:
data = None
data = comm.bcast(data, root=0)
print 'rank',rank,data
只要我使用以下命令为更多处理器运行它:
mpiexec -n 10 python code.py
结果与其他处理器结果混合在一起,如下所示:
rank 0 {'arank 2 {'a': 1, 'c': 3, 'b': 2}
rank' 3 {'a': 1, 'c': 3, 'b': 2}
: 1, 'c': 3, 'b': 2}
rank 8 {'a': 1, 'c': 3, 'b': 2}rank
1 {'a': 1, 'c': 3, 'b': 2}
rank 4 {'a': 1, 'c': 3, 'b': 2}
rank 5 {'a': 1, 'c': 3, 'b': 2}
rank 9 {'a': 1, 'c': 3, 'b': 2}
rankrank 7 {'a': 1, 'c': 3, 'b': 2}
6 {'a': 1, 'c': 3, 'b': 2}
我认为这种情况正在发生,因为当处理器完成其任务时,它们会打印结果,从而导致混合匹配。我尝试使用OrderedDict,但即使这样也没有用。代码如下
from mpi4py import MPI
import collections
comm = MPI.COMM_WORLD
rank = comm.rank
if rank == 0:
data = collections.OrderedDict({'a':1,'b':2,'c':3})
else:
data = None
data = comm.bcast(data, root=0)
print 'rank',rank,data
有没有办法让结果保持一致而不与其他处理器的结果混在一起?
【问题讨论】:
-
我想我在帖子中明确提到过,“结果与其他处理器结果混合在一起,如下所示”
-
您分享的 stackoverflow 链接对我的问题没有帮助。在上面的代码中,当我使用 pyhton MPI 库运行时。它在多个处理器中运行相同的代码,如果 N 个处理器正在运行,那么它会打印 N 次结果。所以当我展示结果时,你可以很清楚地看到,0 级词典与 1 级词典混合在一起,等等。这是我唯一的问题。我希望 0 级字典不与 1 级字典混合。谢谢!
-
在后面的代码中,我正在处理器之间交换字典数据,我想看看我正在编写的 MPI 代码在逻辑上是否正确。为此,我希望打印结果。我想指出,在使用 C/C++ 编程语言进行 MPI 时我没有遇到这样的问题。因此,对于 python,我试图找到一种方法来避免在打印时散布数据。非常感谢!
标签: python ordereddictionary mpi4py