所以我试图自己编写一个使用MPI(OpenMPI实现)的矩阵乘法。问题是,虽然通过MPI_Send / MPI_Recv将主要部分矩阵从主设备发送到从设备,但是主设备中应该从从设备接收答案的MPI_Recv(由// !!!注释标记)等待无休止,从不接收任何答案
但是,我可以看到slave进程正在发送答案(第167行中的debugMessage)。
要明确问题,可以在那里找到代码: http://pastebin.com/ZY9jQXDD
所以,任何人都知道问题所在,并且可以帮助我吗?
答案 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
构造派生数据类型,以便以便携方式发送结构。