检查MPI中的“握手”?

时间:2016-08-23 20:33:52

标签: mpi

在启动MPI_Send之前,有没有办法检查是否发布了非阻止接收(对于给定的源和标记)?我有一种情况,发送者和接收者都不知道他们想要发送/接收谁。我的想法是首先在所有选定的接收器上发布一个开放的Irecv。然后发件人将检查某个等级是否已发布接收,并且仅在发送时才发送(否则继续)。在所有发送成功后,接收方将取消未完成的Irecv s。

  • 目前适用于集体(MPI_COMM_WORLD)阵列广播;我想知道是否有不同的方式

  • 我想我可以反过来做MPI_IsendMPI_Probe。在这种情况下,虽然我担心未接收的发送缓冲区会发生什么(并且听说MPI_Cancel是发送的坏消息)

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

您可以使用源代码MPI_Irecv执行具有不同数据传输标记的MPI_ANY。使用阻止MPI_Recv也可以解决问题。收到消息后(MPI_Test的标志== 1),您可以通过阅读MPI_Status.MPI_SOURCE来检查实际来源是谁(如果状态参数为MPI_STATUS_IGNORE则不可用)。

如果您没有明确要求必须同步传输,那么使用单向通信可能会更有效率(发件人只需数据放入接收者。

其他信息:Introducing One-Sided Communication