MPI缓冲发送/接收订单

ast*_*rog 3 parallel-processing mpi

我正在使用MPI(与fortran但问题是MPI标准比任何给定语言更具体),并且特别使用缓冲的发送/接收函数isend和irecv.现在,如果我们想象以下场景:

流程0:

isend(stuff1, ...)
isend(stuff2, ...)
Run Code Online (Sandbox Code Playgroud)

过程1:

wait 10 seconds
irecv(in1, ...)
irecv(in2, ...)
Run Code Online (Sandbox Code Playgroud)

消息是按照发送顺序传递给进程1的,即如果使用的标记在所有情况下都相同,我可以确定in1 == stuff1和in2 == stuff2 吗?

Edr*_*ric 7

是的,邮件按发送顺序收到.这被标准描述为非超车消息.有关 更多详细信息,请参阅此MPI标准部分,以下是摘录:

订单消息是非超车的:如果发送方连续向同一目的地发送两条消息,并且两条消息都匹配相同的接收,则如果第一条消息仍处于挂起状态,则此操作无法接收第二条消息.如果接收器连续发布两个接收,并且两者都匹配相同的消息,则如果第一个消息仍然未决,则该消息不能满足第二个接收操作.此要求有助于发送与接收的匹配.如果进程是单线程的并且未在接收中使用通配符MPI_ANY_SOURCE,则它保证消息传递代码是确定性的.(稍后描述的一些调用,例如MPI_CANCEL或MPI_WAITANY,是非确定性的其他来源.)