RDMA-In-Practice[1] MTU&SL&ODP&CC
可以看到,在libverbs的pingpong示例中,还有如下图所示许多可供选择与调整的选项,这篇博客在上一篇的基础上探究与实现一下未涉及到的选项。
知乎专栏RDMA杂谈非常详尽的讲述了RDMA技术的基本概念与一些重要的细节,希望能在理论学习的基础上写一些代码对RDMA进行实践,同时把学习过程与代码整理出来作为这一系列博客的内容。
代码仓库:RDMA-In-Practice
并行程序利用多个CPU核同时参与运算,加速问题求解。由于不同进程的数据存放在不同位置,它们之间需要通过通信进行同步与传输数据。并行程序中的通信往往需要耗费许多时间,而在此过程中CPU可以利用空余的周期进行计算操作,通信和计算的重叠对于并行程序而言有着重要意义。
为此,MPI提供了非阻塞通信函数来实现通信和计算的重叠。在MPI中,主进程对非阻塞通信函数的调用会在一些初始化操作后返回,之后通信的实际执行可以通过主线程调用MPI_Test、额外的卸载实体如子线程、硬件网络能力等功能来实现。其中,网络卸载机制具有通信操作从CPU完全卸载的潜能。
DPU常被用于卸载访问控制、入侵检测、在线压缩、传输安全加密等管理任务并被广泛地使用在数据中心中。它的网络功能与集成的CPU核使其具有集合通信操作卸载能力,卸载后,可以进一步释放主机资源,提高主机计算效率。
MPI程序开发者需要了解应用程序运行过程中的性能指标、通信模式以优化程序的性能,衍生出了相应的分析工具。MPI标准最初提供了Profile接口PMPI,分析工具可以通过PMPI接口拦截MPI调用,从而分析应用程序对不同MPI接口的调用次数与消耗的时间。然而使用PMPI并不能反映与追踪MPI内部实现的行为(如集合通信算法),为了弥补这一点,MPI 3.0标准引入了MPI Tool接口(MPI_T)。分析工具可以借助其查询MPI的内部信息。
In-Network Aggregation是指将集合操作部分卸载到交换机中进行,这样以来每个主机进程仅需向网络中发送与接收一遍数据,降低了数据传输的次数也降低了集合操作的时间。
SHArP是Mellanox交换机支持的一种协议,能对Reduce、Allreduce、Barrier、Broadcast等操作提供支持。
GPU Direct与SmartNIC、DPU、FPGA实现与上层应用相关论文阅读。
点对点通信是MPI提供的最基础的接口之一,MPI中的点对点通信操作分为阻塞式与非阻塞式两种,即MPI_Send/MPI_Recv与MPI_Isend/MPI_Irecv,后者中的字母“i”代表非阻塞式通信。消息传递接口MPI的标准在2021年9月已经进入了4.0版本,这篇博客也是基于其官方文档对点对点通信接口进行介绍,主要介绍阻塞式通信的语义、通信模式的内容,原文档中第三章其余部分在有机会详细了解后可能更新在别的博客中。
MPI官网:MPI Forum
MPI4.0文档官方地址:MPI: A Message-Passing Interface Standard Version 4.0
作者:Juan A. Rico-Gallego, Juan C. Díaz-Martín, Ravi Reddy Manumachu, and Alexey L. Lastovetsky.
期刊:ACM Comput. Surv. 51, 6, Article 126 (January 2019)
doi:doi.org/10.1145/3284358
ACM DL URL:https://dl.acm.org/doi/abs/10.1145/3284358
对集群的通信成本进行建模是一个重要又具有挑战性的工作,它能为并行应用通信模式的设计提供帮助,并为对其的进一步优化奠定基础。这篇综述中作者总结了高性能计算领域中出现的一些主要的通信性能模型(Communication Performance Model),并提出了自己对性能模型的建立、用途、评价等问题的看法与观点。
通过这篇综述可以很好的了解通信性能模型的发展、作用,以及现有的各类集合通信模型分别做了什么、为何这样设计、有哪些进一步的贡献、优缺点等等,作者作为这一领域的研究人员在文章中还提出了许多独到的个人见解。
这篇博客的目的主要在于对文章作以总结,因此也是按照原文的结构划分章节内容。
Open MPI是MPI的一种开源、成熟的实现方式,它在开发初期整合了了田纳西大学的FT-MPI、Lose Alamos国家实验室的LA-MPI、印第安纳大学的LAM/MPI与斯图加特大学的PACX-MPI[34]四个项目技术与资源,由上述四个机构组成最初的开发团队,旨在使用来自各个项目的最佳思路和技术。
Open MPI的设计以MPI组件架构(MPI Component Architecture, MCA)为中心,具有较好的扩展性,实现集合通信功能的框架也位于MCA架构中。
Unified Collective Communication(UCC)是一个集体通信操作API和库,对于当前和新兴的编程模型和运行时来说,具有灵活、完整、功能丰富等特点。
Github地址:https://github.com/openucx/ucc