
人工智能编译器模型编译高性能计算深度学习CANN【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址https://gitcode.com/cann/pypto点击查看免费下载导读vf.create_mask是 PyPTOParallel Tensor/Tile Operation 编程范式中 Vector FunctionVF指令域的掩码寄存器创建接口用于生成控制后续 VF 运算如vf.add、vf.mul、vf.store_align等元素级有效性的 mask_reg。本文基于 create_mask 接口文档 并结合仓库源码系统讲解 mask_reg 的位宽粒度原理、MaskPattern 各模式语义、参数约束、在 astype 精度转换等场景中的行为以及可运行的完整调用示例帮助你准确掌握在 PyPTO 内核中按需筛选 VF 运算元素的方法。mask_reg 的工作原理mask_reg 是 VF 运算中控制元素级有效性的专用寄存器。VF 算子如vf.add、vf.mul等在执行时会根据 mask_reg 中每个元素对应的比特位决定该元素是否参与运算比特位为 1有效该元素参与运算结果写入目的寄存器对应位置。比特位为 0无效该元素不参与运算目的寄存器对应位置置零。vf.add、vf.max、vf.min、vf.full等少数算子支持通过mode参数选择保留原值。mask_reg 的总位宽固定为256 bit其粒度由dtype参数决定每个数据元素对应的掩码位数随元素位宽变化。例如dtype元素位宽元素个数每元素掩码位数总掩码位数DT_INT8 / DT_UINT88 bit2561 bit8 位宽粒度256 bitDT_FP16 / DT_UINT16 / DT_BF1616 bit1282 bit16 位宽粒度256 bitDT_FP32 / DT_INT32 / DT_UINT3232 bit644 bit32 位宽粒度256 bitDT_INT64 / DT_UINT6464 bit328 bit64 位宽粒度256 bit[!CAUTION] 注意dtype参数决定的是掩码粒度即 mask_reg 中每多少个 bit 对应一个数据元素而非 mask_reg 本身的类型。mask_reg 类型始终不变。mask_reg 的典型使用场景全量运算patternALL所有元素参与运算最常用。尾块处理当数据长度不是寄存器宽度的整数倍时用 VL1~VL128 限制最后一块的参与元素数。条件选择通过vf.eq、vf.gt等比较算子生成掩码再用vf.select按掩码选择元素。交替处理用 H、Q、M3、M4 等模式对寄存器中的部分元素进行筛选运算。以 b8 数据类型为例不同 MaskPattern 模式下 CreateMask 接口的元素选取如下图所示图 1b8 数据类型下 CreateMask 接口不同 MaskPattern 模式下元素选取astype 精度转换中的 mask_reg不同数据类型下元素对应的 mask 位宽不一致在 astype 进行类型转换时mask_reg 根据输入的源操作数进行有效元素筛选。mask_reg 和 RegLayout 同时作用时16 位宽与 32 位宽的相互转换过程如下图所示图 2astype 16 位宽到 32 位宽类型转换过程图 3astype 32 位宽到 16 位宽类型转换过程函数原型create_mask(pattern: Optional[MaskPattern] None, dtype: Optional[DType] None) - preg参数说明参数输入/输出说明pattern输入可选掩码模式pattern 参数决定 mask_reg 中哪些元素被设置为有效1哪些被设置为无效0对应 MaskPattern 类型。支持的模式见约束说明默认pypto_pro.language.MaskPattern.ALL。dtype输入可选掩码对应的数据类型决定掩码粒度即每多少 bit 对应一个数据元素。如pypto_pro.language.DT_FP32对应 32 位宽粒度64 元素 × 4 bit全部对应关系请见约束说明。掩码寄存器总位宽固定为 256 bit默认pypto_pro.language.DT_FP32。约束说明dtype 与掩码粒度对应关系表 1dtype 对应数据类型掩码说明dtype元素位宽元素个数每元素掩码位数总掩码位数DT_INT8 / DT_UINT8 / DT_FP8E4M3FN / DT_FP8E5M2 / DT_FP8E8M0 / DT_HF8 / DT_FP4E2M1 / DT_FP4E1M28 bit2561 bitb8 粒度256 bitDT_FP16 / DT_UINT16 / DT_BF1616 bit1282 bitb16 粒度256 bitDT_FP32 / DT_INT32 / DT_UINT3232 bit644 bitb32 粒度256 bitDT_INT64 / DT_UINT6464 bit328 bitb64 粒度256 bit仓库实现说明在 VF API 声明 中create_mask的 docstring 明确指出所有 b8/b4 类型如 FP8E4M3FN、FP8E5M2、FP8E8M0、HF8、FP4E2M1、FP4E1M2 等统一按 b8 掩码宽度处理INT64/UINT64 按 b64 掩码宽度处理内部通过pset_b32punpack实现每元素 2 bit 的粒度匹配。MaskPattern 模式说明表 2MaskPattern 模式说明取值含义示意以 DT_FP32 / 64 元素为例pypto_pro.language.MaskPattern.ALL所有元素有效1111111111111111...1111全 1pypto_pro.language.MaskPattern.ALLF所有元素无效0000000000000000...0000全 0pypto_pro.language.MaskPattern.VL1最低 1 个元素有效1000000000000000...0000pypto_pro.language.MaskPattern.VL2最低 2 个元素有效1100000000000000...0000pypto_pro.language.MaskPattern.VL4最低 4 个元素有效1111000000000000...0000pypto_pro.language.MaskPattern.VL8最低 8 个元素有效1111111100000000...0000pypto_pro.language.MaskPattern.VL16最低 16 个元素有效前 16 个 1其余 0pypto_pro.language.MaskPattern.VL32最低 32 个元素有效前 32 个 1其余 0pypto_pro.language.MaskPattern.VL64最低 64 个元素有效前 64 个 1其余 0pypto_pro.language.MaskPattern.VL128最低 128 个元素有效全部有效仅 8 位宽/16 位宽粒度下有意义pypto_pro.language.MaskPattern.H最低一半元素有效前 32 个 1后 32 个 064 元素时pypto_pro.language.MaskPattern.Q最低四分之一元素有效前 16 个 1后 48 个 064 元素时pypto_pro.language.MaskPattern.M33 的倍数位置有效每第 3 个元素为 1pypto_pro.language.MaskPattern.M44 的倍数位置有效每第 4 个元素为 1返回值说明返回 preg 目标 mask_reg。调用示例下面是一个完整的可运行示例演示create_mask与load_align/store_align配合实现全量元素搬运import os import pypto_pro.language as pl import torch import torch_npu pl.vector_function def example_vf(src_tile, dst_tile): preg vf.create_mask(patternpl.MaskPattern.ALL, dtypepl.DT_FP32) reg vf.load_align(src_tile, 0) vf.store_align(dst_tile, reg, preg) pl.jit() def example_kernel( a: pl.Tensor[[pl.DYNAMIC, pl.DYNAMIC], pl.DT_FP32], out: pl.Tensor[[pl.DYNAMIC, pl.DYNAMIC], pl.DT_FP32], ): tf pl.TileType(shape[1, 64], dtypepl.DT_FP32, target_memorypl.MemorySpace.Vec) in_a_grp pl.make_tile_group(typetf, addrs0x0, mutex_ids[0]) in_a in_a_grp.current() t_out_grp pl.make_tile_group(typetf, addrs0x100, mutex_ids[1]) t_out t_out_grp.current() with pl.section_vector(): pl.load(in_a, a, [0, 0]) example_vf(in_a, t_out) pl.store(out, t_out, [0, 0]) def test_example(): device_id int(os.environ.get(TILE_FWK_DEVICE_ID, 0)) device fnpu:{device_id} core_nums 1 torch.npu.set_device(device) a torch.randn([1, 64], devicedevice, dtypetorch.float32) out torch.empty([1, 64], devicedevice, dtypetorch.float32) example_kernelNone, core_nums torch.npu.synchronize() torch.testing.assert_close(out, a, rtol1e-5, atol1e-5) if __name__ __main__: test_example() print(PASSED)示例要点解析VF 函数与内核分离example_vf使用pl.vector_function装饰内部执行 VF 指令example_kernel使用pl.jit()装饰负责 tile 的分配、加载与存储。掩码贯穿加载与存储vf.load_align与vf.store_align都接收preg作为掩码参数patternALL 表示全量元素有效此时运算等价于直接搬运。运行环境示例依赖torch_npu及 NPU 设备通过TILE_FWK_DEVICE_ID环境变量指定设备号默认 0。结果校验使用torch.testing.assert_close对比输出与输入张量误差阈值 rtol1e-5、atol1e-5。源码级实现佐证双默认值设计从 VF API 声明 可以看出create_mask的两个参数均可独立缺省并且内部实现支持以下三种调用形态preg vf.create_mask(dtypepl.DT_FP16) # pattern 默认 ALL preg vf.create_mask(patternpl.MaskPattern.VL8) # dtype 默认 FP32 preg vf.create_mask() # 两者均取默认值MaskReg 寄存器类型识别在 调用解析器 中create_mask被登记为_VF_MASK_PRODUCING_OPS集合中的一员与update_mask、get_mask_spr、mask_gen_with_reg_tensor并列即其返回值为 MaskReg 而非普通 RegTensor。该信息被赋值解析器用于跟踪 MaskReg 变量进而影响select、move、and_、or_等统一操作_VF_UNIFIED_OPS的目的寄存器类型推断当源操作数中出现已知的 MaskReg 变量时目的寄存器会被声明为 MaskReg。MaskPattern 枚举定义MaskPattern 枚举在 IR 绑定层 中注册到 Python 侧除文档列出的 ALL、ALLF、VL1~VL128、M3、M4、H、Q 外还额外包含VL3模式最低 3 个元素有效共 16 个枚举值可直接通过pypto_pro.language.MaskPattern访问见 language 包导出。产品支持情况产品型号支持情况Ascend 950PR / Ascend 950DT支持Atlas A3 训练系列产品 / Atlas A3 推理系列产品不支持Atlas A2 训练系列产品 / Atlas A2 推理系列产品不支持说明create_mask属于 A5 架构的 VFVector Function单元指令VF API 声明 中明确标注其仅在pl.vector_function装饰的函数内使用Compute 类算子必须使用赋值形式dst vf.xxx(...)只有 store 等副作用算子才以裸语句形式调用。相关阅读mask_reg 接口文档MaskPattern 类型文档VF API 声明源码VF 调用解析器VF 赋值解析器SIMD-API 索引赞分享人工智能编译器模型编译高性能计算深度学习CANN【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址https://gitcode.com/cann/pypto点击查看免费下载相关推荐PyPTO Pro vf.expSIMD 寄存器级指数运算接口详解Ascend 950PyPTO Pro vf.expSIMD 寄存器级指数运算接口详解Ascend 950 vf.exp 是 PyPTO Pro pypto_pro SI人工智能编译器模型编译高性能计算深度学习CANNPyPTO Pro APIvf.log2 寄存器级以 2 为底对数运算详解与实战PyPTO Pro APIvf.log2 寄存器级以 2 为底对数运算详解与实战 本篇聚焦 PyPTOParallel Tensor/Tile Operat人工智能编译器模型编译高性能计算深度学习CANNPyPTO 逐元素最大值运算 pypto.maximum 接口详解与源码实践PyPTO 逐元素最大值运算 pypto.maximum 接口详解与源码实践 本篇技术指南围绕 CANN PyPTO 张量运算 API 中的 pypto.max人工智能编译器模型编译高性能计算深度学习CANN上一篇揭秘terraform-provider-libvirt数据来源节点信息与设备管理技巧下一篇PySlowFast错误调试手册常见训练问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考