假設你做了兩個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