【发布时间】:2020-12-29 05:56:16
【问题描述】:
我想知道当传输的数据量大致相同时,执行MPI_Alltoallv 和MPI_Alltoall 函数的运行时间有什么区别?我找不到任何这样的基准测试结果。我对大规模实例感兴趣,其中使用了数万或更好的数十万个 MPI 进程,并且这些进程对应于给定 HPC 系统的重要部分(最多考虑一些现代的,例如 BG/Q , Cray XC30, Cray XE6, ...)。
【问题讨论】:
-
如果传输的数据量相同,为什么要使用 alltoallv?自洽 MPI 表示 alltoallv 提供了更大的灵活性,因此在任何情况下它都不应优于 alltoall —— 否则库应该简单地将 alltoall 设为 alltoallv 的一个特例。
-
如果数据量比较大,一般用
MPI_Alltoall还是MPI_Alltoallv都无所谓。当数据量相对较小时,有许多有效的算法可以实现具有相同大小的块(即MPI_Alltoall)的all-to-all。什么是“相对小”,什么是“相对大”取决于系统和网络架构。 -
@RobLatham:与 MPI_Alltoallv 相比,仅调用一次 MPI_Alltoall 无法解决我的问题。也许(我仍然不知道,必须证明)可以多次(至少两次)调用 MPI_Alltoall 来解决。
-
@HristoIliev:我不确定,因为我认为一些集体在 MPP 上进行了高度优化,但不是全部。我在某处读到 MPI_Alltoallv 通常是使用点对点操作实现的,用户的实现甚至可以比库提供的实现更好。
标签: mpi