我想知道是否有可能同時接收來自一個發送者的消息,並以其他方式併發發送給一個接收者。如果是的話,它會如何表現?從一個發送者/接收者併發地接收/發送
爲了更明確的問題,讓我們想象一下,我們有4個線程,他們每一位都是從同一來源
MPI_Recv(buf, count, type, THE_SAME_SOURCE, tag, status)
所有這些線程是同一MPI過程中監聽消息,所以他們所擁有的相同的MPI等級。並從其他MPI進程或相同但來自不同線程的人員,調用MPI_Send。每個接收者是否收到相同的消息,或者只是其中的一個,或者引發了一些異常(發生錯誤)?
換句話說,如果4個線程(在相同的MPI進程中或不在相同的MPI進程中)發送消息給可能也在相同的MPI進程中的一個接收器。它是否收到所有的消息?
我對MPI沒有太大的經驗,對上述問題的回答可能對我有很大的幫助。
謝謝
這是一個很好的答案。鏈接爲+1。 –
這與鏈接對多線程執行所說的內容是否相反?它指出:「[...]同樣,如果兩個邏輯併發的接收操作接收到兩個連續發送的消息,則這兩個消息可以按任意順序匹配兩個接收。」我讀它的方式我們無法知道哪個線索的收到將「贏」。我錯了嗎?編輯:另外我的報價確實說,兩個接收操作確實可以是邏輯併發的(即「同時」)。 – Quantumboredom
@Quantumboredom:我可以看到這個鏈接如何表達可能會讓人困惑。引用和周圍的段落指出,當你有兩個沒有任何外部順序點的線程時,那麼你沒有任何定義的發送和接收的順序。有時你運行,一個會擊敗另一個,並且其他時間可能是另一種方式。我的觀點是他們實際上是在幕後同步的,所以他們絕不會「同時」發生。換句話說,我的觀點是總是會有第一個,行爲是由這個順序定義的。 – ex0du5