2013-04-22 84 views
-1

所以我試圖寫自己一個使用MPI(OpenMPI實現)的矩陣乘法。問題是,儘管通過MPI_Send/MPI_Recv將主控器的一部分矩陣從主控制器發送到從屬控制器,但主控過程中MPI_Recv應該從從屬設備接收答覆(標記爲// !!!註釋),等待無限期,從未收到任何答案。Mpi_recv在等待從進程發送的消息時掛起

但是,我可以看到slave進程正在發送答案(第167行中的debugMessage)。

爲了使問題清晰,代碼可以在那裏找到: http://pastebin.com/ZY9jQXDD

因此,任何人知道問題所在,並能幫幫我嗎?

+0

您鏈接的代碼不再可用。請考慮將其直接嵌入到您的問題中。 – niklasfi 2014-02-07 16:03:30

回答

1

您的問題與標記值不匹配一樣簡單。主進程與預計的0標籤值的消息:

MPI_Recv(&ans, sizeof(answer),MPI_BYTE,MPI_ANY_SOURCE,0, 
     MPI_COMM_WORLD,MPI_STATUS_IGNORE);   | 
// ------------------- tag = 0 -----------------------+ 

而工作進程發送具有標籤RESULT,這恰好被定義爲1消息。如果工作人員可以使用各種標籤發送郵件,請將正確的標籤放在主人的接收電話中,或使用MPI_ANY_TAG

無理建議:使用MPI_BYTE發送結構是非常反MPI和非常便攜的風格。使用MPI_Type_create_struct構建派生數據類型,以便攜式方式發送結構。

+0

......該死的,我是盲人!謝謝! 此外,我會聽從你的建議(以後,現在我想讓它工作) – 2013-04-23 14:40:46