-1

所以我正在尝试为自己编写一个使用 MPI(OpenMPI 实现)的矩阵乘法。问题是,尽管通过 MPI_Send/MPI_Recv 从主进程向从属发送矩阵的一部分工作正常,但主进程中的 MPI_Recv 应该从从属接收答案(由 //!!! 注释标记)无限等待,从未收到任何答案.

但是,我可以看到从属进程正在发送答案(第 167 行中的 debugMessage)。

为了使问题更清楚,可以在此处找到代码:http: //pastebin.com/ZY9jQXDD

所以,有人知道问题出在哪里,可以请帮助我吗?

4

1 回答 1

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如果工作人员可以发送带有各种标签的消息,请在 master 的接收呼叫中放置适当的标签或使用。

无偿建议:发送结构使用MPI_BYTE非常反 MPI 和非常不便携的风格。构造一个派生的数据类型,MPI_Type_create_struct以便以可移植的方式发送结构。

于 2013-04-22T21:34:50.957 回答