如果每个进程的根本身就是为什么Gather()会失败?

时间:2016-05-11 22:32:19

标签: python parallel-processing mpi 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()

输出应为:

  

b:[1,1],0

     

b:[1,1],1

但是,程序不会打印任何内容,也不会终止。这是什么原因以及如何实现所需的输出?

1 个答案:

答案 0 :(得分:1)

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

中详细记录了参数的语义
  

argumentsroot和comm必须具有相同的值   过程

但是,再次,还有MPI_Allgather,之后所有进程都可以获得整个数据 - 即没有根。