我在每个进程中添加了一大堆数组元素:
double rho[1024];
//Some operation to calculate rho for each process;
MPI_Allreduce(rho,rho,1024,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);
将rho作为sendbuf和recvbuf工作吗?
答案 0 :(得分:15)
您检查过MPI_IN_PLACE
吗?根据{{3}}和MPI_AllReduce man page,只要您在同一组内工作,它就可以用于为sendbuf和recvbuf指定相同的缓冲区。
电话会是:
MPI_Allreduce(MPI_IN_PLACE,rho,1024,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);