【问题标题】:Consecutive MPI non-blocking calls连续 MPI 非阻塞调用
【发布时间】:2021-12-13 06:44:32
【问题描述】:

我一直想知道 MPI 运行时如何区分多个非阻塞调用(在同一个通信世界中)之间的消息?

例如:假设我们有多个 Iallgather 操作。

...
auto res1 = MPI_Iallgather(... , MPI_COMM_WORLD, req[0]);
auto res2 = MPI_Iallgather(... , MPI_COMM_WORLD, req[1]);
MPI_Waitall(2, req, MPI_STATUSES_IGNORE);
...

Isend/Irecv 例程中,有一个int tag 参数。但是对于其他非阻塞调用,没有标签参数。 当我们创建一个MPI_Request 对象时,它会创建一个唯一的标签吗?

【问题讨论】:

    标签: c++ mpi distributed-computing hpc openmpi


    【解决方案1】:

    正如您所观察到的,由于没有标签,因此如果两个进程以不同的顺序发出Iallgathers,则可能会出现问题。因此,所有进程都需要以相同的顺序发布非阻塞集合。 request 对象在这里没有任何帮助,因为第一个请求对应于您首先在什么进程上执行的任何操作,因此您可能会出现不匹配的情况。

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 2012-08-24
      • 2011-05-25
      • 2016-07-18
      • 1970-01-01
      • 2021-05-19
      • 2022-01-02
      • 2011-05-03
      • 2014-04-04
      相关资源
      最近更新 更多