连续 MPI 非阻塞调用
Posted
技术标签:
【中文标题】连续 MPI 非阻塞调用【英文标题】:Consecutive MPI non-blocking calls 【发布时间】: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
对象时,它会创建一个唯一的标签吗?
【问题讨论】:
【参考方案1】:正如您所观察到的,由于没有标签,因此如果两个进程以不同的顺序发出Iallgather
s,则可能会出现问题。因此,所有进程都需要以相同的顺序发布非阻塞集合。 request 对象在这里没有任何帮助,因为第一个请求对应于您首先在什么进程上执行的任何操作,因此您可能会出现不匹配的情况。
【讨论】:
以上是关于连续 MPI 非阻塞调用的主要内容,如果未能解决你的问题,请参考以下文章