CANN 组织链接:https://atomgit.com/cann
HIXL 仓库链接:https://gitcode.com/cann/hixl
1. HIXL 通信库在分布式计算中的角色与范式创新
在构建大规模并行计算系统时,进程间的数据交换效率直接决定了系统的可扩展性。HIXL(Huawei Xfer Library)是 CANN 平台提供的、面向集群场景的高效单边通信库。它基于PGAS(Partitioned Global Address Space,分区全局地址空间)编程模型,为开发者提供了简单、可靠的点对点数据传输能力,绕过了传统通信模型中对同步的严格依赖。
HIXL 的核心优势在于实现了远程显存的直接访问。这意味着一个计算单元(PE)可以主动对远端 NPU 的显存发起读写操作,无需远端 PE 配合执行接收逻辑,从而实现了计算与通信的解耦。
2. PGAS 模型与对称内存空间的构建
HIXL 范式要求集群中的所有 PE 共享一个逻辑上的全局地址空间,但物理上数据是分区存储的。
2.1 对称堆(Symmetric Heap)的静态分配
为了确保远程寻址的确定性和高效性,SHMEM 范式(HIXL 基于此)要求在初始化时静态分配对称内存。
- 地址一致性:每个 PE 都在其本地 HBM 中分配一块与所有其他 PE 逻辑偏移量一致的内存区域。这种对称性是实现远程地址计算的基础。
- 内存对齐:驱动层确保分配的对称堆内存起始地址严格满足硬件的访存对齐要求(通常为 32 字节或 64 字节)。这是保障 DMA 引擎能够以最大突发带宽进行数据传输的前提。
2.2 远程寻址的硬件映射
HIXL 将逻辑 PE ID 和本地地址转换为远端物理地址。该过程依赖于底层 CANN Driver 建立的全局拓扑映射表。当 PE A 请求访问 PE B 的地址时,HIXL 利用这个映射表,直接配置 DMA 或 RDMA 引擎,实现数据的跨设备搬运。
3. 单边通信原语与异步执行模型
HIXL 提供的核心接口是围绕单边操作设计的,所有操作默认采用非阻塞模式。
3.1 远程数据传输(Put/Get)
- shmem_put (远程写入):源 PE 直接向目标 PE 的显存写入数据。由于目标 PE 无需执行对应的接收操作,计算核心可以持续执行本地任务。
- shmem_get (远程读取):源 PE 主动从目标 PE 读取数据到本地显存。HIXL 确保该操作利用了硬件的零拷贝(Zero-copy)能力,数据直接经由高速链路传输至源 PE 的 HBM。
3.2 内存屏障与同步控制
为了维护 PGAS 模型下数据的一致性,HIXL 提供了精确的同步原语。
- shmem_fence:保证当前 PE 侧对远程内存的所有写操作(Put)对其他 PE 而言是可见的,顺序在本地操作之后。
- shmem_quiet:这是一个更强的同步点,用于等待所有已发起的、针对特定 PE 的异步传输操作彻底完成。这保证了在进行依赖于远程数据的新计算任务前,数据已完全同步到位。
4. 硬件加速传输路径:HCCS 与 RDMA 协同
HIXL 的性能高度依赖于底层硬件传输层的效率。
4.1 片内通信的 HCCS 优化
在单机多卡场景中,HIXL 优先利用 NPU 间的专用高速互联链路 HCCS。
- P2P 访问使能:驱动层为 HIXL 提供了 P2P(Peer-to-Peer)访问权限,允许 NPU 之间直接通过 HCCS 链路进行显存间的 DMA 传输,避免了数据经过 Host CPU 缓存的路径。
4.2 跨节点通信的 RoCE/RDMA
对于大规模集群,HIXL 依赖于支持 RDMA 的网络接口(如 RoCE)。
- 内核旁路:通信请求直接下发至网卡硬件,绕过了操作系统的网络协议栈,消除了 CPU 参与数据包处理的开销。
- 带宽饱和:HIXL 优化了传输粒度,以匹配 RoCE 协议的最佳传输单位,确保在跨节点梯度同步时,能够充分利用网络带宽。
5. 原子内存操作(AMO)在分布式同步中的应用
为了在无需双边通信的情况下实现同步和计数,HIXL 提供了原子内存操作接口。
5.1 硬件加速的原子操作
- 存储侧计算:
shmem_atomic_add等操作的加法、最大值等逻辑直接在目标 PE 的内存控制器或网络适配器中完成。 - 避免锁竞争:这种机制消除了传统软件锁和全局栅栏同步带来的高延迟,尤其适用于需要频繁更新共享计数器或同步点的图计算和分布式训练场景。
6. 总结
CANN HIXL 库通过引入 PGAS 模型和单边通信范式,为昇腾集群提供了低延迟、高带宽的跨设备显存传输能力。其对 HCCS 和 RoCE 链路的底层驱动、严格的对称内存规划以及强大的原子操作支持,使其成为构建高效大规模并行计算应用的关键底层支撑。
CANN 组织链接:https://atomgit.com/cann
HIXL 仓库链接:https://gitcode.com/cann/hixl