簡體   English   中英

MPI_Irecv不接收循環后發送的消息

[英]MPI_Irecv doesn't receive message sent after loop

我一直在並行執行餐飲哲學家問題,但遇到了我無法解決的問題。 基本上,我有一個for循環,其中一個進程檢查是否有新消息,然后休眠半秒鍾(它隨機重復此次數)。 在那部分之后,它嘗試收集所有需要的派生,以啟動程序的“進餐”部分。

問題是由於某種原因,如果我從for循環內部發送MPI消息,則目標進程將正常接收該消息,但是如果我在循環之后發送一條消息,則不會。 讓我展示一下它在代碼中的外觀,希望它將使事情變得更加清晰:

for (int i = 0; i < think; i++) {
        Sleep(500);

        // Recieve messages
        MPI_Irecv(&rcv, 1, MPI_INT, MPI_ANY_SOURCE, NEED_FORK, MPI_COMM_WORLD, &req);
        MPI_Test(&req, &flag, &status);

        if(flag != 0) {
            // Do stuff
        }
        MPI_Send(&myid, 1, MPI_INT, target, NEED_FORK, MPI_COMM_WORLD); // He recieves this
    }
MPI_Send(&myid, 1, MPI_INT, target, NEED_FORK, MPI_COMM_WORLD); // He doesn't recieve this

問題在於,由於某種原因,targert進程無法接收在for循環完成之后發送的任何消息,而可以接收在循環之前或循環期間發送的任何消息。 我真的不知道該怎么做才能完成這項工作,非常感謝您的幫助...

這是我對類似問題的回答。 甚至代碼看起來也差不多。 使用MPI_Irecv和MPI_Test的無限循環

請仔細查看在循環內調用MPI_Test和MPI_Irecv。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM