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)
参数说明
参数名称 |
输入/输出 |
含义 |
---|---|---|
cond |
输入 |
支持InputScalar,Scalar,立即数(int,float), Expr,bool,以及any、all、negate函数。
其中:
|
支持的型号
Atlas 200/300/500 推理产品
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas推理系列产品Vector Core
Atlas A2训练系列产品/Atlas 800I A2推理产品
Atlas 200/500 A2推理产品
注意事项
- 此条件语句必须在if_scope或elif_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]
父主题: 程序控制