CANN(Compute Architecture for Neural Networks)是华为昇腾(Ascend)AI 处理器的核心软件架构,它扮演着类似于 NVIDIA CUDA 的角色,但在异构计算的抽象、图编译优化以及分布式协同上,CANN 提供了更加系统级的全栈解决方案。今天,我们将从最底层的硬件 NPU 架构出发,自底向上穿透驱动层、算子层、执行引擎,直到图级编译,全方位硬核解析 CANN 的运作机制。

一、硬件基座:达芬奇架构(Da Vinci NPU)

要理解 CANN,必须先理解它所驱动的物理硬件。昇腾 AI 处理器的核心是达芬奇架构(Da Vinci Architecture)。不同于 GPU 以标量/向量为主的流式多处理器(SM)设计,达芬奇架构是专为张量运算(Tensor Calculation)打造的 3D Cube 计算引擎。

1. AI Core 计算单元

每个 NPU 由多个 AI Core 组成,每个 AI Core 内部包含了三大核心计算单元:

2. 分级存储系统

为了喂饱庞大的 Cube 算力,NPU 设计了极高带宽的本地内存(L1 Cache, L0A/L0B/L0C Buffer),并通过专用的搬运单元(Data Copy Unit, MTE)实现 Global Memory(HBM)到 Local Memory 的高速数据流转。CANN 算子优化的核心,往往就是在这套复杂的流水线中进行数据的 Tiling(切分)与 Double Buffer 掩盖延迟。


二、系统底座与驱动层:HDC 与 Driver

在 NPU 硬件之上,CANN 的最底层是驱动程序(Driver)和固件(Firmware)。异构计算的核心挑战之一就是如何高效管理 Host(CPU)与 Device(NPU)之间的通信与资源隔离。


三、算子开发与编译引擎(Ascend C & TIK)

算子(Operator)是神经网络执行的基本单元。CANN 经历了数代演进,在算子开发上形成了一套完备的体系。

1. TBE (Tensor Boost Engine) 与 DSL

早期 CANN 主要依赖基于 Python 的 TBE 框架。开发者通过 DSL(Domain Specific Language)或 TIK(Tensor Iterator Kernel)来描述算子的计算逻辑。DSL 面向图表达,而 TIK 需要开发者手动控制数据搬运和多核同步,门槛极高。

2. 新一代编程语言:Ascend C

为了对标 CUDA C++ 并降低门槛,华为推出了 Ascend C。这是一种原生 C/C++ 语法的算子编程语言。其核心理念是 SPMD(单程序多数据) 并行范式:

// 典型的 Ascend C 算子 Kernel 结构伪代码
extern "C" __global__ __aicore__ void add_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z) {
    // 1. 获取当前 AI Core 的 Block ID,实现数据并行划分
    uint32_t blockIdx = GetBlockIdx();
    
    // 2. 初始化 Pipeline 队列 (VECIN, VECOUT)
    TPipe pipe;
    TQue<QuePosition::VECIN, 1> inQueueX, inQueueY;
    TQue<QuePosition::VECOUT, 1> outQueueZ;
    
    // 3. 数据搬运:CopyIn (HBM -> Local Memory)
    DataCopy(inQueueX, x + offset, size);
    
    // 4. 向量计算:Compute (Vector Unit 加法指令)
    Add(z_local, x_local, y_local, size);
    
    // 5. 数据搬回:CopyOut (Local Memory -> HBM)
    DataCopy(z + offset, outQueueZ, size);
}

Ascend C 最大的突破在于它将复杂的 DataCopy(硬件 MTE 单元)与 Compute(Vector/Cube 单元)抽象为流水线(Pipeline)编程模型,开发者只需利用 TPipe 就能轻松实现异步数据搬运和计算掩盖,不再需要手写汇编指令。


四、图级编译与执行引擎:GE 与 FE

神经网络很少是孤立的算子,而是一张巨大的计算图。CANN 对上层框架(如 MindSpore, PyTorch, TensorFlow)暴露了统一的图级接口 Ascend Graph API,其背后则是强大的编译优化引擎。

1. GE(Graph Engine,图引擎)

GE 是 CANN 的"大脑"。当 PyTorch 下发了一张计算图时,GE 会接管这张图并进行一系列极限压榨:

2. FE(Fusion Engine,融合引擎)

FE 是 GE 的利刃。深度学习模型中最消耗时间的是频繁的读写显存(Memory Bound)。FE 的主要职责是算子融合(Operator Fusion)


五、自动调优引擎:AOE (Ascend Optimization Engine)

在异构计算中,由于张量 Shape 的动态变化和硬件缓存的物理限制,相同的计算逻辑在不同的切分策略(Tiling)下,性能差异可达十倍以上。为了打破这一瓶颈,CANN 引入了 AOE(Ascend Optimization Engine)自动调优引擎,让机器来压榨机器的极限。


六、集群通信原语:HCCL (Huawei Collective Communication Library)

进入大模型(LLM)时代后,单卡算力微不足道,千卡/万卡集群的分布式协同才是决定训练成败的关键。对标 NVIDIA 的 NCCL,CANN 推出了 HCCL(Huawei Collective Communication Library)集合通信库,它是昇腾分布式计算的大动脉。