PTO Tile Lib

PTO Tile Library

PTO(Parallel Tile Operation)是昇腾 CANN 定义的一套面向 tile 编程的虚拟 ISA。本仓库提供 PTO Tile 指令的实现、示例、测试与文档,帮助开发者在不同昇腾代际之间更平滑地迁移和优化算子。

License Platform Docs

📰 新闻

  • 🎉 2025-12-27:PTO Tile Library 正式开源发布。
  • 2026-01-30:新增合轴类指令、MX 指令。
  • 🚀 2026-02-28:新增卷积类指令、量化类指令、核间通信类指令。
  • 🔥 2026-03-30:支持昇腾 A5 芯片,新增异步通信指令、CostModel 性能仿真。
  • 🛠️ 2026-04-02:本地工程链路进一步完善,补充了 pre-commit 检查、文档构建校验与 CPU-SIM 验证能力。

🎯 项目定位

PTO ISA 基于昇腾底层硬件与软件抽象,定义 90+ 条标准 tile 指令,用更高层的 tile 编程模型桥接不同代际之间的实现差异。它的目标不是隐藏底层能力,而是在提升抽象层级的同时保留性能调优空间。

  • 统一跨代 tile 抽象:降低不同 Ascend 代际之间的迁移成本。
  • 兼顾可移植性与性能:在固定 tile shape 下保证正确工作,同时保留 tile size、tile shape、指令顺序等调优能力。
  • 面向框架、算子与工具链:可作为上层框架、算子实现和编译工具链的共同接口。
  • 支持持续扩展:当前已定义 90+ 条标准操作,并持续补充实现与生态集成。

除计算与数据搬运指令外,PTO ISA 还提供了面向 NPU 间数据传输与同步的通信扩展指令集,覆盖点对点通信、信号同步和集合通信三类能力。

这些通信原语延续了与计算指令一致的 tile 级抽象和跨平台设计,并可驱动昇腾上的多种数据搬移硬件引擎,帮助用户构建计算与通信深度融合的 kernel。通信 ISA 入口见 docs/isa/comm/README_zh.md

目前,PTO 指令已集成到以下框架中:

✨ 核心特性

  • 统一的 Tile ISA 抽象:用标准 PTO 指令描述 tile 级计算与数据流。
  • 跨代迁移与性能调优兼顾:既提升可移植性,也保留足够的底层控制能力。
  • Auto / Manual 双模式开发路径:先快速验证逻辑,再逐步深入优化实现。当前 Auto Mode 主要可用于 CPU 仿真。
  • CPU Simulator 支持:支持在 CPU 上进行功能验证与开发调试。
  • 覆盖关键编程要素:支持 tile shape、tile mask、事件同步、固定功能单元与流水线建模。
  • 文档、测试、示例齐全:提供 ISA 文档、开发文档、测试脚本和性能案例。

👥 适用人群

PTO Tile Lib 主要面向以下开发者:

  • 直接对接昇腾硬件的框架或编译器后端开发者
  • 需要跨平台迁移与复用实现的高性能算子开发者
  • 需要显式控制 tile、buffer 与 pipeline 的性能优化工程师

🚀 快速开始

环境准备

  • CPU 路径:需要 Python、CMake 和支持 C++20 的编译器,适合跨平台快速验证。
  • NPU 路径:需要 Linux 环境与 Ascend CANN toolkit,适合在昇腾硬件或模拟器上运行。
  • 更详细的环境部署说明请参见:快速开始指南

编译与运行

# CPU Simulator(建议第一步)
python3 tests/run_cpu.py --clean --verbose

# 运行 GEMM demo
python3 tests/run_cpu.py --demo gemm --verbose

# 运行 Flash Attention demo
python3 tests/run_cpu.py --demo flash_attn --verbose

# 运行单个 ST 用例
python3 tests/script/run_st.py -r sim -v a3 -t tadd -g TADDTest.case_float_64x64_64x64

# 一键构建并运行推荐测试
./build.sh --run_all --a3 --sim

# 在代码根目录下打 whl 包,产物位于 dist/ 目录
python3 -m build --wheel

更完整的构建、测试和脚本说明请参见:快速开始指南测试说明

推荐样例

推荐上手路径

  1. 从简单示例开始,理解 PTO 指令如何组织 tile 级计算与数据搬运。
  2. 在 CPU 仿真中验证功能与正确性,建立对指令语义和结果的直观认知。
  3. 将代码移植到昇腾硬件上验证正确性并采集性能数据。参见 msprof 工具
  4. 定位性能瓶颈(CUBE Bound / MTE Bound / Vector Bound),开始优化与调参。参见 性能优化

本仓库也展示了标准 tile 操作如何通过模板参数映射到不同流水线实现:

🗂️ 文档导航

ISA 与编程模型

开发与优化

📊 示例与性能参考

GEMM

GEMM 性能参考(Ascend A3,24 核)

Flash Attention

Ascend 910B2 多核对比,基线为 torch_npu

序列长度 PTO 时间 (us) torch_npu 时间 (us) PTO TFLOPS torch_npu TFLOPS PTO 加速比
1024 20.960 58.461 25.61 9.18 2.79x
2048 32.461 70.801 66.16 30.33 2.18x
4096 88.902 118.302 96.62 72.61 1.33x
8192 292.626 353.147 117.42 97.30 1.21x
16384 909.058 1118.462 151.19 122.88 1.23x
32768 3262.645 3646.173 168.50 150.78 1.12x

Flash Attention 910B2 PTO vs torch_npu

通信指令带宽

该示例在 Ascend A2/A3 上测量点对点远程读带宽,对比 TGET(同步,经 UB 中转)与 TGET_ASYNC(异步,经 DMA 引擎直接传输)的表现。

GEMM AllReduce 通算融合

该示例展示了如何在同一个算子流水线中融合 PTO 通信原语与计算 kernel,实现 GEMM 与 AllReduce 的重叠执行。

🖥️ 平台支持

  • Ascend A2(Ascend 910B)
  • Ascend A3(Ascend 910C)
  • Ascend A5(Ascend 950)
  • CPU(x86_64 / AArch64)

更多细节请参考 include/README_zh.md

🛣️ 路线图

未来计划发布的特性:

功能 描述 范围 进度 / 完成时间
PTO Auto Mode BiSheng 编译器支持:自动分配 tile buffer 并插入同步。 编译器 / 工具链 持续演进
PTO Tile Fusion BiSheng 编译器支持:自动融合 tile 操作。 编译器 / 工具链 持续演进
PTO-AS PTO ISA 的字节码(Byte Code)支持。 编译器 / 工具链 持续演进
卷积扩展 PTO ISA 对卷积 kernel 的支持。 ISA 扩展 持续演进
集合通信扩展 新增支持 Ccu 及 Roce 异步通信指令,新增 TPREFECTH(AIV 直驱)通信指令。 通信 ISA 扩展 2026 Q2
系统调度扩展 PTO ISA 对 SPMD/MPMD 编程的调度支持。 ISA 扩展 规划中
微指令 支持用户通过微指令表达高性能算子,同时提供基础的高性能微指令库。 ISA 扩展 / 算子开发 2026 Q2
基础指令 进一步优化 A5 指令性能,新增 Pooling 相关基础指令,并增强卷积、量化、Fixpipe 类指令能力。 ISA 扩展 2026 Q2
CostModel 支持 A5 指令的 CostModel 性能仿真。 工具链 / 性能建模 2026 Q2
CPU-SIM CPU-SIM 随指令增强同步构建。 CPU 仿真 2026 Q2

🗃️ 目录结构

关键目录如下:

├── include/                     # PTO 对外头文件与接口
│   └── pto/                     # 公共类型、ISA 接口、CPU/NPU 实现
├── kernels/                     # kernel 与算子实现
│   ├── manual/                  # 手工优化实现与性能示例
│   └── custom/                  # 自定义算子示例
├── docs/                        # ISA、编程模型、快速开始与文档站点源文件
│   ├── isa/                     # 指令参考与分类索引
│   ├── coding/                  # 开发与性能优化文档
│   ├── assembly/                # PTO-AS 汇编语法与规范
│   └── mkdocs/                  # MkDocs 文档构建配置与源文件
├── demos/                       # Auto Mode、baseline 与 torch_jit 示例
├── tests/                       # CPU / NPU 测试、脚本与测试入口
│   ├── cpu/                     # CPU 仿真测试
│   ├── npu/                     # 按 SoC 拆分的 NPU 测试
│   └── script/                  # 测试构建与运行脚本
├── scripts/                     # 构建、安装与发布脚本
├── cmake/                       # CMake 公共配置与打包逻辑
├── build.sh                     # 一键构建与运行入口脚本
└── CMakeLists.txt               # 顶层 CMake 配置

ℹ️ 相关信息

  • 贡献指南:参与项目开发与提交流程
  • 安全与漏洞披露:安全问题反馈流程
  • 版本说明:版本更新与发布记录
  • 许可证:CANN Open Software License Agreement Version 2.0
  • PyPTO:PTO 生态中的上层编程框架
  • PTOAS:面向 PTO 工作流的汇编器与编译后端
  • pto-dsl:面向 PTO 的 Python 前端与 JIT 工作流探索
  • FAQ:常见问题与解决方案

📬 联系我们

  • 问题反馈:通过仓库 Issues 提交问题
  • 功能建议:通过仓库 Issues 或讨论区反馈需求
  • 贡献代码:通过 Pull Request 参与项目贡献