gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:22:29 25 4
gpt4 key购买 nike

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

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

为了清楚地说明问题,可以在那里找到代码: http://pastebin.com/ZY9jQXDD

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

最佳答案

您的问题很简单,就是标签值不匹配。主进程需要标签值为 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构造派生数据类型,以便以可移植的方式发送结构。

关于c - Mpi_recv 在等待从属进程发送的消息时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16152032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com