Python 如果每个进程的根都是它自己,为什么Gather()会失败?

Python 如果每个进程的根都是它自己,为什么Gather()会失败?,python,parallel-processing,mpi,mpi4py,Python,Parallel Processing,Mpi,Mpi4py,代码: 输出应为: b:[1,1],0 b:[1,1],1 然而,程序不会打印任何内容,也不会终止。原因是什么?我怎样才能达到预期的输出 MPI中的所有集合操作必须由相应通信器中的所有进程调用。所有进程上的许多参数必须相同。参数的语义在以下文档中有很好的记录: argumentsroot和comm在所有 过程 但同样,还有一个MPI\u Allgather,在此之后,所有进程上的所有数据都可用,即没有根。我认为每个进程都应该指定相同的根(以便它们都知道数据发送到哪里)。现在,每个进程都将自己指定

代码:

输出应为:

b:[1,1],0

b:[1,1],1


然而,程序不会打印任何内容,也不会终止。原因是什么?我怎样才能达到预期的输出

MPI中的所有集合操作必须由相应通信器中的所有进程调用。所有进程上的许多参数必须相同。参数的语义在以下文档中有很好的记录:

argumentsroot和comm在所有 过程


但同样,还有一个
MPI\u Allgather
,在此之后,所有进程上的所有数据都可用,即没有根。

我认为每个进程都应该指定相同的根(以便它们都知道数据发送到哪里)。现在,每个进程都将自己指定为根,所以他们都认为自己是接收者,只是坐在那里等待其他人向他们发送数据。@mgilson这听起来很合乎逻辑。你知道我还能怎样达到预期的效果吗?顺便说一句,我不想使用AllGather()。我认为这取决于期望的结果。通常,想法是将其他进程上的所有数据收集到指定进程。你知道你想在哪个进程上收集数据吗?我想在每个进程上复制数据。啊。。。那么在这种情况下,有一种方法你可能会用到。我不知道
mpi4py
包装器方法叫什么。。。
#mpiexec  -n 2 python3  gather.py
from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()

a = 1
comm.barrier()
b = comm.gather(a, root=rank)
print("b:", b, rank )
comm.barrier()