一种新的 MPI 集体通信实现方法
1. 引言
集体操作的性能对许多应用程序的运行时间和可扩展性至关重要。经过数十年的研究,针对特定架构、网络、参与者数量和消息大小,已经产生了各种各样的集体通信算法。然而,选择最优算法不仅取决于应用程序运行的系统,还与集体函数的参数(如对等节点数量、数据大小、数据类型)有关。在优化便携式消息传递接口(MPI)库时,如何在运行时选择合适的算法成为一个基本问题。
我们的工作旨在为每个系统和 MPI 参数集自动选择最优的集体实现,这可能会为每次集体函数调用带来显著的性能提升。预测点对点通信性能的模型(如 LogP 或 LogGP)可以近似集体通信性能,从而为选择集体实现提供依据。但对于硬件辅助的集体操作,这些建模技术可能并不适用,因为硬件集体操作通常优于软件算法,直接调用硬件集体操作并绕过建模评估是合理的优化策略。
基于这些考虑,我们设计了下一代集体框架,目标如下:
1. 实现细粒度的算法选择,选择的基本单位是单个函数。
2. 基于 MPI 函数参数进行高效的运行时决策。
3. 为简单决策(如硬件实现)提供“快速路径”。
4. 采用模块化方法,方便添加和移除算法,特别是第三方算法。
5. 使所有算法(包括第三方添加的算法)能被用户应用程序、测试和基准测试工具自动使用。
2. 相关工作
许多研究小组通过仅实现部分标准化集体操作来限制选择问题,并假设这些算法具有全局适用性。一些 MPI 实现(如 MPICH、MPICH2、LAM/MPI)在编译时静态选择或基于有限的运行时参数选择集体实现,决策通常基于通信器和/或数据大小,而不考虑网络特性和物理拓扑。