我注意到它的工作方式与MPI_Scatter
类似。但是,我对它如何在流程之间分配数据感到非常困惑。是否可以将MPI_Scatter
与另一个集合函数结合使用以达到与MPI_Alltoall
相同的结果?
谢谢
答案 0 :(得分:1)
答案在MPI标准中(5.8,第168页)
接收到从进程i发送的第j个块 按进程j放置在recvbuf的第i个块中
[...]
如果comm是内部交流者,则结果就像每个过程一样 通过调用,向每个进程(包括它自己)执行发送,
MPI_Send(sendbuf+i * sendcount * extent(sendtype),sendcount,sendtype,i, ...)
以及来自其他所有进程的调用
MPI_Recv(recvbuf+i * recvcount * extent(recvtype),recvcount,recvtype,i,...)
是的,如果您要使用MPI_Alltoall()
comm_size
,则可以实现MPI_Scatter()
。