开发者
下载
[object Object][object Object]

msKPP工具分为基础功能接口和指令接口两种接口类型。基础功能接口用于模拟算子计算中芯片平台、基础数据等。指令接口用于模拟特定的算子指令操作,包括Vector类计算指令和Cube类计算指令。

表 1 msKPP工具接口列表

[object Object]undefined
[object Object][object Object]

功能说明

处理器抽象,在with语句中实例化并用来明确针对某一昇腾AI处理器类型进行建模。

接口原型

[object Object]

参数说明

[object Object]undefined

成员说明

[object Object]undefined

约束说明

需在with语句下将该类初始化。

使用示例

[object Object]
[object Object]

返回值说明

[object Object]

功能说明

AI Core抽象,在with语句中实例化并用来明确针对某一AI Core类型进行建模。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

需在with语句下将该类初始化。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

片上Tensor的抽象,可指定Tensor的内存位置、数据类型、大小及排布格式作为指令的数据依赖标识。

接口原型

[object Object]

参数说明

[object Object]undefined

成员说明

[object Object]undefined

约束说明

需通过创建一个shape为[1]且is_inited=True的Tensor进行标量创建。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

所有的数据搬运指令在msKPP工具下都抽象为load方法,用户只需关心昇腾AI处理器中合理的搬运通路,无需考虑搬运指令中复杂的stride概念。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

set_value和expect_value需配对使用,否则可能会造成流水阻塞。

repeat参数仅支持以下4条搬运通路:L1_TO_L0A、L1_TO_L0B、GM_TO_L0A和GM_TO_L0B。

返回值说明

[object Object][object Object]

功能说明

用于确保核内各PIPE间不同指令的同步,pipe_src先完成调度后,pipe_dst将解除阻塞状态。设置set_flag和wait_flag之后,将会更贴合用户的调用预期。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

  • 在同一核内set_flag与wait_flag个数需匹配。
  • 同核内不应出现重复的set_flag指令。
  • 同一核内,当set_flag和wait_flag内的pipe_src和pipe_dst相同时,event_id也应保持唯一。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

用于确保核内各PIPE间不同指令的同步,pipe_dst等待pipe_src完成调度之后解除阻塞状态。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

  • 在同一核内set_flag与wait_flag个数需匹配。
  • 同核内不应出现重复的set_flag指令。
  • 同一核内,当set_flag和wait_flag内的pipe_src和pipe_dst相同时,event_id也应保持唯一。

使用示例

[object Object]

返回值说明

[object Object][object Object]

功能说明

完成矩阵乘加操作。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

偏置项在Bias Table空间时,其Tensor的数据格式需为ND,shape是[n, ]。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vadd指令抽象。

z = x + y, x、y按元素相加。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

Vector指令所有输入输出数据的Tensor均在“UB“空间中,shape需保持一致。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vbrcb指令抽象。

根据指令的stride将Tensor进行扩维,由于目前msKPP工具的指令体系里并没有stride的概念,需要用户填写扩维倍数,并保持输入输出Tensor的shape维度一致。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

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。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vconv_deq指令抽象。

y = vconv_deq(x, dtype),vconv_deq表示对输入数据进行量化操作的向量计算。

目前支持转换类型包括:FP16->INT8、INT32->FP16。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vconv_vdeq指令抽象。

y = vconv_vdeq(x, dtype),vconv_vdeq表示对输入数据进行量化操作的向量计算。

目前支持转换类型包括:INT16->INT8。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vector_dup指令抽象。

y = vector_dup(x), x、 y按元素进行填充。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

由于该指令输入仅一个标量,因此需要创建一个shape为[1]且is_inited=True的Tensor作为模拟标量输入,不增加性能开销。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vexp指令抽象。

y = vexp(x), x、y按元素取指数。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vln指令抽象。

y = vln(x),x、y按元素取对数。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vmax指令抽象。

z = vmax(x, y),x、y按元素取最大。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vmul指令抽象。

z = x * y,x、y按元素相乘。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vmuls指令抽象。

z = vmuls(x, y),vmuls计算向量x与标量y的乘积。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vsub指令抽象。

z = x - y,x、y按元素相减。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vdiv指令抽象。

z = x / y,x、y按元素相除。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vcadd指令抽象。

根据指令的入参将Tensor进行reduce维度,在msKPP指令体系里由reduce_num控制shape缩减倍数,并保持输入输出Tensor的shape维度一致。当shape最后一维reduce到1,则将该维度消除。需保证shape中最后一维能够被reduce_num整除且不为0。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

约束说明

reduce_num不能为0。

返回值说明

[object Object]

功能说明

vabs指令抽象。

y = vabs(x), x、y按元素取绝对值。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vaddrelu指令抽象。

z = vaddrelu(x, y),x、y按元素相加后再计算relu值。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vaddreluconv指令抽象。

z = vaddreluconv(x, y),x、y按元素相加,计算relu值,并对输出做量化操作。

支持的类型转换有FP16->INT8、FP32->FP16、INT16->INT8。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vadds指令抽象。

z = vadds(x, y),vadds计算向量x与标量y的和。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vand指令抽象。

vand(x, y, z),x、y按元素取与,得到z值。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vaxpy指令抽象。

z = x * y + z,vaxpy计算向量x与标量y的乘积后,再加上目标地址z上的值,可以通过if_mix将输出的数据类型格式指定为FP32。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vbitsort指令抽象。

根据x输入进行排序,并在排序后给出元素原始的index数据,因此输出向量Tensor的shape会是x数据的两倍。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vcgadd指令抽象

计算每个block元素的和,共计8个block,不支持混合地址。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

reduce_num不能为0。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vcgmax指令抽象

计算每个block的最大元素,共计8个block,不支持混合地址。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

reduce_num不能为0。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vcgmin指令抽象

计算每个block的最小元素,共计8个block,不支持混合地址。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

reduce_num不能为0。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vcmax指令抽象。

计算输入的Vector中的元素最大值。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

reduce_num不能为0。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vcmin指令抽象。

计算输入的Vector中的元素最小值。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

reduce_num不能为0。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

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。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

Vector指令所有输入输出数据的Tensor均在“UB“空间中,shape需保持一致。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

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。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

Vector指令所有输入输出数据的Tensor均在“UB“空间中,shape需保持一致。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

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。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

Vector指令所有输入输出数据的Tensor均在“UB“空间中,shape需保持一致。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vcopy指令抽象

将源地址的Tensor拷贝到目标地址。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vcpadd指令抽象。

计算输入的x向量的n和n+1的和,n为偶数下标,将结果写回y。reduce_num控制了输出的type。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

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

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

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

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vlrelu指令抽象。

若x大于等于0,则z=x;若x小于0,则z=x*y,x按元素与标量y相乘。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vmadd指令抽象。

z = x * z + y。对两个向量中的每个元素执行乘法和加法。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vmaddrelu指令抽象。

z = RELU(x * z + y)。对两个向量中的每个元素进行乘法和加法,然后对该结果中的每个元素进行MADDRELU操作。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vmaxs指令抽象。

对向量中的每个元素和标量进行比较,返回较大者。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vmin指令抽象。

对两个向量中的每个元素和标量进行比较,返回较小者。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vmins指令抽象。

对向量中的每个元素和标量进行比较,返回较小者。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

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数据,同时作为目标向量和第三个源向量。

接口原型

[object Object]

参数说明

[object Object]undefined

约束说明

Vector指令输入输出数据的Tensor均在“UB“空间中。

使用示例

[object Object]

返回值说明

[object Object]

功能说明

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

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vmulconv指令抽象。

z = vmulconv(x, y),x、y按元素相乘,并对输出做量化操作。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vnot指令抽象。

vnot指令对输入向量按位取反,每个向量为8*256bits。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

约束说明

该指令仅支持普通掩码模式和计数器模式。

返回值说明

[object Object]

功能说明

vor指令抽象。

vor指令对输入向量按位取或,每个向量为8*256bits。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

约束说明

该指令仅支持普通掩码模式和计数器模式。

返回值说明

[object Object]

功能说明

vrec指令抽象。

vrec指令进行浮点倒数估计,找到每个向量的近似倒数估计。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vreduce指令抽象。

vreduce指令根据输入y向量的mask数据,决定取x向量中的某些元素存至z向量,由于msKPP中的Tensor并无实际元素,因此增加了reserve_num的参数,z输出的shape由该参数决定。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vreducev2指令抽象。

vreducev2指令根据输入y向量的mask数据,决定取x向量中的某些block级的元素存至z向量,由于msKPP中的Tensor并无相关概念,因此增加了reserve_num的参数,z输出的shape由该参数决定。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vrelu指令抽象。

每个元素的relu操作,按照元素小于0的取0,大于等于0的取本身。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vrsqrt指令抽象。

浮点数的倒数平方根。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vsel指令抽象。

通常与vcmp合用,根据获得的cmp_mask来选取x,y中对应位置的某个元素。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vshl指令抽象。

根据输入类型进行逻辑左移或算术左移。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vshr指令抽象。

根据输入类型进行逻辑右移或算术右移。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vsqrt指令抽象。

y = √x, x按元素开平方根。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

约束说明

输入的值应为正数,否则结果未知并产生异常。

返回值说明

[object Object]

功能说明

vsubrelu指令抽象。

z = vsubrelu(x, y),x、y按元素相减后再计算relu值。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vsubreluconv指令抽象。

z = vsubreluconv(x, y),x、y按元素相减,计算relu值,并对输出做量化操作。

支持的类型转换有FP16->INT8、FP32->FP16、INT16->INT8。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明

[object Object]

功能说明

vtranspose指令抽象。

从输入地址x(32字节对齐)开始转置一个16x16矩阵,每个元素为16位,结果输出到y中,输入输出都是连续的512B存储空间。

接口原型

[object Object]

参数说明

[object Object]undefined

使用示例

[object Object]

返回值说明