文档
注册

new_stmt_scope

功能说明

代表一个c语言的大括号,new_stmt_scope范围内空间代表一个新作用域。disable_sync配置是否在当前作用域内自动插入同步指令。

当API之间有数据依赖时,确保前一个API执行完,再执行后一个API,就需要在API之间插入同步指令;如果API之间没有数据依赖,则可以不插入同步指令。disable_sync配置为False时,系统会自动判断是否需要插入同步指令;如果用户能够确保当前API之间没有数据依赖,则可以配置disable_sync为True,不插入同步指令,算子性能会更高,但准确性需要用户自行保证。

函数原型

new_stmt_scope(disable_sync=False)

参数说明

表1 参数说明

参数名称

输入/输出

含义

disable_sync

输入

配置是否在当前作用域内自动插入同步指令。

如果为True,则不会自动插入同步指令。算子开发者需要确保API之间没有数据依赖,否则可能导致功能错误。

如果为False,则系统自动判断是否插入同步指令。当API之间有数据依赖时,系统会自动插入同步指令。

默认为False。

支持的型号

Atlas 200/300/500 推理产品

Atlas 训练系列产品

Atlas推理系列产品(Ascend 310P处理器)AI Core

Atlas推理系列产品(Ascend 310P处理器)Vector Core

Atlas A2训练系列产品

Atlas 200/500 A2推理产品

注意事项

  • 在new_stmt_scope内的定义的tensor,离开new_stmt_scope后,外部不可以访问new_stmt_scope内定义的tensor。
  • 如果关闭自动插入同步指令,则该作用域内不支持高级API。因为高级API为多个低级API组合而成,这些低级API之间有数据依赖,如果关闭自动插入同步指令,则会导致结果异常。

    高级API:vec_expm1_high_preci、vec_ln_high_preci、vec_rec_high_preci、vec_rsqrt_high_preci、conv2d、fixpipe、matmul、vec_reduce_max、vec_reduce_min、vec_reduce_add、printf。

  • 如果new_stmt_scope里disable_sync=True,则该作用域内不支持嵌套调用new_stmt_scope。

返回值

TikWithScope对象

调用示例

tik_instance = tik.Tik()
dtype = "float16"
shape = (2, 128)
src_gm = tik_instance.Tensor(dtype, shape, name="src_gm", scope=tik.scope_gm)
src_ub = tik_instance.Tensor(dtype, shape, name="src_ub", scope=tik.scope_ubuf)
dst_gm = tik_instance.Tensor(dtype, shape, name="dst_gm", scope=tik.scope_gm)
dst_ub = tik_instance.Tensor(dtype, shape, name="dst_ub", scope=tik.scope_ubuf)
a = tik_instance.InputScalar(dtype="int32", name="a")
b = tik_instance.InputScalar(dtype="int32", name="b")
tik_instance.data_move(src_ub, src_gm, 0, 1, 16, 0, 0)
# 如果配置disable_sync为False,data_move的offset为Scalar,系统无法判断两个data_move之间数据地址是否有重叠,系统就会自动插入同步指令。
# 如果知道a和b的具体值,比如输入a为0,b为1,那么两个data_move之间没有数据依赖,就可以配置disable_sync为True,不插入同步指令,取消搬运指令间的同步等待,可以提升性能。
with tik_instance.new_stmt_scope(disable_sync=True):
    tik_instance.data_move(dst_ub[a*128:], src_ub[a*128:], 0, 1, 8, 0, 0)
    tik_instance.data_move(dst_ub[b*128:], src_ub[b*128:], 0, 1, 8, 0, 0)
tik_instance.data_move(dst_gm, dst_ub, 0, 1, 16, 0, 0)
tik_instance.BuildCCE(kernel_name="sample", inputs=[src_gm, a, b], outputs=[dst_gm])
搜索结果
找到“0”个结果

当前产品无相关内容

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