我正在使用 MPI(使用 fortran,但问题比任何给定语言都更具体地针对 MPI 标准),并且特别使用缓冲发送/接收函数 isend 和 irecv。现在,如果我们想象以下场景:
进程0:
isend(stuff1, ...)
isend(stuff2, ...)
流程一:
wait 10 seconds
irecv(in1, ...)
irecv(in2, ...)
消息是否按照发送顺序传递到进程 1,即我能否确定 in1 == stuff1 和 in2 == stuff2如果所有情况下使用的标签都相同?
是的,消息按照发送的顺序接收。标准将其描述为非超车消息。看到这个MPI 标准部分有关更多详细信息,请参阅以下摘录:
订单消息是非超车的:如果发送方连续向同一目的地发送两条消息,并且两条消息都匹配相同的接收,则如果第一条消息仍处于待处理状态,则此操作无法接收第二条消息。如果接收者连续发布两个接收,并且都匹配相同的消息,则如果第一个接收操作仍处于待处理状态,则该消息无法满足第二个接收操作。此要求有利于发送与接收的匹配。如果进程是单线程的并且在接收中未使用通配符 MPI_ANY_SOURCE,它可以保证消息传递代码是确定性的。 (稍后描述的一些调用,例如 MPI_CANCEL 或 MPI_WAITANY,是不确定性的其他来源。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)