我想知道是否有可能并发接收来自一个发送者的消息,以及其他方式并发发送到一个接收者的并发。如果是,它将如何表现?
为了使问题更加清晰,我们假设我们有4个线程,每个线程都在监听来自同一来源的消息
MPI_Recv(buf, count, type, THE_SAME_SOURCE, tag, status)
所有这些线程都在同一个MPI进程中,因此它们具有相同的MPI级别。而从其他MPI进程或相同但来自不同的线程,有人称为MPI_Send。每个接收器是接收相同的消息,还是仅接收其中一个消息,或者抛出一些异常(发生错误)?
反过来说,如果4个线程(在同一个MPI进程内或不在同一个MPI进程内)向一个接收器发送消息,该消息也可能处于同一个MPI进程中。它收到所有消息吗?
我对MPI没有丰富的经验,对上述问题的回答可能对我有很大帮助。
谢谢
答案 0 :(得分:3)
接收按照注册顺序处理。从来没有“同时”的情况,因为它们是同步的。
Description of Point-To-Point Communication Semantics
因此,在您的第一种情况下,这意味着当四个线程正在等待接收时发生的那个发送将被发送到第一个线程以注册接收,而其他线程将继续等待后续消息。 / p>
在你的第二种情况下,再没有“同时”。发送消息的第一个线程将是接收线程接收的线程。其他发送不会有接收者注册。