版本兼容性说明

本文档详细说明 PTO-ISA 的版本兼容性策略、不同版本间的差异、平台支持情况以及迁移指南。

目录


1. 版本策略

1.1 语义化版本

PTO-ISA 遵循语义化版本规范(Semantic Versioning 2.0.0):

主版本号.次版本号.修订号 (MAJOR.MINOR.PATCH)

示例:v1.2.3
  ├─ 1: 主版本号
  ├─ 2: 次版本号
  └─ 3: 修订号

版本号递增规则

  • 主版本号(MAJOR):不兼容的 API 变更
  • 移除或重命名公共 API
  • 改变 API 行为语义
  • 修改数据结构布局
  • 示例:v1.x.x → v2.0.0

  • 次版本号(MINOR):向后兼容的功能新增

  • 添加新的 API 函数
  • 添加新的算子支持
  • 性能优化(不改变行为)
  • 示例:v1.2.x → v1.3.0

  • 修订号(PATCH):向后兼容的问题修正

  • Bug 修复
  • 文档更新
  • 内部重构(不影响 API)
  • 示例:v1.2.3 → v1.2.4

1.2 当前版本

  • 最新稳定版本:v1.0.0
  • 发布日期:2025-12-27
  • 支持状态:✅ 长期支持(LTS)

1.3 版本支持周期

版本类型 支持周期 说明
LTS(长期支持) 2 年 主要版本,提供完整支持和安全更新
稳定版 1 年 次要版本,提供 Bug 修复
开发版 3 个月 实验性功能,不保证稳定性

当前支持的版本: - v1.0.x(LTS):支持至 2027-12-27 - v0.9.x(稳定版):支持至 2026-06-27


2. 平台兼容性

2.1 硬件平台

平台 架构 支持状态 最低版本 推荐版本 备注
Ascend A2 910B1 ✅ 完全支持 v1.0.0 v1.0.0 24 核,512 KB L1/核
Ascend A3 910B2 ✅ 完全支持 v1.0.0 v1.0.0 24 核,512 KB L1/核
Ascend A5 910_9599 ✅ 完全支持 v1.0.0 v1.0.0 32 核,1 MB L1/核
CPU (x86_64) x86-64 ✅ 仿真支持 v1.0.0 v1.0.0 用于开发调试
CPU (AArch64) ARM64 ✅ 仿真支持 v1.0.0 v1.0.0 用于开发调试

平台特性对比

特性 A2 A3 A5
核心数 24 24 32
L1 容量/核 512 KB 512 KB 1 MB
最大 Tile 尺寸 16×512 16×512 16×1024
FP16 支持
BF16 支持
INT8 支持

2.2 操作系统

操作系统 版本 架构 支持状态
Ubuntu 20.04, 22.04 x86_64, aarch64 ✅ 完全支持
CentOS 7.6+, 8.x x86_64, aarch64 ✅ 完全支持
openEuler 20.03 LTS+ x86_64, aarch64 ✅ 完全支持
Kylin V10 x86_64, aarch64 ✅ 完全支持
Windows 10, 11 x86_64 ⚠️ 实验性支持

2.3 软件依赖

核心依赖

组件 最低版本 推荐版本 必需 说明
CANN 8.5.0 8.5.0+ 华为 AI 计算框架
CMake 3.16 3.20+ 构建系统
C++ 编译器 - - 见下表
Python 3.8 3.10+ ⚠️ 用于构建脚本和测试

C++ 编译器

编译器 最低版本 推荐版本 C++20 支持
GCC 7.3.0 13.0+ 13.0+
Clang 10.0 15.0+ 15.0+
MSVC 2019 (16.0) 2022 (17.0+) 2022+

可选依赖

组件 版本 用途
PyTorch 2.0+ 框架集成
torch_npu 2.0+ NPU 后端
TensorFlow 2.10+ 框架集成
ONNX Runtime 1.14+ 推理框架集成
Ninja 1.10+ 加速构建
ccache 4.0+ 编译缓存

2.4 框架兼容性

框架 版本 集成方式 支持状态
PyTorch 2.0+ torch_npu ✅ 完全支持
TensorFlow 2.10+ 自定义 Op ✅ 完全支持
ONNX Runtime 1.14+ 自定义 EP ✅ 完全支持
MindSpore 2.0+ 自定义算子 ⚠️ 实验性支持
PaddlePaddle 2.5+ 自定义算子 ⚠️ 实验性支持

3. API 兼容性

3.1 稳定 API(保证向后兼容)

以下 API 在主版本内保证向后兼容:

核心 Tile 操作

// ✅ 稳定 API
TLOAD(tile, global_tensor)
TSTORE(global_tensor, tile)
TADD(out, a, b)
TSUB(out, a, b)
TMUL(out, a, b)
TDIV(out, a, b)
TMATMUL(out, a, b)
TMATMUL_ACC(acc, a, b)

GlobalTensor 接口

// ✅ 稳定 API
GlobalTensor<T>(ptr)
GlobalTensor<T>(ptr, size)
GlobalTensor<T>(ptr, shape)

Event 同步机制

// ✅ 稳定 API
Event e;
TLOAD(tile, input, e);
WAIT(e);

基础数据类型

// ✅ 稳定 API
Tile<TileType::Vec, float, H, W>
Tile<TileType::Cube, half, H, W>
TileAcc<float, H, W>
TileLeft<half, H, K>
TileRight<half, K, W>

3.2 实验性 API(可能变更)

以下 API 标记为实验性,可能在未来版本中变更:

// ⚠️ 实验性 API
#pragma pto_fusion  // 自动融合(未来版本)
#pragma pto_autotune  // 自动调优(未来版本)

3.3 已废弃 API

API 废弃版本 移除版本 替代方案
TLOAD_OLD v0.9.0 v2.0.0 TLOAD
Event<T> v0.9.0 v2.0.0 Event

4. 版本历史

v1.0.0(2025-12-27)- LTS

新特性: - ✨ 首个稳定版本发布 - ✨ 完整的 Tile 编程模型 - ✨ 支持 A2/A3/A5 平台 - ✨ PyTorch/TensorFlow 集成 - ✨ 完整的文档和示例

改进: - 🚀 性能优化:相比 v0.9 提升 20% - 📝 完善的 API 文档 - 🧪 完整的测试覆盖

Bug 修复: - 🐛 修复 L1 内存计算错误 - 🐛 修复 Event 同步问题 - 🐛 修复 Tile 对齐检查

v0.9.0(2025-06-15)- Beta

新特性: - ✨ Beta 版本发布 - ✨ 基础 Tile 操作 - ✨ 实验性 A5 支持

已知问题: - ⚠️ A5 平台性能未优化 - ⚠️ 部分 API 可能变更


5. 迁移指南

5.1 从 v0.9.x 迁移到 v1.0.x

主要变更

1. Tile 构造函数参数顺序调整

// ❌ v0.9.x(已废弃)
Tile<float, 16, 256, TileType::Vec> tile;

// ✅ v1.0.x(新语法)
Tile<TileType::Vec, float, 16, 256> tile;

2. Event 模板参数简化

// ❌ v0.9.x(已废弃)
Event<TileType::Vec> e;

// ✅ v1.0.x(新语法)
Event e;  // 不再需要模板参数

3. TLOAD/TSTORE 语法统一

// ❌ v0.9.x(旧语法)
TLOAD(tile, input.data(), size);

// ✅ v1.0.x(新语法)
TLOAD(tile, GlobalTensor(input.data(), size));

4. 指令重命名

v0.9.x v1.0.x 说明
TADD_S TADDS 标量加法
TMUL_S TMULS 标量乘法
TMATMUL_ACCUM TMATMUL_ACC 矩阵乘累加

迁移步骤

步骤1:更新依赖

# 更新 PTO-ISA
git pull origin main
git checkout v1.0.0

# 更新 CANN
# 确保 CANN >= 8.5.0

步骤2:修改代码

# 使用自动迁移脚本
python scripts/migrate_v0_to_v1.py --input src/ --output src_v1/

# 或手动修改
# 1. 替换 Tile 构造函数
# 2. 移除 Event 模板参数
# 3. 更新 TLOAD/TSTORE 调用
# 4. 重命名指令

步骤3:重新编译

# 清理旧构建
rm -rf build/

# 重新配置和编译
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)

步骤4:测试验证

# 运行测试
ctest --test-dir build --output-on-failure

# 验证数值正确性
./build/my_operator --verify

# 性能基准测试
./build/my_operator --benchmark

5.2 兼容性检查清单

迁移完成后,请检查以下项目:

  • [ ] 所有 Tile 构造函数已更新
  • [ ] Event 模板参数已移除
  • [ ] TLOAD/TSTORE 使用 GlobalTensor
  • [ ] 指令名称已更新
  • [ ] 编译无警告
  • [ ] 所有测试通过
  • [ ] 数值正确性验证通过
  • [ ] 性能无明显下降

6. 已知问题

v1.0.0 已知问题

问题1:A5 平台部分算子性能未达最优 - 影响:部分算子在 A5 上性能低于预期 - 状态:计划在 v1.1.0 修复 - 临时方案:使用 A3 平台或手动优化

问题2:Windows 平台编译警告 - 影响:MSVC 编译时产生警告(不影响功能) - 状态:计划在 v1.0.1 修复 - 临时方案:忽略警告或使用 MinGW

问题3:PyTorch 2.2+ 兼容性 - 影响:PyTorch 2.2+ 部分 API 变更 - 状态:计划在 v1.0.1 修复 - 临时方案:使用 PyTorch 2.0-2.1


7. 兼容性测试

7.1 测试矩阵

我们在以下配置上进行了完整测试:

平台 OS 编译器 CANN 状态
A2 Ubuntu 20.04 GCC 13 8.5.0 ✅ 通过
A3 Ubuntu 22.04 GCC 13 8.5.0 ✅ 通过
A5 openEuler 20.03 GCC 13 8.5.0 ✅ 通过
CPU Ubuntu 22.04 Clang 15 - ✅ 通过

7.2 运行兼容性测试

# 克隆仓库
git clone https://github.com/your-org/pto-isa.git
cd pto-isa

# 运行兼容性测试套件
python scripts/test_compatibility.py \
  --platform A3 \
  --cann-version 8.5.0 \
  --compiler gcc-13

# 查看测试报告
cat compatibility_report.txt