Tile ISA 与 PTO 算子详解:AI 芯片的块级编程抽象

面向 RISC-V NPU 架构研究、gem5 仿真、AI 编译器前端(tinygrad)链路的调研整理
关键词:Tile ISA · PTO 算子 · 昇腾 CANN · 脉动阵列 · gem5 · tinygrad · Triton · Gemmini


目录


一、从 GEMM 说起:先分清几个易混概念

很多同学在调研时容易把下面几个词搞混,先统一口径:

概念定义是不是软件/硬件
GEMM通用矩阵乘法,一种算法算子(数学运算)算法本身,哪里都能算
Gemmini伯克利的 RISC-V 脉动阵列 NPU 硬件 IP硬件加速器 IP
PTOParallel Tile Operation,昇腾 CANN 的块级虚拟指令集/算子编程范式中间层虚拟 ISA
Tile ISA面向 AI 芯片的「块级/瓦片级虚拟指令集架构」中间层抽象规范
TritonOpenAI 的 GPU Tile 编程语言编译器前端

一句话区分:

  • GEMM 是“要算的任务”
  • PTO / Triton 是“给硬件写这个任务的中间语言”
  • Gemmini 是“专门加速矩阵乘的硬件电路”

二、Tile ISA 是什么

2.1 ISA 是什么

ISA(Instruction Set Architecture,指令集架构) 是 CPU / NPU / GPU 硬件对外暴露的一套“指令菜单”,是软件和硬件之间的契约。

它规定了:芯片能识别哪些指令、每条指令做什么、寄存器如何定义、数据寻址方式、支持的数据类型。

  • 硬件电路(RTL)按照这份契约去实现;
  • 编译器、汇编器、软件按照这份契约生成指令。

⚠️ 关键区分:

  • ISA(指令集架构):规范 / 接口 / 契约(抽象)
  • 微架构(Microarchitecture):硬件如何具体实现这套 ISA(电路细节)

举例:RISC-V 是 ISA;Rocket、BOOM、Gemmini 配套核、你在 gem5 里搭的 RISC-V 核,都是微架构实现。同一份 RISC-V ISA,可以做出性能、面积差异巨大的不同芯片。

2.2 传统硬件 ISA(RISC-V / ARM / x86)

  • 指令原子:标量、向量;一条指令做一次加法、一次向量乘
  • 硬件直接译码执行,是芯片原生能认的指令
  • 编译器最终输出的就是这类 ISA 指令
  • 硬件一旦改 ISA,全部软件都要适配

示例(RISC-V 汇编):

add  x1, x2, x3        ; 标量 ISA 指令
vfmul.vv v1, v2, v3    ; 向量 ISA(RVV)指令

2.3 广义 ISA 的两类形态

类型硬件 ISA(RISC-V / ARM / AscendC)虚拟 Tile ISA(PTO)
本质芯片软硬件之间的契约算子编译器与后端之间的中间契约
执行方硬件译码器直接执行编译器转译后交给底层 ISA 执行
计算原子标量、向量Tile 张量块
硬件绑定ISA 规范强绑定,微架构可换与硬件解耦,同一份代码可映射多款硬件
代表RISC-V RV64G、RVV、ARMv9、x86昇腾 PTO-ISA

一句话记忆:硬件 ISA 是硬件听得懂的母语;Tile ISA 是编译器之间的中间通用语言,还要再翻译一遍才给硬件。

3.1 Tile 是什么

Tile = 瓦片,在 AI 芯片 / 算子领域,指把一个超大张量(矩阵)切分出来的一块固定尺寸子矩阵 / 子张量。中文文献常译作“分块、瓦片块”。

3.2 为什么要切 Tile:访存墙(Memory Wall)

以 GEMM 为例,A[4096×4096] × B[4096×4096]:

  • 矩阵太大,无法一次性全部塞进 NPU 片上高速缓存(UB / SRAM),只能放在慢速全局内存(GM / DRAM);
  • 若直接整块计算,会反复读写全局内存,带宽跟不上算力,计算单元大量空转;
  • Tile 思路:把大矩阵切成许多小块(如 32×32、16×64),一次只加载 1~几个 Tile 到片上高速缓存中反复复用,大幅减少慢速访存。

这一切分动作称为 Tiling(分块 / Blocking)。

形象比喻:一张巨大海报(大矩阵),桌面(片上 UB)很小放不下,只能剪成一张张小瓦片(Tile),一次拿一张到桌面上处理。

3.3 Tile 的属性

一个 Tile 不只是一块数据,还附带元信息:

  • shape:形状,如 16×16、64×32、128×128
  • dtype:数据类型,FP16 / BF16 / INT8
  • 存储位置:GM(全局内存)/ L2 / UB(片上缓冲,昇腾体系)
  • 布局:行主序、列主序、面向矩阵乘优化的硬件特殊排布

Tile 尺寸不是统一标准,而是根据硬件资源(UB 容量、张量核能力)设计的超参数,是算子调优重点。

3.4 易混名词对照

名词含义
Tile张量切分出的单个小块(瓦片)
Tiling切分整个大张量为 Tile 的策略 / 算法(动词+名词)
Tile ISA以 Tile 为操作原子的虚拟指令集(PTO)
UB(Unified Buffer)NPU 片上高速缓冲,存放正在计算的 Tile
GM(Global Memory)全局内存(DRAM),存放完整大张量

补充:Triton 里的 Block 本质思想与 Tile 一致(大块放进片上共享内存),差别在于:Tile 是昇腾 NPU 面向多级缓存与矩阵乘硬件的抽象;Block 是 Triton 面向 GPU Shared Memory 的抽象。

4.1 Tile ISA 是什么

Tile ISA 是面向 AI 芯片的块级(瓦片级)虚拟指令集架构。其计算原子不再是标量 / 向量 / 线程,而是 Tile(二维张量块);指令描述“对一块 Tile 做什么计算、如何搬运”,而不直接操作硬件寄存器。它属于中间层虚拟 ISA,不是硬件原生硬指令集。

昇腾 PTO-ISA 就是一套具体的 Tile ISA;NVIDIA CUDA Tile IR 是另一套 Tile 思路。

4.2 传统 ISA 与 Tile ISA 对比

项目传统硬件 ISA(RISC-V / AscendC)Tile ISA(PTO-ISA)
计算原子标量 / 向量Tile 张量块
虚实属性硬件真实指令,直接译码执行虚拟指令,编译器转译到底层硬件指令
硬件绑定强绑定,硬件改动代码基本重写硬件无关语义,跨代可移植
开发关注点寄存器、流水线、延迟、单核调度Tile 形状、数据局部性、块间依赖
调优空间极致性能,门槛极高快速开发 + 精细调优(Auto / Manual 双模式)
适合场景固化高性能算子、底层开发新算子迭代、稀疏算子、FA/Mamba、自研 NPU 探索

4.3 五大核心特征

  1. Tile 为一等公民:所有计算对象是带 shape / dtype / 位置属性的 Tile,契合 NPU 多级存储分层,强化局部性、缓解访存墙。

  2. 虚拟层、硬件解耦、跨代可移植(最核心价值):指令语义固定,不绑定核数、UB 大小、流水线延迟;同一份代码可映射多代硬件。

  3. 指令覆盖完整 AI 原语(不止 GEMM):PTO Tile ISA 共 120+ 条指令,分类如下:

    指令类别代表指令用途
    计算类TMATMUL、TADD/TMUL、TREDUCE、TBROADCAST、TQUANT矩阵乘、逐元素、归约、广播、量化
    搬运类TLOAD / TSTORE / TMOVTile 块加载、存储、布局变换
    不规则访存MGATHER、MSCATTER稀疏、Embedding、KV Cache
    同步通信SYNCALL、Tile 级集合通信块同步、AllReduce 等跨核通信
  4. 双模式开发:Auto 模式只写语义、编译器自动调度;Manual 模式显式控制存储与发射顺序,保留调优入口。

  5. 自带仿真语义:块级语义确定,可先在 CPU 模拟器(SIM)上验证精度与依赖,再下放到硬件 / gem5。

Tile ISA 是面向 AI 芯片的「块级/瓦片级虚拟指令集架构」。

它的计算原子不再是单个标量、向量或线程,而是 Tile(固定形状的二维张量块)。指令描述的是“对一块 Tile 做什么计算、怎么搬运”,而不是直接操作硬件寄存器或硬件计算单元。它属于中间层虚拟 ISA,不是硬件原生的硬指令集。

你前面聊的 PTO-ISA,就是昇腾 CANN 实现的一套 Tile ISA;NVIDIA CUDA Tile IR 是另一套 Tile ISA 思路。

Tile = 瓦片,在 AI 芯片 / 算子领域,指把一个超大张量(矩阵)切分出来的一小块固定尺寸子矩阵 / 子张量。

2.2 传统 ISA vs Tile ISA

项目传统硬件 ISA(RISC-V / AscendC)Tile ISA(PTO-ISA)
计算原子标量 / 向量Tile 张量块
虚实属性硬件真实指令,直接译码执行虚拟指令,编译器转译到底层硬件指令
硬件绑定强绑定,硬件改动代码基本重写硬件无关语义,跨代可移植
开发关注点寄存器、流水线、延迟、单核调度Tile 形状、数据局部性、块间依赖
调优空间极致性能,门槛极高兼顾快速开发 + 精细调优(Auto/Manual 双模式)
适合场景固化高性能算子、硬件底层开发新算子快速迭代、稀疏算子、大模型 FA/Mamba、自研 NPU 架构探索

2.3 形象类比

  • 传统 ISA(RISC-V / AscendC) = 给工人下达指令:搬一块砖、拧一颗螺丝
  • Tile ISA(PTO) = 给包工头下达指令:把这一整垛砖(Tile)搬到指定区域、与另一垛砖对齐加工;包工头(编译器)再拆解成工人能懂的细碎动作

2.4 Tile ISA 的核心特征

  1. 以 Tile 为一等公民
    所有计算对象是带 shape、dtype、存储位置属性的 Tile 对象,天然匹配 NPU 多级存储(全局内存 GM → L2 缓存 → 片上缓冲 UB),强化数据局部性,缓解 AI 芯片最头疼的访存墙问题。

  2. 虚拟层、硬件解耦,跨代可移植(最核心价值)
    Tile 指令语义固定,不绑定硬件核数、UB 大小、张量核深度、流水线延迟。同一份 PTO Tile ISA 代码可在 A2、A3、910B、950 上运行,编译器针对不同硬件做 Tiling 切分、资源映射、指令重排。

  3. 指令集覆盖完整的 AI 算子原语,不止 GEMM
    PTO Tile ISA 共 120+ 条指令,分为几大类:

    • 计算类:TMATMUL 矩阵乘、TADD/TMUL 逐元素、TREDUCE 归约、TBROADCAST 广播、TQUANT 量化、激活
    • 数据搬运类:TLOAD / TSTORE / TMOV(Tile 块搬运、布局变换)
    • 不规则访存:MGATHER、MSCATTER(稀疏、Embedding、KV Cache 场景)
    • 同步与通信:SYNCALL、Tile 级集合通信指令(AllReduce 等)
  4. 双模式:声明式 Auto + 手动精细 Manual

    • Auto 模式:只写计算语义,Tile 切分、搬运、同步交给编译器自动调度,快速验证
    • Manual 模式:显式指定 Tile 存储位置、搬运时机、指令发射顺序,保留极致性能调优入口
  5. 自带仿真语义,方便验证
    Tile ISA 有确定的块级语义,可单独写 CPU 模拟器(不依赖真实 NPU 硬件)先验证算子精度与依赖关系,再下放到硬件或 gem5 仿真器,调试链路友好。


三、PTO 算子详解

3.1 PTO 是什么

PTO(Parallel Tile Operation,并行 Tile 操作) 是昇腾 CANN 体系里一套面向 NPU AI Core 的 Tile 级虚拟指令集 / 算子编程范式,不是通用标准算子,而是昇腾生态专属的一层中间抽象层。

定位:介于上层框架算子(GEMM、Conv、Attention)和硬件原生指令之间的 Tile 编程语言 / ISA,专门用来写 NPU 高性能 Kernel。

  • Tile:把大张量切成分块(如 64×64、128×128),NPU 的脉动阵列、片上 SRAM 天然按 Tile 调度计算
  • PTO 指令集:矩阵乘 GEMM、GEMV、逐元素、归约、数据搬运、同步、跨核通信指令,合计 120+ 条
  • 配套 PyPTO:Python 前端,可 JIT 写 PTO 算子,编译到昇腾 NPU 的 AI Core

⚠️ 重点:PTO 不是行业通用标准,不是 RISC-V 自带,gem5 原生不支持 PTO,tinygrad 默认也没有 PTO 后端。

3.2 PTO 的核心优势

优势一:跨代硬件源码可移植(最核心)

传统 AscendC、CUDA kernel、手写 GEMM,硬件架构一变(910B → 910C → 950),片上 SRAM 大小、核数、流水线、指令时序变化,算子基本要重写、重调 Tiling 策略。

PTO 是虚拟 Tile ISA,硬件无关的 Tile 抽象层:

  • 算子源码只描述 Tile 级计算逻辑,不绑定硬件寄存器、硬件特定深度流水线
  • 同一份 PTO 算子源码可在 A2 / A3 / 950 系列复用,编译器后端针对不同硬件做指令发射、内存排布、流水线映射
  • 固定 Tile shape 下行为确定性,只开放 Tile 尺寸、指令序、缓存放置等调优维度,移植成本大幅下降
优势二:双模式开发,上手简单、上限高(Auto + Manual)
  1. Auto 自动模式:只写计算逻辑,编译器自动做 Tiling 切分、UB/GM/L2 内存搬运、依赖同步、流水线调度,适合快速开发验证,像写 PyTorch 一样
  2. Manual 手动模式:显式控制 Tile 存放位置、搬运时机、同步指令、发射顺序,精细控制片上缓存、掩盖访存延迟,压榨 NPU 算力上限

可渐进式调优:先 Auto 跑通精度,再局部切到 Manual 微调热点 Tile,不用一次性写全底层汇编。

优势三:Tile 原生抽象,天然适配 AI 访存特征,缓解 Memory Bound

大模型里很多算子不是单纯 GEMM(FA、MoE、RMSNorm、Mamba、DeltaNet、KV-cache 更新),属于混合计算 + 不规则访存 + 归约 + 广播:

  • 所有计算以 Tile 块为基本单元,契合 NPU 多级存储分层;框架自动推导 Tile 存储位置,按需插入搬运指令
  • 指令集覆盖全:GEMM/GEMV、逐元素、归约、广播、量化、稀疏访存、同步、片间通信,一套抽象覆盖 Transformer、状态空间模型、稀疏算子全链路
  • 支持 Tile mask、动态 shape,适合变长序列、稀疏 Attention

实测案例:FlashAttention、Gated DeltaNet(Mamba 变种)PTO 实现对比原生 torch_npu kernel,常见序列长度下加速 1.3~3 倍,Prefill 阶段模型端到端收益明显。

优势四:计算图原生优化友好,更容易做算子融合

PTO 是计算图驱动范式,算子表达是 Tile Graph:

  • 编译器可跨 Tile 做融合:量化、偏置、激活、转置、归约合并成一个 Megakernel,消除中间张量写回全局内存
  • 容易做流水线并行:计算、数据搬运、跨核通信重叠
  • 对上层框架友好:tinygrad、TorchNPU、MindSpore 可将 PTO 作为统一后端 IR;算子表达标准化,方便自动算子生成、自动搜优 Tiling 参数
优势五:自带仿真验证链路,降低调试门槛

PTO 支持 CPU 模拟器(SIM):

  • 算子代码不用上真实 NPU 板卡,在 Ubuntu 主机上直接跑功能仿真、校验精度、调试逻辑
  • 仿真模型保留 Tile、同步、数据搬运语义,与硬件行为对齐
优势六:异构集群扩展能力,内置 Tile 级通信原语

PTO 扩展指令集包含 Tile 粒度的片间通信、同步原语(SYNCALL 等):

  • 计算和通信可在同一个 Tile Graph 里编排,实现计算、通信流水重叠
  • 面向超节点、MoE 大模型分布式推理训练,Dispatch / Combine 这类通信密集算子更容易深度优化

3.3 PTO 小结

PTO 最大的价值不是单纯比 GEMM 更快,而是补齐了“高性能算子开发”中间层:底层硬件指令性能强但移植难、开发慢;上层框架 API 简单但性能天花板低;PTO 用 Tile 虚拟 ISA 做中间层,平衡了可移植性、开发效率、性能上限、编译优化空间。


四、PTO / Triton / Gemmini 编程模型对比

对比项PTO(Parallel Tile Operation)OpenAI TritonGemmini
核心定位昇腾 NPU AI Core 的 Tile 级中间指令/编程范式,面向自研脉动阵列 NPUGPU 上的 Tile 编程语言,替代手写 CUDA Kernel,面向 SIMT 架构 GPU开源 RISC-V 矩阵加速器硬件 IP,配套专用调用库/ISA 扩展,面向 RISC-V SoC
归属生态华为 CANN 闭源生态,昇腾专属开源(MIT),原生支持 NVIDIA GPU,AMD/Intel 逐步适配伯克利开源项目,可集成到 RISC-V,常搭配 gem5 仿真
抽象粒度Tile 块抽象,以矩阵分块为调度单元,内置片上 SRAM 搬运、同步、归约指令Tile 块抽象,基于 Program/Grid,线程块封装 Tile 计算硬件寄存器级抽象,提供矩阵乘指令扩展(RoCC),由 CPU 下发矩阵任务
目标硬件昇腾系列 NPU(达芬奇架构)NVIDIA GPU 为主,GPU 通用 SIMT 架构RISC-V CPU + 脉动阵列矩阵加速器(自研 NPU 原型)
编程前端PyPTO(Python)、PTO C 接口Python 前端,JIT 编译C / Spike / gem5 调用 API,RISC-V RoCC 自定义指令
核心优势深度贴合达芬奇 NPU 数据流,带宽/算力压榨极强,支持复杂算子融合上手简单,跨卡迁移,编译器自动做分块、访存优化,tinygrad 原生可对接完全开源,可在 gem5 中搭建仿真,适合自研 NPU 架构探索
短板限制闭源、绑定昇腾硬件,无法在 gem5 直接仿真,不能用于自研 RISC-V NPU 流片原型GPU 架构思维,调度模型不匹配脉动阵列 NPU,不适合做 NPU 架构探索可编程能力弱,没有高层 Tile 语言,算子融合需在编译器侧实现
和 GEMM 关系用来手写高性能 GEMM、Conv、Attention 内核用来手写高性能 GEMM、Conv 内核硬件本身就是 GEMM 加速单元,GEMM 是它的原生能力
和 tinygrad 关系tinygrad 无原生 PTO 后端,需要从零开发 lower 逻辑tinygrad 原生支持 Triton 后端,链路成熟tinygrad 需要新增后端,把计算图 lower 到 Gemmini RoCC 指令
和 gem5 关系无原生模型,ISA 不兼容,仅设计思路可参考gem5 没有 GPU 模型,仅算法思想参考原生适配 gem5 仿真,是 RISC-V NPU 仿真首选开源 IP
适合你的场景对标学习商用 NPU 的 Tile 调度设计思路如果后续做 GPU 算子优化、tinygrad 编译调试✅ 你当前路线:gem5 + RISC-V + 自研 NPU 仿真

五、PTO 与传统方案对比

方案抽象层级可移植性调优门槛融合能力适用
PTOTile 虚拟 ISA✅ 跨昇腾代际中(Auto 低 / Manual 高)强,原生 Tile Graph自定义 FA、Mamba、稀疏算子、新架构算子
原生 GEMM 库固化矩阵运算❌ 硬件绑定低,直接调用弱,算子边界固定标准矩阵乘
TritonBlock 级 IR有限(NPU/GPU 不互通)中高较好GPU 生态成熟,NPU 适配正在完善
AscendC 底层硬件指令❌ 硬件强绑定极高强,完全手写极致性能固化算子

六、完整编译链路串讲

下面用一张图展示「模型 → 算子拆解 → 三条不同编译链路」的整体关系:

PyTorch 模型

算子拆解
GEMM / Conv / Attention

路线A: 昇腾 NPU

路线B: 自研 RISC-V NPU 仿真

路线C: GPU

CANN 框架

PyPTO / PTO-ISA
Tile 级虚拟指令

昇腾 AI Core 硬件指令
达芬奇脉动阵列

tinygrad / MLIR

自定义 Tile ISA
借鉴 PTO 设计思想

自研 NPU 硬件指令
gem5 仿真验证

PyTorch / Triton

CUDA / Triton IR

GPU PTX 指令
SIMT 架构

三条路线说明

路线中间抽象目标硬件是否适合自研芯片仿真
路线 A(昇腾)PTO Tile ISA昇腾 NPU❌ 闭源绑定,只能参考设计思想
路线 B(你当前路线)自定义 Tile ISARISC-V + 自研 NPU✅ 完全开源,gem5 可仿真
路线 C(GPU)Triton / CUDANVIDIA GPU⚠️ 仅算法思想参考

与 gem5 / RISC-V 链路的关系

研究链路:tinygrad 算子编译 → Tile ISA(PTO 风格 IR)→ 后端编译器 → RISC-V NPU 硬件指令 → gem5 仿真

  • tinygrad:上层算子编译器,可以输出 Tile ISA 作为中间 IR
  • Tile ISA:中间标准抽象层,隔离算法算子逻辑和 NPU 硬件 RTL
  • gem5:仿真硬件,只需要实现「Tile ISA → 自研 NPU 硬件指令」的后端;硬件改了,上层算子代码不用大改

PTO 本身不能直接用于自研 RISC-V NPU,但它的 Tile 抽象、片上存储调度、数据流流水线设计思路是很好的参考范本。



参考与延伸

  • PTO 相关:昇腾 CANN 官方文档、PyPTO 开发者文档
  • Triton:https://github.com/triton-lang/triton
  • Gemmini:https://github.com/ucb-bar/gemmini
  • tinygrad:https://github.com/tinygrad/tinygrad
  • gem5:https://www.gem5.org/

注:本文为技术调研整理,PTO 具体指令细节以昇腾 CANN 官方文档为准;文中性能数据(1.3~3 倍加速)来自公开社区实测案例,供参考。核心内容有豆包生成。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐