【发布时间】:2021-06-08 01:22:49
【问题描述】:
我知道Nonblocking通信不会阻塞代码,比如MPI_Isend会立即发送数据。但是当我们有一些 all-to-all 通信并且我们需要读取这些数据时,我们需要先使用 MPI_Wait 来获取数据。
对于全对全通信,我首先想到的是:(它是一个真实的代码)
1- initialise the MPI, getting the rank and size...
2- creating the data or read the first data from file
3- in a for loop, we need to send the data from all ranks to the other, by MPI_Isend or Evan MPI_Bcast
4- finalise the MPI
为了编写 for 循环,我们需要使用 MPI_Wait 来进行发送和接收。 我的问题是我们如何在非阻塞中使用重叠。
我想在每个迭代循环中使用两次 MPI_Isend 和 MPI_Irecv 来重叠从第一个接收数据开始的一些计算,同时进行另一次发送和接收,但是这种方法需要 4 个等待,是否有任何算法可以重叠非阻塞通信?
【问题讨论】:
标签: c++ c performance parallel-processing mpi