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

elif_scope

功能说明

创建TIK条件判断语句,当前面的if_scope语句以及elif_scope语句条件都不满足时,且当前elif_scope条件判断通过时,则执行本elif_scope代码块。

伪代码如下:

# 当满足cond1时,执行if_scope代码块。
if_scope(cond1)

# 当if_scope语句条件不满足时,且本语句cond2条件满足时,执行此elif_scope代码块
# 首个elif_scope必须在if_scope函数后
elif_scope(cond2)

# 当前面的if_scope以及elif_scope条件都不满足,且本语句cond3条件满足时,则执行此elif_scope代码块
elif_scope(cond3)

函数原型

elif_scope(cond)

参数说明

表1 参数说明

参数名称

输入/输出

含义

cond

输入

支持InputScalar,Scalar,立即数(int,float), Expr,bool,以及any、all、negate函数。

其中:
  • Scalar、InputScalar类型的参数会自动转换为表达式,例如若参数名称为a,则转换为:a != 0。
  • 如果Expr为数值表达式,则会自动判断是否!=0,例如参数为scalar // 2,则转换为 scalar // 2 !=0
须知:

Expr中支持如下运算符:

  • 比较运算符:>,<,!=,==,>=,<=
  • 算术运算符:+,-,*,/,//,%
  • 位运算符:&,|,<<,>>

可以用支持的运算符组成复杂表达式,但是不支持比较运算符的连用,例如,若想表达n>1,且n<4:

  • 不支持如下表达方式

    1 < n < 4

  • 可以使用如下表达方式

    tik.all((1 < n) , (n < 4))

支持的型号

Atlas 200/300/500 推理产品

Atlas 训练系列产品

Atlas推理系列产品AI Core

Atlas推理系列产品Vector Core

Atlas A2训练系列产品/Atlas 800I A2推理产品

Atlas 200/500 A2推理产品

注意事项

  • 此条件语句必须在if_scopeelif_scope函数后。
  • 一条if_scope后并列的elif_scope和else_scope语句,不能超过400条。
  • Expr中的scalar不支持如下数据类型:

    Atlas 200/300/500 推理产品,Expr中不能含有float16或float32类型的scalar。

    Atlas 训练系列产品,Expr中不能含有float16类型的scalar。

    Atlas推理系列产品AI Core,Expr中不能含有float16类型的scalar。

    Atlas推理系列产品Vector Core,Expr中不能含有float16类型的scalar。

    Atlas A2训练系列产品/Atlas 800I A2推理产品,Expr中不能含有float16类型的scalar。

    Atlas 200/500 A2推理产品,Expr中不能含有float16类型的scalar。

返回值

TikWithScope对象。

继承TVM的WithScope。

调用示例

tik_instance = tik.Tik()

cond = tik_instance.InputScalar(dtype="int16", name="cond")
src_gm = tik_instance.Tensor(dtype="int64", shape=(16, ),
                             scope=tik.scope_gm, name="src_gm")
dst_ub = tik_instance.Tensor(dtype="int64", shape=(4, ),
                             scope=tik.scope_ubuf, name="dst_ub")
dst_gm = tik_instance.Tensor(dtype="int64", shape=(4, ),
                             scope=tik.scope_gm, name="dst_gm")
# 将dst初始化为 src_gm[0:3]
tik_instance.data_move(dst_ub, src_gm[0:3,], 0, 1, 1, 0, 0)

# 根据cond的值,将src的不同切片搬运到dst中
# 当满足cond==1时,执行if_scope内代码块
with tik_instance.if_scope(cond == 1):
    tik_instance.data_move(dst_ub, src_gm[4:7,], 0, 1, 1, 0, 0)
# 当不满足cond==1,且满足cond==2时,执行elif_scope内代码块
with tik_instance.elif_scope(cond == 2):
    tik_instance.data_move(dst_ub, src_gm[8:11,], 0, 1, 1, 0, 0)
# 当cond==1和cond==2都不满足,且满足cond==3时,执行elif_scope内代码块
with tik_instance.elif_scope(cond == 3):
    tik_instance.data_move(dst_ub, src_gm[12:15,], 0, 1, 1, 0, 0)

# 将dst搬运到gm,用以输出
tik_instance.data_move(dst_gm, dst_ub, 0, 1, 1, 0, 0)

tik_instance.BuildCCE(kernel_name="if_scope", inputs=[src_gm, cond], outputs=[dst_gm])

结果示例

输入数据(src_gm):
[0, 1, 2,..., 15]

输入数据(cond):
3

输出数据(dst_gm):
[12, 13, 14, 15]
搜索结果
找到“0”个结果

当前产品无相关内容

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