MPI_Igatherv VS MPI_Isend & MPI_Irecv

MPI_Igatherv VS MPI_Isend & MPI_Irecv

我必须在我的算法的每一步从其他处理器收集我的根上的大量数据,并且某些处理器的数据大小可能为零。

所以,我想知道哪种方法更有效、使用起来更快,MPI_Igatherv,或者当缓冲区不为空时使用 (MPI_Isend & MPI_Irecv)。

MPI 是否在内部处理 MPI_Igatherv 中的零缓冲区?

使用单向通信而不是 MPI_Igatherv 或 MPI_Isend 更好吗?

其中很多你只需要实施它,看看会发生什么。实现可以为不同的情况提供很多优化。网络 hardware/topology 可能会影响结果。

一般来说,将零字节传递给集体操作没有错。贡献零字节的进程可能仍然处于有利位置(从拓扑上讲)并且可以参与集体操作。

单方面操作可能会更好,也可能不会。又取决于很多因素。