2011-09-10 23 views
0

我使用MPI_Irecv從MPI中的某個主機接收數據。通過在函數的輸入參數中使用「源排名」,我必須定義我想從哪個主機接收數據。但是哪個主機向我發送數據並不重要,我只想獲取數據。如何在不定義發件人排名的情況下獲取數據?從MPI中的任何主機接收數據

我想我可以做一個循環掃描所有「行列」,但是有沒有更簡單的方法可以採取數據發送者是誰?

謝謝!

+1

該程序是否允許多個級別嘗試將數據發送到MPI_IRecv?如果不是,那麼MPI_ANY_SOURCE是一個很好的解決方案。如果不止一個等級可以發送,那麼如果有一個不匹配的MPI_Send,則有可能發生黑色MPI_Send調用掛起或MPI_Finalize出現錯誤。必須小心取消任何不匹配的MPI_Send/ISend調用...或者您必須準備好接受MPI_Finalize上的錯誤。 –

+0

許多主機不會嘗試同時發送數據。但只是好奇心,是否'MPI_Cancel'足以取消? – adba

+1

MPI_Cancel足以取消不匹配的MPI_Send。 –

回答

3

您可以使用MPI_ANY_SOURCE排名,它在各種recv/probe函數中使它們接受來自任何人的消息。