MPI_ALLTOALL(sendbuf,
sendcount, sendtype, recvbuf, recvcount, recvtype, comm) IN sendbuf 发送消息缓冲区的起始地址(可选数据类型) IN sendcount 发送到每个进程的数据个数(整型) IN sendtype 发送消息缓冲区中的数据类型(句柄) OUT recvbuf 接收消息缓冲区的起始地址(可选数据类型) IN recvcount 从每个进程中接收的元素个数(整型) IN recvtype 接收消息缓冲区的数据类型(句柄) IN comm 通信域(句柄) int MPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR) <type> SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR MPI_ALLTOALL是组内进程之间完全的消息交换,其中每一个进程都向其它所有的进程发送消息,同时,每一个进程都从其它所有的进程接收消息。
从图中可以看出,在互换之前依次将各进程的发送缓冲区组织在一起,互换之后依次将各进程的接收缓冲区组织在一起,则接收缓冲区组成的矩阵是发送缓冲区组成的矩阵的转置(若每次向一个进程发送的数据是多个,则将这多个数据看作是一个数据单元)。 | |||