PTO 虚拟 ISA 核心术语表解读: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 仓库《附录 A. 术语表》中的全部核心术语进行逐一展开解读。文章以术语为骨架,将每个概念与 PTO-Virtual-ISA-Manual 手册正文(执行模型、状态与类型、同步、内存顺序等章节)、ISA 通用约定 以及include/pto/下的公共头文件相互印证,帮助读者在阅读单条指令文档或编写 Tile 内核前,先建立准确、无歧义的架构概念基础。读完本文,你将能正确理解Rv/Cv有效区域、Location位置意图、Block/Sub-block 并行粒度、流水线与event synchronization在 PTO 架构中的精确含义,并掌握它们在指令语义中的用法。
术语表在 PTO 架构体系中的位置
《附录 A. 术语表》(docs/mkdocs/src/manual/appendix-a-glossary_zh.md)是 PTO 虚拟指令集架构手册(英文原版,手册索引见 index_zh.md)的收尾章节。它不是孤立的名词罗列,而是整部手册阅读的"地基":手册正文各章节(执行模型、状态与类型、Tile 与 GlobalTensor、同步、指令族契约 等)大量复用这些术语,而 docs/isa/ 下的逐条指令文档同样以这些概念为语义前提。
因此,本术语表具备三重作用:
- 消除歧义:为"架构定义"与"实现定义"划定边界,例如有效区域之外的值是"未指定"而非"清零";
- 统一记号:确立
[Rv, Cv]、block_idx、subblockid等标准写法; - 衔接实现:术语与
include/pto/common/pto_tile.hpp、include/pto/common/pto_instr.hpp等公共头文件中的类型一一对应。
Tile:片上二维操作数
术语定义:Tile 是片上二维操作数,包含类型、形状、布局与有效区域等元数据。
从架构角度看,Tile 是 PTO 计算类指令的"一等公民"。手册 状态与类型 章指出,PTO 虚拟 ISA 将 Tile 类值表示为!pto.tile<...>,其合法性受元素类型(dtype)、形状与有效区域兼容性、位置-意图角色以及布局/对齐约束四个维度共同约束。
从实现角度看,概念上 Tile 位于片上 Tile 存储(类似寄存器文件或 SRAM 的存储区),并通过TLOAD/TSTORE在全局内存(GM)与片上之间搬运;在 CPU 仿真后端中,Tile 存放在主机内存,但保持相同的形状/布局/有效区域规则,以便验证合法性与语义一致性(见 docs/coding/Tile_zh.md)。其 C++ 类型定义在 include/pto/common/pto_tile.hpp。
理解 Tile 需要区分两组容易混淆的概念:
- 物理形状与有效形状:
Rows/Cols描述 Tile 的物理存储形状,GetValidRow()/GetValidCol()描述参与计算的有效区域;修改有效形状不会改变物理步长。以 ISA 通用约定 中的例子说明:A5 上int64_t/uint64_t的 RowMajor 输出物理形状为[64,4]、有效形状为[64,1]时,物理行步长仍为 4 个元素(32 字节);把有效列数 1 误当成物理行步长会导致行间结果错位。 - 域(domain)与语义作用域:指令的语义域可能以目标 Tile 或源 Tile 的有效区域定义,具体以 docs/isa/ 各指令页为准。例如
TSTORE写入的元素范围由有效区域与指令约束共同决定。
GlobalTensor:全局内存的带类型视图
术语定义:GlobalTensor 是对全局内存(GM)的带类型视图,包含形状/步幅等元数据,通常用于TLOAD/TSTORE。
手册 Tile 与 GlobalTensor 章将其与 Tile 并列,构成 PTO 数据模型的另一半。GlobalTensor(或等价内存视图,在 IR 中写作!pto.memref<...>或等价类)的架构可见契约包括:
- 与相关 Tile 操作兼容的元素类型;
- 内存指令要求的地址与步长解释;
- 在顺序约束下的可见性行为。
TLOAD与TSTORE指令族是 GM 与 Tile 之间的主要桥接:一致性实现必须保持有效域内的元素映射语义、在 event synchronization 与内存模型约束下的顺序保证,以及量化/缩放等模式属性的已记录行为。C++ 侧的类型位于include/pto/common目录,其编程模型(类型、布局、枚举、约束等)可参考 docs/coding/GlobalTensor_zh.md。
有效区域(valid region):[Rv, Cv]
术语定义:有效区域是 Tile 中在某个操作下具有语义定义的元素子集,常写作[Rv, Cv]。
这是 PTO 架构中最重要的一等语义。手册 状态与类型 章明确了三条规则:
- 语义定义仅作用于声明的有效域索引,即
0 <= i < Rv且0 <= j < Cv; - 有效域之外的值在未明确说明时为未指定(unspecified),不要假设一定清零或保持不变;
- 多输入操作必须定义域兼容规则。
ISA 通用约定 进一步细化:指令页中"对有效区域内的每个元素(i, j)"默认指valid_row = dst.GetValidRow()、valid_col = dst.GetValidCol(),除非指令显式定义不同的迭代域。
实现层面,Tile 的有效区域可以是静态的(RowValid_ == Rows_且ColValid_ == Cols_,完全静态)也可以是动态的(其一为pto::DYNAMIC(-1)时,有效值存储在 Tile 对象中,通过GetValidRow()/GetValidCol()查询),且总是连续前缀(见 docs/coding/Tile_zh.md)。PadValue是编译期策略,用于部分实现处理有效区域外元素(如 select/copy/pad),其效果依赖指令与后端。
有效区域还直接约束内存搬运:搬运/布局类操作(extract/insert/reshape/transpose 等)必须定义索引空间映射、有效域映射、部分覆盖域行为,以及存在硬件差异时的实现定义约束;域外行为要么显式定义(如 pad/fill),要么声明为未指定(见 4.5/4.6 节)。
位置(Location):Tile 的存储类别与意图
术语定义:位置是 Tile 的存储类别/意图,例如Vec、Mat、Left、Right、Acc等。
位置-意图模型是 PTO 区别于通用 GPU ISA 的特征之一(见 总览)。手册将Mat/Left/Right/Acc/Bias/Scale等角色提升为参与合法性约束的一等对象:一个 Tile 属于哪一类逻辑 Tile 存储(例如向量 vs 矩阵/立方寄存器类)决定了它能出现在哪些指令的哪些操作数位置。
例如矩阵运算族(TMATMUL*与TGEMV*)的契约必须定义累加域、操作数角色合法性与精度模式交互(见 指令族契约 6.5.5 节)。位置、dtype、layout、shape 共同构成 Tile 合法性的四个维度,非法组合应由后端画像给出确定性拒绝。
Block 与 Sub-block:并行粒度
术语定义:
- Block:并行工作的基本单元,通常由
block_idx标识; - Sub-block:Block 内部的细分单元;在适用平台上可由
subblockid标识。
这两个术语定义了 PTO 程序的并行组织方式。手册 执行模型 章描述了三层执行代理:Host machine(准备负载、提交执行、管理全局资源)、Device machine(在执行资源间调度 Tile 程序)、Core machine(执行 Tile/标量指令和同步原语)。Block/Sub-block 是 Core machine 侧并行执行的基本组织粒度。
调度策略属于实现定义,但受架构规则约束:独立工作可以乱序并行执行,有依赖的工作必须满足要求的 happens-before 关系;后端/运行时可以采用 SPMD、MPMD 或混合派发模型。需要注意的是,调度启发策略、流水线占用与发射细节等属于实现定义,且必须在后端画像中说明,但这些实现差异不得改变架构定义的语义。
流水线(Pipeline):阶段重叠调度
术语定义:流水线是对 load/transform/compute/store 等阶段的重叠调度,并通过同步机制协调阶段间依赖。
流水线是 PTO 性能编程的核心模式。典型的数据流为:TLOAD(GM -> Tile)→ 变换/计算 →TSTORE(Tile -> GM),多个 Tile 程序可以在不同阶段之间重叠执行。手册 执行模型 明确指出:PTO 程序以 Tile 粒度运行,执行单元可以并发处理相互独立的 Tile 程序,可见顺序必须遵循数据依赖与显式同步语义。
手册 同步 章列出了流水线交接中必须处理的四类冒险:
- 读后写(RAW)依赖;
- 资源复用时的写后读(WAR)交互;
- 写后写(WAW)顺序约束;
- 跨流水线交接冒险(内存/向量/矩阵域)。
事件模型必须提供确定性依赖关系,以支持生产者与消费者指令组之间的流水线交接、Tile 与内存资源的安全复用,以及在等价程序顺序与依赖描述下可复现执行。可移植且性能良好的模式包括:显式且域安全的 tiling 与有效区域管理、通过事件/event synchronization 建立清晰的生产-消费边界(见 编程模型契约)。
event synchronization:阶段间的顺序点
术语定义:event synchronization 用于在阶段类别之间建立顺序关系的同步指令/抽象。
事件同步是 PTO 顺序语义的显式载体。手册 同步 章给出的契约是:顺序点之前的操作结果按照内存模型对顺序点之后的消费者可见;优化与降层过程必须保持同步语义;不支持的同步形式必须以确定性诊断拒绝。
在 Auto 模式下,编译器/运行时应当自动插入合法同步;在 Manual 模式下,当依赖无法自然保证时,程序员必须提供显式同步,工具链不得删除必要的用户显式同步,除非能证明存在等价的顺序保持。
ISA 通用约定 中给出了典型的编码形态:某些指令序列需要建立内存与向量流水线之间的顺序关系,示例中出现的事件(例如set_flag(...)/wait_flag(...))用于表达后端需要满足的顺序约束。事件模型的完整介绍见 docs/coding/Event_zh.md。
event synchronization 与内存模型的关系
事件同步与内存可见性紧密耦合。手册 内存顺序与一致性 章定义基线模型为"依赖有序一致性":
- 数据依赖与显式同步定义必须满足的可见顺序;
- 相互独立操作在内部可以重排;
- 必需同步点必须建立定义的可见性关系。
一致性实现必须保证:在必需同步/顺序点之后,生产者写入对依赖消费者可见;显式依赖链中的内存操作保持链路顺序;event synchronization 与事件依赖定义的顺序在内存可见性上得到体现。相应地,程序应当:在生产者/消费者边界使用显式同步、在无定义依赖时避免假设隐式全局顺序、避免依赖未指定域外值。
术语速查与深入学习指引
| 术语 | 一句话要点 | 权威依据 |
|---|---|---|
| Tile | 片上二维操作数,含类型/形状/布局/有效区域 | docs/coding/Tile_zh.md、include/pto/common/pto_tile.hpp |
| GlobalTensor | 全局内存的带类型视图,服务于TLOAD/TSTORE | docs/coding/GlobalTensor_zh.md |
有效区域[Rv, Cv] | 语义有定义的元素子集,域外值未指定 | docs/isa/conventions_zh.md |
| 位置(Location) | Tile 的存储类别/意图,参与合法性约束 | docs/mkdocs/src/manual/03-state-and-types_zh.md |
| Block / Sub-block | 并行工作基本单元及内部细分 | docs/mkdocs/src/manual/02-machine-model_zh.md |
| 流水线 | load/transform/compute/store 阶段重叠调度 | docs/mkdocs/src/manual/02-machine-model_zh.md |
| event synchronization | 阶段类别之间建立顺序关系的同步抽象 | docs/coding/Event_zh.md |
术语表在手册中起到"锚点"作用:后续章节(如附录 B 指令契约模板、附录 D 指令族矩阵)均以本表术语为书写语言。建议的阅读路径是:先通读本术语表建立概念框架,再按 手册索引 顺序阅读正文各章,遇到单条指令语义时回到 docs/isa/ 对照逐条指令页;若需在代码中验证概念,可同时查阅 include/pto/common 下的公共头文件(如pto_instr.hpp、pto_tile.hpp),它们与术语表、ISA 约定及指令文档共同构成了可交叉验证的完整契约体系。
【免费下载链接】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),仅供参考