我有許多從屬節點,它們可能會也可能不會向主節點發送消息。所以目前主節點沒有辦法知道有多少MPI_Recv。出於效率原因,從節點必須向主節點發送最少數量的消息。MPI:當預期的MPI_Recv數量未知時該怎麼辦
我設法找到a cool trick,當它不再期待任何消息時,它會發送額外的「完成」消息。不幸的是,在我的情況下,這似乎不起作用,發件人數量可變。有關如何解決這個問題的任何想法?謝謝!
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_Barrier但'之後從不打印barrier'消息,因爲程序停留在MPI_RECV – kornesh
等級0獲得永不調用屏障顯然是掛起來的。刪除障礙,它會運行。 – Jeff
它實際上沒有暫停運行,但它然後執行MPI_Send(NULL,1,MPI_INT,root,DONE,MPI_COMM_WORLD);'在第一個從節點完成計算之後......沒有等待其他從節點 – kornesh