MPI_ALLGATHER(sendbuf,
sendcount, sendtype, recvbuf, recvcount, recvtype,comm) INsendbuf发送消息缓冲区的起始地址(可选数据类型) INsendcount发送消息缓冲区中的数据个数(整型) INsendtype 发送消息缓冲区中的数据类型(句柄) OUT recvbuf接收消息缓冲区的起始地址(可选数据类型) INrecvcount从其它进程中接收的数据个数(整型) INrecvtype 接收消息缓冲区的数据类型(句柄) INcomm 通信域(句柄) int MPI_Allgather(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR) <type> SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR MPI_GATHER是将数据收集到ROOT进程,而MPI_ALLGATHER相当于每一个进程都作为ROOT执行了一次MPI_GATHER调用,即每一个进程都收集到了其它所有进程的数据。从参数上看,MPI_ALLGATHER和MPI_GATHER完全相同,只不过在执行效果上,对于MPI_GATHER执行结束后,只有ROOT进程的接收缓冲区有意义,MPI_ALLGATHER调用结束后所有进程的接收缓冲区都有意义,它们接收缓冲区的内容是相同的。 MPI_ALLGATHERV(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, 由MPI_ALLGATHER和MPI_GATHER的关系,不难得知MPI_ALLGATHERV和MPI_GATHERV的关系。MPI_ALLGATHERV也是所有的进程都将接收结果,而不是只有根进程接收结果。从每个进程发送的第j块数据将被每个进程接收,然后存放在各个进程接收消息缓冲区recvbuf的第j块。进程j的sendcount和sendtype的类型必须和其他所有进程的recvcounts[j]和recvtype相同。
|
||