vec_trans
功能说明
对连续的16*16的二维矩阵数据块进行转置,通过repeat_times参数指定转置操作的次数。每个迭代内操作256个连续地址空间数据,不同迭代间地址可以不连续,不同迭代间的空间间隔通过dst_rep_stride 和src_rep_stride参数指定。
函数原型
vec_trans(dst, src, repeat_times, dst_rep_stride, src_rep_stride)
参数说明
参数名称 |
输入/输出 |
含义 |
dst |
输出 |
目的操作数,保存转置结果,支持的数据类型为Tensor(int16/uint16/float16)。 Tensor的scope为Unified Buffer。 |
src |
输入 |
源操作数,支持的数据类型为Tensor(int16/uint16/float16)。 Tensor的scope为Unified Buffer。 |
repeat_times |
输入 |
迭代次数,支持的数据类型为Scalar(int/uint)、立即数(int)、Expr(int/uint),取值范围[1, 4095]。 |
dst_rep_stride |
输入 |
相邻两次迭代之间dst地址间隔,单位为512B,支持的数据类型为:Scalar(int/uint)、立即数(int)、Expr(int/uint), 范围:[0,4095] |
src_rep_stride |
输入 |
相邻两次迭代之间src地址间隔,单位为512B,支持的数据类型为Scalar(int/uint)、立即数(int)、Expr(int/uint),范围:[0,4095] |
支持的芯片型号
Atlas 200/300/500 推理产品
Atlas 训练系列产品
注意事项
- 为了节省地址空间,开发者可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),相关约束如下:要求源操作数与目的操作数之间要求100%完全重叠,不支持部分重叠。
- 操作数地址偏移对齐要求请见通用约束。
返回值
无
调用示例
from tbe import tik
tik_instance = tik.Tik()
src_gm = tik_instance.Tensor("float16", (1,16,16), name="src_gm", scope=tik.scope_gm)
src_ub = tik_instance.Tensor("float16", (1,16,16), name="src_ub", scope=tik.scope_ubuf)
dst_gm = tik_instance.Tensor("float16", (1,16,16), name="dst_gm", scope=tik.scope_gm)
dst_ub = tik_instance.Tensor("float16", (1,16,16), name="dst_ub", scope=tik.scope_ubuf)
# 拷贝用户输入数据到src ubuf
tik_instance.data_move(src_ub, src_gm, 0, 1, 16, 0, 0)
tik_instance.vec_trans(dst_ub, src_ub, 1, 1, 1)
# 将计算结果拷贝到目标gm
tik_instance.data_move(dst_gm, dst_ub, 0, 1, 16, 0, 0)
tik_instance.BuildCCE(kernel_name="vec_trans", inputs=[src_gm], outputs=[dst_gm])
结果示例:
上述例子构造输入、输出如下: 输入: src_gm=[1,2,3,4,...,256] 输出结果为: dst_gm=[1,17,33,49,...,256]
父主题: 格式转换支持