4.10 归约-分散(Reduce-Scatter) |
MPI中还包括对每个归约操作的变形,即将结果分散到组内的所有进程中去.
MPI_REDUCE_SCATTER(sendbuf, recvbuf, recvcounts, datatype, op, comm) IN sendbuf 发送消息缓冲区的起始地址(可变) OUT recvbuf 接收消息缓冲区的起始地址(可变) IN recvcounts 整型数组,存放着分布在每个进程的结果元素个数, 所 有进程的数组都必须相同. IN datatype 输入缓冲区的元素类型(句柄) IN op 操作(句柄) IN comm 通信子(句柄) int MPI_Reduce_scatter(void* sendbuf, void* recvbuf, int *recvcounts MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) MPI_REDUCE_SCATTER(SENDBUF, RECVBUF, RECVCOUNTS, DATATYPE, OP, COMM, IERROR) <type> SENDBUF(*), RECVBUF(*) INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR
MPI_REDUCE_SCATTER对由sendbuf、count和datatype定义的发送缓冲区中的数组逐个元素进行归约操作,这个数组的长度count = ∑irecvcount[i].然后, 这个结果向量被分成n个互不连通的部分,这里n为组中成员数.第i段中包含recvcounts[i]个元素,第i段发送到进程i并且存放在由recvbuf、recvcounts[i]和datatype定义的输入缓冲区中.
对实现者的建议:MPI_REDUCE_SCATTER例程从功能上等价于:一个count次(等于 recvcounts[i])MPI_REDUCE操作,后面跟一个sendcounts次(等于recvcounts)MPI_SCATTERV操作,但直接实现可能运行得更快一些(对实现者的建议结尾).
Copyright: NPACT |