MPI 非阻塞发送和接收排序

Posted

技术标签:

【中文标题】MPI 非阻塞发送和接收排序【英文标题】:MPI non-blocking send and receive ordering 【发布时间】:2021-12-30 10:11:35 【问题描述】:

在 2 核系统上,对于以下代码

if(rank == 0)
  
    MPI_Isend(A) // to rank 1
    // Do something else.
    MPI_Isend(B) // to rank 1
    // Do something else.
    MPI_Wait(B is sent)
    MPI_Wait(A is sent)
  
  else
  
    MPI_Irecv(buffer1) // Listen to rank 0
    // Do something else.
    MPI_Irecv(buffer2) // Listen to rank 0
    // Do something else.
    MPI_Wait(buffer2 is finished receiving)
    MPI_Wait(buffer1 is finished receiving)
  

是否保证 rank 1 在缓冲区 1 中接收 A,在缓冲区 2 中接收 B?

谢谢!

【问题讨论】:

你的例子很少,但我会说是的 【参考方案1】:

MPI 消息是“非超车”的。来自同一来源的两条消息不能以与它们发送(阻塞情况)或发起(非阻塞情况)不同的顺序到达。当然,您可以随时通过指定不同的标签来放心。

【讨论】:

以上是关于MPI 非阻塞发送和接收排序的主要内容,如果未能解决你的问题,请参考以下文章

用于未知消息大小的 MPI 非阻塞发送和接收以及 mpi_iprobe()

MPI 非阻塞发送/接收中的请求数组

发送多个 mpi 非阻塞发送 - 它会保留发送的顺序吗

一个不安全的 MPI 非阻塞通信示例?

非阻塞点对点通信中发送模式对 MPI 开销的影响

结构填充和非阻塞通信缓冲区问题导致的 MPI 派生数据类型问题