【发布时间】:2015-05-27 19:00:03
【问题描述】:
我必须在算法的每一步从其他处理器收集大量数据,而某些处理器的数据大小可能为零。
所以,我想知道哪种方法更高效,使用起来更快,MPI_Igatherv,还是在缓冲区不为空时使用 (MPI_Isend & MPI_Irecv)。
MPI 是否在内部处理 MPI_Igatherv 中的零缓冲区?
使用单向通信代替 MPI_Igatherv 或 MPI_Isend 是否更好且可能?
【问题讨论】:
我必须在算法的每一步从其他处理器收集大量数据,而某些处理器的数据大小可能为零。
所以,我想知道哪种方法更高效,使用起来更快,MPI_Igatherv,还是在缓冲区不为空时使用 (MPI_Isend & MPI_Irecv)。
MPI 是否在内部处理 MPI_Igatherv 中的零缓冲区?
使用单向通信代替 MPI_Igatherv 或 MPI_Isend 是否更好且可能?
【问题讨论】:
其中很多你只需要实现它,看看会发生什么。实现可以为不同的情况提供很多优化。网络硬件/拓扑可能会影响结果。
一般来说,将零字节传递给集体操作并没有错。贡献零字节的进程可能仍然处于有利位置(从拓扑上讲)并且可以参与集体操作。
单边操作可能会更好,也可能不会。再次取决于许多因素。
【讨论】: