我在使用MPI4Py Python模块中的Scatter函数时遇到问题。 我的假设是我应该能够为sendbuffer传递一个列表。但是,当我这样做时,我收到一致的错误消息,或者确实添加了另外两个参数,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大师是否对此进行了澄清?
答案 0 :(得分:6)
如果要移动原始缓冲区(与Gather
一样),则提供三元组[buffer, size, type]
。查看演示中的示例。如果要发送Python对象,则应使用更高级别的接口并调用内部使用gather
的{{1}}(注意小写)。