SIMD API列表
基础数据结构
表 1 基础数据结构列表
LocalTensor用于存放AI Core中Local Memory(内部存储)的数据,支持逻辑位置TPosition为VECIN、VECOUT、VECCALC、A1、A2、B1、B2、CO1、CO2。 |
|
Layout<Shape, Stride>数据结构是描述多维张量内存布局的基础模板类,通过编译时的形状(Shape)和步长(Stride)信息,实现逻辑坐标空间到一维内存地址空间的映射,为复杂张量操作和硬件优化提供基础支持。 |
|
TensorTrait数据结构是描述Tensor相关信息的基础模板类,包含Tensor的数据类型、逻辑位置和Layout内存布局。 |
基础API
表 2 Memory数据搬运API列表
表 3 Memory矢量计算API列表
按元素将src0Local和dstLocal相乘并加上src1Local,将结果和0作比较,取较大值,最终结果存放进dstLocal中。 |
||
逐元素比较两个tensor大小,如果比较后的结果为真,则输出结果的对应比特位为1,否则为0。Compare接口需要mask参数时,可以使用此接口。计算结果存放入寄存器中。 |
||
逐元素比较一个tensor中的元素和另一个Scalar的大小,如果比较后的结果为真,则输出结果的对应比特位为1,否则为0。 |
||
给定两个源操作数src0和src1,根据selMask(用于选择的Mask掩码)的比特位值选取元素,得到目的操作数dst。选择的规则为:当selMask的比特位是1时,从src0中选取,比特位是0时从src1选取。 |
||
以内置固定模式对应的二进制或者用户自定义输入的Tensor数值对应的二进制为gather mask(数据收集的掩码),从源操作数中选取元素写入目的操作数中。 |
||
每个repeat内所有数据求和。和WholeReduceSum接口相比,不支持mask逐bit模式。建议使用功能更全面的WholeReduceSum接口。 |
||
给定一个输入张量,每一次取输入张量中的8个数填充到结果张量的8个datablock(32Bytes)中去,每个数对应一个datablock。 |
||
设置mask模式为Counter模式。该模式下,不需要开发者去感知迭代次数、处理非对齐的尾块等操作,可直接传入计算数据量,实际迭代次数由Vector计算单元自动推断。 |
||
表 4 标量计算API列表
表 5 资源管理API列表
表 6 同步控制API列表
当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。调用IBSet设置某一个核的标志位,与IBWait成对使用,表示核之间的同步等待指令,等待某一个核操作完成。 |
|
当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。IBWait与IBSet成对使用,表示核之间的同步等待指令,等待某一个核操作完成。 |
|
当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。目前多核同步分为硬同步和软同步,硬件同步是利用硬件自带的全核同步指令由硬件保证多核同步,软件同步是使用软件算法模拟实现。 |
|
初始化GM共享内存的值,完成初始化后才可以调用WaitPreBlock和NotifyNextBlock。 |
|
表 7 缓存处理API列表
表 8 系统变量访问API列表
表 9 原子操作接口列表
设置接下来从VECOUT到GM,L0C到GM,L1到GM的数据传输是否进行原子累加,可根据参数不同设定不同的累加数据类型。 |
|
调用该接口后,可在指定GM地址上进行原子比较,如果和value1相等,则把value2的值赋值到GM上;如果和value1不相等,则GM上的值不变。 |
|
表 10 调试接口列表
ascendc_assert提供了一种在CPU/NPU域实现断言功能的接口。当断言条件不满足时,系统会输出断言信息并格式化打印在屏幕上。 |
|
CPU调测时,设置内核模式为单AIV模式,单AIC模式或者MIX模式,以分别支持单AIV矢量算子,单AIC矩阵算子,MIX混合算子的CPU调试。 |
|
通过CAModel进行算子性能仿真时,可对算子任意运行阶段打点,从而分析不同指令的流水图,以便进一步性能调优。 用于表示起始位置打点,一般与TRACE_STOP配套使用。 |
|
通过CAModel进行算子性能仿真时,可对算子任意运行阶段打点,从而分析不同指令的流水图,以便进一步性能调优。 用于表示终止位置打点,一般与TRACE_START配套使用。 |
|
用于设置性能数据采集信号启动,和MetricsProfStop配合使用。使用工具进行算子上板调优时,可在kernel侧代码段前后分别调用MetricsProfStart和MetricsProfStop来指定需要调优的代码段范围。 |
|
设置性能数据采集信号停止,和MetricsProfStart配合使用。使用工具进行算子上板调优时,可在kernel侧代码段前后分别调用MetricsProfStart和MetricsProfStop来指定需要调优的代码段范围。 |
表 11 工具函数接口列表
Async提供了一个统一的接口,用于在不同模式下(AIC或AIV)执行特定函数,从而避免代码中直接的硬件条件判断(如使用ASCEND_IS_AIV或ASCEND_IS_AIC)。 |
|
表 12 Kernel Tiling接口列表
用于获取算子kernel入口函数传入的tiling信息,并填入注册的Tiling结构体中,此函数会以宏展开的方式进行编译。如果用户注册了多个TilingData结构体,使用该接口返回默认注册的结构体。 |
|
使用该接口指定结构体名称,可获取指定的tiling信息,并填入对应的Tiling结构体中,此函数会以宏展开的方式进行编译。 |
|
在核函数中判断本次执行时的tiling_key是否等于某个key,从而标识tiling_key==key的一条kernel分支。 |
|
用于在kernel侧注册与TilingKey相匹配的TilingData自定义结构体;该接口需提供一个逻辑表达式,逻辑表达式以字符串“TILING_KEY_VAR”代指实际TilingKey,表达TIlingKey所满足的范围。 |
|
在Kernel侧使用标准C++语法自定义的TilingData结构体时,若用户不确定需要注册哪些结构体,可使用该接口告知框架侧需使用未注册的标准C++语法来定义TilingData,并配套GET_TILING_DATA_WITH_STRUCT,GET_TILING_DATA_MEMBER,GET_TILING_DATA_PTR_WITH_STRUCT来获取对应的TilingData。 |
|
表 13 ISASI接口列表
获取Compare(结果存入寄存器)指令的比较结果。 |
||
为Select不传入mask参数的接口设置比较寄存器。 |
||
获取ReduceSum(针对tensor前n个数据计算)接口的计算结果。 |
||
将连续元素合入Region Proposal内对应位置,每次迭代会将16个连续元素合入到16个Region Proposals的对应位置里。 |
||
与ProposalConcat功能相反,从Region Proposals内将相应位置的单个元素抽取后重排,每次迭代处理16个Region Proposals,抽取16个元素后连续排列。 |
||
根据Region Proposals中的score域对其进行排序(score大的排前面),每次排16个Region Proposals。 |
||
获取MrgSort或MrgSort4已经处理过的队列里的Region Proposal个数,并依次存储在四个List入参中。 |
||
给定一个连续的输入张量和一个目的地址偏移张量,Scatter指令根据偏移地址生成新的结果张量后将输入张量分散到结果张量中。 |
||
源操作数src0大于0的情况下直接将src0写入目的操作数dst,否则将源操作数src0 * src1的结果写入dst。 |
||
对前count个输入数据src0、src1按元素相乘操作,将结果写入dst0Local,溢出部分写入dst1Local。 |
||
将矢量源操作数前count个数据与标量相乘再按照CAST_ROUND模式转换成half类型, 并将计算结果写入dst,此接口支持标量在前和标量在后两种场景。 |
||
此接口同SetHF32TransMode、SetMMRowMajor以及SetMMColumnMajor一样,都用于设置寄存器的值。SetHF32Mode接口用于设置MMAD的HF32模式。 |
||
此接口同SetHF32Mode、SetMMRowMajor以及SetMMColumnMajor一样,都用于设置寄存器的值。SetHF32TransMode用于设置MMAD的HF32取整模式,仅在MMAD的HF32模式生效时有效。 |
||
此接口同SetHF32Mode、SetHF32TransMode一样,都用于设置寄存器的值,本接口用于设置MMAD计算时优先通过N方向。 |
||
此接口同SetHF32Mode、SetHF32TransMode一样,都用于设置寄存器的值,本接口用于设置MMAD计算时优先通过M方向。 |
||
DataCopy(CO1->GM、CO1->A1)过程中进行随路量化时,通过调用该接口设置量化流程中tensor量化参数。 |
||
DataCopy(CO1->GM、CO1->A1)过程中进行随路格式转换(NZ2ND)时,通过调用该接口设置NZ2ND相关配置。 |
||
DataCopy(CO1->GM、CO1->A1)过程中进行随路量化时,通过调用该接口设置量化流程中scalar量化参数。 |
||
DataCopy(CO1->GM)过程中进行随路量化后,通过调用该接口设置ClipRelu操作的最大值。 |
||
DataCopy(CO1->GM)过程中进行随路量化后,通过调用该接口设置element-wise操作时LocalTensor的地址。 |
||
将图像数据从GM搬运到A1/B1。 搬运过程中可以完成图像预处理操作:包括图像翻转,改变图像尺寸(抠图,裁边,缩放,伸展),以及色域转换,类型转换等。 |
||
用于调用Load3Dv1/Load3Dv2时设置FeatureMap的属性描述。 |
||
设置Load3D时A1/B1边界值。 |
||
用于设置Load3Dv2接口的repeat参数。设置repeat参数后,可以通过调用一次Load3Dv2接口完成多个迭代的数据搬运。 |
||
Mutex用于核内异步流水指令之间的同步处理,其功能类似于传统CPU中的锁机制。通过锁定指定流水再释放流水来完成流水间的同步依赖。每个锁有固定的一个MutexID,该ID可通过用户自定义(范围为0-27)或者通过AllocMutexID/ReleaseMutexID进行申请释放。 |
||
从框架获取并占用一个MutexID,与ReleaseMutexID配合使用,管理MutexID的获取和释放。 |
||
从框架释放一个MutexID,与AllocMutexID配合使用。 |
||
获取当前系统cycle数,若换算成时间需要按照50MHz的频率,时间单位为us,换算公式为:time = (cycle数/50) us 。 |
||
原子操作函数,设置后续从VECOUT传输到GM的数据是否执行原子比较,将待拷贝的内容和GM已有内容进行比较,将最大值写入GM。 |
||
原子操作函数,设置后续从VECOUT传输到GM的数据是否执行原子比较,将待拷贝的内容和GM已有内容进行比较,将最小值写入GM。 |
||
监视设定范围内的UB读写行为,如果监视到有设定范围的读写行为则会出现EXCEPTION报错,未监视到设定范围的读写行为则不会报错。 |
||
CubeResGroupHandle用于在分离模式下通过软同步控制AIC和AIV之间进行通讯,实现AI Core计算资源分组。 |
||
当同一个CubeResGroupHandle中的两个AIV任务之间存在依赖关系时,可以使用GroupBarrier控制同步。 |
||
KfcWorkspace为通信空间描述符,管理不同CubeResGroupHandle的消息通信区划分,与CubeResGroupHandle配合使用。KfcWorkspace的构造函数用于创建KfcWorkspace对象。 |
高阶API
表 14 数学计算API列表
| 接口名 | 功能描述 |
|---|---|
| Acos | 按元素做反余弦函数计算。 |
| Acosh | 按元素做双曲反余弦函数计算。 |
| Asin | 按元素做反正弦函数计算。 |
| Asinh | 按元素做反双曲正弦函数计算。 |
| Atan | 按元素做三角函数反正切运算。 |
| Atanh | 按元素做反双曲正切余弦函数计算。 |
| Axpy | 源操作数中每个元素与标量求积后和目的操作数中的对应元素相加。 |
| Ceil | 获取大于或等于x的最小的整数值,即向正无穷取整操作。 |
| ClampMax | 将srcTensor中大于scalar的数替换为scalar,小于等于scalar的数保持不变,作为dstTensor输出。 |
| ClampMin | 将srcTensor中小于scalar的数替换为scalar,大于等于scalar的数保持不变,作为dstTensor输出。 |
| Cos | 按元素做三角函数余弦运算。 |
| Cosh | 按元素做双曲余弦函数计算。 |
| CumSum | 对数据按行依次累加或按列依次累加。 |
| Digamma | 按元素计算x的gamma函数的对数导数。 |
| Erf | 按元素做误差函数计算,也称为高斯误差函数。 |
| Erfc | 返回输入x的互补误差函数结果,积分区间为x到无穷大。 |
| Exp | 按元素取自然指数。 |
| Floor | 获取小于或等于x的最小的整数值,即向负无穷取整操作。 |
| Fmod | 按元素计算两个浮点数相除后的余数。 |
| Frac | 按元素做取小数计算。 |
| Hypot | 按元素计算两个浮点数平方和的平方根。 |
| IsFinite | 按元素判断输入的浮点数是否非NAN、非±INF。 |
| Lgamma | 按元素计算x的gamma函数的绝对值并求自然对数。 |
| Log | 按元素以e、2、10为底做对数运算。 |
| Power | 实现按元素做幂运算功能。 |
| Round | 将输入的元素四舍五入到最接近的整数。 |
| Sign | 按元素执行Sign操作,Sign是指返回输入数据的符号。 |
| Sin | 按元素做正弦函数计算。 |
| Sinh | 按元素做双曲正弦函数计算。 |
| Tan | 按元素做正切函数计算。 |
| Tanh | 按元素做逻辑回归Tanh。 |
| Trunc | 按元素做浮点数截断操作,即向零取整操作。 |
| Xor | 按元素执行Xor(异或)运算。 |
| Fma | 按元素计算两个输入相乘后与第三个输入相加的结果。 |
| IsNan | 按元素判断输入的浮点数是否为nan。 |
| IsInf | 按元素判断输入的浮点数是否为±INF。 |
| Rint | 获取与输入数据最接近的整数。 |
| SinCos | 按元素进行正弦计算和余弦计算,分别获得正弦和余弦的结果。 |
| LogicalNot | 按元素进行取反操作。 |
| LogicalAnd | 按元素进行与操作。 |
| LogicalAnds | 输入矢量内的每个元素与标量进行与操作。 |
| LogicalOr | 按元素进行或操作。 |
| LogicalOrs | 输入矢量内的每个元素与标量进行或操作。 |
| LogicalXor | 按元素进行逻辑异或操作。 |
| BitwiseNot | 逐比特对输入进行取反。 |
| BitwiseAnd | 逐比特对两个输入进行与操作。 |
| BitwiseOr | 逐比特对两个输入进行或操作。 |
| BitwiseXor | 逐比特对两个输入进行异或操作。 |
| Where | 根据指定的条件,从两个源操作数中选择元素,生成目标操作数。 |
表 15 量化操作API列表
| 接口名 | 功能描述 |
|---|---|
| AntiQuantize | 按元素做伪量化计算,比如将int8_t数据类型伪量化为half数据类型。 |
| AscendAntiQuant | 按元素做伪量化计算,比如将int8_t数据类型伪量化为half数据类型。 |
| Dequantize | 按元素做反量化计算,比如将int32_t数据类型反量化为half/float等数据类型。 |
| AscendDequant | 按元素做反量化计算,比如将int32_t数据类型反量化为half/float等数据类型。 |
| Quantize | 按元素做量化计算,比如将half/float数据类型量化为int8_t数据类型。 |
| AscendQuant | 按元素做量化计算,比如将half/float数据类型量化为int8_t数据类型。 |
表 16 归一化操作API列表
| 接口名 | 功能描述 |
|---|---|
| BatchNorm | 对于每个batch中的样本,对其输入的每个特征在batch的维度上进行归一化。 |
| DeepNorm | 在深层神经网络训练过程中,可以替代LayerNorm的一种归一化方法。 |
| GroupNorm | 将输入的C维度分为groupNum组,对每一组数据进行标准化。 |
| LayerNorm | 将输入数据收敛到[0, 1]之间,可以规范网络层输入输出数据分布的一种归一化方法。 |
| LayerNormGrad | 用于计算LayerNorm的反向传播梯度。 |
| LayerNormGradBeta | 用于获取反向beta/gmma的数值,和LayerNormGrad共同输出pdx, gmma和beta。 |
| Normalize | LayerNorm中,已知均值和方差,计算shape为[A,R]的输入数据的标准差的倒数rstd和归一化输出y。 |
| RmsNorm | 实现对shape大小为[B,S,H]的输入数据的RmsNorm归一化。 |
| WelfordUpdate | 实现Welford算法的前处理。 |
| WelfordFinalize | 实现Welford算法的后处理。 |
表 17 激活函数API列表
| 接口名 | 功能描述 |
|---|---|
| AdjustSoftMaxRes | 用于对SoftMax相关计算结果做后处理,调整SoftMax的计算结果为指定的值。 |
| FasterGelu | FastGelu化简版本的一种激活函数。 |
| FasterGeluV2 | 实现FastGeluV2版本的一种激活函数。 |
| GeGLU | 采用GeLU作为激活函数的GLU变体。 |
| Gelu | GELU是一个重要的激活函数,其灵感来源于relu和dropout,在激活中引入了随机正则的思想。 |
| LogSoftMax | 对输入tensor做LogSoftmax计算。 |
| ReGlu | 一种GLU变体,使用Relu作为激活函数。 |
| Sigmoid | 按元素做逻辑回归Sigmoid。 |
| Silu | 按元素做Silu运算。 |
| SimpleSoftMax | 使用计算好的sum和max数据对输入tensor做softmax计算。 |
| SoftMax | 对输入tensor按行做Softmax计算。 |
| SoftmaxFlash | SoftMax增强版本,除了可以对输入tensor做softmaxflash计算,还可以根据上一次softmax计算的sum和max来更新本次的softmax计算结果。 |
| SoftmaxFlashV2 | SoftmaxFlash增强版本,对应FlashAttention-2算法。 |
| SoftmaxFlashV3 | SoftmaxFlash增强版本,对应Softmax PASA算法。 |
| SoftmaxGrad | 对输入tensor做grad反向计算的一种方法。 |
| SoftmaxGradFront | 对输入tensor做grad反向计算的一种方法。 |
| SwiGLU | 采用Swish作为激活函数的GLU变体。 |
| Swish | 神经网络中的Swish激活函数。 |
表 18 归约操作API列表
| 接口名 | 功能描述 |
|---|---|
| Sum | 获取最后一个维度的元素总和。 |
| Mean | 根据最后一轴的方向对各元素求平均值。 |
| ReduceXorSum | 按照元素执行Xor(按位异或)运算,并将计算结果ReduceSum求和。 |
| ReduceSum | 对一个多维向量按照指定的维度进行数据累加。 |
| ReduceMean | 对一个多维向量按照指定的维度求平均值。 |
| ReduceMax | 对一个多维向量在指定的维度求最大值。 |
| ReduceMin | 对一个多维向量在指定的维度求最小值。 |
| ReduceAny | 对一个多维向量在指定的维度求逻辑或。 |
| ReduceAll | 对一个多维向量在指定的维度求逻辑与。 |
| ReduceProd | 对一个多维向量在指定的维度求积。 |
表 19 排序操作API列表
| 接口名 | 功能描述 |
|---|---|
| TopK | 获取最后一个维度的前k个最大值或最小值及其对应的索引。 |
| Concat | 对数据进行预处理,将要排序的源操作数srcLocal一一对应的合入目标数据concatLocal中,数据预处理完后,可以进行Sort。 |
| Extract | 处理Sort的结果数据,输出排序后的value和index。 |
| Sort | 排序函数,按照数值大小进行降序排序。 |
| MrgSort | 将已经排好序的最多4条队列,合并排列成1条队列,结果按照score域由大到小排序。 |
表 20 数据过滤API列表
| 接口名 | 功能描述 |
|---|---|
| Select | 给定两个源操作数src0和src1,根据maskTensor相应位置的值(非bit位)选取元素,得到目的操作数dst。 |
| DropOut | 提供根据MaskTensor对源操作数进行过滤的功能,得到目的操作数。 |
表 21 张量变换API列表
| 接口名 | 功能描述 |
|---|---|
| Transpose | 对输入数据进行数据排布及Reshape操作。 |
| TransData | 将输入数据的排布格式转换为目标排布格式。 |
| Broadcast | 将输入按照输出shape进行广播。 |
| Pad | 对height * width的二维Tensor在width方向上pad到32B对齐。 |
| UnPad | 对height * width的二维Tensor在width方向上进行unpad。 |
| Fill | 将Global Memory上的数据初始化为指定值。 |
表 22 索引计算API列表
| 接口名 | 功能描述 |
|---|---|
| Arange | 给定起始值,等差值和长度,返回一个等差数列。 |
表 23 矩阵计算API列表
| 接口名 | 功能描述 |
|---|---|
| Matmul | Matmul矩阵乘法的运算。 |
表 24 HCCL通信类API列表
| 接口名 | 功能描述 |
|---|---|
| HCCL通信类 | 在AI Core侧编排集合通信任务。 |
表 25 卷积计算API列表
| 接口名 | 功能描述 |
|---|---|
| Conv3D | 3维卷积正向矩阵运算。 |
| Conv3DBackpropInput | 卷积的反向运算,求解特征矩阵的反向传播误差。 |
| Conv3DBackpropFilter | 卷积的反向运算,求解权重的反向传播误差。 |
表 26 随机函数API列表
| 接口名 | 功能描述 |
|---|---|
| PhiloxRandom | 基于Philox随机数生成算法,给定随机数种子,生成若干的随机数。 |