2

我在使用 MPI4Py Python 模块中的 Scatter 函数时遇到问题。我的假设是我应该能够将它传递给发送缓冲区的单个列表。但是,当我这样做时,我收到了一致的错误消息,或者确实添加了其他两个参数,recvbuf 和 root:

  File "code/step3.py", line 682, in subbox_grid
    i = mpi_communicator.Scatter(station_range, station_data)
  File "Comm.pyx", line 427, in mpi4py.MPI.Comm.Scatter (src/
mpi4py_MPI.c:44993)
  File "message.pxi", line 321, in mpi4py.MPI._p_msg_cco.for_scatter
(src/mpi4py_MPI.c:14497)
  File "message.pxi", line 232, in mpi4py.MPI._p_msg_cco.for_cco_send
(src/mpi4py_MPI.c:13630)
  File "message.pxi", line 36, in mpi4py.MPI.message_simple (src/
mpi4py_MPI.c:11904)
ValueError: message: expecting 2 or 3 items

下面是相关代码的剪辑,从上面提到的 682 以上几行开始。

for station in stations
        #snip--do some stuff with station
        station_data = []
        station_range = range(1,len(station))
        mpi_communicator = MPI.COMM_WORLD
        i = mpi_communicator.Scatter(station_range, nsm)
        #snip--do some stuff with station[i]
        nsm = combine(avg, wt, dnew, nf1, nl1, wti[i], wtm, station[i].id)
        station_data = mpi_communicator.Gather(station_range, nsm)

我尝试了许多初始化 station_range 的组合,但我一定没有正确理解 Scatter 参数类型。

Python/MPI 大师对此是否有澄清?

4

1 回答 1

6

如果要移动原始缓冲区(如Gather),则提供三元组[buffer, size, type]。查看演示以获取相关示例。如果要发送 Python 对象,则应使用更高级别的接口并调用内部gather使用的(注意小写字母)pickle

于 2010-09-14T20:29:17.920 回答