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

Why Gather() fails if the root of every process is itself?

代码:

#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()

输出应该是:

b:[1, 1], 0

b:[1, 1], 1

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

MPI 中的所有集体操作必须由相应通信器中的所有进程调用。许多参数在所有进程中必须相同。 MPI standard:

中详细记录了参数的语义

The argumentsroot and comm must have identical values on all processes.

但话又说回来,还有 MPI_Allgather,之后整个数据在所有进程上都可用 - 即没有根。