2012-03-15 58 views
5

我想發送一條消息給接收具有特定標籤的消息的等級之一。如果有任何排名收到消息並且消息被消耗。在MPI_Recv()中,我們可以使用MPI_ANY_SOURCE/MPI_ANY_TAG接收消息,但MPI_Send()不能執行此操作。我如何發送帶有未知目的地的郵件? MPI_Bcast()不能這樣做,因爲接收後,我必須回覆源進程。 謝謝。如何在MPI中發送沒有特定目的地的消息?

+0

如果接收器知道它需要什麼數據,可以使用單向MPI操作,即'MPI_Get'。 – 2012-03-15 15:31:06

+1

這個問題在http://scicomp.stackexchange.com上會很受歡迎 – 2012-03-17 19:19:10

回答

4

我會做的是有工人進程信號給主人,他們準備好接收。主人會跟蹤哪些隊伍已準備好,選擇一個(最低排名第一,隨機,循環賽,無論你喜歡),發送給它,並清除其「準備好」的標誌。

1

你只是想發送一條消息到一個隨機等級?

MPI_Comm_size(MPI_COMM_WORLD, &size); 
sendto = rand() % size; 
MPI_Send(buffer, count, MPI_CHAR, sendto, 0, MPI_COMM_WORLD); 
1

簡短的回答是:你不能在MPI中做到這一點。

稍長的答案是:你可能不想這樣做。我猜你正試圖設置某種盜竊工作。正如suszterpatt所建議的那樣,你可以使用單向通信從發送進程中'抓取'工作,但是你需要使用鎖,除非有一些本地進程組的想法,否則這將不能很好地擴展到許多進程。也就是說,你不能讓1000個進程從一個進程中盜用,你需要分解)。

相關問題