我必须在算法的每一步从其他处理器收集我的root上的大量数据,并且某些处理器的数据大小可能为零。
所以,我想知道当缓冲区不为空时,哪种方法更有效,更快,MPI_Igatherv或使用(MPI_Isend& MPI_Irecv)。
MPI内部是否在MPI_Igatherv中处理零缓冲区?
使用单面通信而不是MPI_Igatherv或MPI_Isend是否更好,更有可能?
答案 0 :(得分:0)
很多这样你只需要实施它,看看会发生什么。实现可以为不同的情况提供大量优化。网络硬件/拓扑可能会影响结果。
通常,将零字节传递给集合操作没有任何问题。贡献零字节的过程可能仍然处于良好位置(从拓扑上讲),并且可以参与集体操作。
片面操作可能更好,也可能不会。取决于许多因素。