在启动MPI_Send
之前,有没有办法检查是否发布了非阻止接收(对于给定的源和标记)?我有一种情况,发送者和接收者都不知道他们想要发送/接收谁。我的想法是首先在所有选定的接收器上发布一个开放的Irecv
。然后发件人将检查某个等级是否已发布接收,并且仅在发送时才发送(否则继续)。在所有发送成功后,接收方将取消未完成的Irecv
s。
目前适用于集体(MPI_COMM_WORLD
)阵列广播;我想知道是否有不同的方式
我想我可以反过来做MPI_Isend
和MPI_Probe
。在这种情况下,虽然我担心未接收的发送缓冲区会发生什么(并且听说MPI_Cancel
是发送的坏消息)
感谢您的任何建议。
答案 0 :(得分:0)
您可以使用源代码MPI_Irecv
执行具有不同数据传输标记的MPI_ANY
。使用阻止MPI_Recv
也可以解决问题。收到消息后(MPI_Test
的标志== 1),您可以通过阅读MPI_Status.MPI_SOURCE
来检查实际来源是谁(如果状态参数为MPI_STATUS_IGNORE
则不可用)。
如果您没有明确要求必须同步传输,那么使用单向通信可能会更有效率(发件人只需将数据放入接收者。