<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MPI on zzudongxiang</title><link>https://www.zzudongxiang.com/tags/mpi-/</link><description>Recent content in MPI on zzudongxiang</description><generator>Hugo</generator><language>zh-cn</language><copyright>© 2026 zzudongxiang.com · [豫ICP备2022012018号-1](https://beian.miit.gov.cn/) · &lt;img src="https://www.zzudongxiang.com/images/gongan.png" alt="公安备案" style="display:inline-block;height:1.2em;vertical-align:-0.2em;margin-inline-end:2px"&gt;[豫公网安备41160202000614号](https://www.beian.gov.cn/)</copyright><lastBuildDate>Tue, 07 May 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://www.zzudongxiang.com/tags/mpi-/index.xml" rel="self" type="application/rss+xml"/><item><title>文献阅读《Adaptive and Hierarchical Large Message All-to-all Communication Algorithms...》</title><link>https://www.zzudongxiang.com/posts/adaptive-hierarchical-alltoall/</link><pubDate>Tue, 07 May 2024 00:00:00 +0000</pubDate><guid>https://www.zzudongxiang.com/posts/adaptive-hierarchical-alltoall/</guid><description>&lt;div&gt;&#10;&lt;h2 id="i-前置内容"&gt;&lt;span fontsize="" color=""&gt;I. 前置内容&lt;/span&gt;&lt;/h2&gt;&#10;&lt;p&gt;&lt;span fontsize="" color=""&gt;在了解集合通信（Collective Communication）之前要先了解点P2P对点通信（Point-to-Point）。P2P通信通常为两个不同进程间的通信，是1对1的； 在MPI规范中，既有同步阻塞的P2P接口：MPI_send和MPI_Recv接口，也定义了非阻塞的P2P接口如：MPI_Isend、MPI_Irecve。&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;span fontsize="" color=""&gt;集合通信和P2P通信是相对应的，集合通信则是1对多或是多对多的。在分布式系统中，各个节点间往往存在大量的集合通信需求，而我们可以用消息传递接口（Message Passing Interface，MPI）来定义一些比较底层的消息通信行为譬如Reduce、Allreduce、Scatter、Gather、Allgather等。&lt;/span&gt;&lt;/p&gt;&#10;&lt;h3 id="11-系统架构"&gt;&lt;span fontsize="" color=""&gt;1.1 系统架构&lt;/span&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;span fontsize="" color=""&gt;集合通信算法的优化往往与其对应的网络拓扑和系统架构有直接关系，通常情况下，一个节点内的GPU-GPU或GPU-CPU之间的结构成为系统架构，节点之间的网络连接称为网络拓扑，一种确定的系统架构会有确定的网络拓扑架构。&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;span fontsize="" color=""&gt;在HPC领域有很多经典的系统架构和网络拓扑，例如：&lt;/span&gt;&lt;code&gt;Summit system&lt;/code&gt;&lt;span fontsize="" color=""&gt;或者&lt;/span&gt;&lt;code&gt;Lassen system&lt;/code&gt;&lt;span fontsize="" color=""&gt;等。本文主要由于发表于2021年，很多系统架构和指标数据与当先最新数据差异较大，但是为了方便后续的理解，本文后续还是以&lt;/span&gt;&lt;code&gt;Summit system&lt;/code&gt;&lt;span fontsize="" color=""&gt;和&lt;/span&gt;&lt;code&gt;Lassen system&lt;/code&gt;&lt;span fontsize="" color=""&gt;为例进行分析。&lt;/span&gt;&lt;/p&gt;&#10;&lt;img src="images/image-qlmv.png" style="display: inline-block;width:100.0%;height:100.0%" alt="image-qlmv.png" /&gt;&#10;&lt;p&gt;简化的Summit System和Lassen System（论文中的结构）&lt;/p&gt;&#10;&lt;p&gt;&lt;span fontsize="" color=""&gt;每个节点包含6个GPU和2个CPU，每3个GPU和1个CPU组成一个Group，使用&lt;/span&gt;&lt;code&gt;NVLink&lt;/code&gt;&lt;span fontsize="" color=""&gt;进行连接，CPU与CPU之间使用&lt;/span&gt;&lt;code&gt;X-Bus&lt;/code&gt;&lt;span fontsize="" color=""&gt;进行连接，同时与&lt;/span&gt;&lt;code&gt;IB&lt;/code&gt;&lt;span fontsize="" color=""&gt;网卡使用&lt;/span&gt;&lt;code&gt;PCIe&lt;/code&gt;&lt;span fontsize="" color=""&gt;进行连接，节点间使用&lt;/span&gt;&lt;code&gt;IB&lt;/code&gt;&lt;span fontsize="" color=""&gt;协议进行组网。&lt;/span&gt;&lt;code&gt;NVLink&lt;/code&gt;&lt;span fontsize="" color=""&gt;、&lt;/span&gt;&lt;code&gt;NVSwitch&lt;/code&gt;&lt;span fontsize="" color=""&gt;、&lt;/span&gt;&lt;code&gt;IB&lt;/code&gt;&lt;span fontsize="" color=""&gt;等硬件设备的概念将会在下一节中介绍。&lt;/span&gt;&lt;/p&gt;&#10;&lt;h3 id="12-相关组件"&gt;&lt;span fontsize="" color=""&gt;1.2 相关组件&lt;/span&gt;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;&lt;span fontsize="" color=""&gt;NVLink and NVSwitch&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;NVLink&lt;/code&gt;&lt;span fontsize="" color=""&gt;和&lt;/span&gt;&lt;code&gt;NVSwitch&lt;/code&gt;&lt;span fontsize="" color=""&gt;是一种可支持服务器内和服务器间实现高级多 GPU 通信的基础模组。第四代&lt;/span&gt;&lt;code&gt;NVLink&lt;/code&gt;&lt;span fontsize="" color=""&gt;技术可为多 GPU 系统配置提供高于以往 1.5 倍的带宽，以及增强的可扩展性。第三代&lt;/span&gt;&lt;code&gt;NVSwitch&lt;/code&gt;&lt;span fontsize="" color=""&gt;基于 &lt;/span&gt;&lt;code&gt;NVLink &lt;/code&gt;&lt;span fontsize="" color=""&gt;的高级通信能力构建，可为计算密集型工作负载提供更高带宽和更低延迟。&lt;/span&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;&lt;span fontsize="" color=""&gt;Mellanox InfiniBand&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;InfiniBand&lt;/code&gt;&lt;span fontsize="" color=""&gt;（直译为“无限带宽”技术，缩写为&lt;/span&gt;&lt;code&gt;IB&lt;/code&gt;&lt;span fontsize="" color=""&gt;）是一个用于高性能计算的计算机网络通信标准，它具有极高的吞吐量和极低的延迟，用于计算机与计算机之间的数据互连。&lt;/span&gt;&lt;code&gt;InfiniBand&lt;/code&gt;&lt;span fontsize="" color=""&gt;也用作服务器与存储系统之间的直接或交换互连，以及存储系统之间的互连。常用的IB交换机/网卡带宽普遍为为400GB/s。&lt;/span&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;&lt;span fontsize="" color=""&gt;Remote Direct Memory Access (RDMA)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;span fontsize="" color=""&gt;RDMA是一种概念，在两个或者多个计算机进行通讯的时候使用DMA， 从一个主机的内存直接访问另一个主机的内存。&lt;/span&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="13-non-personalized-all-to-all"&gt;&lt;span fontsize="" color=""&gt;1.3 (Non-)Personalized All-to-All&lt;/span&gt;&lt;/h3&gt;&#10;&lt;h4 id="131-non-personalized-all-to-all"&gt;&lt;span fontsize="" color=""&gt;1.3.1 Non-Personalized All-to-All&lt;/span&gt;&lt;/h4&gt;&#10;&lt;p&gt;&lt;span fontsize="" color=""&gt;Non-Personalized All-to-All（通常称为 MPI_Allgather）是一种 MPI 集体通信模式，是 MPI_Gather 和 MPI_Bcast 的结合。所有进程按等级顺序从其他进程收集数据。操作结束时，每个进程都将与所有其他进程交换数据。&lt;/span&gt;&lt;/p&gt;&#10;&lt;h4 id="132-personalized-all-to-all"&gt;&lt;span fontsize="" color=""&gt;1.3.2 Personalized All-to-All&lt;/span&gt;&lt;/h4&gt;&#10;&lt;p&gt;&lt;span fontsize="" color=""&gt;Personalized All-to-All称为 MPI_Alltoall，与 MPI_Allgather 类似，所有进程都相互共享数据。然而，每个进程都会向其他进程发送不同的数据，从而形成一种个性化的集体通信模式（即，每个进程都会向每个其他进程发送不同的数据块）&lt;/span&gt;&lt;/p&gt;&#10;&lt;h3 id="14-相关算法"&gt;&lt;span fontsize="" color=""&gt;1.4 相关算法&lt;/span&gt;&lt;/h3&gt;&#10;&lt;h4 id="141-ring"&gt;&lt;span fontsize="" color=""&gt;1.4.1 Ring&lt;/span&gt;&lt;/h4&gt;&#10;&lt;p&gt;&lt;span fontsize="" color=""&gt;每个进程i发送数据给(i+1) \ N并从(i-1) \ N接收数据，但是这种方法会带来过高的延迟。&lt;/span&gt;&lt;/p&gt;</description></item></channel></rss>