假设你做了两个MPI_Sends
和两个MPI_Recvs
,你可以指定哪个缓冲区的内容将会到达MPI_Send
,如果你有两个不同的缓冲区可用,并且每个MPI_Recvs
都从每个缓冲区接收?你能指定在MPI中发送哪个缓冲区吗?
if(rank == MASTER) {
for(kk=1; kk < size; kk++) {
MPI_Recv(printbuf, numcols, MPI_DOUBLE, kk, tag, MPI_COMM_WORLD, &status);
sum = sum + printbuf[kk-1];
}
}
else {
MPI_Send(sum, local_ncols + 2, MPI_DOUBLE, MASTER, tag, MPI_COMM_WORLD);
}
if(rank == MASTER) {
for(kk=1; kk < size; kk++) {
MPI_Recv(secondbuf, numcols, MPI_DOUBLE, kk, tag, MPI_COMM_WORLD, &status);
sum2 = sum2 + secondbuf[kk-1];
}
}
else {
MPI_Send(sum2, local_ncols + 2, MPI_DOUBLE, MASTER, tag, MPI_COMM_WORLD);
}
这是OpenMPI。每个等级计算sum
和sum2
。我想获得所有等级'sum
s和sum2
s的总和。有没有更好的办法?例如,通过指定要发送的缓冲区sum
和sum2
,下面的代码是否可以被压缩?
对于关于改进或压缩代码的问题,我会在[Code Review](http://codereview.stackexchange.com/)Stack Exchange上提出这类问题。如果你把它放在那里而不是在这里,你会得到更好,更精确的答案。 – esote
是否有任何理由避免使用减少操作? – Angelos
@Impmpence谢谢,我会试试 – FullMetalScientist