StoreDist#
产品支持情况#
Ascend 950PR&950DT系列产品:支持
Atlas A3系列产品:不支持
Atlas A2系列产品:不支持
功能说明#
StoreDist定义了vf.store_align的数据存储分布模式,用于控制从寄存器到UB的数据搬运方式。
原型定义#
class StoreDist(enum.Enum):
# reg_tensor单搬出模式
NORM = ... # 普通对齐存储(默认),根据dtype自动选择位宽粒度;64位宽数据类型DT_INT64/DT_UINT64只支持此模式
NORM_B8 = ... # 按8位宽类型普通存储
NORM_B16 = ... # 按16位宽类型普通存储
NORM_B32 = ... # 按32位宽类型普通存储
FIRST_ELEMENT = ... # 仅存储lane 0(首个元素),根据dtype自动选择位宽粒度
FIRST_ELEMENT_B8 = ... # 按8位宽类型仅存储首个元素
FIRST_ELEMENT_B16 = ... # 按16位宽类型仅存储首个元素
FIRST_ELEMENT_B32 = ... # 按32位宽类型仅存储首个元素
PACK = ... # 压缩存储,根据mask将src中有效元素的低半部分bit数据连续存储于dst中,根据dtype自动选择位宽粒度
PACK_B16 = ... # 按16位宽类型压缩存储
PACK_B32 = ... # 按32位宽类型压缩存储
PACK_B64 = ... # 按B64粒度压缩存储
PACK4 = ... # 4元素压缩存储,将有效元素的低8bit数据连续存储(32位宽类型)
PACK4_B32 = ... # 按32位宽类型4元素压缩存储
# reg_tensor双搬出模式
INTLV = ... # 交错存储,将src0、src1中的元素交错存储(根据dtype自动选择位宽类型)
INTLV_B8 = ... # 按8位宽类型交错存储
INTLV_B16 = ... # 按16位宽类型交错存储
INTLV_B32 = ... # 按32位宽类型交错存储
# mask_reg模式
# NORM 同上,搬运VL/8数据
# PACK 同上,每间隔1bit舍弃数据,将VL/8的数据压缩为VL/16搬出
约束说明#
StoreDist的取值根据目标模式不同,支持的模式有所区别:
reg_tensor单搬出模式:支持 NORM(含NORM_B8/NORM_B16/NORM_B32)、FIRST_ELEMENT(含FIRST_ELEMENT_B8/B16/B32)、PACK(含PACK_B16/B32/B64)、PACK4(含PACK4_B32)
reg_tensor双搬出模式:支持 INTLV(含INTLV_B8/INTLV_B16/INTLV_B32)(需要两个源寄存器)
mask_reg模式:支持 NORM、PACK(不支持显式粒度形式)
调用示例#
import pypto_pro.language as pl
@pl.vector_function
def vf_kernel():
vf.store_align(ub_tile, reg, dist=pl.StoreDist.NORM)