Mpi_recv在等待从进程发送的消息时挂起

时间:2013-04-22 16:27:36

标签: c mpi matrix-multiplication openmpi

所以我试图自己编写一个使用MPI(OpenMPI实现)的矩阵乘法。问题是,虽然通过MPI_Send / MPI_Recv将主要部分矩阵从主设备发送到从设备,但是主设备中应该从从设备接收答案的MPI_Recv(由// !!!注释标记)等待无休止,从不接收任何答案

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

要明确问题,可以在那里找到代码: http://pastebin.com/ZY9jQXDD

所以,任何人都知道问题所在,并且可以帮助我吗?

1 个答案:

答案 0 :(得分: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构造派生数据类型,以便以便携方式发送结构。