pypto_pro.language.AccToVecMode#
产品支持情况#
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
功能说明#
双目标控制的枚举,是pypto_pro.language.move的重要属性,用于L0C Buffer->UB数据搬运场景。
原型定义#
PYPTO_DECLARE_ENUM(AccToVecMode,
SingleModeVec0,
SingleModeVec1,
DualModeSplitM,
DualModeSplitN
)
参数说明#
参数值 |
说明 |
|---|---|
SingleModeVec0 |
单目标模式,将整个矩阵写入Vec0的目标UB。 |
SingleModeVec1 |
单目标模式,将整个矩阵写入Vec1的目标UB。 |
DualModeSplitM |
双目标模式,按M维度拆分,M/2*N个元素写入每个UB。 |
DualModeSplitN |
双目标模式,按N维度拆分,M*N/2个元素写入每个UB。 |
调用示例#
DualModeSplitM模式下的尾块场景#
# cube section: 用户只需设置实际 valid_M,无需手动对齐
pl.set_validshape(ac, [valid_M, N]) # valid_M=33
pl.matmul(ac, al, br)
pl.move(vec, ac, acc_to_vec_mode=pl.AccToVecMode.DualModeSplitM) # 框架自动对齐,aligned_M=34
# vector section: 用户需要自行计算 Vec0/Vec1 中 UB 实际大小
v0 = (valid_M + 1) // 2 * 2 // 2 # v0 = 17
v1 = valid_M - v0 # v1 = 16
if sub_id == 0:
pl.set_validshape(vec, [v0, N])
else:
pl.set_validshape(vec, [v1, N])
DualModeSplitN模式下的尾块场景#
# cube section: 用户只需设置实际 valid_N,无需手动对齐
pl.set_validshape(ac, [TILE, valid_N]) # valid_N=33
pl.matmul(ac, al, br)
pl.move(vec, ac, acc_to_vec_mode=pl.AccToVecMode.DualModeSplitN) # 框架自动对齐,aligned_N=64
# vector section: V 侧用户自行计算 v0/v1
v0 = (valid_N + 31) // 32 * 32 // 2 # v0 = 32
v1 = valid_N - v0 # v1 = 1
if sub_id == 0:
pl.set_validshape(vec, [TILE, v0])
else:
pl.set_validshape(vec, [TILE, v1])