有时候,我们的每个节点都需要向其他所有或者一部分节点发送数据,而不仅仅是根节点往其他节点发送数据,这个时候,我们就要用到全局通信。这边主要讲两个API,MPI_Alltoall和MPI_Alltoallv.
MPI_Alltoall
int MPI_Alltoall(const void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
MPI_Comm comm)
sendbuf代表发送缓冲区的起始地址
sendcount代表要发送的数量
sendtype代表发送的数据类型
recvbuf代表接收缓冲区的起始位置
recvcount代表要接收的数量
recvtype代表要接收的类型
comm代表通信子
这个是指当前进程往其他每个进程(包括自己)要发送的数据都是一样的,都是发送sendbuf中的数据。
MPI_Alltoallv
有时候,我们当前进程往其他进程发送的数据不一样,个数也不一样,这个时候就需要用MPI_Alltoallv来解决。
int MPI_Alltoallv(const void *sendbuf,
const int *sendcounts,
const int *sdispls,
MPI_Datatype sendtype,
void *recvbuf,
const