术语表
术语/缩略语 |
含义 |
---|---|
A1 |
AscendC::TPosition::A1代表设备上用于矩阵计算的逻辑内存,用于存放左矩阵,物理存储对应AI Core的L1 Buffer。 |
A2 |
AscendC::TPosition::A2代表设备上用于矩阵计算的逻辑内存,用于存放小块左矩阵(如经过分割、适配L0A Buffer容量的分块),物理存储对应AI Core的L0A Buffer。 |
AI Core |
昇腾AI处理器的计算核心,负责执行矩阵、矢量、标量计算密集的任务。使用Ascend C编程语言开发的算子运行在AI Core上。 |
Ascend IR |
Ascend Intermediate Representation,昇腾AI处理器专用的、用于表达计算流程的抽象数据结构。在本文档中,若无特殊说明,IR默认指代Ascend IR。 |
B1 |
AscendC::TPosition::B1代表设备上用于矩阵计算的逻辑内存,用于存放右矩阵,物理存储对应AI Core的L1 Buffer。 |
B2 |
AscendC::TPosition::B1代表设备上用于矩阵计算的逻辑内存,用于存放小块右矩阵(如经过分割、适配L0B Buffer容量的分块),物理存储对应AI Core的L0B Buffer。 |
Block |
Block在不同场景下具有多种含义,通常情况下指AI Core的逻辑核。典型场景有:
|
BlockID |
以0为起始的AI Core逻辑编号,可以比实际硬件核数大。 |
BlockDim |
参与计算的逻辑AI Core核数,在调用核函数时由开发者指定,其值一般等于或大于实际物理核数。 |
BiasTable Buffer |
偏置存储,AI Core内部物理存储单元,通常用于存储矩阵计算所需的Bias(偏置)数据,与逻辑内存AscendC::TPosition::C2相对应。 |
Broadcast |
广播,一种张量操作机制。通过广播,较小的张量可以自动扩展以匹配较大的张量的形状。 |
C1 |
AscendC::TPosition::C1代表设备上用于矩阵计算的逻辑内存,用于存放Bias(偏置)数据,物理存储对应AI Core的L1 Buffer或Unified Buffer。 |
C2 |
AscendC::TPosition::C2代表设备上用于矩阵计算的逻辑内存,用于存放小块Bias(偏置)数据(如经过分割、适配BT Buffer容量的分块),物理存储对应AI Core的BT Buffer或L0C Buffer。 |
CO1 |
AscendC::TPosition::CO1代表设备上用于矩阵计算的逻辑内存,用于存放小块矩阵计算结果(如经过分割的矩阵计算结果分块),物理存储对应AI Core的L0C Buffer。 |
CO2 |
AscendC::TPosition::CO2代表设备上用于矩阵计算的逻辑内存,用于存放矩阵计算结果(如原始矩阵的最终计算结果),物理存储对应Global Memory或AI Core的Unified Buffer。 |
C2PIPE2GM |
AscendC::TPosition::C2PIPE2GM代表设备上用于矩阵计算的逻辑内存,用于存放量化参数,物理存储对应AI Core的Fixpipe Buffer。 |
Compute |
Ascend C算子编程范式中典型的三个阶段之一,负责完成计算任务。 |
CopyIn |
Ascend C算子编程范式中典型的三个阶段之一,负责将待计算数据从Global Memory搬运到Local Memory。 |
CopyOut |
Ascend C算子编程范式中典型的三个阶段之一,负责将计算结果从Local Memory搬运到Global Memory。 |
Core ID |
AI Core核的物理编号,与实际硬件核数一一对应。 |
Cube |
AI Core上的Cube计算单元,负责执行矩阵运算。Cube每次执行可完成两个float16类型的16x16矩阵的乘法操作。 |
DataBlock |
矢量计算指令处理的数据单元,大小通常为32字节,矢量计算指令执行一次,可同时处理多个DataBlock。 |
DataBlock Stride |
矢量计算指令单次Repeat内DataBlock的间隔大小,即下次处理的起始数据地址与本次处理的起始数据地址之间的DataBlock个数。 |
DCache |
Data Cache,数据缓存。 用于缓存Scalar计算单元近期可能被重复访问的数据段,以提升访问效率。 |
Device |
Device指安装了昇腾AI处理器的硬件设备,利用PCIe接口与主机Host侧连接,为Host提供神经网络计算能力。若存在多个Device,多个Device之间的内存资源不能共享。 |
DMA |
Direct Memory Access,直接内存访问单元。 负责数据搬运,包括Global Memory和Local Memory之间的数据搬运以及不同层级Local Memory之间的数据搬运 ,包含搬运单元MTE2、MTE3等。 |
DoubleBuffer/DB |
双缓冲,并行领域常用的优化方式,通过创建多个持有数据的缓冲区(Buffer)提高数据处理的并行性。 |
Elementwise |
元素级操作是对张量的每个元素独立进行的操作。每个元素的结果仅依赖于对应的输入元素。 |
Fixpipe |
AI Core中负责将矩阵计算结果从L0C Buffer搬运到Global Memory或L1 Buffer的单元,搬运过程中随路完成量化、激活等操作。 |
Fixpipe Buffer |
AI Core内部物理存储单元,通常用于存储Fixpipe搬运过程中所需的量化参数等数据,与逻辑内存AscendC::TPosition::C2PIPE2GM相对应。 |
Global Memory/GM |
设备端的主内存,AI Core的外部存储,用于存储大规模数据,但需要优化访问模式以提升性能。 |
GlobalTensor |
存放Global Memory全局数据的Tensor。 |
Host |
指与设备端Device相连接的X86服务器、ARM服务器,会利用Device提供的NN(Neural-Network )计算能力,完成业务。 |
ICache |
Instruction Cache,指令缓存。 用于缓存最近或频繁使用的指令。极致性能优化时,需要关注如何降低ICache Miss(指令缓存未命中)。 |
InferShape |
算子shape推导,仅在GE图模式时才使用。 实际的网络模型生成过程中,会先进行Tensor shape以及datatype的推导。这样可以在图执行之前,就知道各Tensor的数据类型和形状,提前校验其正确性;同时提前推理出算子的输出张量描述,包括张量的形状、数据类型及数据排布格式等信息,算子构图准备阶段就可以为所有的张量静态分配内存,避免动态内存分配带来的开销。 |
Kernel |
核函数,是Device设备上执行的并行函数。核函数通过__global__修饰,多个核并行执行相同的核函数,其主要区别是不同核函数运行时具有不同的BlockID。 |
Kernel Launch |
将kernel程序提交至硬件进行启动执行的过程。 |
L0A Buffer |
AI Core内部物理存储单元,通常用于存储矩阵计算的左矩阵,与逻辑内存AscendC::TPosition::A2相对应。 |
L0B Buffer |
AI Core内部物理存储单元,通常用于存储矩阵计算的右矩阵,与逻辑内存AscendC::TPosition::B2相对应。 |
L0C Buffer |
AI Core内部物理存储单元,通常用于存储矩阵计算的结果,与逻辑内存AscendC::TPosition::CO1相对应。 |
L1 Buffer |
AI Core内部物理存储单元,空间相对较大,通常用于缓存矩阵计算的输入数据。 矩阵计算的输入一般需要从GM搬运到L1 Buffer,然后分别搬运到L0A Buffer和L0B Buffer。L1 Buffer与逻辑内存AscendC::TPosition::A1、AscendC::TPosition::B1相对应。 |
L2 Cache |
二级缓存,专门用于存储频繁访问的数据,以便减少对Global Memory的读写。 |
LCM |
Local Cache Memory,AscendC::TPosition::LCM代表临时共享的Unified Buffer空间,与VECCALC实现同样的功能。 |
Local Memory |
AI Core的内部存储,包括L1 Buffer、L0A Buffer、L0B Buffer、L0C Buffer、Unified Buffer等存储单元。 |
LocalTensor |
存放AI Core中Local Memory本地数据的Tensor。 |
Mask |
用于控制矢量计算指令每次Repeat内参与计算的元素,可通过连续模式和逐比特模式两种方式进行设置。 |
MTE1 |
Memory Transfer Engine 1,AI Core的数据传递引擎,负责将数据从L1 Buffer搬运到L0A Buffer或L0B Buffer等。注意:不同硬件能力可能有差异。 |
MTE2 |
Memory Transfer Engine 2,AI Core的数据传递引擎,负责将数据从GM搬运到L1 Buffer、L0A Buffer、L0B Buffer、Unified Buffer等。注意:不同硬件能力可能有差异。 |
MTE3 |
Memory Transfer Engine 3,AI Core的数据传递引擎,负责将数据从Unified Buffer搬运到Global Memory、L1 Buffer等。注意:不同硬件能力可能有差异。 |
NC1HWC0 |
一种五维数据格式,其中C0与硬件架构强相关,采用该格式可提升矩阵乘法的计算效率。 |
NCHW |
按照[Batch, Channels, Height, Width]的排列顺序存储特征图数据。 |
ND |
普通格式,N维张量。 |
NHWC |
按照[Batch, Height, Width, Channels]的排列顺序存储特征图数据。 |
NPU |
Neural-Network Processing Unit,神经网络处理器单元。采用“数据驱动并行计算”的架构,专门用于处理人工智能应用中的大量计算任务。 |
OP |
算子(Operator,简称OP),是深度学习算法中执行特定数学运算或操作的基础单元,例如激活函数(如ReLU)、卷积(Conv)、池化(Pooling)以及归一化(如Softmax)。通过组合这些算子,可以构建神经网络模型。 |
OpType |
算子类型,一类算子的统称。例如,在网络中可能会出现多个Add算子,名称分别为Add1、Add2,但这类算子的OpType均为Add。 |
Pipe |
Ascend C编程范式核心概念之一,用于统一管理Device端内存等资源,一个Kernel函数必须且只能初始化一个Pipe对象。 |
Preload |
在计算任务开始前,预先将必要的指令或数据加载到缓存中,用于减少指令或数据访问的延迟,提高计算效率。 |
Reduce |
减维操作,用于减少多维张量的维度。常见的减维操作包括求和、求平均、求最大值、求最小值等。 |
Repeat |
矢量计算指令执行一次,读取8个DataBlock数据进行计算,称之为一个迭代(Repeat)。通常情况下,需要循环执行多次才能完成所有数据的读取与计算。 |
Repeat Stride |
矢量计算指令循环执行时,下一次Repeat起始数据地址与当前Repeat起始数据地址之间的DataBlock个数。 |
Repeat Times |
矢量计算指令循环执行的次数。 |
Scalar |
AI Core上的标量计算单元,主要负责标量数据运算和对其他单元(如MTE数据搬运单元、Vector矢量计算单元、Cube矩阵计算单元)的指令发射。 |
SPMD |
Single-Program Multiple-Data,一种并行程序设计模型,其主要思想是使用同一个程序在多个核上并行执行,但每个核处理不同数据。 |
Tensor |
Tensor张量是算子计算数据的容器,是N维数据结构,最常见的是标量、矢量或矩阵。张量的元素可以包含整数值、浮点值或字符串值。 |
Tiling |
Tiling指数据的切分和分块。计算数据量较大时,需要将数据进行多核切分、每个核也需要分块多次计算。 |
TilingData |
TilingData指数据切分和分块的相关参数(如每次搬运的块大小、循环次数)。鉴于设备端Scalar计算能力限制,一般Tiling参数在Host侧计算完成,然后传输到设备侧供Kernel函数使用。 |
TilingFunc |
算子工程提供的在Host侧计算Tiling的默认函数。 |
TilingKey |
用来区分Kernel函数不同版本特例实现,不同的TilingKey会编译生成不同二进制。 |
TPosition |
Ascend C管理不同层级的物理内存时,用一种抽象的逻辑位置(TPosition)来表达各级别的存储,代替了片上物理存储的概念,达到隐藏硬件架构的目的。TPosition类型包括:VECIN、VECOUT、VECCALC、A1、A2、B1、B2、CO1、CO2等,其中VECIN、VECCALC、VECOUT主要用于矢量编程,A1、A2、B1、B2、CO1、CO2用于矩阵编程。 |
TSCM |
AscendC::TPosition::TSCM表示L1 Buffer空间对应的逻辑内存,需开发者自行管理以高效利用硬件资源,主要用于Matmul计算。比如,开发者可缓存一份TSCM数据,在不同使用场景中灵活配置为Matmul操作的A矩阵、B矩阵或Bias偏置矩阵,实现内存复用与计算效率优化。 |
Unified Buffer/UB |
AI Core内部存储单元,主要用于矢量计算,与逻辑内存AscendC::TPosition::VECIN、AscendC::TPosition::VECOUT、AscendC::TPosition::VECCALC相对应。 |
VECCALC |
Vector Calculation,AscendC::TPosition::VECCALC代表设备上用于矢量计算的逻辑内存,用于存放临时变量,物理存储对应AI Core的Unified Buffer。 |
VECIN |
Vector Input,AscendC::TPosition::VECIN代表设备上用于矢量计算的逻辑内存,用于存放矢量计算的输入数据,物理存储对应AI Core的Unified Buffer。 |
VECOUT |
Vector Output,AscendC::TPosition::VECOUT代表设备上用于矢量计算的逻辑内存,用于存放矢量计算的输出数据,物理存储对应AI Core的Unified Buffer。 |
Vector |
AI Core上的Vector计算单元,负责执行矢量运算。其算力低于Cube,但灵活度高于Cube(如支持数学中的求倒数,求平方根等)。 |
Vector Core |
昇腾AI处理器的计算核心,专门用于处理矢量和标量计算,包含Vector计算单元和Scalar计算单元,旨在缓解AI Core中可能出现的Vector计算瓶颈。 |
Workspace |
通常情况下指一个预分配的、临时使用的Global Memory内存,用于存储中间结果或临时数据。 |
CPU域调试 |
Ascend C提供的一种孪生调试方法,在CPU上模拟设备侧Kernel函数的执行和调试,仅调试算子功能和精度。 |
基本块 |
一次计算需要的典型数据块大小。 |
Kernel直调 |
一种简单直接的Kernel调用方式。 完成Kernel侧算子实现和Host侧Tiling实现后,即可通过AscendCL运行时接口,完成算子Kernel直调。该方式下Tiling开发不受CANN框架的限制,简单直接,多用于算子功能的快速验证。 |
NPU域调试 |
Ascend C提供的一种孪生调试方法,指基于NPU仿真软件或NPU硬件调试。 |
Tiling下沉 |
Tiling下沉是指将Tiling计算下沉至Device侧的AI CPU上执行,从而实现计算全程在Device侧高效完成。 |
孪生调试 |
Ascend C提供的算子调试方法,支持在CPU域调试精度和NPU域调试精度/性能。 |
流水任务 |
Ascend C编程范式是一种流水线式的编程范式,把算子核内的处理程序,分成多个流水任务。流水任务是指单核处理程序中主程序调度的并行任务。在核函数内部,可以通过流水任务实现数据的并行处理,进一步提升性能。 |
连续模式 |
使用Mask控制矢量计算每次Repeat内参与计算的元素时,可选择的模式之一,表示前面连续的多少个元素参与计算。 |
融合算子 |
融合算子由多个独立的小算子融合而成,其功能与多个小算子的功能等价,性能方面通常优于独立的小算子。用户可以根据实际业务场景诉求,按照具体算法自由融合矢量(Vector)、矩阵(Cube)算子以达到性能上的收益。 |
算子入图 |
算子入图指通过GE图模式运行算子,在图模式下首先将所有算子构造成一张图,然后通过GE将图下发到昇腾AI处理器执行。 |
算子原型 |
算子原型是算子的抽象描述,定义了算子的输入、输出、属性等信息。 |
通算融合 |
通算融合算子是融合集合通信任务和计算任务的算子,在算子执行过程中,计算和通信任务可以实现部分流水并行,从而提升性能。 |
逐比特模式 |
使用Mask控制矢量计算每次Repeat内参与计算的元素时,可选择的模式之一,可以按位控制哪些元素参与计算,bit位的值为1表示参与计算,0表示不参与。 |
自定义算子工程 |
Ascend C提供的基于msOpGen工具生成的算子工程。 |