MPI\u Alltoall能比MPI\u Alltoall跑赢多少?
我想知道在传输的数据量大致相同的情况下,执行MPI\u Alltoall能比MPI\u Alltoall跑赢多少?,mpi,Mpi,我想知道在传输的数据量大致相同的情况下,执行MPI\u Alltoallv和MPI\u Alltoall函数在运行时间上有什么区别?我找不到任何这样的基准测试结果。我对大规模实例感兴趣,其中使用了数万个或更好的数十万个MPI进程,并且这些进程对应于给定HPC系统的很大一部分(最好考虑一些现代系统,如BG/Q、Cray XC30、Cray XE6等)。概述 MPI_Alltoall的一大优点是,协议决策可以快速做出,因为它们依赖于少量标量。相反,如果库实现者希望将MPI_Alltoallv优化,他
MPI\u Alltoallv
和MPI\u Alltoall
函数在运行时间上有什么区别?我找不到任何这样的基准测试结果。我对大规模实例感兴趣,其中使用了数万个或更好的数十万个MPI进程,并且这些进程对应于给定HPC系统的很大一部分(最好考虑一些现代系统,如BG/Q、Cray XC30、Cray XE6等)。概述
MPI_Alltoall的一大优点是,协议决策可以快速做出,因为它们依赖于少量标量。相反,如果库实现者希望将MPI_Alltoallv优化,他们必须扫描四个向量,以确定通信是否接近均匀、高度稀疏或其他模式
另一个问题是MPI_Alltoall可以轻松地将输出缓冲区用作暂存空间,因为每个进程都提供和消耗相同数量的数据。对于MPI_Alltoallv来说,做所有的簿记是不现实的,因此将分配所有的临时空间。我不记得这个问题的细节,但我想我已经在MPI佳能的某个地方读过了
实现框架
alltoallv至少有两种特殊情况,其中一种可以比MPI库更好地进行优化:
I\u MPI\u ADJUST\u ALLTOALL
和I\u MPI\u ADJUST\u ALLTOALLV
的可用选项中得出。这些限制是基本的还是仅仅实用的,留给读者作为练习
实践经验
当MPI_Alltoall on Blue Gene/p使用DCMF_Alltoallv()时,与MPI_Alltoallv没有区别,后者甚至可能更好,因为应用程序预先填充了向量参数
我写了一个版本的all-to-all交换为Blue Gene/Q,速度和MPI_-Alltoall一样快。我的版本对常量和向量参数是不可知的,所以这个结果意味着MPI_Alltoall的性能与MPI_Alltoall类似。但是,我现在找不到代码来完全确定细节
然而,Blue Gene网络非常特殊,特别是w.r.t.全对全,因此在CPU速度远高于网络速度的系统上,胖树或龙型网络的行为将大不相同
我建议您编写一个基准测试,并在您打算运行应用程序的地方对其进行测量。一旦您有了一些数据,就可以更容易地找出哪些优化可能会遗漏。Overview
MPI_Alltoall的一大优点是,协议决策可以快速做出,因为它们依赖于少量标量。相反,如果库实现者希望将MPI_Alltoallv优化,他们必须扫描四个向量,以确定通信是否接近均匀、高度稀疏或其他模式
另一个问题是MPI_Alltoall可以轻松地将输出缓冲区用作暂存空间,因为每个进程都提供和消耗相同数量的数据。对于MPI_Alltoallv来说,做所有的簿记是不现实的,因此将分配所有的临时空间。我不记得这个问题的细节,但我想我已经在MPI佳能的某个地方读过了
实现框架
alltoallv至少有两种特殊情况,其中一种可以比MPI库更好地进行优化: