MindStudio Kernel Performance Prediction对外接口使用说明

接口列表

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

表 1 msKPP工具接口列表

接口名称 接口简介
基础功能接口 -
Chip 创建性能建模的芯片平台,初始化芯片各项性能数据。
Core 模拟芯片内部的AI Core。
Tensor 算子执行基础数据类型。
Tensor.load 数据搬运接口,对数据在不同单元搬运进行建模。
同步类指令接口 -
set_flag 核内PIPE间同步的指令接口,与wait_flag配套使用。
wait_flag 核内PIPE间同步的指令接口,与set_flag配套使用。
指令接口 -
mmad 对Cube类指令的mmad性能建模接口。
vadd 对Vector类指令的vadd性能建模接口。
vbrcb 对Vector类指令的vbrcb性能建模接口。
vconv 对Vector类指令的vconv性能建模接口。
vconv_deq 对Vector类指令的vconv_deq性能建模接口。
vconv_vdeq 对Vector类指令的vconv_vdeq性能建模接口。
vector_dup 对Vector类指令的vector_dup性能建模接口。
vexp 对Vector类指令的vexp性能建模接口。
vln 对Vector类指令的vln性能建模接口。
vmax 对Vector类指令的vmax性能建模接口。
vmul 对Vector类指令的vmul性能建模接口。
vmuls 对Vector类指令的vmuls性能建模接口。
vsub 对Vector类指令的vsub性能建模接口。
vdiv 对Vector类指令的vdiv性能建模接口。
vcadd 对Vector类指令的vcadd性能建模接口。
vabs 对Vector类指令的vabs性能建模接口。
vaddrelu 对Vector类指令的vaddrelu性能建模接口。
vaddreluconv 对Vector类指令的vaddreluconv性能建模接口。
vadds 对Vector类指令的vadds性能建模接口。
vand 对Vector类指令的vand性能建模接口。
vaxpy 对Vector类指令的vaxpy性能建模接口。
vbitsort 对Vector类指令的vbitsort性能建模接口。
vcgadd 对Vector类指令的vcgadd性能建模接口。
vcgmax 对Vector类指令的vcgmax性能建模接口。
vcgmin 对Vector类指令的vcgmin性能建模接口。
vcmax 对Vector类指令的vcmax性能建模接口。
vcmin 对Vector类指令的vcmin性能建模接口。
vcmp__xxx_ 对Vector类指令的vcmp_xxx性能建模接口。
vcmpv__xxx_ 对Vector类指令的vcmpv_xxx性能建模接口。
vcmpvs__xxx_ 对Vector类指令的vcmpvs_xxx性能建模接口。
vcopy 对Vector类指令的vcopy性能建模接口。
vcpadd 对Vector类指令的vcpadd性能建模接口。
vgather 对Vector类指令的vgather性能建模接口。
vgatherb 对Vector类指令的vgatherb性能建模接口。
vlrelu 对Vector类指令的vlrelu性能建模接口。
vmadd 对Vector类指令的vmadd性能建模接口。
vmaddrelu 对Vector类指令的vmaddrelu性能建模接口。
vmaxs 对Vector类指令的vmaxs性能建模接口。
vmin 对Vector类指令的vmin性能建模接口。
vmins 对Vector类指令的vmins性能建模接口。
vmla 对Vector类指令的vmla性能建模接口。
vmrgsort 对Vector类指令的vmrgsort性能建模接口。
vmulconv 对Vector类指令的vmulconv性能建模接口。
vnot 对Vector类指令的vnot性能建模接口。
vor 对Vector类指令的vor性能建模接口。
vrec 对Vector类指令的vrec性能建模接口。
vreduce 对Vector类指令的vreduce性能建模接口。
vreducev2 对Vector类指令的vreducev2性能建模接口。
vrelu 对Vector类指令的vrelu性能建模接口。
vrsqrt 对Vector类指令的vrsqrt性能建模接口。
vsel 对Vector类指令的vsel性能建模接口。
vshl 对Vector类指令的vshl性能建模接口。
vshr 对Vector类指令的vshr性能建模接口。
vsqrt 对Vector类指令的vsqrt性能建模接口。
vsubrelu 对Vector类指令的vsubrelu性能建模接口。
vsubreluconv 对Vector类指令的vsubreluconv性能建模接口。
vtranspose 对Vector类指令的vtranspose性能建模接口。

基础功能接口

Chip

功能说明

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

接口原型

class Chip(name, debug_mode=False)

参数说明

参数名 输入类型 说明
name string 处理器名称。目前大部分数据基于Atlas A2 训练系列产品/Atlas A2 推理系列产品采集,使用npu-smi info可以查看当前设备昇腾AI处理器类型。
debug_mode bool 是否启用调试模式,默认为False。开启debug模式后可查看未正确运行的指令,但不会生成任何输出件。
True:启用
False:不启用

成员说明

成员名称 描述
chip.enable_trace() 使能算子模拟流水图的功能,生成流水图文件trace.json。
chip.enable_metrics() 使能单指令及分PIPE的流水信息,生成指令统计(Instruction_statistic.csv)、搬运流水统计(Pipe_statistic.csv)文件和指令占比饼图(instruction_cycle_consumption.html)。
chip.set_cache_hit_ratio(config) 用于使能手动调整L2Cache命中率,其中config = {"cache_hit_ratio": 0.6},具体介绍请参见支持cache命中率建模章节。
chip.set_prof_summary_path("xxx/PipeUtilization.csv") 其中PipeUtilization.csv为msprof的结果示例,用于使能PIPE信息的理论值与msprof实测值比对。具体介绍请参见支持PIPE信息的理论值与msprof实测值比对章节。
chip.disable_instr_log() 使能后,抑制指令任务添加和调度结束后的日志打印。

约束说明

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

使用示例

from mskpp import Chip
# 如何查看当前设备昇腾处理器类型请参见以下说明
with Chip("Ascendxxxyy") as chip:    # Ascendxxxyy需替换为实际使用的处理器类型
    chip.enable_trace()   # 调用该函数即可使能算子模拟流水图的功能,生成流水图文件
    chip.enable_metrics()  # 调用该函数即可使能单指令及分PIPE的流水信息,生成搬运流水统计、指令信息统计和指令占比饼图

Note

非Atlas A3 训练系列产品/Atlas A3 推理系列产品:在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,获取Chip Name信息。实际配置值为AscendChip Name,例如Chip Name取值为xxxyy,实际配置值为Ascendxxxyy。当Ascendxxxyy为代码样例的路径时,需要配置为ascendxxxyy。

返回值说明

Core

功能说明

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

接口原型

class Core(core_type_name)

参数说明

参数名 输入类型 说明
core_type_name string 昇腾计算单元类型字符串,通常可以表示为AICx或AIVx,其中x为数字,即使用的AI Cube Core/ AI Vector Core的序号。仅支持A-Za-z0-9中的一个或多个字符。

约束说明

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

使用示例

from mskpp import Core
with Core("AIC0") as aic:
    # AI Cube Core 0上的算子计算逻辑相关代码
    ...

返回值说明

Tensor

功能说明

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

接口原型

class Tensor(mem_type, dtype=None, size=None, format=None, is_inited=False)

参数说明

参数名 输入类型 说明
mem_type 字符串 抽象Tensor所处的内存空间的位置,如GM、UB、L1、L0A、L0B、L0C、FB、BT等。
dtype 字符串 数据类型,如BOOL、UINT1、UINT2、UINT8、UINT16、UINT32、BF16、UINT64、INT4、INT8、INT16、INT32、INT64、FP16、FP32。
size list Tensor的shape。
format 字符串 数据排布格式,详细可参见《Ascend C算子开发指南》的“编程指南 > 概念原理和术语 > 神经网络和算子> 数据排布格式”数据排布格式章节。
is_inited bool 控制Tensor类是否已就绪的开关,开启后,以该Tensor为输入的指令即可启动。

成员说明

成员名称 描述
tensor.set_valid() 使能当前tensor就绪,开启后,以该tensor为输入的指令即可立即启动。
tensor.set_invalid() 使当前tensor处于非就绪状态,关闭后,以该tensor为输入的指令不可立即启动。
tensor.is_valid() 用于获取当前的tensor就绪状态。

约束说明

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

使用示例

from mskpp import Tensor, Core
gm_tmp= Tensor("GM", "FP16", [48, 16], format="ND")
with Core("AIV0") as aiv:  # AIV0上的相关计算逻辑
    ...
    gm_tmp.load(result, set_value=0)
with Core("AIC0") as aic:
    in_x = Tensor("GM", "FP16", [48, 16], format="ND")
    in_x.load(gm_tmp, expect_value=0) # AIC0上的相关计算逻辑 
    ...

返回值说明

Tensor.load

功能说明

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

接口原型

Tensor.load(tensor, repeat=1, set_value=-1, expect_value=-1)

参数说明

参数名 输入类型 说明
tensor 变量 输入的其他tensor,其功能与接口中Tensor的定义一致。
repeat int 该参数是对搬运指令repeat的模拟,通过输入该值可获取不同repeat值下搬运通路的带宽值,该带宽值用于计算搬运指令的耗时。非必选参数,默认值为1,建议值为[1,255]之间的整数。当输入的repeat值不满足要求时,系统将会抛出异常:"input repeat = xx invalid.",其中xx为输入的异常repeat值。
set_value int 设置此tensor数据被依赖的标识号,可以自行定义,需与expect_value配对使用。非必选参数,不输入则不会使能依赖关系。
expect_value int 设置此tensor数据加载依赖数据的标识号,可以自行定义,需与set_value配对使用。非必选参数,不输入则不会使能依赖关系。

约束说明

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

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

返回值说明

同步类指令接口

set_flag

功能说明

用于确保核内各PIPE间不同指令的同步,pipe_src先完成调度后,pipe_dst将解除阻塞状态。设置set_flag和wait_flag之后,指令流水图介绍(以MindStudio Insight为例)将会更贴合用户的调用预期。

接口原型

set_flag(pipe_src, pipe_dst, event_id)

参数说明

参数名 输入/输出 说明
pipe_src 输入 源PIPE,在pipe_src调度后设置event_id。
输入格式为aicore_PIPE,例如:"aic0_PIPE-MTE1"。其中aicore的取值范围参见基础功能接口Core,PIPE取值范围为"PIPE-MTE1"、"PIPE-MTE2"、 "PIPE-MTE3"、"PIPE-FIX"、"PIPE-M"、"PIPE-V"、 "PIPE-S"。不指定aicore时,可直接输入PIPE取值。
数据类型:string。
必选参数。
pipe_dst 输入 目的PIPE,在pipe_src调度之后,pipe_dst将会解除阻塞状态。
输入格式为aicore_PIPE,例如:"aic0_PIPE-MTE1"。其中aicore的取值范围参见基础功能接口Core,PIPE取值范围为"PIPE-MTE1"、"PIPE-MTE2"、 "PIPE-MTE3"、"PIPE-FIX"、"PIPE-M"、"PIPE-V"、 "PIPE-S"。不指定aicore时,可直接输入PIPE取值。
数据类型:string。
必选参数。
event_id 输入 同步指令之间依赖的唯一值。
取值范围[0, 65535]。
数据类型:int。
必选参数。

约束说明

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

使用示例

from mskpp import Tensor, Chip, set_flag, wait_flag
with Chip("Ascendxxyy") as chip:
    gm_weight = Tensor("GM", "FP16", [128, 256], format="ND")
    l1_weight = Tensor("L1", "FP16", [128, 256], format="ND")
    for conv_idx in range(4):  # L0A数据加载前,GM分批加载到L1上
        gm_weight_part = gm_weight[:, 64]
        l1_weight_part = l1_weight[:, 64]
        l1_weight_part.load(gm_weight_part)
        if conv_idx == 3:
            set_flag("PIPE-MTE2", "PIPE-MTE1", 1)  # 当完成MTE2,才可以执行MTE1
    x = Tensor("L0A")   # L0A
    # 正在执行MTE2操作, MTE1操作需要等待MTE2完成才能执行。
    l1_weight.set_valid()  # 手动使能L1
    wait_flag("PIPE-MTE2", "PIPE-MTE1", 1)
    x.load(l1_weight)

返回值说明

wait_flag

功能说明

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

接口原型

wait_flag(pipe_src, pipe_dst, event_id)

参数说明

参数名 输入/输出 说明
pipe_src 输入 源PIPE,在pipe_src调度后设置event_id。
输入格式为aicore_PIPE,例如:"aic0_PIPE-MTE1"。其中aicore的取值范围参见基础功能接口Core,PIPE取值范围为"PIPE-MTE1"、"PIPE-MTE2"、 "PIPE-MTE3"、"PIPE-FIX"、"PIPE-M"、"PIPE-V"、 "PIPE-S"。不指定aicore时,可直接输入PIPE取值。
数据类型:string。
必选参数。
pipe_dst 输入 目的PIPE,在pipe_src调度之后,pipe_dst将会解除阻塞状态。
输入格式为aicore_PIPE,例如:"aic0_PIPE-MTE1"。其中aicore的取值范围参见基础功能接口Core,PIPE取值范围为"PIPE-MTE1"、"PIPE-MTE2"、 "PIPE-MTE3"、"PIPE-FIX"、"PIPE-M"、"PIPE-V"、 "PIPE-S"。不指定aicore时,可直接输入PIPE取值。
数据类型:string。
必选参数。
event_id 输入 同步指令之间依赖的唯一值。
取值范围[0, 65535]。
数据类型:int。
必选参数。

约束说明

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

使用示例

from mskpp import Tensor, Chip, set_flag, wait_flag
with Chip("Ascendxxyy") as chip:
    gm_weight = Tensor("GM", "FP16", [128, 256], format="ND")
    l1_weight = Tensor("L1", "FP16", [128, 256], format="ND")
    for conv_idx in range(4):  # L0A数据加载前,GM分批加载到L1上
        gm_weight_part = gm_weight[:, 64]
        l1_weight_part = l1_weight[:, 64]
        l1_weight_part.load(gm_weight_part)
        if conv_idx == 3:
            set_flag("PIPE-MTE2", "PIPE-MTE1", 1)  # 当完成MTE2,才可以执行MTE1
    x = Tensor("L0A")   # L0A
    # 正在执行MTE2操作, MTE1操作需要等待MTE2完成才能执行。
    l1_weight.set_valid()  # 手动使能L1
    wait_flag("PIPE-MTE2", "PIPE-MTE1", 1)
    x.load(l1_weight)

返回值说明

指令接口

mmad

功能说明

完成矩阵乘加操作。

接口原型

class mmad(x, y, b, is_inited=False)

参数说明

参数名 数据类型 说明
x Tensor变量 左矩阵,在L0A空间。支持FP16。
y Tensor变量 右矩阵,在L0B空间。支持FP16。
b Tensor变量 偏置项,可以在L0C空间或Bias Table空间。支持FP32。
is_inited bool 当输入是在L0C空间时,需要加is_inited=True,因为不存在通路将数据从GM直接搬运到L0C。

约束说明

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

使用示例

from mskpp import mmad, Tensor
in_x = Tensor("GM", "FP16", [32, 48], format="ND")
in_y = Tensor("GM", "FP16", [48, 16], format="ND")
in_z = Tensor("GM", "FP32", [32, 16], format="NC1HWC0")
out_z = mmad(in_x, in_y, in_z)

返回值说明

vadd

功能说明

vadd指令抽象。

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

接口原型

class vadd(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32、INT16、INT32。
y 输入 Tensor变量 输入y向量Tensor,支持FP16、FP32、INT16、INT32。
z 输出 Tensor变量 输出向量Tensor。

约束说明

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

使用示例

from mskpp import vadd, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vadd(ub_x, ub_y, ub_z)

返回值说明

vbrcb

功能说明

vbrcb指令抽象。

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

接口原型

class vbrcb(x, y, broadcast_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持UINT16、UINT32。
y 输出 Tensor变量 输出y向量Tensor。支持UINT16、UINT32。
broadcast_num 输入 int 指定最后一维扩维到多少倍,实测性能数据不同扩维倍数对性能影响不大,因此直接以常用的扩维16倍数据为准(对应指令的dstBlockStride=1,dstRepeatStride=8)。

使用示例

from mskpp import vbrcb, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
broadcast_num = 16
ub_x.load(gm_x)
out = vbrcb(ub_x, ub_y, broadcast_num)

返回值说明

vconv

功能说明

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。

接口原型

class vconv(x, y, dtype)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。
y 输出 Tensor变量 输出y向量Tensor。
dtype 输入 字符串 表示目标Tensor的数据类型。

使用示例

from mskpp import vconv, Tensor
ub_x, ub_y = Tensor("UB", "FP16"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vconv(ub_x, ub_y, "FP32")

返回值说明

vconv_deq

功能说明

vconv_deq指令抽象。

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

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

接口原型

class vconv_deq(x, y, dtype)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。
y 输出 Tensor变量 输出y向量Tensor。
dtype 输入 字符串 表示目标Tensor的数据类型。

使用示例

from mskpp import vconv_deq, Tensor
ub_x, ub_y = Tensor("UB", "FP16"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vconv_deq(ub_x, ub_y, "FP32")

返回值说明

vconv_vdeq

功能说明

vconv_vdeq指令抽象。

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

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

接口原型

class vconv_vdeq(x, y, dtype)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。
y 输出 Tensor变量 输出y向量Tensor。
dtype 输入 字符串 表示目标Tensor的数据类型。

使用示例

from mskpp import vconv_vdeq, Tensor
ub_x, ub_y = Tensor("UB", "FP16"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vconv_vdeq(ub_x, ub_y, "FP32")

返回值说明

vector_dup

功能说明

vector_dup指令抽象。

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

接口原型

class vector_dup(x, y, fill_shape)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32、INT16、INT32、UINT16、UINT32。
y 输出 Tensor变量 输出y向量Tensor。支持FP16、FP32、INT16、INT32、UINT16、UINT32。
fill_shape 输入 list 表示目标Tensor的要被扩充的shape值。

约束说明

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

使用示例

from mskpp import vector_dup, Tensor
ub_x = Tensor("UB", "FP16", [1], format="ND", is_inited=True)
ub_y = Tensor("UB")
out = vector_dup(ub_x, ub_y, [8, 2048])

返回值说明

vexp

功能说明

vexp指令抽象。

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

接口原型

class vexp(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32。
y 输出 Tensor变量 输出y向量Tensor。支持FP16、FP32。

使用示例

from mskpp import vexp, Tensor
ub_x = Tensor("UB")
ub_x.load(gm_x)
ub_y = Tensor("UB")
out = vexp(ub_x, ub_y)

返回值说明

vln

功能说明

vln指令抽象。

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

接口原型

class vln(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32。
y 输出 Tensor变量 输出y向量Tensor。支持FP16、FP32。

使用示例

from mskpp import vln, Tensor
ub_x = Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
ub_y = Tensor("UB")
out = vln(ub_x, ub_y)

返回值说明

vmax

功能说明

vmax指令抽象。

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

接口原型

class vmax(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32、INT16、INT32。
y 输入 Tensor变量 输入y向量Tensor。支持FP16、FP32、INT16、INT32。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32、INT16、INT32。

使用示例

from mskpp import vmax, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vmax(ub_x, ub_y, ub_z)

返回值说明

vmul

功能说明

vmul指令抽象。

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

接口原型

class vmul(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32、INT16、INT32。
y 输入 Tensor变量 输入y向量Tensor。支持FP16、FP32、INT16、INT32。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32、INT16、INT32。

使用示例

from mskpp import vmul, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vmul(ub_x, ub_y, ub_z)

返回值说明

vmuls

功能说明

vmuls指令抽象。

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

接口原型

class vmuls(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入向量Tensor。支持FP16、FP32、INT16、INT32。
y 输入 Python标量 输入标量,程序不对该参数做任何处理。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32、INT16、INT32。

使用示例

from mskpp import vmuls, Tensor
ub_x, ub_z = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vmuls(ub_x, 5, ub_z)  #5为y标量的值

返回值说明

vsub

功能说明

vsub指令抽象。

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

接口原型

class vsub(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32、INT16、INT32。
y 输入 Tensor变量 输入y向量Tensor。支持FP16、FP32、INT16、INT32。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32、INT16、INT32。

使用示例

from mskpp import vsub, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vsub(ub_x, ub_y, ub_z)

返回值说明

vdiv

功能说明

vdiv指令抽象。

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

接口原型

class vdiv(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32。
y 输入 Tensor变量 输入y向量Tensor。支持FP16、FP32。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32。

使用示例

from mskpp import vdiv, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vdiv(ub_x, ub_y, ub_z)

返回值说明

vcadd

功能说明

vcadd指令抽象。

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

接口原型

class vcadd(x, y, reduce_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32。
reduce_num 输入 int 指定最后一维reduce到多少倍,此参数的取值对该指令的性能无影响。
y 输出 Tensor变量 输出y向量Tensor。支持FP16、FP32。

使用示例

from mskpp import vcadd, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
reduce_num = 16
ub_x.load(gm_x)
out = vcadd(ub_x, ub_y, reduce_num)

约束说明

reduce_num不能为0。

返回值说明

vabs

功能说明

vabs指令抽象。

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

接口原型

class vabs(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32。
y 输出 Tensor变量 输出y向量Tensor。支持FP16、FP32。

使用示例

from mskpp import vabs, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vabs(ub_x, ub_y)

返回值说明

vaddrelu

功能说明

vaddrelu指令抽象。

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

接口原型

class vaddrelu(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32、INT16。
y 输入 Tensor变量 输入y向量Tensor。支持FP16、FP32、INT16。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32、INT16。

使用示例

from mskpp import vaddrelu, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vaddrelu(ub_x, ub_y, ub_z)

返回值说明

vaddreluconv

功能说明

vaddreluconv指令抽象。

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

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

接口原型

class vaddreluconv(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32、INT16。
y 输入 Tensor变量 输入y向量Tensor。支持FP16、FP32、INT16。
z 输出 Tensor变量 输出向量Tensor。支持FP16、INT8。

使用示例

from mskpp import vaddreluconv, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vaddreluconv(ub_x, ub_y, ub_z)

返回值说明

vadds

功能说明

vadds指令抽象。

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

接口原型

class vadds(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入向量Tensor。支持FP16、FP32、INT16、INT32。
y 输入 Tensor变量 输入标量。程序不对该参数做任何处理。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32、INT16、INT32。

使用示例

from mskpp import vadds, Tensor
ub_x, ub_z = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vadds(ub_x, 5, ub_z) #5为y标量的值

返回值说明

vand

功能说明

vand指令抽象。

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

接口原型

class vand(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持INT16、UINT16。
y 输入 Tensor变量 输入y向量Tensor。支持INT16、UINT16。
z 输出 Tensor变量 输出向量Tensor。支持INT16、UINT16。

使用示例

from mskpp import vand, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vand(ub_x, ub_y, ub_z)

返回值说明

vaxpy

功能说明

vaxpy指令抽象。

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

接口原型

vaxpy(x, y, z, if_mix=False)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入向量Tensor。支持FP16、FP32、INT16、INT32。
y 输入 Tensor变量 输入标量,程序不对该参数做任何处理。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32、INT16、INT32。
if_mix 输入 Tensor变量 默认为False。若设置为True,指定输出数据类型为FP32。

使用示例

from mskpp import vaxpy, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vaxpy(ub_x, ub_y, ub_z)

返回值说明

vbitsort

功能说明

vbitsort指令抽象。

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

接口原型

class vbitsort(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入向量Tensor。支持FP16、FP32。
y 输入 Tensor变量 输入向量Tensor。支持UINT32。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32。

使用示例

from mskpp import vbitsort, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM") 
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vbitsort(ub_x, ub_y, ub_z)

返回值说明

vcgadd

功能说明

vcgadd指令抽象

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

接口原型

class vcgadd(x, y, reduce_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输出 Tensor变量 输出y向量Tensor,支持FP16、FP32。
reduce_num 输入 int shape指定的缩减倍数。

约束说明

reduce_num不能为0。

使用示例

from mskpp import vcgadd, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
reduce_num = 16
ub_x.load(gm_x)
out = vcgadd(ub_x, ub_y, reduce_num)

返回值说明

vcgmax

功能说明

vcgmax指令抽象

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

接口原型

class vcgmax(x, y, reduce_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输出 Tensor变量 输出y向量Tensor,支持FP16、FP32。
reduce_num 输入 int 指定最后一维reduce到多少倍,此参数的取值对该指令的性能无影响。

约束说明

reduce_num不能为0。

使用示例

from mskpp import vcgmax, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
reduce_num = 16
ub_x.load(gm_x)
out = vcgmax(ub_x, ub_y, reduce_num)

返回值说明

vcgmin

功能说明

vcgmin指令抽象

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

接口原型

class vcgmin(x, y, reduce_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16。
y 输出 Tensor变量 输出y向量Tensor,支持FP16。
reduce_num 输入 int 指定最后一维reduce到多少倍,实测性能数据reduce对性能无影响。

约束说明

reduce_num不能为0。

使用示例

from mskpp import vcgmin, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
reduce_num = 16
ub_x.load(gm_x)
out = vcgmin(ub_x, ub_y, reduce_num)

返回值说明

vcmax

功能说明

vcmax指令抽象。

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

接口原型

class vcmax(x, y, reduce_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输出 Tensor变量 输出y向量Tensor,支持FP16、FP32。
reduce_num 输入 int 指定最后一维reduce到多少倍,实测性能数据reduce对性能无影响。

约束说明

reduce_num不能为0。

使用示例

from mskpp import vcmax, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
reduce_num = 16
ub_x.load(gm_x)
out = vcmax(ub_x, ub_y, reduce_num)

返回值说明

vcmin

功能说明

vcmin指令抽象。

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

接口原型

class vcmin(x, y, reduce_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输出 Tensor变量 输出y向量Tensor,支持FP16、FP32。
reduce_num 输入 int 指定最后一维reduce到多少倍,实测性能数据reduce对性能无影响。

约束说明

reduce_num不能为0。

使用示例

from mskpp import vcmin, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
reduce_num = 16
ub_x.load(gm_x)
out = vcmin(ub_x, ub_y, reduce_num)

返回值说明

vcmp__xxx_

功能说明

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。

接口原型

class vcmp(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输出 Tensor变量 输出y向量Tensor,支持FP16、FP32。

约束说明

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

使用示例

from mskpp import vcmp, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vcmp(ub_x, ub_y)

返回值说明

vcmpv__xxx_

功能说明

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。

接口原型

class vcmpv(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输入 Tensor变量 输入y向量Tensor,支持FP16、FP32。
z 输出 Tensor变量 输出向量Tensor。

约束说明

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

使用示例

from mskpp import vcmpv, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vcmpv(ub_x, ub_y, ub_z)

返回值说明

vcmpvs__xxx_

功能说明

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。

接口原型

class vcmpvs(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输入 Tensor变量 输入y向量Tensor,支持FP16、FP32。
z 输出 Tensor变量 输出向量Tensor。

约束说明

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

使用示例

from mskpp import vcmpvs, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vcmpvs(ub_x, ub_y, ub_z)

返回值说明

vcopy

功能说明

vcopy指令抽象

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

接口原型

class vcopy(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入向量Tensor。支持int16、int32、uint16、uint32。
y 输出 Tensor变量 输出向量Tensor。支持int16、int32、uint16、uint32。

使用示例

from mskpp import vcopy, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vcopy(ub_x, ub_y)

返回值说明

vcpadd

功能说明

vcpadd指令抽象。

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

接口原型

class vcpadd(x, y, reduce_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持fp16、fp32。
y 输出 Tensor变量 输出y向量Tensor。支持fp16、fp32。
reduce_num 输入 int shape指定的缩减倍数。

使用示例

from mskpp import vcpadd, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vcpadd(ub_x, ub_y, reduce_num)

返回值说明

vgather

功能说明

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

接口原型

class vgather(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持UINT16、UINT32。
y 输出 Tensor变量 输出y向量Tensor。支持UINT16、UINT32。

使用示例

from mskpp import vgather, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vgather(ub_x, ub_y)

返回值说明

vgatherb

功能说明

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

接口原型

class vgatherb(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持UINT16、UINT32。
y 输出 Tensor变量 输出y向量Tensor。支持UINT16、UINT32。

使用示例

from mskpp import vgatherb, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vgatherb(ub_x, ub_y)

返回值说明

vlrelu

功能说明

vlrelu指令抽象。

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

接口原型

class vlrelu(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32。
y 输入 Tensor变量 输入y标量。支持float16、float32。
z 输出 Tensor变量 输出向量Tensor。支持float16、float32。

使用示例

from mskpp import vlrelu, Tensor
ub_x, ub_z = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
scalar_y = 5   #5为y标量的值
ub_x.load(gm_x)
out = vlrelu(ub_x, scalar_y, ub_z)

返回值说明

vmadd

功能说明

vmadd指令抽象。

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

接口原型

class vmadd(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32。
y 输入 Tensor变量 输入y向量Tensor。支持float16、float32。
z 输出 Tensor变量 输出向量Tensor。支持float16、float32。

使用示例

from mskpp import vmadd, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vmadd(ub_x, ub_y, ub_z)

返回值说明

vmaddrelu

功能说明

vmaddrelu指令抽象。

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

接口原型

class vmaddrelu(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32。
y 输入 Tensor变量 输入y向量Tensor。支持float16、float32。
z 输出 Tensor变量 输出向量Tensor。支持float16、float32。

使用示例

from mskpp import vmaddrelu, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vmaddrelu(ub_x, ub_y, ub_z)

返回值说明

vmaxs

功能说明

vmaxs指令抽象。

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

接口原型

class vmaxs(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32、int16、int32。
y 输入 Tensor变量 输入标量。程序不对该参数做任何处理。
z 输出 Tensor变量 输出向量Tensor。支持float16、float32、int16、int32。

使用示例

from mskpp import vmaxs, Tensor
ub_x, ub_z = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vmaxs(ub_x, 5, ub_z)

返回值说明

vmin

功能说明

vmin指令抽象。

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

接口原型

class vmin(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32、int16、int32。
y 输入 Tensor变量 输入y向量Tensor。支持float16、float32、int16、int32。
z 输出 Tensor变量 输出向量Tensor。支持float16、float32、int16、int32。

使用示例

from mskpp import vmin, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vmin(ub_x, ub_y, ub_z)

返回值说明

vmins

功能说明

vmins指令抽象。

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

接口原型

class vmins(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32、int16、int32。
y 输入 Tensor变量 输入标量。程序不对该参数做任何处理。
z 输出 Tensor变量 输出向量Tensor。支持float16、float32、int16、int32。

使用示例

from mskpp import vmins, Tensor
ub_x, ub_z = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vmins(ub_x, 5, ub_z)  #5为y的标量值

返回值说明

vmla

功能说明

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

接口原型

class vmla(x, y, z, if_mix=False)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输入 Tensor变量 输入y向量Tensor,支持FP16、FP32。
z 输出 Tensor变量 输出向量Tensor,支持FP16、FP32。
if_mix 输入 Tensor变量 默认为False。若设置为True,指定输出数据类型为FP32。

约束说明

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

使用示例

from mskpp import vmla, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vmla(ub_x, ub_y, ub_z)

返回值说明

vmrgsort

功能说明

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

接口原型

class vmrgsort(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输入 Tensor变量 输入y向量Tensor,支持UINT64。
z 输出 Tensor变量 输出向量Tensor,支持FP16、FP32。

使用示例

from mskpp import vmrgsort, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vmrgsort(ub_x, ub_y, ub_z)

返回值说明

vmulconv

功能说明

vmulconv指令抽象。

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

接口原型

class vmulconv(x, y, z, dtype)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16。
y 输入 Tensor变量 输入y向量Tensor。支持FP16。
z 输出 Tensor变量 输出向量Tensor。
dtype 输入 Tensor变量 指定输入数据类型,包含UINT8、INT8。z的输出数据类型由dtype决定。

使用示例

from mskpp import vmulconv, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vmulconv(ub_x, ub_y, ub_z, 'UINT8')

返回值说明

vnot

功能说明

vnot指令抽象。

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

接口原型

class vnot(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持INT16、UINT16。
y 输出 Tensor变量 输出y向量Tensor,支持INT16、UINT16。

使用示例

from mskpp import vnot, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vnot(ub_x, ub_y)

约束说明

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

返回值说明

vor

功能说明

vor指令抽象。

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

接口原型

class vor(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持INT16、 UINT16。
y 输入 Tensor变量 输入y向量Tensor,支持INT16、UINT16。
z 输出 Tensor变量 输出z向量Tensor,支持INT16、UINT16。

使用示例

from mskpp import vor, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x,gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vor(ub_x, ub_y, ub_z)

约束说明

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

返回值说明

vrec

功能说明

vrec指令抽象。

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

接口原型

class vrec(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor,支持FP16、FP32。
y 输出 Tensor变量 输出y向量Tensor,支持FP16、FP32。

使用示例

from mskpp import vrec, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out=vrec(ub_x, ub_y)

返回值说明

vreduce

功能说明

vreduce指令抽象。

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

接口原型

class vreduce(x, y, z, reserve_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持UINT16、UINT32。
y 输入 Tensor变量 输入y向量Tensor。支持UINT16、UINT32。
z 输出 Tensor变量 输出z向量Tensor。支持UINT16、UINT32。
reserve_num 输入 int 指定输出元素的个数。

使用示例

from mskpp import vreduce, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y, gm_z = Tensor("GM"), Tensor("GM"), Tensor("GM")
reserve_num = 16
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vreduce(ub_x, ub_y, ub_z, reserve_num)
gm_z.load(out[0])

返回值说明

vreducev2

功能说明

vreducev2指令抽象。

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

接口原型

class vreducev2(x, y, z, reserve_num)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持UINT16、UINT32。
y 输入 Tensor变量 输入y向量Tensor。支持UINT16、UINT32。
z 输出 Tensor变量 输出z向量Tensor。支持UINT16、UINT32。
reserve_num 输入 int 指定输出元素的个数。

使用示例

from mskpp import vreducev2, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y, gm_z = Tensor("GM"), Tensor("GM"), Tensor("GM")
reserve_num = 16
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vreducev2(ub_x, ub_y, ub_z, reserve_num)
gm_z.load(out[0])

返回值说明

vrelu

功能说明

vrelu指令抽象。

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

接口原型

class vrelu(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32、int32。
y 输出 Tensor变量 输出向量Tensor。支持float16、float32、int32。

使用示例

from mskpp import vrelu, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vrelu(ub_x, ub_y)

返回值说明

vrsqrt

功能说明

vrsqrt指令抽象。

浮点数的倒数平方根。

接口原型

class vrsqrt(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32。
y 输出 Tensor变量 输出向量Tensor。支持float16、float32。

使用示例

from mskpp import vrsqrt, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vrsqrt(ub_x, ub_y)

返回值说明

vsel

功能说明

vsel指令抽象。

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

接口原型

class vsel(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32、INT16、INT32。
y 输入 Tensor变量 输入y向量Tensor。支持FP16、FP32、INT16、INT32。
z 输出 Tensor变量 输出向量Tensor。支持FP16、FP32、INT16、INT32。

使用示例

from mskpp import vsel, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vsel(ub_x, ub_y, ub_z)

返回值说明

vshl

功能说明

vshl指令抽象。

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

接口原型

class vshl(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持UINT16、UINT32、INT16、INT32。
y 输出 Tensor变量 输出y向量Tensor。支持UINT16、UINT32、INT16、INT32。

使用示例

from mskpp import vshl, Tensor
ub_x, ub_z = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vshl(ub_x, ub_z)

返回值说明

vshr

功能说明

vshr指令抽象。

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

接口原型

class vshr(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持UINT16、UINT32、INT16、INT32。
y 输出 Tensor变量 输出y向量Tensor。支持UINT16、UINT32、INT16、INT32。

使用示例

from mskpp import vshr, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vshr(ub_x, ub_y)

返回值说明

vsqrt

功能说明

vsqrt指令抽象。

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

接口原型

class vsqrt(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32。
y 输出 Tensor变量 输出向量Tensor。支持float16、float32。

使用示例

from mskpp import vsqrt, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vsqrt(ub_x, ub_y)

约束说明

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

返回值说明

vsubrelu

功能说明

vsubrelu指令抽象。

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

接口原型

class vsubrelu(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持float16、float32。
y 输入 Tensor变量 输入y向量Tensor。支持float16、float32。
z 输出 Tensor变量 输出向量Tensor。支持float16、float32。

使用示例

from mskpp import vsubrelu, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vsubrelu(ub_x, ub_y, ub_z)

返回值说明

vsubreluconv

功能说明

vsubreluconv指令抽象。

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

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

接口原型

class vsubreluconv(x, y, z)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持FP16、FP32、INT16。
y 输入 Tensor变量 输入y向量Tensor。支持FP16、FP32、INT16。
z 输出 Tensor变量 输出向量Tensor。支持FP16、INT8。

使用示例

from mskpp import vsubreluconv, Tensor
ub_x, ub_y, ub_z = Tensor("UB"), Tensor("UB"), Tensor("UB")
gm_x, gm_y = Tensor("GM"), Tensor("GM")
ub_x.load(gm_x)
ub_y.load(gm_y)
out = vsubreluconv(ub_x, ub_y, ub_z)

返回值说明

vtranspose

功能说明

vtranspose指令抽象。

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

接口原型

class vtranspose(x, y)

参数说明

参数名 输入/输出 数据类型 说明
x 输入 Tensor变量 输入x向量Tensor。支持INT16。
y 输出 Tensor变量 输出向量Tensor。支持INT16。

使用示例

from mskpp import vtranspose, Tensor
ub_x, ub_y = Tensor("UB"), Tensor("UB")
gm_x = Tensor("GM")
ub_x.load(gm_x)
out = vtranspose(ub_x, ub_y)

返回值说明