检查是否有“错误”;“握手”;在MPI中?

检查是否有“错误”;“握手”;在MPI中?,mpi,Mpi,在启动MPI\u发送之前,是否有方法检查是否发布了非阻塞接收(针对给定的源和标记)?我遇到了这样一种情况,发送者和接收者都不知道他们想要发送给谁/从谁那里接收。我的想法是首先在所有选定的接收者上发布一个openIrecv。然后,发送者将检查某个等级是否已发布接收,并且仅在为真时发送(否则继续)。所有发送成功后,接收方将取消未完成的Irecvs 这目前与一个集合(在MPI\u COMM\u WORLD上)阵列广播一起工作;我想知道是否有不同的方法 我想我可以反过来做,使用MPI-Isend和MP

在启动
MPI\u发送之前,是否有方法检查是否发布了非阻塞接收(针对给定的源和标记)?我遇到了这样一种情况,发送者和接收者都不知道他们想要发送给谁/从谁那里接收。我的想法是首先在所有选定的接收者上发布一个open
Irecv
。然后,发送者将检查某个等级是否已发布接收,并且仅在为真时发送(否则继续)。所有发送成功后,接收方将取消未完成的
Irecv
s

  • 这目前与一个集合(在MPI\u COMM\u WORLD上)阵列广播一起工作;我想知道是否有不同的方法

  • 我想我可以反过来做,使用
    MPI-Isend
    MPI-u探测器
    。在这种情况下,尽管我担心未接收的发送缓冲区会发生什么情况(并且听说
    MPI\u Cancel
    对发送来说是个坏消息)


谢谢您的建议。

您可以使用不同的数据传输标记执行
MPI\u-Irecv
,使用source as
MPI\u-any
。使用阻塞
MPI\u Recv
也可以达到目的。收到消息(
MPI\u Test
的标志==1)后,可以通过读取
MPI\u Status.MPI\u source
(如果Status参数为
MPI\u Status\u IGNORE
,则不可用)

如果您没有明确要求传输必须同步,那么使用单边通信可能会更有效率(发送方只是将其数据放在接收方)


附加信息:

您可以使用不同的数据传输标记执行
MPI\u-Irecv
,使用源代码作为
MPI\u-ANY
。使用阻塞
MPI\u-Recv
也可以完成此操作。一旦您收到消息(
MPI\u-Test
的标志==1),您可以通过读取
MPI\u Status.MPI\u source
(如果Status参数为
MPI\u Status\u IGNORE
,则不可用)

如果您没有明确要求传输必须同步,那么使用单边通信可能会更有效率(发送方只是将其数据放在接收方)


其他信息:

MPI不提供此选项。您可能希望改用MPI RMA,也称为单边通信。MPI不提供此选项。您可能希望改用MPI RMA,也称为单边通信。