在算法的每一步中,我必须从其他处理器收集大量的根数据,而某些处理器的数据大小可能为零。
因此,我想知道当缓冲区不是空的时候,使用MPI_Igatherv还是使用(MPI_Isend & MPI_Irecv)更有效和更快。
MPI内部是否负责MPI_Igatherv中的零缓冲区?
使用单边通信而不是MPI_Igatherv或MPI_Isend是否更好和可能?
发布于 2015-03-24 17:48:33
很多情况下,你只需要实现它,看看会发生什么。实现可以为不同的情况提供许多优化。网络硬件/拓扑可能会影响结果。
通常,将零字节传递给集体操作没有什么问题。贡献零字节的进程可能仍然处于良好的位置(从拓扑上讲),并且可以参与集体操作。
单边操作可能会更好,也可能不会。再次取决于许多因素。
https://stackoverflow.com/questions/29233097
复制相似问题