
人工智能指令集算子库CANNAscend【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址https://gitcode.com/cann/pto-isa点击查看免费下载TSCATTER 是 CANN pto-isaParallel Tile OperationAscend 并行 Tile 虚拟指令集中负责按索引/按掩码将源 Tile 元素散播到目标 Tile的核心数据搬移指令包含索引散播Index-based Scatter与掩码散播Mask Scatter两种模式常用于数据重排、上采样upsample与维度扩展类算子。读完本文你将掌握 TSCATTER 的数学语义、两种模式的 C 内建接口与汇编语法、MaskPattern/ScatterAxis 枚举取值规则以及 Atlas A2/A3 与 Ascend 950PR/950DT 平台上的完整约束和零填充行为差异。一、指令概览两种散播模式TSCATTER 提供两种操作模式源码声明位于 include/pto/common/pto_instr.hpp以重载形式同时提供两个模板接口索引散播Index-based Scatter使用逐元素的扁平元素偏移indexesTile将源 Tile 的每个元素散播到目标 Tile 的任意指定位置实现完全自由的重排。掩码散播Mask Scatter按照固定的位掩码模式MaskPattern将源元素散播到目标位置并在元素之间交错填充零值支持按行散播SCATTER_ROW扩展列维度与按列散播SCATTER_COL扩展行维度两种方向。从指令家族定位看TSCATTER 与 TGATHER按索引从源收集元素到目标互为逆操作与 TCOLEXPAND/TROWEXPAND按固定块复制扩展功能上相近但语义不同——TSCATTER 由掩码精确控制取哪一位、填零到哪些位置而 EXPAND 系列是整体复制扩展。二、数学语义2.1 索引散播Index-based Scatter设R idx.GetValidRow()、C idx.GetValidCol()对0 i R、0 j C写入$$ \mathrm{dst.data()}[\mathrm{idx}_{i,j}] \mathrm{src}_{i,j} $$关键语义点idx[i,j]是相对于dst.data()的元素偏移不是字节偏移也不是行号。RowMajor 目标中坐标(r,c)的索引为r * DstTile::Cols cColMajor 中为c * DstTile::Rows r。源有效区域须覆盖索引有效区域即idx的每个取值都落在源有效区域内可推导的位置上。调用者须保证索引非负且小于目标物理元素数实现不做边界检查。若多个元素映射到同一目标位置别名写入最终值由实现定义不保证写入顺序。2.2 掩码散播Mask Scatter对于掩码模式P将源元素散播到目标并交错填充零值。设扩展倍数为f选中位置为pos_Pq遍历0 q f中除pos_P外的其他位置P0101/P1010的pos_P分别为 0/1每两个元素取一P0001/P0010/P0100/P1000的pos_P分别为 0/1/2/3每四个元素取一P1111的pos_P为 0取全部元素。SCATTER_ROW默认——沿列方向散播扩展列维度$$ \mathrm{dst}_{i, f \cdot j \mathrm{pos}P} \mathrm{src}{i,j} $$$$ \mathrm{dst}_{i, f \cdot j q} 0 $$DstTileData::ValidCol SrcTileData::ValidCol × 扩展倍数DstTileData::ValidRow SrcTileData::ValidRowSCATTER_COL——沿行方向散播扩展行维度$$ \mathrm{dst}_{f \cdot i \mathrm{pos}P, j} \mathrm{src}{i,j} $$$$ \mathrm{dst}_{f \cdot i q, j} 0 $$DstTileData::ValidRow SrcTileData::ValidRow × 扩展倍数DstTileData::ValidCol SrcTileData::ValidCol扩展倍数规则掩码模式扩展倍数P1010/P01012P0001/P0010/P0100/P10004P11111等同于TMOV从源码看扩展倍数与掩码一一对应P1010/P0101每 repeat 取 2 个元素中的 1 个P0001等四模式每 repeat 取 4 个元素中的 1 个P1111取全部语义与VREDUCEv2的 pattern mode 保持一致见 include/pto/common/type.hpp 中MaskPattern枚举注释。三、汇编语法同步形式PTO 汇编语法%dst tscatter %src, %idx : !pto.tile..., !pto.tile... - !pto.tile...AS Level 1SSA 形式%dst pto.tscatter %src, %idx : (!pto.tile..., !pto.tile...) - !pto.tile...AS Level 2DPS 形式DPSDestructive/Data Parallel Style形式使用ins/outs显式区分输入与输出缓冲区输入为源与索引tile_buf输出为目标tile_bufpto.tscatter ins(%src, %idx : !pto.tile_buf..., !pto.tile_buf...) outs(%dst : !pto.tile_buf...)四、C 内建接口TSCATTER 的 C 内建接口声明于 include/pto/common/pto_instr.hpp公共包含头为pto/pto-inst.hpp内部声明位于pto/common/pto_instr.hpp。4.1 索引散播接口template typename TileDataD, typename TileDataS, typename TileDataI, typename... WaitEvents PTO_INST RecordEvent TSCATTER(TileDataD dst, TileDataS src, TileDataI indexes, WaitEvents... events);该重载通过MAP_INSTR_IMPL(TSCATTER, dst, src, indexes)映射到各后端的索引散播实现WaitEvents...为可选的等待事件列表指令发射前由detail::PtoWaitEvents(events...)完成同步等待。4.2 掩码散播接口template MaskPattern maskPattern MaskPattern::P1111, auto ScatterType ScatterAxis::SCATTER_ROW, typename DstTileData, typename SrcTileData, typename... WaitEvents PTO_INST RecordEvent TSCATTER(DstTileData dst, SrcTileData src, WaitEvents... events);模板参数maskPattern默认P1111、ScatterType默认SCATTER_ROW内部经TSCATTER_IMPLmaskPattern, ScatterType(dst, src)派发到后端实现。4.3 MaskPattern 枚举定义于 include/pto/common/type.hpp值模式描述扩展倍数P010101010101...每两个元素取第一个×2P101010101010...每两个元素取第二个×2P000100010001...每四个元素取第一个×4P001000100010...每四个元素取第二个×4P010001000100...每四个元素取第三个×4P100010001000...每四个元素取第四个×4P111111111111...取全部元素等同于TMOV×1注意源码注释说明01 位模式从右向左读取右侧位为低位对应数据低索引位置。4.4 ScatterAxis 枚举同样定义于 include/pto/common/type.hpp值描述SCATTER_ROW沿列方向散播扩展列维度默认SCATTER_COL沿行方向散播扩展行维度五、约束与平台差异5.1 索引散播约束Atlas A2/A3 训练系列产品 / Atlas A2/A3 推理系列产品TileDataD::Loc、TileDataS::Loc、TileDataI::Loc必须是TileType::Vec。TileDataD::DType、TileDataS::DType必须为int32_t、int16_t、int8_t、half、float16_t、float32_t、uint32_t、uint16_t、uint8_t、bfloat16_t。TileDataI::DType必须为int16_t、int32_t、uint16_t或uint32_t。不对indexes值执行边界检查。静态有效边界各 Tile 的ValidRow Rows、ValidCol Cols。TileDataD::DType与TileDataS::DType必须相同。类型宽度匹配规则目标 DType 为 4 字节时索引必须 4 字节目标为 2 字节时索引必须 2 字节目标为 1 字节时索引必须 2 字节。Ascend 950PR / Ascend 950DT在 A2/A3 全部约束基础上数据 DType 额外支持int64_t、uint64_t。64 位数据要求int32_t/uint32_t索引源和索引 Tile 支持 RowMajor/ColMajor分别使用物理行列步长。5.2 掩码散播约束Atlas A2/A3 训练系列产品 / Atlas A2/A3 推理系列产品DstTileData::Loc、SrcTileData::Loc必须是TileType::Vec。数据 DType 支持范围与索引散播一致Dst/Src的 DType 必须相同。maskPattern必须在P0101到P1111范围内。静态有效边界ValidRow Rows、ValidCol Cols。P1111模式等同TMOV要求validRow和validCol分别匹配内部通过TMOV_IMPL实现详见 TMOV 指令文档。Ascend 950PR / Ascend 950DT在 A2/A3 约束基础上数据 DType 额外支持int64_t、uint64_t。SCATTER_ROW模式运行时断言src.GetValidRow()必须等于dst.GetValidRow()dst.GetValidCol()必须等于src.GetValidCol() × 扩展倍数P1111 为 1P1010/P0101 为 2P0001/P0010/P0100/P1000 为 4。SCATTER_COL模式运行时断言src.GetValidCol()必须等于dst.GetValidCol()dst.GetValidRow()必须等于src.GetValidRow() × 扩展倍数。64 位掩码散播要求 RowMajor 源和目标支持六种扩展模式及两个ScatterAxis。P1111委托给TMOV不执行整块清零当前 Ascend 950PR/Ascend 950DT 不支持该模式的int64_t/uint64_tVec→Vec 移动。六、重要提示零填充语义与后端差异A5Ascend 950 系列的索引散播和非P1111掩码散播会先清零整个目标物理 TileRows * Cols个元素再写入选中的位置。因此未被选中的位置包括物理填充为零索引显式选中的填充位置仍会写入源值。源、索引与目标的活跃存储不得重叠。CPU 模拟器的索引散播只更新索引指定位置保留其他位置空索引有效区域也不写入。跨后端代码若需要一致的零填充应显式初始化目标。P1111遵循TMOV的写入语义不适用上述整块清零规则。这一差异从 CPU 实现可见端倪include/pto/cpu/TScatter.hpp 中的TSCATTER_IMPL仅对索引命中的位置写入src值且静态断言要求索引为整型、目标/源为 RowMajor 且同类型宽度而 A5 实现 include/pto/npu/a5/TScatter.hpp 则先执行清零流程再按掩码写入。因此跨后端CPU 模拟器 vs NPU保持一致行为时必须显式初始化目标 Tile。七、编程示例以下示例均位于公共头pto/pto-inst.hpp下通过using namespace pto;引入命名空间。7.1 索引散播自动 Auto 模式#include pto/pto-inst.hpp using namespace pto; void example_auto() { using TileT TileTileType::Vec, float, 16, 16; using IdxT TileTileType::Vec, uint32_t, 16, 16; TileT src, dst; IdxT idx; TSCATTER(dst, src, idx); }7.2 索引散播手动 Manual 模式手动模式通过TASSIGN显式绑定物理地址#include pto/pto-inst.hpp using namespace pto; void example_manual() { using TileT TileTileType::Vec, float, 16, 16; using IdxT TileTileType::Vec, uint32_t, 16, 16; TileT src, dst; IdxT idx; TASSIGN(src, 0x1000); TASSIGN(dst, 0x2000); TASSIGN(idx, 0x3000); TSCATTER(dst, src, idx); }7.3 掩码散播自动 Auto 模式目标尺寸必须按扩展倍数放大P1010时目标列数为源的两倍P1000时目标列数为源的四倍SCATTER_COL则放大行数。#include pto/pto-inst.hpp using namespace pto; void example_mask_auto() { // P1010: 目标大小 源大小 × 2 using SrcTileT TileTileType::Vec, half, 16, 64; using DstTileT TileTileType::Vec, half, 16, 128; SrcTileT src; DstTileT dst; TSCATTERMaskPattern::P1010(dst, src); } void example_mask_p1000() { // P1000: 目标大小 源大小 × 4 using SrcTileT TileTileType::Vec, float, 16, 64; using DstTileT TileTileType::Vec, float, 16, 256; SrcTileT src; DstTileT dst; TSCATTERMaskPattern::P1000(dst, src); } void example_mask_scatter_col() { // SCATTER_COL: 沿行方向散播扩展行维度 // P1010: 目标行数 源行数 × 2 using SrcTileT TileTileType::Vec, half, 64, 16; using DstTileT TileTileType::Vec, half, 128, 16; SrcTileT src; DstTileT dst; TSCATTERMaskPattern::P1010, ScatterAxis::SCATTER_COL(dst, src); }7.4 掩码散播手动 Manual 模式#include pto/pto-inst.hpp using namespace pto; void example_mask_manual() { using SrcTileT TileTileType::Vec, half, 16, 64; using DstTileT TileTileType::Vec, half, 16, 128; SrcTileT src; DstTileT dst; TASSIGN(src, 0x1000); TASSIGN(dst, 0x2000); TSCATTERMaskPattern::P1010(dst, src); } void example_mask_manual_scatter_col() { // SCATTER_COL 手动绑定模式 using SrcTileT TileTileType::Vec, half, 64, 16; using DstTileT TileTileType::Vec, half, 128, 16; SrcTileT src; DstTileT dst; TASSIGN(src, 0x1000); TASSIGN(dst, 0x2000); TSCATTERMaskPattern::P1010, ScatterAxis::SCATTER_COL(dst, src); }八、汇编示例ASM8.1 自动模式自动模式下由编译器/运行时负责资源放置与调度# 自动模式由编译器/运行时负责资源放置与调度。 %dst pto.tscatter %src, %idx : (!pto.tile..., !pto.tile...) - !pto.tile...8.2 手动模式手动模式先显式绑定资源pto.tassign再发射指令# 手动模式先显式绑定资源再发射指令。 # 可选当该指令包含 tile 操作数时 # pto.tassign %arg0, tile(0x1000) # pto.tassign %arg1, tile(0x2000) %dst pto.tscatter %src, %idx : (!pto.tile..., !pto.tile...) - !pto.tile...8.3 PTO 汇编形式与 DPS 形式%dst tscatter %src, %idx : !pto.tile..., !pto.tile... - !pto.tile... # AS Level 2 (DPS) pto.tscatter ins(%src, %idx : !pto.tile_buf..., !pto.tile_buf...) outs(%dst : !pto.tile_buf...)九、源码实现与测试佐证为便于读者深入验证 TSCATTER 的实际行为以下列出仓库内的关键实现与测试位置接口声明include/pto/common/pto_instr.hpp 提供索引/掩码两个重载及RecordEvent返回值可通过WaitEvents事件实现异步流水。枚举定义include/pto/common/type.hppMaskPattern、include/pto/common/type.hppScatterAxis。CPU 模拟器实现include/pto/cpu/TScatter.hpp索引散播、include/pto/cpu/TScatter.hpp掩码散播含 RowMajor 静态断言与TScatter/TScatterCol两个方向的实现。A5Ascend 950 系列实现include/pto/npu/a5/TScatter.hpp包含P1111委托TMOV_IMPL、掩码范围断言、SCATTER_ROW/SCATTER_COL运行时断言以及逐掩码P1010/P0101/P1000/P0100/P0010/P0001的分支处理索引散播部分位于 include/pto/npu/a5/TScatter.hpp。A2/A3 实现include/pto/npu/a2a3/TScatter.hpp。CPU 单元测试tests/cpu/st/testcase/tscatter/含tscatter_kernel.cpp、gen_data.py数据生成脚本与main.cpp校验逻辑。NPU 单元测试tests/npu/a2a3/src/st/testcase/tscatter/ 与 tests/npu/a5/comm/st/testcase/tscatter/含tscatter_kernel.cpp/tscatter_kernel.h可验证两代平台的掩码模式与索引行为。Costmodel 支持tests/costmodel/st/testcase/tscatter/main.cpp 覆盖 TSCATTER 的周期建模说明该指令已纳入性能预估后端。十、实践要点小结尺寸必须按扩展倍数放大掩码散播时SCATTER_ROW保证Dst.ValidCol Src.ValidCol × f、SCATTER_COL保证Dst.ValidRow Src.ValidRow × f否则在 Ascend 950 系列会触发运行时断言。索引要自己保证合法实现不做边界检查越界索引属于未定义行为务必在调用前完成 clamp 或断言。类型宽度配套索引 DType 与目标 DType 宽度须按 4/2/2 字节规则匹配64 位数据Ascend 950 系列必须配int32_t/uint32_t索引。注意跨后端零填充差异A5 会整块清零目标再写入CPU 模拟器仅更新索引位置需要一致语义时显式初始化目标 Tile。P1111是特例等价于TMOV遵循 TMOV 的写入语义不走整块清零路径且 Ascend 950 系列暂不支持其 64 位 Vec→Vec 移动需改用TMOV或数据搬运指令。赞分享人工智能指令集算子库CANNAscend【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址https://gitcode.com/cann/pto-isa点击查看免费下载相关推荐CANN PTO-ISA TGATHER 指令详解索引/掩码/条件三种数据收集模式的语义、约束与工程实践CANN PTO ISA TGATHER 指令详解索引/掩码/条件三种数据收集模式的语义、约束与工程实践 TGATHER 是 CANN PTO 虚拟指令集中用人工智能指令集算子库CANNAscendPHP-Minecraft-Query错误处理与调试指南轻松解决Minecraft服务器查询问题PHP Minecraft Query错误处理与调试指南轻松解决Minecraft服务器查询问题 PHP Minecraft Query是一款强大的PHP库人工智能指令集算子库CANNAscendCANN pto-isa TPRELU 指令详解参数化 ReLUPReLUTile 算子的语义、约束与 A2A3/A5 双后端实现CANN pto isa TPRELU 指令详解参数化 ReLUPReLUTile 算子的语义、约束与 A2A3/A5 双后端实现 TPRELU 是 CA人工智能指令集算子库CANNAscend上一篇终极CMS漏洞扫描指南10款高效工具实战评测下一篇革命性ARC-AGI评估体系揭秘400个测试任务的公平性保障机制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。