【发布时间】:2013-12-03 17:09:54
【问题描述】:
我对 MPI 没有太多经验,我试图了解 allreduce 的工作原理。下面是一个受IPython tutorial 启发的简单示例。 2 个 MPI 引擎从此处的 IPython 笔记本仪表板在本地计算机上启动:
In [1]: import numpy as np
from IPython.parallel import Client
In [2]: c = Client(profile='mpi')
In [3]: view = c[:]
In [4]: view.scatter('a', np.arange(4.))
Out[4]: <AsyncResult: scatter>
In [5]: %%px
from mpi4py import MPI
import numpy as np
print MPI.COMM_WORLD.allreduce(np.sum(a), op=MPI.SUM)
[stdout:0] 1.0
[stdout:1] 5.0
我希望每个引擎都打印“6.0”,就像在 IPython 教程中一样。这里,就好像没有执行归约操作一样。这可能很简单,但我不太明白我做错了什么?
我用:
- Ubuntu 12.04
- Python 2.7.3 32 位
- IPython 1.1.0
- mpi4py 1.2.2
- mpich2
【问题讨论】:
-
我想知道,与 python 教程不同,您使用 allrecude(小写-a)而他们使用 Allreduce(大写 a)这一事实是否重要?
-
使用 Allreduce 会导致完全相同的问题。我在这里使用 allreduce 只是为了使示例更短。