msKPP工具分为基础功能接口和指令接口两种接口类型。基础功能接口用于模拟算子计算中芯片平台、基础数据等。指令接口用于模拟特定的算子指令操作,包括Vector类计算指令和Cube类计算指令。
表 1 msKPP工具接口列表
功能说明
处理器抽象,在with语句中实例化并用来明确针对某一昇腾AI处理器类型进行建模。
接口原型
参数说明
成员说明
约束说明
需在with语句下将该类初始化。
使用示例
[object Object]
返回值说明
无
功能说明
AI Core抽象,在with语句中实例化并用来明确针对某一AI Core类型进行建模。
接口原型
参数说明
约束说明
需在with语句下将该类初始化。
使用示例
返回值说明
无
功能说明
片上Tensor的抽象,可指定Tensor的内存位置、数据类型、大小及排布格式作为指令的数据依赖标识。
接口原型
参数说明
成员说明
约束说明
需通过创建一个shape为[1]且is_inited=True的Tensor进行标量创建。
使用示例
返回值说明
无
功能说明
所有的数据搬运指令在msKPP工具下都抽象为load方法,用户只需关心昇腾AI处理器中合理的搬运通路,无需考虑搬运指令中复杂的stride概念。
接口原型
参数说明
约束说明
set_value和expect_value需配对使用,否则可能会造成流水阻塞。
repeat参数仅支持以下4条搬运通路:L1_TO_L0A、L1_TO_L0B、GM_TO_L0A和GM_TO_L0B。
返回值说明
无
功能说明
用于确保核内各PIPE间不同指令的同步,pipe_src先完成调度后,pipe_dst将解除阻塞状态。设置set_flag和wait_flag之后,将会更贴合用户的调用预期。
接口原型
参数说明
约束说明
- 在同一核内set_flag与wait_flag个数需匹配。
- 同核内不应出现重复的set_flag指令。
- 同一核内,当set_flag和wait_flag内的pipe_src和pipe_dst相同时,event_id也应保持唯一。
使用示例
返回值说明
无
功能说明
用于确保核内各PIPE间不同指令的同步,pipe_dst等待pipe_src完成调度之后解除阻塞状态。
接口原型
参数说明
约束说明
- 在同一核内set_flag与wait_flag个数需匹配。
- 同核内不应出现重复的set_flag指令。
- 同一核内,当set_flag和wait_flag内的pipe_src和pipe_dst相同时,event_id也应保持唯一。
使用示例
返回值说明
无
功能说明
完成矩阵乘加操作。
接口原型
参数说明
约束说明
偏置项在Bias Table空间时,其Tensor的数据格式需为ND,shape是[n, ]。
使用示例
返回值说明
无
功能说明
vadd指令抽象。
z = x + y, x、y按元素相加。
接口原型
参数说明
约束说明
Vector指令所有输入输出数据的Tensor均在“UB“空间中,shape需保持一致。
使用示例
返回值说明
无
功能说明
vbrcb指令抽象。
根据指令的stride将Tensor进行扩维,由于目前msKPP工具的指令体系里并没有stride的概念,需要用户填写扩维倍数,并保持输入输出Tensor的shape维度一致。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vconv指令抽象。
y = vconv(x, dtype),vconv表示对输入数据进行类型转换的向量计算。
目前支持转换类型包括:BF16->FP32、FP16->FP32、FP16->INT16、FP16->INT32、FP16->INT4、FP16->INT8、FP16->UINT8、FP32->BF16、FP32->FP16、FP32->INT32、FP32->INT64、INT4->FP16、INT64->FP32、INT8->FP16、UINT8->FP16。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vconv_deq指令抽象。
y = vconv_deq(x, dtype),vconv_deq表示对输入数据进行量化操作的向量计算。
目前支持转换类型包括:FP16->INT8、INT32->FP16。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vconv_vdeq指令抽象。
y = vconv_vdeq(x, dtype),vconv_vdeq表示对输入数据进行量化操作的向量计算。
目前支持转换类型包括:INT16->INT8。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vector_dup指令抽象。
y = vector_dup(x), x、 y按元素进行填充。
接口原型
参数说明
约束说明
由于该指令输入仅一个标量,因此需要创建一个shape为[1]且is_inited=True的Tensor作为模拟标量输入,不增加性能开销。
使用示例
返回值说明
无
功能说明
vexp指令抽象。
y = vexp(x), x、y按元素取指数。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vln指令抽象。
y = vln(x),x、y按元素取对数。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmax指令抽象。
z = vmax(x, y),x、y按元素取最大。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmul指令抽象。
z = x * y,x、y按元素相乘。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmuls指令抽象。
z = vmuls(x, y),vmuls计算向量x与标量y的乘积。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vsub指令抽象。
z = x - y,x、y按元素相减。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vdiv指令抽象。
z = x / y,x、y按元素相除。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vcadd指令抽象。
根据指令的入参将Tensor进行reduce维度,在msKPP指令体系里由reduce_num控制shape缩减倍数,并保持输入输出Tensor的shape维度一致。当shape最后一维reduce到1,则将该维度消除。需保证shape中最后一维能够被reduce_num整除且不为0。
接口原型
参数说明
使用示例
约束说明
reduce_num不能为0。
返回值说明
无
功能说明
vabs指令抽象。
y = vabs(x), x、y按元素取绝对值。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vaddrelu指令抽象。
z = vaddrelu(x, y),x、y按元素相加后再计算relu值。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vaddreluconv指令抽象。
z = vaddreluconv(x, y),x、y按元素相加,计算relu值,并对输出做量化操作。
支持的类型转换有FP16->INT8、FP32->FP16、INT16->INT8。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vadds指令抽象。
z = vadds(x, y),vadds计算向量x与标量y的和。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vand指令抽象。
vand(x, y, z),x、y按元素取与,得到z值。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vaxpy指令抽象。
z = x * y + z,vaxpy计算向量x与标量y的乘积后,再加上目标地址z上的值,可以通过if_mix将输出的数据类型格式指定为FP32。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vbitsort指令抽象。
根据x输入进行排序,并在排序后给出元素原始的index数据,因此输出向量Tensor的shape会是x数据的两倍。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vcgadd指令抽象
计算每个block元素的和,共计8个block,不支持混合地址。
接口原型
参数说明
约束说明
reduce_num不能为0。
使用示例
返回值说明
无
功能说明
vcgmax指令抽象
计算每个block的最大元素,共计8个block,不支持混合地址。
接口原型
参数说明
约束说明
reduce_num不能为0。
使用示例
返回值说明
无
功能说明
vcgmin指令抽象
计算每个block的最小元素,共计8个block,不支持混合地址。
接口原型
参数说明
约束说明
reduce_num不能为0。
使用示例
返回值说明
无
功能说明
vcmax指令抽象。
计算输入的Vector中的元素最大值。
接口原型
参数说明
约束说明
reduce_num不能为0。
使用示例
返回值说明
无
功能说明
vcmin指令抽象。
计算输入的Vector中的元素最小值。
接口原型
参数说明
约束说明
reduce_num不能为0。
使用示例
返回值说明
无
功能说明
vcmp_[eq|ge|gt|le|lt|ne]指令抽象,该六条指令性能一致。
vcmp_eq: z = (x == y), x、y按元素比较相等得到z。
vcmp_ge: z = (x >= y), x、y按元素比较大于或等于得到z。
vcmp_gt: z = (x > y), x、y按元素比较大于得到z。
vcmp_le: z = (x <= y), x、y按元素比较小于或等于得到z。
vcmp_lt: z = (x < y), x、y按元素比较小于得到z。
vcmp_ne: z = (x != y), x、y按元素比较不等得到z。
接口原型
参数说明
约束说明
Vector指令所有输入输出数据的Tensor均在“UB“空间中,shape需保持一致。
使用示例
返回值说明
无
功能说明
vcmpv_[eq|ge|gt|le|lt|ne]指令抽象,该六条指令性能一致。
vcmpv_eq: z = (x == y), x、y按元素比较相等得到z。
vcmpv_ge: z = (x >= y), x、y按元素比较大于或等于得到z。
vcmpv_gt: z = (x > y), x、y按元素比较大于得到z。
vcmpv_le: z = (x <= y), x、y按元素比较小于或等于得到z。
vcmpv_lt: z = (x < y), x、y按元素比较小于得到z。
vcmpv_ne: z = (x != y), x、y按元素比较不等得到z。
接口原型
参数说明
约束说明
Vector指令所有输入输出数据的Tensor均在“UB“空间中,shape需保持一致。
使用示例
返回值说明
无
功能说明
vcmpvs_[eq|ge|gt|le|lt|ne]指令抽象,该六条指令性能一致。
vcmpvs_eq: z = (x == y), x逐元素与y中存储的标量比较相等得到z。
vcmpvs_ge: z = (x >= y), x逐元素与y中存储的标量比较大于或等于得到z。
vcmpvs_gt: z = (x > y),x逐元素与y中存储的标量比较大于得到z。
vcmpvs_le: z = (x <= y), x逐元素与y中存储的标量比较小于或等于得到z。
vcmpvs_lt: z = (x < y), x逐元素与y中存储的标量比较小于得到z。
vcmpvs_ne: z = (x != y), x逐元素与y中存储的标量比较不等得到z。
接口原型
参数说明
约束说明
Vector指令所有输入输出数据的Tensor均在“UB“空间中,shape需保持一致。
使用示例
返回值说明
无
功能说明
vcopy指令抽象
将源地址的Tensor拷贝到目标地址。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vcpadd指令抽象。
计算输入的x向量的n和n+1的和,n为偶数下标,将结果写回y。reduce_num控制了输出的type。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
给定输入的张量和一个地址偏移张量,vgather指令根据偏移地址将输入张量按元素收集到结果张量中。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
给定一个输入的张量和一个地址偏移张量,vgatherb指令根据偏移地址将输入张量收集到结果张量中。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vlrelu指令抽象。
若x大于等于0,则z=x;若x小于0,则z=x*y,x按元素与标量y相乘。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmadd指令抽象。
z = x * z + y。对两个向量中的每个元素执行乘法和加法。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmaddrelu指令抽象。
z = RELU(x * z + y)。对两个向量中的每个元素进行乘法和加法,然后对该结果中的每个元素进行MADDRELU操作。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmaxs指令抽象。
对向量中的每个元素和标量进行比较,返回较大者。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmin指令抽象。
对两个向量中的每个元素和标量进行比较,返回较小者。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmins指令抽象。
对向量中的每个元素和标量进行比较,返回较小者。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmla指令抽象。
z = x * y + z,x、y按元素相乘后与z按元素相加,可以通过if_mix将输出的数据类型格式指定为FP32。
目前支持:
type = f16,f16 = f16 * f16 + f16。
type = f32,f32 = f32 * f32 + f32。
if_mix = True时,f32 = f16 * f16 + f32。其中x、y向量使用64个元素的f16数据用于计算,源向量仅使用低4个block,4个高block被忽略。Xd是64个元素的包含8个block的f32数据,同时作为目标向量和第三个源向量。
接口原型
参数说明
约束说明
Vector指令输入输出数据的Tensor均在“UB“空间中。
使用示例
返回值说明
无
功能说明
将已经排好序的最多4条region proposals队列,排列并合并成1条队列,结果按照score域由大到小排序。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vmulconv指令抽象。
z = vmulconv(x, y),x、y按元素相乘,并对输出做量化操作。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vnot指令抽象。
vnot指令对输入向量按位取反,每个向量为8*256bits。
接口原型
参数说明
使用示例
约束说明
该指令仅支持普通掩码模式和计数器模式。
返回值说明
无
功能说明
vor指令抽象。
vor指令对输入向量按位取或,每个向量为8*256bits。
接口原型
参数说明
使用示例
约束说明
该指令仅支持普通掩码模式和计数器模式。
返回值说明
无
功能说明
vrec指令抽象。
vrec指令进行浮点倒数估计,找到每个向量的近似倒数估计。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vreduce指令抽象。
vreduce指令根据输入y向量的mask数据,决定取x向量中的某些元素存至z向量,由于msKPP中的Tensor并无实际元素,因此增加了reserve_num的参数,z输出的shape由该参数决定。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vreducev2指令抽象。
vreducev2指令根据输入y向量的mask数据,决定取x向量中的某些block级的元素存至z向量,由于msKPP中的Tensor并无相关概念,因此增加了reserve_num的参数,z输出的shape由该参数决定。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vrelu指令抽象。
每个元素的relu操作,按照元素小于0的取0,大于等于0的取本身。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vrsqrt指令抽象。
浮点数的倒数平方根。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vsel指令抽象。
通常与vcmp合用,根据获得的cmp_mask来选取x,y中对应位置的某个元素。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vshl指令抽象。
根据输入类型进行逻辑左移或算术左移。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vshr指令抽象。
根据输入类型进行逻辑右移或算术右移。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vsqrt指令抽象。
y = √x, x按元素开平方根。
接口原型
参数说明
使用示例
约束说明
输入的值应为正数,否则结果未知并产生异常。
返回值说明
无
功能说明
vsubrelu指令抽象。
z = vsubrelu(x, y),x、y按元素相减后再计算relu值。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vsubreluconv指令抽象。
z = vsubreluconv(x, y),x、y按元素相减,计算relu值,并对输出做量化操作。
支持的类型转换有FP16->INT8、FP32->FP16、INT16->INT8。
接口原型
参数说明
使用示例
返回值说明
无
功能说明
vtranspose指令抽象。
从输入地址x(32字节对齐)开始转置一个16x16矩阵,每个元素为16位,结果输出到y中,输入输出都是连续的512B存储空间。
接口原型
参数说明
使用示例
返回值说明
无