如果每个进程的根都是它自己,为什么 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
,之后整个数据在所有进程上都可用 - 即没有根。
代码:
#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
,之后整个数据在所有进程上都可用 - 即没有根。