vec_ln_high_preci(mask, dst, src, work_tensor, repeat_times, dst_rep_stride, src_rep_stride)
请参见参数说明。下面仅对dst/src/work_tensor参数进行说明:
dst/src/work_tensor数据类型保持一致,支持的数据类型为Tensor(float16)。
【work_tensor参数说明】:
work_tensor为用户定义的临时buffer空间,存储中间结果,空间限定在scope_ubuf,用于内部计算使用。
【work_tensor空间计算说明】:
如果mask是连续模式,mask_len即为mask值;如果mask为逐bit模式,mask_len为最高有效位的位数值。
【work_tensor空间计算举例】:
无。
Atlas 200/300/500 推理产品
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas推理系列产品Vector Core
Atlas A2训练系列产品/Atlas 800I A2推理产品
Atlas 200/500 A2推理产品
from tbe import tik tik_instance = tik.Tik() # 定义计算tensor src_gm = tik_instance.Tensor("float16", (2, 128), tik.scope_gm, "src_gm") src_ub = tik_instance.Tensor("float16", (2, 128), tik.scope_ubuf, "src_ub") dst_ub = tik_instance.Tensor("float16", (2, 128), tik.scope_ubuf, "dst_ub") # work_tensor大小为src大小的10倍 work_tensor = tik_instance.Tensor("float16", (10, 2, 128), tik.scope_ubuf, "work_tensor") dst_gm = tik_instance.Tensor("float16", (2, 128), tik.scope_gm, "dst_gm") # 将输入数据从gm搬运到ub tik_instance.data_move(src_ub, src_gm, 0, 1, 16, 0, 0) tik_instance.vec_dup(128, dst_ub, 0.0, 2, 8) mask = 128 rep_times = 2 src_rep_stride = 8 dst_rep_stride = 8 # 如果输入work_tensor有索引需要写成work_tensor[index:] tik_instance.vec_ln_high_preci(mask, dst_ub, src_ub, work_tensor[0:], rep_times, dst_rep_stride, src_rep_stride) # 将计算结果数据从ub搬运到gm tik_instance.data_move(dst_gm, dst_ub, 0, 1, 16, 0, 0) tik_instance.BuildCCE(kernel_name="vln_rep_8_src_rep_8", inputs=[src_gm], outputs=[dst_gm])
结果示例:
输入数据: [ [1, 2, 3, 4, ......, 128], [1, 2, 3, 4, ......, 128] ] 输出结果: [ [0, 0.6931, 1.0986, 1.3863, ......, 4.8520], [0, 0.6931, 1.0986, 1.3863, ......, 4.8520] ]
from tbe import tik tik_instance = tik.Tik() kernel_name = "vln_rep_8_src_rep_8" # 申请需要的tensor src_gm = tik_instance.Tensor("float16", (2, 128), tik.scope_gm, "src_gm") src_ub = tik_instance.Tensor("float16", (2, 128), tik.scope_ubuf, "src_ub") dst_ub = tik_instance.Tensor("float16", (2, 128), tik.scope_ubuf, "dst_ub") # 计算work_tensor大小 rep_times = 2 src_rep_stride = 8 dst_rep_stride = 8 mask = [3, 2**64-1] mask_len = 66 src_extent_size = (rep_times - 1)*src_rep_stride*16 + mask_len wk_size_unit = (src_extent_size + 15)//16*16 wk_size = 10*wk_size_unit work_tensor = tik_instance.Tensor("float16", (wk_size, ), tik.scope_ubuf, "work_tensor") dst_gm = tik_instance.Tensor("float16", (2, 128,), tik.scope_gm, "dst_gm") # 将用户输入数据拷贝到src ubuf tik_instance.data_move(src_ub, src_gm, 0, 1, 16, 0, 0) # 初始化dst ubuf空间 tik_instance.vec_dup(128, dst_ub, 0.0, 2, 8) tik_instance.vec_ln_high_preci(mask, dst_ub, src_ub, work_tensor, rep_times, dst_rep_stride, src_rep_stride) # 将计算结果拷贝到目标gm tik_instance.data_move(dst_gm, dst_ub, 0, 1, 16, 0, 0) tik_instance.BuildCCE(kernel_name="vln_rep_8_src_rep_8", inputs=[src_gm], outputs=[dst_gm])
结果示例:
输入数据: [ [1, 2, 3, 4, ......, 65, 66, 67, ......, 128], [1, 2, 3, 4, ......, 65, 66, 67, ......, 128] ] 输出数据: [ [0, 0.6931, 1.0986, 1.3863, ......, 4.1744, 4.1897, 0, ......, 0], [0, 0.6931, 1.0986, 1.3863, ......, 4.1744, 4.1897, 0, ......, 0] ]