【问题标题】:Will MPI_Send block if matching MPI_IRecv takes less data elements?如果匹配 MPI_IRecv 需要更少的数据元素,MPI_Send 会阻塞吗?
【发布时间】:2013-04-27 00:38:53
【问题描述】:

假设以下 MPI 代码。

MPI_Comm_Rank(MPI_COMM_WORLD, &rank);

if (rank == 0){
   MPI_Send(a, count, MPI_CHAR, 1, 0, MPI_COMM_WORLD);
   MPI_Send(b, count, MPI_CHAR, 1, 0, MPI_COMM_WORLD);
}
else if (rank == 1){
   MPI_IRecv(a, 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &req);
   MPI_Recv(b, count, MPI_CHAR, 0, 0, MPI_COMM_WORLD);
   MPI_Wait(&req, &status);
}

说第一个MPI_Send(a, count, ...) 不会阻塞,即使它的匹配MPI_IRecv(a, 1, ...) 只是从缓冲区中读取一个元素,这是否正确?

另外,由于没有对缓冲区 a 进行读/写,即使在 MPI_IRecv 之后没有直接调用 MPI_Wait,进程 1 也不会阻塞是否正确?

谢谢。

【问题讨论】:

    标签: parallel-processing mpi distributed-computing


    【解决方案1】:

    MPI_Send 将阻塞...这是一个阻塞调用。当调用应用程序可以安全地读取/修改发送/接收缓冲区时,“阻塞”调用将返回。不保证匹配的 MPI_[I]recv 调用。

    MPI 库对应用程序中缓冲区的读/写状态一无所知。 MPI 标准要求应用程序对消息缓冲区的稳定性做出某些保证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2022-12-03
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多