MPI 非阻塞发送和接收排序

MPI non-blocking send and receive ordering

在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)
  }

等级 1 是否可以保证在缓冲区 1 中接收 A,在缓冲区 2 中接收 B?

谢谢!

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