PTO 虚拟 ISA 手册解析:Ascend CANN 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
导读:PTO(Parallel Tile Operation)是 Ascend CANN 设计的一套面向 Tile 级运算的虚拟指令集架构(Virtual ISA, VISA)。本文以仓库稳定入口 docs/PTO-Virtual-ISA-Manual_zh.md 及其章节化手册(权威维护于 docs/mkdocs/src/manual/)为主体,系统讲解 PTO 的架构级契约:执行模型、状态与类型、Tile 与 GlobalTensor 数据模型、同步语义、指令族分类、Auto/Manual 编程模型、虚拟 ISA 与 AS 分层、字节码与工具链、内存顺序一致性以及后端画像与一致性等级。读完本文,你将掌握 PTO 虚拟 ISA 的完整契约骨架,理解前端 IR 流水线、后端代码生成与一致性测试各自需要满足的架构约束,并知道如何在仓库中逐条核对指令语义。
一、手册定位、受众与阅读路径
1.1 稳定入口与权威来源
PTO-Virtual-ISA-Manual_zh.md 是 PTO 虚拟指令集架构手册的稳定入口页,其章节化手册的权威来源维护在docs/mkdocs/src/manual/(共 11 个正文章节与 4 个附录,均有中英文版本,如01-overview_zh.md、08-virtual-isa-and-ir_zh.md等)。
手册开篇(index_zh.md)就明确了边界:
- 手册定义 PTO 虚拟 ISA 的架构级契约,规定前端、IR 流水线、后端与运行时在执行 PTO 程序时MUST 保持的行为;
- 逐条指令页面
docs/isa/*_zh.md仍是单条指令语义的权威来源,手册则定义围绕这些语义的系统级契约。
1.2 受众
手册面向四类工程师:
- 实现 PTO 降层链路的编译器与 IR 工程师;
- 实现目标合法化与代码生成的后端工程师;
- 需要验证架构可见行为的内核开发者;
- 仿真器与一致性测试开发者。
1.3 文档约定与规范术语
手册借鉴 PTX/Tile-IR 的结构化写法,章节在适用时采用统一节奏:范围 → 语法/形式 → 语义 → 约束 → 诊断 → 兼容。
规范性术语遵循 RFC 惯例:
| 术语 | 含义 |
|---|---|
MUST/MUST NOT | 强制架构要求 |
SHOULD | 推荐要求,偏离时需要明确理由 |
MAY | 架构显式允许的可选行为 |
1.4 权威来源优先级
文档冲突时按以下顺序对齐:
docs/isa/*_zh.md:逐条指令语义与约束;- include/pto/common/pto_instr.hpp:公共 API 形态与重载契约;
- 本手册:分层模型、架构契约与一致性策略。
推荐阅读顺序为index_zh.md→01到11章 → 附录 A/B/C/D,对应 手册总览章节、虚拟 ISA 与 AS 契约、字节码与工具链契约、内存顺序与一致性、后端画像与一致性。
二、设计目标与架构特征
2.1 设计目标
PTO 虚拟 ISA 的设计目标(见 01-overview_zh.md)是:
- 在硬件代际演进中提供稳定架构契约;
- 以Tile 为中心定义语义,并显式定义有效区域行为;
- 明确区分"架构定义"与"实现定义";
- 在内建接口、IR 与后端代码生成之间建立可验证桥接。
2.2 一等架构对象
与通用 GPU ISA 写法相比,PTO 将以下概念提升为一等架构对象:
- Tile 为主计算单位:指令语义在 Tile 域上定义;
- 有效区域优先:
Rv/Cv定义架构计算覆盖; - 位置-意图模型:
Mat/Left/Right/Acc/Bias/Scale等类型参与合法性约束; - 双编程模型:Auto 与 Manual 都是架构层公民;
- 事件中心同步:顺序通过事件与 event synchronization 显式表达。
2.3 架构边界
架构层定义:有效区域内可观察的指令结果、必须满足的顺序与同步语义、对用户和工具链可见的合法性边界。
架构层不定义:微架构调度细节、片上布局的具体实现、后端特定优化策略。后端差异 MUST 以"实现定义约束"形式记录。
2.4 兼容性原则
- SHOULD 优先采用增量演进而非破坏性变更;
- 破坏性架构行为变更 MUST 包含显式版本策略与迁移说明;
- 实现定义行为 MUST 在手册、IR、后端文档中保持一致标注。
一个实际例证:仓库在 docs/isa/README_zh.md 中列出了自 PTO ISA v9.2.0 起关闭兼容窗口的历史接口(如TADDC、TSYNC、TSUBVIEW等),并给出迁移建议(如TSYNC(events...)替换为普通 event 顺序表达,或调用WaitAllEvents(events...);TFUSEDMULADD改名TMADD、TMULADDDST改名TMULA),正是这一兼容策略在仓库中的落地。
三、执行模型:三层抽象代理与顺序域
02-machine-model_zh.md 定义了虚拟 ISA 程序面向的抽象执行模型,描述架构可见的顺序与职责边界,不描述微架构内部实现。
3.1 三个概念执行代理
抽象 PTO 机器由三个概念代理构成:
- Host machine:准备负载、提交执行、管理全局资源;
- Device machine:在执行资源间调度 Tile 程序;
- Core machine:执行 Tile/标量指令和同步原语。
实现可在内部采用不同映射,但 MUST 保持架构可见行为一致。
3.2 程序粒度与派发调度
- PTO 程序以Tile 粒度运行:程序是对 tile、scalar、memory、event 值进行操作的有序指令序列;
- 执行单元 MAY 并发处理相互独立的 Tile 程序;
- 可见顺序 MUST 遵循数据依赖与显式同步语义;
- 独立工作 MAY 乱序并行执行,有依赖的工作 MUST 满足要求的 happens-before 关系;
- 后端/运行时 MAY 采用 SPMD、MPMD 或混合派发模型。
3.3 架构可见顺序域
顺序语义在三个域上定义:
- 程序顺序域:单一依赖链中,后续操作 MUST 观察到前序已提交效果;
- 事件/同步域:事件操作与 event synchronization MUST 建立架构定义的顺序点;
- 内存可见性域:
TLOAD/TSTORE的可见性遵循内存顺序约束(第 11 章)。
3.4 Auto 与 Manual 职责划分
- Auto 模式:编译器/运行时 SHOULD 自动插入合法同步与放置策略,用户意图保留为架构可见语义,执行细节由工具链管理;
- Manual 模式:程序员负责显式放置、顺序控制与流水线安全调度,工具链 MUST 保留显式编写的同步语义。
3.5 实现定义边界
调度启发策略、流水线占用与发射细节、内部缓冲与临时放置、后端支持子集的合法性约束,均属于实现定义且 MUST 在后端画像中说明,且MUST NOT 改变架构定义语义。
四、状态与类型系统
03-state-and-types_zh.md 定义 PTO 虚拟 ISA 操作可见的架构状态模型与类型契约。
4.1 架构状态模型
架构层抽象以下概念状态:Tile 值及其元数据(含有效区域元数据)、标量值与立即数属性、全局内存视图与地址、同步/事件相关的可见顺序状态。后端内部临时状态不在本章范围内(除非影响架构可观察行为)。
4.2 类型类别
PTO 虚拟 ISA 的类型类别包括:
- Tile 类值(
!pto.tile<...>); - 内存/全局视图(
!pto.memref<...>或等价类); - 标量整型/浮点/index 类;
- 用于同步依赖的事件/token 类。
每个指令族 MUST 定义每个操作数/结果位置可接受的类型类别。
4.3 Tile 合法性维度
Tile 合法性受以下维度约束:元素类型(dtype)、形状与有效区域兼容性、位置-意图角色(Mat/Left/Right/Acc/Bias/Scale等)、布局与对齐约束(后端支持子集)。虚拟 ISA 定义合法性接口,具体支持集合由后端画像定义。
4.4 有效区域语义
有效区域是架构一等语义:语义定义仅作用于声明的有效域索引;有效域之外的值在未明确说明时为未指定;多输入操作 MUST 定义域兼容规则。标准记号使用Rv(有效行)与Cv(有效列)表示。这与术语表中对"有效区域(valid region)"的定义一致:Tile 中在某个操作下具有语义定义的元素子集,常写作[Rv, Cv]。
4.5 属性契约与诊断要求
指令属性(比较模式、舍入模式、变换模式等)MUST 定义类型与取值域约束、默认行为、对语义与合法性检查的影响以及无效取值的诊断要求。类型/状态验证诊断 SHOULD 包含:操作数位置、期望/实际类型类别、相关合法性维度(dtype/layout/location/shape)、面向 CI 稳定性的确定性错误标识。
五、Tile 与 GlobalTensor 数据模型
04-tiles-and-globaltensor_zh.md 定义 Tile 操作数与全局内存操作数之间的数据模型契约。
5.1 Tile 数据模型
Tile 是计算类指令的主要架构数据对象,其契约包含:元素类型与形状类别、有效区域元数据(Rv、Cv)、指令合法性要求的位置-意图角色、后端合法性需要的布局/对齐属性。
5.2 GlobalTensor 数据模型
GlobalTensor(或等价内存视图)表示可寻址的全局内存数据,架构可见契约包括:与相关 Tile 操作兼容的元素类型、内存指令要求的地址与步长解释、顺序约束下的可见性行为。术语表补充:它是对全局内存(GM)的带类型视图,包含形状/步幅等元数据,通常用于TLOAD/TSTORE。
5.3 GM ↔ Tile 搬运契约
TLOAD与TSTORE指令族是 GM 与 Tile 的主要桥接。一致性实现 MUST 保持:定义有效域内的元素映射语义、在 event synchronization 与内存模型约束下的顺序保证、量化/缩放与模式属性的已记录行为。同一家族还包括TPREFETCH、TPREFETCH_ASYNC、TSTORE_FP、索引内存操作MGATHER/MSCATTER(见 docs/isa/manifest.yaml 与 指令族矩阵附录)。
5.4 形状与域兼容性
对搬运和布局变换操作:源域与目标域 MUST 满足指令定义的兼容约束;域外行为 MUST 要么显式定义(如 pad/fill),要么声明为未指定;后端合法性检查 MUST 对不支持的 shape/layout 组合给出确定性拒绝。
5.5 布局变换类操作
extract/insert/reshape/transpose 等操作是对 Tile 域的架构级变换,MUST 定义:索引空间映射、有效域映射、部分覆盖域行为、存在硬件差异时的实现定义约束。对应仓库中的TEXTRACT、TINSERT、TRESHAPE、TTRANS、TFILLPAD*、TMOV*、TCONCAT、TINTERLEAVE、TDEINTERLEAVE等指令(见 PTO ISA 参考)。
5.6 诊断要求
搬运/布局诊断 SHOULD 报告:出错操作与操作数位置、不兼容的 shape/layout/location 维度、相关索引/偏移参数上下文、可复现 CI 的确定性错误文案。
六、同步与顺序语义
05-synchronization_zh.md 定义 PTO 虚拟 ISA 程序的架构可见同步与顺序语义。
6.1 同步原语与 event synchronization 契约
PTO 同步机制包括:基于事件的依赖链接、通过 event synchronization 建立的生产者/消费者顺序点、由架构语义抽象的后端低层同步原语。Auto 模式可使用工具链自动同步;所有模式下显式同步都保持架构合法。
event synchronization 契约要求一致性实现 MUST 保证:顺序点之前的操作结果按照内存模型对顺序点之后的消费者可见、优化与降层过程保持同步语义、不支持的同步形式以确定性诊断拒绝。
6.2 冒险类别
同步需求通常来自四类冒险:
- RAW(读后写)依赖;
- 资源复用时的WAR(写后读)交互;
- WAW(写后写)顺序约束;
- 跨流水线交接冒险(内存/向量/矩阵域)。
后端 MAY 在内部优化冒险处理,但 MUST 保持架构可观察顺序。
6.3 事件与依赖模型、同步职责
事件模型 MUST 提供确定性依赖关系,以支持生产者/消费者指令组间的流水线交接、Tile 与内存资源的安全复用、等价程序顺序与依赖描述下的可复现执行。Auto 模式中工具链 SHOULD 自动插入合法同步;Manual 模式中,当依赖无法自然保证时,程序员 MUST 提供显式同步;工具链 MUST NOT 删除必要的用户显式同步(除非证明存在等价顺序保持)。
6.4 源码级例证:SYNCALL
以 SYNCALL_zh.md 为例看同步原语的公共 API 形态(声明位于 include/pto/common/pto_instr.hpp):
// 硬件模式(所有 CoreType 通用) template <SyncCoreType CoreType = SyncCoreType::AIVOnly> PTO_INST void SYNCALL(); // 软件模式 — GM 共享原子计数器 template <SyncAllMode Mode, SyncCoreType CoreType = SyncCoreType::AIVOnly, typename GlobalData, std::enable_if_t<is_global_data_v<GlobalData>, int> = 0> PTO_INST void SYNCALL(GlobalData &gmWorkspace, int32_t usedCores = 0);SyncCoreType选参与者集合:AIVOnly(默认)、AICOnly、Mix(AIC+AIV);SyncAllMode选实现路径:Hard(FFTS 硬件旗标,无 workspace 重载)、Soft(GM 共享原子计数器,带 workspace 重载);gmWorkspace为GlobalTensor<int32_t, pto::Shape<>, pto::Stride<>>,只用首个 int32 作为共享到达计数器,分配一条 cache line 即可且首次使用前必须清零;usedCores为 0 时自动推算参与核数;显式指定时可小于 launch 核数(未参与核不得调用SYNCALL)。
七、指令族体系与契约
06-instructions_zh.md 定义"指令族级"的规范契约,逐条指令规范语义仍以docs/isa/*_zh.md为准。
7.1 指令族分类
PTO 指令族分为八类:
- 同步与资源绑定;
- Tile-Tile 逐元素运算;
- Tile-标量与 Tile-立即数运算;
- 轴归约与扩展运算;
- 内存操作(
GM <-> Tile与索引变体); - 矩阵乘与 GEMV 运算;
- 数据搬运与布局变换;
- 不规则/复杂操作。
源同步清单由 docs/isa/manifest.yaml 维护(该文件为 YAML 兼容 JSON,每条指令记录instruction、category、中英文 summary、diagram_template与operands)。
7.2 指令族通用契约与有效区域优先
每个指令族 MUST 定义:操作数/结果类别与位置规则、语义作用域(有效区域处理)、必需约束(dtype/layout/location/shape)、同步与顺序影响、非法使用的诊断行为、实现定义边界。
有效区域优先规则:除非具体指令另有定义,语义仅在操作有效域内定义,域外结果为未指定,多输入操作 MUST 定义域组合规则。
7.3 各指令族摘要
- 同步与资源绑定:event synchronization、
TASSIGN及模式/配置类指令,MUST 保持架构顺序语义; - 逐元素与标量变体:算术、位运算、比较、选择、一元数学及标量融合形式,MUST 定义逐元素行为与模式相关约束;
- 归约/扩展族:按行/按列归约及广播扩展,MUST 定义轴语义与域兼容关系;
- 内存指令族:load/store/prefetch 与索引 gather/scatter,MUST 定义 Tile 域与内存域的映射关系;
- 矩阵运算族:
TMATMUL*与TGEMV*,契约 MUST 定义累加域、操作数角色合法性与精度模式交互; - 搬运/布局族:extract/insert/reshape/transpose/fillpad 等变换,MUST 定义索引映射与域保持规则;
- 复杂/不规则族:sort/quant/partial/gather 变体等,MUST 显式标注实现定义部分。
7.4 单条指令文档契约与同步策略
逐条指令页面 SHOULD 按附录 B 指令契约模板组织:Syntax→Operands→Semantics→Constraints→Diagnostics→Implementation-defined behavior→Compatibility notes。
指令族与指令索引 MUST 与以下来源保持同步:docs/isa/manifest.yaml、include/pto/common/pto_instr.hpp、docs/tools/下的索引/矩阵生成工具(如 gen_isa_indexes.py 从 manifest 生成 ISA 索引文档,gen_isa_svgs.py 生成指令示意图,check_isa_consistency.py 校验一致性)。
7.5 指令族矩阵规模
附录 D 指令族矩阵(由 manifest 自动生成)给出覆盖统计:同步 1 条、手动/资源绑定 6 条、逐元素(Tile-Tile)29 条、Tile-标量/Tile-立即数 19 条、轴归约/扩展 28 条、内存(GM ↔ Tile)7 条、矩阵乘 9 条、数据搬运/布局 15 条、复杂指令 20 条、Cross-core Communication 4 条,总计 138 条。头文件同步状态:pto_instr.hpp含 134 个唯一指令 API,manifest 含 138 条目;头文件有但 manifest 缺失:无;manifest 有但头文件缺失:TMATMUL_MX_HIF4、TPREFETCH_ASYNC、TQUANT_DN、TQUANT_HIF4。附录用于分类与覆盖追踪,不替代逐条指令的规范化语义描述。
八、编程模型契约:Auto 与 Manual
07-programming_zh.md 定义两种模式下的架构安全编程契约,重点是正确性与可移植边界。
8.1 契约分工
Auto 模式:工具链 SHOULD 自动推导合法放置、顺序与调度;生成代码 MUST 保持虚拟 ISA 语义;在等价源码与选项下,用户可见行为 MUST 保持确定性。
Manual 模式:程序员 MAY 显式控制放置与同步;用户显式编写的依赖与顺序点 MUST 被保留;非法手工配置 MUST 以可执行诊断失败。
8.2 可移植安全编程规则
跨后端可移植的程序 SHOULD:保持在文档定义的指令族合法域内;避免依赖实现定义副作用;在数据流无法保证顺序时显式使用同步;将 dtype/layout/location 组合限制在后端交集画像内。
8.3 性能导向且可移植的模式
- 显式且域安全的 tiling 与有效区域管理;
- 通过事件/event synchronization 建立清晰的生产-消费边界;
- 使用能力检查进行后端受控特化;
- 对不支持组合提供确定性回退路径。
8.4 反模式(SHOULD 避免)
将有效域外值当作有意义数据读取;依赖未文档化流水线时序行为;在无依赖定义时假设隐式顺序;未经画像门控直接编码后端特定假设。
8.5 调试与验证流程
建议五步流程:①结构正确性检查(类型、元数、属性)→ ②合法域检查(shape/layout/location 组合)→ ③同步检查(依赖完备性)→ ④后端一致性检查(画像约束)→ ⑤跨代表目标差分行为检查。当代码依赖实现定义行为时,假设 MUST 被文档化,后端画像约束 MUST 明确声明,可行时 SHOULD 提供回退行为。
九、虚拟 ISA 与 AS 分层契约
08-virtual-isa-and-ir_zh.md 定义虚拟 ISA 语义与 PTO AS/降层链路之间的契约。
9.1 三层契约模型
- 虚拟 ISA 层:架构可见语义;
- AS 层:用于验证与变换的结构化强类型表示;
- 后端降层层:目标相关合法化与代码生成。
后端特化 MUST 保持虚拟 ISA 可观察行为。
9.2 AS 对象模型与验证边界
一致性 PTO AS 模型 SHOULD 定义:模块与符号契约、函数/基本块结构及顺序、SSA 值拓扑、操作 schema(名称、操作数、结果、属性、副作用)、显式同步与内存副作用。
验证分两层:
- 结构验证器(IR 层):MUST 验证操作 schema、元数、类型类别与必需属性,且 MUST 与目标无关;
- 目标合法性验证器(后端层):MUST 验证选定后端画像下的 dtype/layout/location/shape 组合,对不支持组合输出确定性诊断。
9.3 降层不变量与源同步
降层 MUST 保持:有效区域语义、显式顺序依赖(event、event synchronization、内存顺序点)、架构定义域内的操作语义;MUST NOT 将实现定义行为静默改写为架构定义行为。
AS 契约 MUST 与docs/isa/*_zh.md(语义意图)和include/pto/common/pto_instr.hpp(API 形态)同步。兼容策略:优先增量 AS 演进;破坏性变更 MUST 含版本与迁移说明;未知必需字段 MUST 验证失败;已弃用结构 SHOULD 至少在一个兼容窗口内可解析。
9.4 最小一致性场景
一致性验证 SHOULD 包含:结构验证器合法/非法样例测试、按后端画像划分的合法性通过/失败矩阵、IR 与字节码往返检查、与逐条指令语义对齐的差分检查。
十、字节码与工具链契约
09-bytecode-and-toolchain_zh.md 定义 PTO IR 与字节码形态之间的实际交换与验证契约。
10.1 表示层次与模块契约
PTO 表示层次:虚拟 ISA 语义 → PTO IR 结构化形态 → 字节码序列化交换形态,层间转换 MUST 保持架构可观察语义。
一致性 v1 字节码模块 MUST 保留:操作/基本块/函数顺序、SSA 定义-使用拓扑、操作数/结果类型信息、必需属性与模式元数据、符号与入口身份;若无法无损保留,序列化 MUST 确定性失败。
10.2 验证流水
建议流水:①前端生成 PTO IR → ②运行结构验证器 → ③IR 序列化为字节码 → ④字节码反序列化为 IR → ⑤再次运行结构验证器 → ⑥可选运行目标合法性验证器。CI SHOULD 覆盖前 1-5 步。
10.3 诊断契约与最小错误类别
诊断 MUST:文本形态具备定位信息、对等价输入具备确定性、提供期望与实际约束差异。最小错误类别:解析错误、结构验证错误、字节码格式/兼容错误、目标合法性错误。
10.4 兼容策略与往返保证
演进策略 MUST 定义 schema 版本字段、向后兼容窗口、未知字段与未知操作处理规则。默认策略:未知必需字段 → 拒绝;未知可选字段 → 除非兼容模式显式允许,否则拒绝;未知操作 → 以确定性"未支持操作"诊断拒绝。
对支持特性,text -> IR -> bytecode -> IR -> textSHOULD 保持语义、验证相关结构与必需元数据(不要求文本逐字节一致)。
10.5 运行验收清单
每次发布 SHOULD 验证:解析器正反例套件、结构验证一致性套件、畸形字节码鲁棒性测试、往返回归语料、诊断文案稳定性快照。
十一、内存顺序与一致性
10-memory-ordering-and-consistency_zh.md 定义架构可见内存顺序与可见性保证。
11.1 内存对象与一致性基线
架构可见内存域包括:Tile 本地值、通过内存操作访问的全局内存视图、影响可见性边界的同步状态。后端私有缓存/缓冲属于实现定义,但 MUST 满足架构可见顺序结果。
基线模型为"依赖有序一致性":数据依赖与显式同步定义必须满足的可见顺序;相互独立操作在内部 MAY 重排;必需同步点 MUST 建立定义的可见性关系。
11.2 顺序保证与编程要求
一致性实现 MUST 保证:必需同步/顺序点之后,生产者写入对依赖消费者可见;显式依赖链中的内存操作保持链路顺序;event synchronization 与事件依赖定义的顺序在内存可见性上得到体现。
程序 SHOULD:在生产者/消费者边界使用显式同步;在无定义依赖时避免假设隐式全局顺序;避免依赖未指定域外值。在非工具自动同步场景下,Manual 模式程序员MUST 显式确保顺序。后端 SHOULD 提供诊断:非法上下文中的顺序假设缺失、不支持的内存顺序形式、后端画像特定限制;一致性测试 SHOULD 覆盖代表性依赖模式下的有序可见性场景。
十二、后端画像与一致性等级
11-backend-profiles-and-conformance_zh.md 定义后端能力子集的描述方式与一致性等级评估方法。
12.1 后端画像模型与能力门控
后端画像 MUST 记录:支持的指令族与操作形式、支持的 dtype/layout/location/shape 组合、同步与内存顺序限制、实现定义行为边界、对不支持特性的诊断策略。画像可对应具体目标(例如A2/A3/A5/CPU 仿真器)。
工具链 MUST 基于画像能力门控后端特化。当请求行为超出画像支持时:编译/合法化 MUST 确定性失败,或选择显式定义的回退路径。
12.2 一致性维度与等级
一致性评估维度:①语义一致性(指令行为)、②合法性一致性(契约验证)、③顺序一致性(同步与内存可见性)、④诊断一致性(确定性且可执行错误)。
建议等级:
| 等级 | 名称 | 内容 |
|---|---|---|
| Level 0 | 解析/形态 | 仅结构工具链正确性 |
| Level 1 | 指令族合法性 | 具备文档化指令族合法性与诊断 |
| Level 2 | 指令语义 | 代表性样例验证逐条语义 |
| Level 3 | 跨层稳定性 | AS/字节码/后端转换后语义、顺序、诊断保持稳定 |
后端 SHOULD 公布最高已验证等级及已知缺口。
12.3 必需测试矩阵与变更管理
画像一致性套件 SHOULD 包含:按指令族划分的合法/非法组合测试、同步与内存顺序场景测试、精度/模式交互测试(含混合精度路径)、文本/AS/字节码往返工具链测试、诊断稳定性快照测试。
后端行为变更时:画像文档 MUST 在同一变更集中更新、MUST 说明一致性影响;对已发布等级的回归 MUST 视为发布阻断(除非有明确豁免和理由)。
十三、附录体系:术语、契约模板、诊断分类与矩阵
13.1 术语表(附录 A)
附录 A 术语表定义:Tile(片上二维操作数,含类型/形状/布局/有效区域元数据)、GlobalTensor(对 GM 的带类型视图)、有效区域([Rv, Cv])、位置 Location(Vec/Mat/Left/Right/Acc等存储类别/意图)、Block/Sub-block(并行工作单元)、流水线 Pipeline(load/transform/compute/store 阶段重叠调度)、event synchronization(阶段类别间建立顺序关系的同步抽象)。
13.2 指令契约模板(附录 B)
附录 B 定义单条指令文档的标准章节顺序:# <INSTR>→ Scope → Syntax → Operands → Semantics → Constraints → Diagnostics → Implementation-defined behavior → Compatibility → Examples,并给出各章节的规范要求(如 Semantics MUST 定义有效域迭代模型与域外行为;Constraints MUST 区分架构层要求与后端画像限制)及可复制的模板正文。
13.3 诊断分类体系(附录 C)
附录 C 定义五类主诊断类别:
| 前缀 | 用途 |
|---|---|
PARSE_* | PTO-AS 文本错误(token、文法、字面量) |
STRUCT_* | IR 结构违规(元数、属性缺失、类型不兼容) |
LEGAL_* | 后端/画像合法性失败(dtype/layout/location/shape、模式组合、指令变体) |
ORDER_* | 同步/顺序错误(缺失依赖边、非法同步形式、顺序契约违反) |
BCODE_* | 交换/序列化失败(版本、section 畸形、未知字段/操作码) |
诊断质量契约:确定性错误类别、确定性主消息形态、可执行上下文(期望 vs 实际)、可用时提供源码定位。稳定性策略:错误类别标识在补丁版本内 MUST 稳定;消息文案在 CI 快照中 SHOULD 尽量稳定;实质变化 SHOULD 记入发布说明。示例格式:
LEGAL_UNSUPPORTED_TUPLE: tmatmul operand src1 has unsupported tuple expected: layout in {fractal_a, fractal_b}, dtype in {fp16, bf16} actual: layout=row_major, dtype=int8 context: backend_profile=A3, op_loc=line 4213.4 指令族矩阵(附录 D)
见本文第七章,附录 D 由docs/isa/manifest.yaml自动生成,逐类列出指令、图示模板、操作数契约与语义页面(如SYNCALL对应docs/isa/SYNCALL_zh.md、TMATMUL*对应矩阵乘族、TALLOC/TPUSH/TPOP/TFREE对应 Cross-core Communication 族),用于分类与覆盖追踪。
十四、在仓库中继续深入
- 手册入口与章节:docs/PTO-Virtual-ISA-Manual_zh.md 与 docs/mkdocs/src/manual/(11 章 + 附录 A-D,中英双语);
- 逐条指令语义:docs/isa/README_zh.md 及
docs/isa/*_zh.md各指令页(如 SYNCALL_zh.md、TLOAD_zh.md、TMATMUL_zh.md),并配合 docs/isa/manifest.yaml 使用; - 公共 API 形态:include/pto/common/pto_instr.hpp(指令内建接口声明与
MAP_INSTR_IMPL*宏的 CPU 仿真 trace 机制,见__CPU_SIM分支)、include/pto/pto-inst.hpp(公共头); - 工具链与一致性工具:docs/tools/ 下的
gen_isa_indexes.py、gen_isa_svgs.py、check_isa_consistency.py、check_virtual_manual_consistency.py、gen_virtual_manual_matrix.py; - 测试佐证:tests/cpu/st/、tests/npu/(按 a2a3/a5/a6/kirin 等目标划分)、tests/costmodel/ 中的指令一致性测试,可作为手册各章契约(语义/合法性/顺序/诊断)在具体后端画像上的落地验证。
PTO 虚拟 ISA 的核心设计哲学在于:把"架构定义"与"实现定义"清晰切分,用有效区域、位置-意图角色、事件中心同步与分层验证把指令语义固化为可验证、可移植、可在硬件代际间稳定演进的契约。无论是编写 Auto/Manual 内核,还是实现降层、合法化、字节码与一致性测试,本手册都是绕不开的架构级规范。
【免费下载链接】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),仅供参考