HiXL 通信优化库 - 高性能单边通信库 前言HiXLHuawei intra-XL是 CANNCompute Architecture for Neural Networks生态中的高性能单边通信库。它专为昇腾AscendAI 处理器设计支持高效的远程直接内存访问RDMA、原子操作以及点对点通信旨在满足分布式AI训练、高性能计算HPC等场景下对低延迟、高带宽通信的需求。与传统基于消息传递的集合通信库如HCCL不同HiXL 采用单边通信模型允许一个进程直接读写远程进程的内存而无需远程进程的显式参与。这种模型特别适合细粒度的、异步的通信模式能够显著减少同步开销提升系统整体吞吐量。本文将详细介绍 HiXL 的核心概念、基础使用方法、多种通信模式、性能优化技巧以及典型应用场景帮助开发者充分利用其能力构建高性能分布式应用。HiXL 简介HiXL 提供以下核心能力为分布式应用提供高性能的单边通信支持RDMA 操作支持远程直接内存访问Remote Direct Memory Access允许一个节点直接读写另一个节点的内存无需远程CPU参与从而大幅降低通信延迟和CPU开销。HiXL 的 RDMA 实现针对昇腾硬件进行了深度优化能够充分利用硬件卸载能力。原子操作提供多种原子原语如原子加fetch_add、原子比较交换compare_swap等。这些操作在分布式锁、计数器、一致性协议等场景中至关重要能够保证多节点并发访问时的数据一致性。单边读/写提供get读和put写操作允许本地进程直接访问远程内存地址。这种单边通信模型简化了编程接口并支持异步操作便于构建高性能的异步通信流水线。远程执行支持远程过程调用RPC模型可以将函数调用或计算任务发送到远程节点执行并将结果返回。这为构建分布式计算框架、任务调度系统提供了基础能力。相比华为集合通信库HCCLHiXL 在设计目标和适用场景上有所不同HCCL主要面向 AI 训练中的集合通信操作如 AllReduce、AllGather、Broadcast强调多节点间的同步和数据聚合适合大规模参数同步等粗粒度通信场景。HiXL则专注于细粒度的单边通信。它允许进程独立、异步地访问远程内存无需与其他进程进行显式的握手或同步。这种模型特别适合需要频繁、小规模数据交换的场景例如分布式数据结构链表、哈希表、分布式缓存、细粒度锁、以及一些自定义的、非规整的通信模式。因此在需要低延迟、高并发、细粒度数据访问的分布式系统中HiXL 往往是比 HCCL 更合适的选择。基础使用初始化importhixl# 初始化 HiXLhixl.init()# 获取设备信息print(fDevice count:{hixl.get_device_count()})远程读写远程读取数据importhixl# 创建远程指针remote_ptrhixl.RemotePointer(rank1,# 目标节点address0x1000,# 远端地址size1024,# 数据大小)# 读取数据local_bufferhixl.buffer(1024)hixl.get(local_buffer,# 本地缓冲区remote_ptr,# 远端指针)# 写入数据hixl.put(remote_ptr,# 远端指针local_buffer,# 本地缓冲区)原子操作importhixl# 远程地址remote_addrhixl.RemotePointer(rank1,address0x1000)# 原子加hixl.fetch_add(remote_addr,value1)# 原子比较交换hixl.compare_swap(remote_addr,compare0,value1)通信模式模式一Remote Direct Memory AccessRDMA 模式适合大数据传输# 创建 RDMA 操作rdmahixl.RDMA(src_rank0,src_addr0x1000,dst_rank1,dst_addr0x2000,size1024*1024,)# 提交 RDMA 操作rdma.submit()# 等待完成rdma.wait()模式二Remote Procedure CallRPC 模式适合触发远端计算# 定义远程函数hixl.remotedefremote_compute(data):returndata*2# 调用远程函数resultremote_compute.invoke(rank1,args(data,))模式三One-Sided Reduction单边归约# 创建归约操作reductionhixl.Reduce(ranks[0,1,2,3],# 参与节点address0x1000,# 归约地址size1024,# 数据大小opsum,# 归约操作)reduction.submit()reduction.wait()性能优化零拷贝# 启用零拷贝hixl.zero_copy_enable()# 使用预注册内存mrhixl.memory_register(buffer)hixl.get(local,mr.remote_ptr)流水线化# 创建多个操作ops[]foriinrange(4):ophixl.RDMA(srci,dsti1,size1024)ops.append(op)# 并行提交硬件支持foropinops:op.submit()# 同步foropinops:op.wait()批处理# 批量操作batchhixl.Batch()# 添加多个操作foriinrange(100):ophixl.RDMA(srci,dsti%4,size1024)batch.add(op)# 一次性提交batch.submit()batch.wait()数据结构队列# 创建远程队列queuehixl.Queue(rank1,address0x1000)# 入队queue.enqueue(data)# 出队dataqueue.dequeue()Rbtree# 创建远程红黑树treehixl.Rbtree(rank1,address0x1000)# 插入tree.insert(key,value)# 查询valuetree.find(key)Hash Map# 创建远程哈希表hashmaphixl.Hashmap(rank1,address0x1000)# 插入hashmap.put(key,value)# 查询valuehashmap.get(key)性能数据HiXL 的通信性能操作类型大小延迟us带宽GB/sRDMA Read4KB512.5RDMA Write4KB512.5Atomic Add4B2N/AQueue Enq4B3N/A使用场景场一分布式链表# 分布式链表的节点插入new_nodeallocate_node()new_node.nexthead headnew_node# 同步到远程hixl.put(remote_head_ptr,new_node)场景二分布式计数器# 全局计数器counter_ptrhixl.RemotePointer(rank0,address0x1000)# 原子递增hixl.fetch_add(counter_ptr,1)场景三分布式缓存# 分布式缓存cachehixl.Hashmap(rank1)# 存储cache.put(key,value)# 获取valuecache.get(key)总结HiXL 是 CANN 的高性能单边通信库适用于细粒度通信场景主要特点RDMA 操作原子操作零拷贝支持流水线化使用 HiXL 可以实现高效的分布式系统和存储引擎更多技术细节https://atomgit.com/cann/hixl