检查是否有“错误”;“握手”;在MPI中?
在启动检查是否有“错误”;“握手”;在MPI中?,mpi,Mpi,在启动MPI\u发送之前,是否有方法检查是否发布了非阻塞接收(针对给定的源和标记)?我遇到了这样一种情况,发送者和接收者都不知道他们想要发送给谁/从谁那里接收。我的想法是首先在所有选定的接收者上发布一个openIrecv。然后,发送者将检查某个等级是否已发布接收,并且仅在为真时发送(否则继续)。所有发送成功后,接收方将取消未完成的Irecvs 这目前与一个集合(在MPI\u COMM\u WORLD上)阵列广播一起工作;我想知道是否有不同的方法 我想我可以反过来做,使用MPI-Isend和MP
MPI\u发送之前,是否有方法检查是否发布了非阻塞接收(针对给定的源和标记)?我遇到了这样一种情况,发送者和接收者都不知道他们想要发送给谁/从谁那里接收。我的想法是首先在所有选定的接收者上发布一个openIrecv
。然后,发送者将检查某个等级是否已发布接收,并且仅在为真时发送(否则继续)。所有发送成功后,接收方将取消未完成的Irecv
s
- 这目前与一个集合(在MPI\u COMM\u WORLD上)阵列广播一起工作;我想知道是否有不同的方法
- 我想我可以反过来做,使用
MPI-Isend
和MPI-u探测器
。在这种情况下,尽管我担心未接收的发送缓冲区会发生什么情况(并且听说MPI\u Cancel
对发送来说是个坏消息)
谢谢您的建议。您可以使用不同的数据传输标记执行MPI\u-Irecv
,使用source asMPI\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,也称为单边通信。