下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

基础API列表

标量计算

表1 标量计算API列表

接口名

功能描述

ScalarGetCountOfValue

获取一个uint64_t类型数字的二进制中0或者1的个数。

ScalarCountLeadingZero

计算一个uint64_t类型数字前导0的个数(二进制从最高位到第一个1一共有多少个0)。

ScalarCast

将一个scalar的类型转换为指定的类型。

CountBitsCntSameAsSignBit

计算一个uint64_t类型数字的二进制中,从最高数值位开始与符号位相同的连续比特位的个数。

ScalarGetSFFValue

获取一个uint64_t类型数字的二进制中第一个0或1出现的位置。

ToBfloat16

float类型标量数据转换成bfloat16_t类型标量数据。

ToFloat

bfloat16_t类型标量数据转换成float类型标量数据。

矢量计算

表2 矢量计算API列表

分类

接口名

功能描述

单目指令

Exp

按元素取自然指数。

Ln

按元素取自然对数。

Abs

按元素取绝对值。

Reciprocal

按元素取倒数。

Sqrt

按元素做开方。

Rsqrt

按元素做开方后取倒数。

Not

按元素做按位取反。

Relu

按元素做线性整流Relu。

双目指令

Add

按元素求和。

Sub

按元素求差。

Mul

按元素求积。

Div

按元素求商。

Max

按元素求最大值。

Min

按元素求最小值。

And

针对每对元素执行按位与运算。

Or

针对每对元素执行按位或运算。

AddRelu

按元素求和,结果和0对比取较大值。

AddReluCast

按元素求和,结果和0对比取较大值,并根据源操作数和目的操作数Tensor的数据类型进行精度转换。

AddDeqRelu

依次计算按元素求和、结果进行deq量化后再进行relu计算(结果和0对比取较大值)。

SubRelu

按元素求差,结果和0对比取较大值。

SubReluCast

按元素求差,结果和0对比取较大值,并根据源操作数和目的操作数Tensor的数据类型进行精度转换。

MulAddDst

按元素将src0Local和src1Local相乘并和dstLocal相加,将最终结果存放进dstLocal中。

FusedMulAdd

按元素将src0Local和dstLocal相乘并加上src1Local,最终结果存放入dstLocal。

FusedMulAddRelu

按元素将src0Local和dstLocal相乘并再加上src1Local,将结果和0作比较,取较大值,最终结果存放进dstLocal中。

标量双目指令

Adds

矢量内每个元素与标量求和。

Muls

矢量内每个元素与标量求积。

Maxs

源操作数矢量内每个元素与标量相比,如果比标量大,则取源操作数值,比标量的值小,则取标量值。

Mins

源操作数矢量内每个元素与标量相比,如果比标量大,则取标量值,比标量的值小,则取源操作数。

ShiftLeft

源操作数内每个元素做逻辑左移,逻辑左移的位数由输入参数scalar决定。

ShiftRight

源操作数内每个元素做右移,右移的位数由输入参数scalar决定。

LeakyRelu

按元素做带泄露线性整流Leaky ReLU。

标量三目指令

Axpy

源操作数(srcLocal)中每个元素与标量求积后和目的操作数(dstLocal)中的对应元素相加。

比较指令

Compare

逐元素比较两个tensor大小,如果比较后的结果为真,则输出结果的对应比特位为1,否则为0。

Compare(结果存放入寄存器)

逐元素比较两个tensor大小,如果比较后的结果为真,则输出结果的对应比特位为1,否则为0。Compare接口需要mask参数时,可以使用此接口。计算结果存放入寄存器中。

CompareScalar

逐元素比较一个tensor中的元素和另一个Scalar的大小,如果比较后的结果为真,则输出结果的对应比特位为1,否则为0。

选择指令

Select

给定两个源操作数src0和src1,根据selMask(用于选择的Mask掩码)的比特位值选取元素,得到目的操作数dst。选择的规则为:当selMask的比特位是1时,从src0中选取,比特位是0时从src1选取。

GatherMask

以内置固定模式对应的二进制或者用户自定义输入的Tensor数值对应的二进制为gather mask(数据收集的掩码),从源操作数中选取元素写入目的操作数中。

精度转换指令

Cast

根据源操作数和目的操作数Tensor的数据类型进行精度转换。

CastDeq

对输入做量化并进行精度转换。

归约指令

ReduceMax

在所有的输入数据中找出最大值及最大值对应的索引位置。

ReduceMin

在所有的输入数据中找出最小值及最小值对应的索引位置。

ReduceSum

对所有的输入数据求和。

WholeReduceMax

每个repeat内所有数据求最大值以及其索引index。

WholeReduceMin

每个repeat内所有数据求最小值以及其索引index。

WholeReduceSum

每个repeat内所有数据求和。

BlockReduceMax

对每个datablock内所有元素求最大值。

BlockReduceMin

对每个datablock内所有元素求最小值。

BlockReduceSum

对每个datablock内所有元素求和。源操作数相加采用二叉树方式,两两相加。

PairReduce

PairReduceSum:相邻两个(奇偶)元素求和。

数据填充

Duplicate

将一个变量或一个立即数,复制多次并填充到向量。

Brcb

给定一个输入张量,每一次取输入张量中的8个数填充到结果张量的8个datablock(32Bytes)中去,每个数对应一个datablock。

数据分散/数据收集

Gather

给定输入的张量和一个地址偏移张量,Gather指令根据偏移地址将输入张量按元素收集到结果张量中。

掩码操作

SetMaskCount

设置mask模式为Counter模式。该模式下,不需要开发者去感知迭代次数、处理非对齐的尾块等操作,可直接传入计算数据量,实际迭代次数由Vector计算单元自动推断。

SetMaskNorm

设置mask模式为Normal模式。该模式为系统默认模式,支持开发者配置迭代次数。

SetVectorMask

用于在矢量计算时设置mask。

ResetMask

恢复mask的值为默认值(全1),表示矢量计算中每次迭代内的所有元素都将参与运算。

量化设置

SetDeqScale

设置DEQSCALE寄存器的值。

数据搬运

表3 数据搬运API列表

接口名

功能描述

DataCopy

数据搬运接口,包括普通数据搬运、增强数据搬运、切片数据搬运、随路格式转换。

Copy

VECIN, VECCALC, VECOUT之间的搬运指令,支持mask操作和datablock间隔操作。

内存管理与同步控制

表4 内存管理与同步控制API列表

接口名

功能描述

TPipe

TPipe是用来管理全局内存等资源的框架。通过TPipe类提供的接口可以完成内存等资源的分配管理操作。

GetTPipePtr

获取框架当前管理全局内存的TPipe指针,用户获取指针后,可进行TPipe相关的操作。

TBufPool

TPipe可以管理全局内存资源,而TBufPool可以手动管理或复用Unified Buffer/L1 Buffer物理内存,主要用于多个stage计算中Unified Buffer/L1 Buffer物理内存不足的场景。

TQue

提供入队出队等接口,通过队列(Queue)完成任务间通信和同步。

TQueBind

TQueBind绑定源逻辑位置和目的逻辑位置,根据源位置和目的位置,来确定内存分配的位置 、插入对应的同步事件,帮助开发者解决内存分配和管理、同步等问题。

TBuf

使用Ascend C编程的过程中,可能会用到一些临时变量。这些临时变量占用的内存可以使用TBuf数据结构来管理。

InitSpmBuffer

初始化SPM Buffer。

WriteSpmBuffer

将需要溢出暂存的数据拷贝到SPM Buffer中。

ReadSpmBuffer

从SPM Buffer读回到local数据中。

GetUserWorkspace

获取用户使用的workspace指针。

SetSysWorkSpace

在进行融合算子编程时,由于框架通信机制需要使用到workspace,也就是系统workspace,所以在该场景下,开发者要调用该接口,设置系统workspace的指针。

GetSysWorkSpacePtr

获取系统workspace指针。

DataCachePreload

从源地址所在的特定DDR地址预加载数据到data cache中。

DataCacheCleanAndInvalid

该接口用来刷新Cache,保证Cache的一致性。

系统变量访问

表5 系统变量访问API列表

接口名

功能描述

GetBlockNum

获取当前任务配置的Block数,用于代码内部的多核逻辑控制等。

GetBlockIdx

获取当前core的index,用于代码内部的多核逻辑控制及多核偏移量计算等。

GetDataBlockSizeInBytes

获取当前芯片版本一个datablock的大小,单位为byte。开发者根据datablock的大小来计算API指令中待传入的repeatTimesdataBlockStriderepeatStride参数值。

GetArchVersion

获取当前AI处理器架构版本号。

GetTaskRation

适用于Cube/Vector分离架构,用来获取Cube/Vector的配比。

调测接口

表6 调测接口列表

接口名

功能描述

DumpTensor

基于算子工程开发的算子,可以使用该接口Dump指定Tensor的内容。

printf

基于算子工程开发的算子,可以使用该接口实现CPU侧/NPU侧调试场景下的格式化输出功能。

assert

基于算子工程开发的算子,可以使用该接口实现CPU/NPU域assert断言功能。

DumpAccChkPoint

基于算子工程开发的算子,可以使用该接口Dump指定Tensor的内容。该接口可以支持指定偏移位置的Tensor打印。

Trap

当软件产生异常后,使用该指令使kernel中止运行。

ISASI接口

表7 ISASI接口列表

分类

接口名

功能描述

矢量计算

BilinearInterpolation

双线性插值操作,分为垂直迭代和水平迭代。

GetCmpMask

获取Compare(结果存入寄存器)指令的比较结果。

GetAccVal

获取ReduceSum(针对tensor前n个数据计算)接口的计算结果。

GetReduceMaxMinCount

获取ReduceMaxReduceMin连续场景下的最大/最小值以及相应的索引值。

ProposalConcat

将连续元素合入Region Proposal内对应位置,每次迭代会将16个连续元素合入到16个Region Proposals的对应位置里。

ProposalExtract

与ProposalConcat功能相反,从Region Proposals内将相应位置的单个元素抽取后重排,每次迭代处理16个Region Proposals,抽取16个元素后连续排列。

RpSort16

根据Region Proposals中的score域对其进行排序(score大的排前面),每次排16个Region Proposals。

MrgSort4

将已经排好序的最多4 条region proposals队列,排列并合并成1条队列,结果按照score域由大到小排序。

Sort32

排序函数,一次迭代可以完成32个数的排序。

MrgSort

将已经排好序的最多4 条队列,合并排列成 1 条队列,结果按照score域由大到小排序。

GetMrgSortResult

获取MrgSortMrgSort4已经处理过的队列里的区域提案数,并依次存储在四个List入参中。

Gatherb

给定一个输入的张量和一个地址偏移张量,Gatherb指令根据偏移地址将输入张量收集到结果张量中。

Scatter

给定一个连续的输入张量和一个目的地址偏移张量,Scatter指令根据偏移地址生成新的结果张量后将输入张量分散到结果张量中。

矩阵计算

InitConstValue

初始化LocalTensor(TPosition为A1/A2/B1/B2)为某一个具体的数值。

LoadData

LoadData包括Load2D和Load3D数据加载功能。

LoadDataWithTranspose

该接口实现带转置的2D格式数据从A1/B1到A2/B2的加载。

SetFmatrix

用于调用Load3Dv1/Load3Dv2时设置FeatureMap的属性描述。

SetLoadDataBoundary

设置Load3D时A1/B1边界值。

SetLoadDataRepeat

用于设置Load3Dv2接口的repeat参数。设置repeat参数后,可以通过调用一次Load3Dv2接口完成多个迭代的数据搬运。

SetLoadDataPaddingValue

设置padValue,用于Load3Dv1/Load3Dv2。

Mmad

完成矩阵乘加操作。

Fixpipe

矩阵计算完成后,对结果进行处理,例如对计算结果进行量化操作,并把数据从CO1搬迁到Global Memory中。

SetFixPipeConfig

Fixpipe的流程中,会涉及到relu (通过将FixpipeParams.reluEn设置为true)和quant(FixpipeParams.QuantParams设置为非NoQuant)的流程,分别用于relu和quant计算。通过该接口设置relu和quant的源操作数。

SetFixpipeNz2ndFlag

Fixpipe的流程中,会涉及到nz2nd的流程(FixpipeParams.Nz2NdParams.nz2ndEn设置为true)该接口用于设置FixpipeNz2nd相关的配置。

SetFixpipePreQuantFlag

Fixpipe的流程中,会涉及到quant量化流程,该接口用于设置量化流程中deq scalar(量化参数)。

SetHF32Mode

此接口同SetHF32TransModeSetMMLayoutTransform一样,都用于设置寄存器的值。SetHF32Mode接口用于设置MMAD的HF32模式。

SetHF32TransMode

此接口同SetHF32ModeSetMMLayoutTransform一样,都用于设置寄存器的值。SetHF32TransMode用于设置MMAD的HF32取整模式,仅在MMAD的HF32模式生效时有效。

SetMMLayoutTransform

此接口同SetHF32ModeSetHF32TransMode一样,都用于设置寄存器的值,其中SetMMLayoutTransform接口用于设置MMAD的M/N方向。

CheckLocalMemoryIA

监视设定范围内的UB读写行为,如果监视到有设定范围的读写行为则会出现EXCEPTION报错,未监视到设定范围的读写行为则不会报错。

Conv2D

计算给定输入张量和权重张量的2-D卷积,输出结果张量。Conv2d卷积层多用于图像识别,使用过滤器提取图像中的特征。

Gemm

根据输入的切分规则,将给定的两个输入张量做矩阵乘,输出至结果张量。将A和B两个输入矩阵乘法在一起,得到一个输出矩阵C。

数据搬运

DataCopyPad

该接口提供数据非对齐搬运的功能。

SetPadValue

设置DataCopyPad接口填充的数值。

同步控制

SetFlag/WaitFlag

同一核内不同流水线之间的同步指令。具有数据依赖的不同流水指令之间需要插此同步。

PipeBarrier

阻塞相同流水,具有数据依赖的相同流水之间需要插此同步。

CrossCoreSetFlag

针对分离架构,AI Core上的Cube核(AIC)与Vector核(AIV)之间的同步设置指令。

CrossCoreWaitFlag

针对分离架构,AI Core上的Cube核(AIC)与Vector核(AIV)之间的同步等待指令。

缓存处理

ICachePreLoad

从指令所在DDR地址预加载指令到ICache中。

GetICachePreloadStatus

获取ICACHE的PreLoad的状态。

系统变量访问

GetProgramCounter

获取程序计数器的指针,程序计数器用于记录当前程序执行的位置。

GetSubBlockNum

获取AI Core上Vector核的数量。

GetSubBlockIdx

获取AI Core上Vector核的ID。

GetSystemCycle

获取当前系统cycle数,若换算成时间需要按照50MHz的频率,时间单位为us,换算公式为:time = (cycle数/50) us 。

原子操作

SetAtomicMax

原子操作函数,设置后续从VECOUT传输到GM的数据是否执行原子比较,将待拷贝的内容和GM已有内容进行比较,将最大值写入GM。

SetAtomicMin

原子操作函数,设置后续从VECOUT传输到GM的数据是否执行原子比较,将待拷贝的内容和GM已有内容进行比较,将最小值写入GM。

SetStoreAtomicConfig

设置原子操作使能位与原子操作类型。

GetStoreAtomicConfig

获取原子操作使能位与原子操作类型的值。

其他接口

表8 其他接口列表

分类

接口名

功能描述

数据转换

Transpose

可实现16*16的二维矩阵数据块的转置和[N,C,H,W]与[N,H,W,C]互相转换。

TransDataTo5HD

数据格式转换,一般用于将NCHW格式转换成NC1HWC0格式。特别的,也可以用于二维矩阵数据块的转置。

多核控制

IBSet

当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。

IBWait

当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。

SyncAll

当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。

原子操作

SetAtomicAdd

设置接下来从VECOUT到GM,L0C到GM,L1到GM的数据传输是否进行原子累加,可根据参数不同设定不同的累加数据类型。

SetAtomicType

通过设置模板参数来设定原子操作不同的数据类型。

SetAtomicNone

原子操作函数,清空原子操作的状态。

Kernel Tiling

GET_TILING_DATA

用于获取算子kernel入口函数传入的tiling信息,并填入注册的Tiling结构体中,此函数会以宏展开的方式进行编译。如果用户注册了多个TilingData结构体,使用该接口返回默认注册的结构体。

TILING_KEY_IS

在核函数中判断本次执行时的tiling_key是否等于某个key,从而标识tiling_key==key的一条kernel分支。

KERNEL_TASK_TYPE_DEFAULT

设置全局默认的kernel type, 对所有的tiling key生效。

KERNEL_TASK_TYPE

设置某一个具体的tiling key对应的kernel type。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词