我正在自学 Python mpi4py 模块,用于在多个进程中进行编程。我编写了以下代码来练习分散。
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
if rank == 0:
data = [i for i in range(8)]
else:
data = None
data = comm.scatter(data, root=0)
print str(rank) + ': ' + str(data)
用 8 个进程运行上述代码效果很好。但是,当我使用 4 个进程运行它时,出现错误:
Traceback (most recent call last):
File "scatter.py", line 11, in <module>
data = comm.scatter(data, root=0)
File "Comm.pyx", line 874, in mpi4py.MPI.Comm.scatter (src/mpi4py.MPI.c:68023)
File "pickled.pxi", line 656, in mpi4py.MPI.PyMPI_scatter (src/mpi4py.MPI.c:32402)
File "pickled.pxi", line 127, in mpi4py.MPI._p_Pickle.dumpv (src/mpi4py.MPI.c:26813)
ValueError: expecting 4 items, got 8
这个错误是什么意思?我的意图是将我的 8 个项目的大数组分解为 8 / 4 = 2 个项目的小数组,并向每个进程发送一个这样的子数组。我怎么做?如果可能的话,我还想概括为不均匀分成 8 个的进程数,例如 3 个。