代码:
#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
但是,程序不会打印任何内容,也不会终止。这是什么原因以及如何实现所需的输出?
答案 0 :(得分:1)
MPI中的所有集体操作必须由相应通信器中的所有进程调用。所有过程中的许多参数必须相同。 MPI standard:
中详细记录了参数的语义argumentsroot和comm必须具有相同的值 过程
但是,再次,还有MPI_Allgather
,之后所有进程都可以获得整个数据 - 即没有根。