昇腾社区首页
中文
注册

术语表

表1 术语表

术语/缩略语

含义

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的逻辑核。典型场景有:

  • AI Core逻辑核:一个Block表示一个AI Core的逻辑核,其BlockID是以0为起始的逻辑编号。
  • DataBlock:一个DataBlock表示一条NPU矢量计算指令处理的数据单元,大小通常为32字节,一条指令可同时处理多个DataBlock。
  • 基本块:表示一次计算需要的典型数据块大小。

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工具生成的算子工程。