我有许多从节点,它们可能会或可能不会向主节点发送消息。因此,目前没有办法让主节点知道要期望多少个MPI_Recv。出于效率原因,从节点必须向主节点发送最少量的消息。
我设法找到了一个很酷的技巧,当不再期望任何消息时,它会发送一个额外的“完成”消息。不幸的是,在我的情况下,由于发送者数量不定,它似乎无法正常工作。您有什么想法吗?谢谢!
我设法找到了一个很酷的技巧,当不再期望任何消息时,它会发送一个额外的“完成”消息。不幸的是,在我的情况下,由于发送者数量不定,它似乎无法正常工作。您有什么想法吗?谢谢!
if(rank == 0){ //MASTER NODE
while (1) {
MPI_Recv(&buffer, 10, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
if (status.MPI_TAG == DONE) break;
/* Do stuff */
}
}else{ //MANY SLAVE NODES
if(some conditions){
MPI_Send(&buffer, 64, MPI_INT, root, 1, MPI_COMM_WORLD);
}
}
MPI_Barrier(MPI_COMM_WORLD);
MPI_Send(NULL, 1, MPI_INT, root, DONE, MPI_COMM_WORLD);
程序不工作,似乎仍在等待MPI_Recv
MPI_Send(NULL, 1, MPI_INT, root, DONE, MPI_COMM_WORLD);
,而不等待其他从节点。 - korneshMPI_Barrier(MPI_COMM_WORLD);
移动到else
子句内,仍然在 MPI_Recv 处挂起。 - kornesh