ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CANN PTO-ISA 全量指令索引与分类导航:Ascend Tile 级虚拟指令集完全参考指南

CANN PTO-ISA 全量指令索引与分类导航:Ascend Tile 级虚拟指令集完全参考指南 CANN PTO-ISA 全量指令索引与分类导航Ascend Tile 级虚拟指令集完全参考指南【免费下载链接】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 仓库中的docs/PTOISA.md源同步 ISA 索引页系统梳理 PTOParallel Tile Operation虚拟指令集的完整指令清单、分类体系与文档导航结构。读者将掌握 PTO ISA 全部近 150 条指令的用途分类、manifest.yaml驱动的索引生成机制、核心操作数约定以及从索引页深入单指令参考文档含 C intrinsic、汇编语法与示例代码的阅读路径为在 Ascend 平台上编写 Tile 级算子内核打下基础。一、PTO ISA 是什么PTOParallel Tile Operation是 Ascend CANN 设计的一种面向Tile数据块级操作的虚拟指令集架构ISA。它不再面向单个标量或寄存器而是把对片上 Tile 的运算、搬运、归约、通信抽象为一条条可编译、可调度、可跨平台执行的指令。仓库中 include/pto/common/pto_instr.hpp 是这些指令的 C intrinsic 权威来源Source of truth而 docs/isa/manifest.yaml 则是全量指令清单的结构化数据源。docs/PTOISA.md是一份由 manifest 自动生成source-synchronized的 ISA 总索引它既是文档入口也是读者浏览全部指令、按类别快速定位单指令参考页的总目录。二、文档体系与阅读路径docs/PTOISA.md开篇即给出完整的文档目录Docs Contents本文将其中的相对链接统一转换为以仓库根目录为起点的路径方便直接跳转领域页面描述概述docs/README.mdPTO ISA 指南入口与导航。概述docs/PTOISA.md本页概述 全量指令索引。ISA 参考docs/isa/README.md每条指令参考目录。ISA 参考docs/isa/conventions.md通用符号、操作数、事件与修饰符。通信 ISAdocs/isa/comm/README.md每条通信 ISA 指令参考。权威源docs/reference/pto-intrinsics-header.mdC intrinsic API权威来源。PTO Auto Modedocs/auto_mode/README.mdPTO auto 模式文档入口。文档中心 docs/README.md 给出了推荐的阅读顺序可作为新手路线图Getting Started搭建环境并先运行 CPU 模拟器ISA Overview建立对 PTO ISA 的整体认识PTO Instruction List按类别浏览标准指令Tile Programming Model理解 tile 形状、tile mask 与数据组织Events and Synchronization掌握 set/wait flag 用法与流水线同步Performance Optimization了解常见瓶颈与调优方向。三、指令索引的生成机制manifest.yaml 与 gen_isa_indexes.pydocs/PTOISA.md不是手写文档而是由工具链自动生成的。仓库中的 docs/tools/gen_isa_indexes.py 负责从 docs/isa/manifest.yaml 生成三类索引文件docs/isa/README.md、docs/isa/README_zh.md、docs/PTOISA.md和docs/PTOISA_zh.md。从源码看脚本在 gen_isa_indexes.py 中定义了这些输出路径的默认值DEFAULT_PTOISA、DEFAULT_ISA_README等。manifest.yaml采用 YAML 兼容的 JSON 结构每条指令包含 5 个字段详见脚本 docstring gen_isa_indexes.py{ instruction: TADD, category: Elementwise (Tile-Tile), summary_en: Elementwise add of two tiles., summary_zh: 两个 Tile 的逐元素加法。, diagram_template: elementwise, operands: [dst, src0, src1], notes: [] }instruction指令助记符也是单指令参考页的标题category指令所属分类索引表按此分组summary_en/summary_zh中英文一句话语义描述直接进入索引表diagram_template生成指令示意图如elementwise、scalar、reduce_expand、memory、matmul、layout、comm、complex等模板operands该指令的典型操作数名如dst/src0/src1notes附加约束说明例如THISTOGRAM标注了仅 A5 / Kirin9030 / CPU-sim 可用。正因为索引由 manifest 驱动所以docs/PTOISA.md能保证与指令参考页面始终同步这也是其页首注明 source-synchronized ISA index 的原因。仓库还提供了 check_isa_consistency.py、normalize_isa_docs.py 等配套工具用于校验与规范化 ISA 文档。四、阅读索引前的核心约定在浏览指令清单前建议先理解 docs/isa/conventions.md 定义的共享约定否则索引表中的简略描述如 valid region、GM容易产生歧义Tile固定大小的片上数据块对象如pto::Tile...。多数指令以 Tile 为操作数并以其有效区域valid region通过GetValidRow()/GetValidCol()查询为迭代域。GMGlobal Memory通过pto::GlobalTensor...访问的片外内存。Scalar / immediate宿主机侧标量值或编码立即数用于*S/*C变体指令。Row-major vs. column-major除非特殊说明CPU 模拟器内核默认按行主序row-major处理支持多布局的指令会显式说明。物理形状 vs. 有效形状Rows/Cols描述物理存储形状GetValidRow()/GetValidCol()描述活跃计算区域。改变有效形状不会改变物理 stride。例如 A5 的int64_t/uint64_tRowMajor 输出物理形状[64,4]、有效形状[64,1]时行 stride 仍为 4 个元素32 字节若误用有效列数 1 作为物理 stride会错位排列各行的归约结果。有效区域语义指令描述中的对有效区域内每个元素 (i, j)迭代域默认取dst的GetValidRow()/GetValidCol()除非指令另行规定有效区域之外的元素值是unspecified不要假设其被清零或保留。对齐要求64 位 Vec Tile 的 32 字节对齐要求作用于物理维度——RowMajor 需Cols % 4 0ColMajor 需Rows % 4 0。事件与同步内存流水线与向量流水线之间可能需要排序约束示例中的set_flag(...)/wait_flag(...)表示目标后端上的排序要求详见 docs/coding/Event.md。五、全量指令索引All PTO Instructions以下内容完整继承docs/PTOISA.md的指令索引表共 149 条指令覆盖同步、资源绑定、逐元素运算、标量运算、归约扩展、内存搬运、矩阵乘、布局变换、复杂指令与跨核/跨 NPU 通信。每个指令名均链接到对应的单指令参考页。5.1 同步Synchronization与手动/资源绑定Manual / Resource Binding分类指令描述同步SYNCALL跨核同步屏障硬件 FFTS 或软件 GM 轮询。手动 / 资源绑定TASSIGN将 Tile 对象绑定到实现定义的片上地址手动放置。手动 / 资源绑定SETFMATRIX为类 IMG2COL 操作设置 FMATRIX 寄存器。手动 / 资源绑定SET_IMG2COL_RPT从 IMG2COL 配置 Tile 设置 IMG2COL 重复次数元数据。手动 / 资源绑定SET_IMG2COL_PADDING从 IMG2COL 配置 Tile 设置 IMG2COL 填充元数据。手动 / 资源绑定SET_QUANT_SCALAR设置标量量化参数用于后续 TPUSH 操作。手动 / 资源绑定SET_QUANT_VECTOR从 Scaling Tile 设置向量量化参数用于后续 TPUSH 操作。SYNCALL是唯一的同步指令其operands为participants用于多核协作场景下的全局同步。TASSIGN是手动模式的关键——它把 Tile 绑定到显式片上地址TASSIGN(tile, 0x1000)在 pto_instr.hpp 中还有编译期地址重载形式TASSIGNAddr(tile)会触发静态边界与对齐检查tassign_static_check。5.2 逐元素Tile-Tile运算分类指令描述逐元素Tile-TileTADD两个 Tile 的逐元素加法。逐元素Tile-TileTABSTile 的逐元素绝对值。逐元素Tile-TileTAND两个 Tile 的逐元素按位与。逐元素Tile-TileTOR两个 Tile 的逐元素按位或。逐元素Tile-TileTSUB两个 Tile 的逐元素减法。逐元素Tile-TileTMUL两个 Tile 的逐元素乘法。逐元素Tile-TileTMADD三元逐元素运算src0 * dst src1。逐元素Tile-TileTMIN两个 Tile 的逐元素最小值。逐元素Tile-TileTMAX两个 Tile 的逐元素最大值。逐元素Tile-TileTCMP比较两个 Tile 并写入一个打包的谓词掩码。逐元素Tile-TileTDIV两个 Tile 的逐元素除法。逐元素Tile-TileTSHL两个 Tile 的逐元素左移。逐元素Tile-TileTSHR两个 Tile 的逐元素右移。逐元素Tile-TileTXOR两个 Tile 的逐元素按位异或。逐元素Tile-TileTLOGTile 的逐元素自然对数。逐元素Tile-TileTRECIPTile 的逐元素倒数。逐元素Tile-TileTPRELU带逐元素斜率 Tile 的逐元素参数化 ReLU (PReLU)。逐元素Tile-TileTCVT带指定舍入模式的逐元素类型转换。逐元素Tile-TileTSEL使用掩码 Tile 在两个 Tile 之间进行选择逐元素选择。逐元素Tile-TileTRSQRT逐元素倒数平方根。逐元素Tile-TileTSQRT逐元素平方根。逐元素Tile-TileTEXP逐元素指数运算。逐元素Tile-TileTPOW逐元素幂运算。逐元素Tile-TileTNOTTile 的逐元素按位取反。逐元素Tile-TileTRELUTile 的逐元素 ReLU。逐元素Tile-TileTNEGTile 的逐元素取负。逐元素Tile-TileTREM两个 Tile 的逐元素余数余数符号与除数相同。逐元素Tile-TileTFMOD两个 Tile 的逐元素余数余数符号与被除数相同。逐元素Tile-TileTMULA三元逐元素运算src0 * src1 dst。这一类是向量计算的主体。注意TMADDsrc0 * dst src1与TMULAsrc0 * src1 dst是两个方向不同的三元融合指令分别对应旧接口TFUSEDMULADD与TMULADDDST的规范化命名见 docs/isa/README.md 的迁移说明。5.3 Tile-标量 / Tile-立即数Tile-Scalar / Tile-Immediate分类指令描述Tile-标量TEXPANDS将标量广播到目标 Tile 中。Tile-标量TCMPS将 Tile 与标量比较并写入逐元素比较结果。Tile-标量TSELS使用掩码 Tile 在源 Tile 和标量之间进行选择源 Tile 逐元素选择。Tile-标量TMINSTile 与标量的逐元素最小值。Tile-标量TADDSTile 与标量的逐元素加法。Tile-标量TSUBS从 Tile 中逐元素减去一个标量。Tile-标量TAXPY原位缩放累加AXPYdst scalar * src0 dst。Tile-标量TDIVS与标量的逐元素除法Tile/标量 或 标量/Tile。Tile-标量TMULSTile 与标量的逐元素乘法。Tile-标量TFMODS与标量的逐元素余数fmod(src, scalar)。Tile-标量TREMS与标量的逐元素余数remainder(src, scalar)。Tile-标量TMAXSTile 与标量的逐元素最大值max(src, scalar)。Tile-标量TANDSTile 与标量的逐元素按位与。Tile-标量TORSTile 与标量的逐元素按位或。Tile-标量TSHLSTile 按标量逐元素左移。Tile-标量TSHRSTile 按标量逐元素右移。Tile-标量TXORSTile 与标量的逐元素按位异或。Tile-标量TLRELU带标量斜率的 Leaky ReLU。Tile-标量TPOWSTile 逐元素与标量幂运算。*S后缀指令是逐元素指令的标量变体TAXPY是典型的原位融合dst scalar * src0 dst常用于权重缩放累加等场景。5.4 轴归约 / 扩展Axis Reduce / Expand分类指令描述轴归约 / 扩展TROWSUM通过对列求和来归约每一行。轴归约 / 扩展TROWPROD通过跨列乘积来归约每一行。轴归约 / 扩展TCOLSUM通过对行求和来归约每一列。轴归约 / 扩展TCOLPROD通过跨行乘积来归约每一列。轴归约 / 扩展TCOLMAX通过取行间最大值来归约每一列。轴归约 / 扩展TROWMAX通过取列间最大值来归约每一行。轴归约 / 扩展TROWMIN通过取列间最小值来归约每一行。轴归约 / 扩展TROWARGMAX获取每行最大值对应列索引。轴归约 / 扩展TROWARGMIN获取每行最小值对应列索引。轴归约 / 扩展TCOLARGMAX获取每列最大值对应行索引/获取每列最大值对应行值和索引。轴归约 / 扩展TCOLARGMIN获取每列最小值对应行索引/获取每列最小值对应行值和索引。轴归约 / 扩展TROWEXPAND将每个源行的第一个元素广播到目标行中。轴归约 / 扩展TROWEXPANDDIV行广播除法将src0的每一行除以一个每行标量向量src1。轴归约 / 扩展TROWEXPANDMUL行广播乘法将src0的每一行乘以一个每行标量向量src1。轴归约 / 扩展TROWEXPANDSUB行广播减法从src0的每一行中减去一个每行标量向量src1。轴归约 / 扩展TROWEXPANDADD行广播加法加上一个每行标量向量。轴归约 / 扩展TROWEXPANDMAX行广播最大值与每行标量向量取最大值。轴归约 / 扩展TROWEXPANDMIN行广播最小值与每行标量向量取最小值。轴归约 / 扩展TROWEXPANDEXPDIF行指数差运算计算 exp(src0 - src1)其中 src1 为每行标量。轴归约 / 扩展TCOLMIN通过取行间最小值来归约每一列。轴归约 / 扩展TCOLEXPAND将每个源列的第一个元素广播到目标列中。轴归约 / 扩展TCOLEXPANDDIV列广播除法将每一列除以一个每列标量向量。轴归约 / 扩展TCOLEXPANDMUL列广播乘法将每一列乘以一个每列标量向量。轴归约 / 扩展TCOLEXPANDADD列广播加法对每一列加上每列标量向量。轴归约 / 扩展TCOLEXPANDMAX列广播最大值与每列标量向量取最大值。轴归约 / 扩展TCOLEXPANDMIN列广播最小值与每列标量向量取最小值。轴归约 / 扩展TCOLEXPANDSUB列广播减法从每一列中减去一个每列标量向量。轴归约 / 扩展TCOLEXPANDEXPDIF列指数差运算计算 exp(src0 - src1)其中 src1 为每列标量。归约类*SUM/*PROD/*MAX/*MIN/*ARGMAX/*ARGMIN把每一行/每一列归约为一个标量扩展类T*EXPAND及其ADD/SUB/MUL/DIV/MAX/MIN/EXPDIF变体则把每行/每列的每行标量向量广播回整行/整列例如 softmax 中常用的exp(x - max)可映射到TROWEXPANDEXPDIF。这类指令在 docs/menu/broadcast_row_zh.md 等菜单文档中也有归类。5.5 内存GM - Tile分类指令描述内存GM - TileTLOAD从 GlobalTensor (GM) 加载数据到 Tile。内存GM - TileTPREFETCH将数据从全局内存预取到 Tile 本地缓存/缓冲区提示。内存GM - TileTPREFETCH_ASYNC通过 SDMA CMO 将 GlobalTensor 区域从 GM 异步预取到 L2 Cache。内存GM - TileTSTORE将 Tile 中的数据存储到 GlobalTensor (GM)可选使用原子写入或量化参数。内存GM - TileTSTORE_FP历史 fp 量化存储形式的源码兼容 C 别名。内存GM - TileMGATHER使用逐元素索引从全局内存收集加载元素到 Tile 中。内存GM - TileMSCATTER使用逐元素索引将 Tile 中的元素散播存储到全局内存。TLOAD/TSTORE是 GM 与 Tile 之间的基本搬运TPREFETCH_ASYNC利用 SDMA 的 CMO 指令把 GM 区域异步预取到 L2MGATHER/MSCATTER支持按逐元素索引做不规则收集/散播。TSTORE_FP等*_FP后缀指令在 manifest 中标记为alias_of如alias_of: TSTORE属于历史 fp 量化形式的源码兼容别名不是独立的新指令。5.6 矩阵乘Matrix Multiply分类指令描述矩阵乘TGEMV_MX带缩放 Tile 的 GEMV 变体支持混合精度/量化矩阵向量计算。矩阵乘TMATMUL_MX带额外缩放 Tile 的矩阵乘法 (GEMM)用于支持目标上的混合精度/量化矩阵乘法。矩阵乘TMATMUL_MX_HIF4用于混合精度 TMATMUL_MX 流程的 HiFloat4 Cube 矩阵乘变体。矩阵乘TMATMUL矩阵乘法 (GEMM)生成累加器/输出 Tile。矩阵乘TMATMUL_ACC带累加器输入的矩阵乘法融合累加。矩阵乘TMATMUL_BIAS带偏置加法的矩阵乘法。矩阵乘TGEMV通用矩阵-向量乘法生成累加器/输出 Tile。矩阵乘TGEMV_ACC带显式累加器输入/输出 Tile 的 GEMV。矩阵乘TGEMV_BIAS带偏置加法的 GEMV。矩阵乘家族覆盖 GEMM 与 GEMV 的三种形态基础形TMATMUL/TGEMV、显式累加形_ACC、偏置融合形_BIAS以及混合精度/量化形_MX、_MX_HIF4。其中TMATMUL_MX_HIF4的操作数是dst/left/right/scale用于 HiFloat4 格式的 Cube 矩阵乘流程。测试代码中大量使用这些指令例如 tests/npu/a5 与 tests/npu/a2a3 下的矩阵乘用例。5.7 数据搬运 / 布局Data Movement / Layout分类指令描述数据搬运 / 布局TEXTRACT从源 Tile 中提取子 Tile。数据搬运 / 布局TEXTRACT_FP历史 fp 量化提取形式的源码兼容 C 别名。数据搬运 / 布局TIMG2COL用于类卷积工作负载的图像到列变换。数据搬运 / 布局TINSERT在 (indexRow, indexCol) 偏移处将子 Tile 插入到目标 Tile 中。数据搬运 / 布局TINSERT_FP历史 fp 量化插入形式的源码兼容 C 别名。数据搬运 / 布局TFILLPAD复制 Tile 并在有效区域外使用编译时填充值进行填充。数据搬运 / 布局TFILLPAD_INPLACE原地填充/填充变体。数据搬运 / 布局TFILLPAD_EXPAND填充/填充时允许目标大于源。数据搬运 / 布局TMOV在 Tile 之间移动/复制可选应用实现定义的转换模式。数据搬运 / 布局TMOV_FP历史 fp 量化移动形式的源码兼容 C 别名。数据搬运 / 布局TRESHAPE将 Tile 重新解释为另一种 Tile 类型/形状同时保留底层字节。数据搬运 / 布局TTRANS使用实现定义的临时 Tile 进行转置。数据搬运 / 布局TCONCAT将两个 Tile 沿列维度水平拼接。数据搬运 / 布局TINTERLEAVE将两个源 Tile 交织为交替的偶/奇元素流拆分为两个目标半部分。数据搬运 / 布局TDEINTERLEAVE将源 Tile 反交织为偶数位置和奇数位置的元素流TINTERLEAVE 的逆操作。TIMG2COL与SETFMATRIX/SET_IMG2COL_RPT/SET_IMG2COL_PADDING配合构成卷积工作负载的 img2col 预处理链TEXTRACT/TINSERT负责子块提取与回填TINTERLEAVE/TDEINTERLEAVE是互逆的偶奇交织变换。5.8 复杂指令Complex分类指令描述复杂指令TPRINT调试/打印 Tile 中的元素实现定义。复杂指令TMRGSORT用于多个已排序列表的归并排序实现定义的元素格式和布局。复杂指令TSORT32对src的每个 32 元素块连同对应的idx条目一起排序并输出排序后的 value-index 对。复杂指令TGATHER使用索引 Tile 或编译时掩码模式来收集/选择元素。复杂指令TCI生成连续整数序列到目标 Tile 中。复杂指令TTRI生成三角下/上掩码 Tile。复杂指令TRANDOM使用基于计数器的密码算法在目标 Tile 中生成随机数。复杂指令TPARTADD部分逐元素加法对不匹配的有效区域具有实现定义的处理方式。复杂指令TPARTMUL部分逐元素乘法对有效区域不一致的处理为实现定义。复杂指令TPARTMAX部分逐元素最大值对不匹配的有效区域具有实现定义的处理方式。复杂指令TPARTMIN部分逐元素最小值对不匹配的有效区域具有实现定义的处理方式。复杂指令TPARTARGMAX部分逐元素最大值选择并返回对应索引argmax对不匹配的有效区域具有实现定义的处理方式。复杂指令TPARTARGMIN部分逐元素最小值选择并返回对应索引argmin对不匹配的有效区域具有实现定义的处理方式。复杂指令TGATHERB使用字节偏移量收集元素。复杂指令TSCATTER使用逐元素行索引将源 Tile 的行散播到目标 Tile 中。复杂指令TQUANT量化 Tile例如 FP32 到 FP8生成指数/缩放/最大值输出。复杂指令TQUANT_DNAxis-0 分组量化与 DN 到 ZZ 指数布局转换。复杂指令TQUANT_HIF4BF16 到 HiFloat4 的量化算法与 CCE 映射。复杂指令TDEQUANT对量化 Tile 做仿射反量化S8/S16 - FP32dst (src - offset) * scale。复杂指令THISTOGRAM对源元素的某个字节统计直方图256 桶可按高位字节级联过滤基数排序的桶计数原语。注意重名指令本分类中的 TGATHER 与 TSCATTER 是片内数据移动指令索引 Tile/掩码选择、行散播与 5.10 节通信分类中的跨 NPU 集合通信 TGATHER/TSCATTER 是不同的指令使用时务必按目录区分。此外THISTOGRAM在 manifest 中带有限制标注仅 A5 / Kirin9030 / CPU-sim 可用PTO_NPU_ARCH_A5 || PTO_NPU_ARCH_KIRIN9030 || __CPU_SIM。5.9 核间通信Cross-core CommunicationTPipe FIFO分类指令描述核间通信TALLOC将 TPipe FIFO 槽位分配为一个 GlobalTensor 视图。核间通信TPUSH将生产者 tile 推入 TPipe FIFO用于 Cube-Vector 通信。核间通信TPOP从 TPipe FIFO 弹出消费者 tile/globalTensor用于 Cube-Vector 通信。核间通信TFREE释放 TPipe 的 FIFO 空间部分目标上对 TileData TPOP 流程为空操作。这组指令实现片上不同核如 Cube 核与 Vector 核之间的 FIFO 通信生产者通过TPUSH把 Tile 推入 TPipe FIFO消费者通过TPOP弹出TALLOC/TFREE负责槽位分配与释放。量化推送场景下可先用SET_QUANT_SCALAR/SET_QUANT_VECTOR设置量化参数再执行TPUSH。5.10 通信Communication跨 NPU分类指令描述通信TPUT远程写将本地数据传输到远端 NPU 内存GM → UB → GM。通信TGET远程读将远端 NPU 数据读取到本地内存GM → UB → GM。通信TPUT_ASYNC异步远程写本地 GM → DMA 引擎 → 远端 GM。通信TGET_ASYNC异步远程读远端 GM → DMA 引擎 → 本地 GM。通信TNOTIFY向远端 NPU 发送标志通知。通信TWAIT阻塞等待直到信号满足比较条件。通信TTEST非阻塞检测信号是否满足比较条件。通信TGATHER从所有 rank 收集数据并沿 DIM_3 拼接。通信TSCATTER将数据沿 DIM_3 拆分并分发到所有 rank。通信TREDUCE从所有 rank 收集数据并逐元素归约到本地。通信TBROADCAST将当前 NPU 的数据广播到所有 rank。这一层对应多 NPU 场景同步点对点TPUT/TGET、异步点对点TPUT_ASYNC/TGET_ASYNC、基于信号量的同步TNOTIFY/TWAIT/TTEST与集合通信TGATHER/TSCATTER/TREDUCE/TBROADCAST。其中 docs/isa/comm/README.md 是这一层的目录页权威头文件为 include/pto/comm/pto_comm_inst.hpp类型定义在 include/pto/comm/comm_types.hpp。六、通信 ISA 的类型系统要正确调用通信指令需要理解 docs/isa/comm/README.md 定义的枚举与结构体NotifyOpTNOTIFY的操作类型NotifyOp::AtomicAddsignal value、NotifyOp::Setsignal value。WaitCmpTWAIT/TTEST的比较算子EQ、NE!、GT、GE、LT、LE。统一运行时参数风格示例comm::TNOTIFY(signal, 1, comm::NotifyOp::Set); comm::TWAIT(signal, 1, comm::WaitCmp::EQ); comm::TTEST(signal, 1, comm::WaitCmp::GE);ReduceOpTREDUCE的归约算子ReduceOp::Sum逐元素求和、ReduceOp::Max、ReduceOp::Min。AtomicTypeTPUT的原子操作类型定义于 include/pto/common/constants.hppAtomicType::AtomicNone默认无原子操作、AtomicType::AtomicAdd原子加。DmaEngineTPUT_ASYNC/TGET_ASYNC的后端选择DmaEngine::SDMA支持 1D 传输DmaEngine::URMA支持 1D 传输仅 Ascend950 / NPU_ARCH 3510要求 CANN 9.1.0DmaEngine::RDMA支持 1D 传输仅 Ascend950 / NPU_ARCH 3510目前仅支持 HNS1825 网卡平台。AsyncEvent异步传输完成句柄定义于 include/pto/comm/async_common/async_types.hppstruct AsyncEvent { uint64_t handle; DmaEngine engine; bool valid() const; // true if handle ! 0 bool Wait(const AsyncSession session) const; // 阻塞直到传输完成 bool Test(const AsyncSession session) const; // 非阻塞完成检测 };AsyncSession异步 DMA 的引擎无关会话构建一次、处处复用comm::AsyncSession session; comm::BuildAsyncSessioncomm::DmaEngine::SDMA(scratchTile, workspace, session);ParallelGroup多 NPU 集合通信的包装结构持有GlobalData *tensors指向一组 GM 地址的本地元数据数组、int nranksrank 数量、int rootIdx根 NPU 的 rank 索引推荐通过工厂函数ParallelGroup::Create(tensorArray, size, rank_id)构建。七、遗留接口与迁移路径PTO ISA v9.2.0docs/isa/README.md 明确记录了当前 ISA 参考不再暴露的历史指令接口以及自 v9.2.0 起生效的清理策略兼容窗口已关闭不再保留公共包装已移除接口迁移方式TSYNC(events...)改为事件排序把事件对象传给消费指令或在消费前显式调用WaitAllEvents(events...)TSUBVIEW非公开 ISA 替代仓库内部可用pto::detail::PtoSubTileView外部应通过受支持的 Tile 构造与公开数据搬运 API 表达数据视图TADDC、TADDSC、TSUBC、TSUBSC、TFUSEDMULADDRELU、TADDReluConv、TSUBRELUCONV、TAddDeqRelu用对应原语算术序列替代如TADD、TSUB、TADDS、TSUBS、TMUL、TMADD、TRELUTFUSEDMULADD/TMULADDDST分别改名为TMADD与TMULATPairReduceSum使用匹配目标布局的行/列归约原语TGET_SCALE_ADDR不要调用AUTO 模式 MX 测试需在测试代码中从数据 Tile 绑定 scale tile 地址后再调用 MX matmul 原语这些迁移规则说明当前指令集正逐步向原语化、最小化演进——融合形态尽量由编译器/调度器组合基本指令完成而不是在 ISA 层面保留大量专用包装。八、从索引到单指令参考以 TADD 为例索引中的每个指令链接都指向docs/isa/下对应的单指令参考页配套有*_zh.md中文版与docs/figures/isa/*.svg示意图。以 TADD 为例单指令页包含示意图、数学解释、汇编语法SSA 与 DPS 两级 IR、C intrinsic 声明、约束条件和示例代码。C intrinsic声明于 include/pto/common/pto_instr.hpptemplate typename TileDataDst, typename TileDataSrc0, typename TileDataSrc1, typename... WaitEvents PTO_INST RecordEvent TADD(TileDataDst dst, TileDataSrc0 src0, TileDataSrc1 src1, WaitEvents ... events);Auto 模式示例#include pto/pto-inst.hpp为统一入口头文件using namespace pto; using TileT TileTileType::Vec, float, 16, 16; TileT src0, src1, dst; TADD(dst, src0, src1);混合静态/动态有效形状示例——dst、src0、src1可以是不同的 C Tile 类型包括不同的静态/动态ValidRow/ValidCol模板参数只要元素类型一致using DynamicTile TileTileType::Vec, int32_t, 16, 16, BLayout::RowMajor, -1, -1; using StaticTile TileTileType::Vec, int32_t, 16, 16, BLayout::RowMajor, 16, 16; DynamicTile dst(16, 16), src1(16, 16); StaticTile src0; TADD(dst, src0, src1);Manual 模式示例先TASSIGN绑定片上地址using TileT TileTileType::Vec, float, 16, 16; TileT src0, src1, dst; TASSIGN(src0, 0x1000); TASSIGN(src1, 0x2000); TASSIGN(dst, 0x3000); TADD(dst, src0, src1);约束要点体现 ISA 的分平台实现差异A2A3 上三个操作数 dtype 必须一致且为int32_t/int16_t/half/float且必须行主序A5 上支持更多类型int32_t/uint32_t/int64_t/uint64_t/float/int16_t/uint16_t/half/bfloat16_t/uint8_t/int8_t同样要求行主序CPU_SIM 只要求 dtype 一致无行主序限制且按各操作数自身布局与物理形状计算地址。所有平台都要求三个 Tile 的运行时有效行列数一致否则触发断言。迭代域取dst.GetValidRow()/GetValidCol()。汇编语法体现两级 IR%dst tadd %src0, %src1 : !pto.tile... # PTO Assembly %dst pto.tadd %src0, %src1 : (!pto.tile..., !pto.tile...) - !pto.tile... # IR Level 1 (SSA) pto.tadd ins(%src0, %src1 : !pto.tile_buf..., !pto.tile_buf...) outs(%dst : !pto.tile_buf...) # IR Level 2 (DPS)结语docs/PTOISA.md作为 PTO 虚拟指令集的总索引把近 150 条指令按同步、资源绑定、逐元素、标量、归约扩展、内存、矩阵乘、布局、复杂指令、核间通信与跨 NPU 通信十大类组织成一张可直接检索的地图。配合 manifest.yaml 的机器可读清单、conventions.md 的通用约定、comm/README.md 的通信类型系统以及 pto_instr.hpp 的 C intrinsic 权威实现读者可以快速定位任意指令并从索引页下钻到含数学语义、汇编语法、约束与示例的单指令参考进而在 kernels 与 tests 中验证和落地自己的 Tile 级内核实现。【免费下载链接】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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表