ops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。
ops-tensor
🔥 最新动态
- [2026/04] 新增
tensor_api、Blaze(Basic Linear Algebra optimiZed Engine)公共模块,分别为算子开发提供张量结构抽象与高性能线性代数加速能力。 - [2026/03] 完成项目基础架构搭建,支持 Add 算子实现和测试,支持一键编译、测试和打包。
- [2026/03] 建立完整的测试框架,支持单元测试、超时控制和自动化测试统计。
- [2026/03] 实现标准化的打包流程,生成 .run 安装包,支持 install/uninstall/upgrade 完整生命周期管理。
🚀 概述
ops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。
主要特性
- ✅ 模块化设计 - 支持动态添加算子模块,每个算子独立开发、编译和测试
- ✅ 公共模块 -
tensor_api提供张量结构抽象,Blaze提供高性能线性代数加速能力,作为算子开发的统一基础 - ✅ 标准 CMake 构建 - 跨平台编译支持,统一的构建流程
- ✅ 完整测试体系 - 基于自定义测试框架,支持自动化测试和超时控制
- ✅ 便捷打包 - 一键生成 .run 安装包,支持 install/uninstall/upgrade
- ✅ 版本管理 - 安装信息记录和版本追踪,支持升级管理
- ✅ 轻量高效 - 简洁的架构设计,避免过度工程化
📝 版本配套
当前仓库已验证通过的 CANN Toolkit 如下:
| CANN 版本 | 发布时间 | 分支 |
|---|---|---|
| CANN 9.0.0-beta.2 | 2026/03/30 |
master |
请根据实际 CPU 架构,从上述链接目录中自行选择对应的 .run 安装包。
toolkit 安装包文件名格式如下:
Ascend-cann-toolkit_${cann_version}_linux-aarch64.runAscend-cann-toolkit_${cann_version}_linux-x86_64.run
-
安装社区版 CANN Toolkit
# 确保安装包具有可执行权限 chmod +x Ascend-cann-toolkit_${cann_version}_linux-${arch}.run # 安装命令 ./Ascend-cann-toolkit_${cann_version}_linux-${arch}.run --install --force --install-path=${install_path}${cann_version}:表示 toolkit 安装包版本号,需满足上文的最低版本要求。${arch}:表示 CPU 架构,如aarch64、x86_64。${install_path}:表示指定安装路径,默认安装在/usr/local/Ascend目录。
-
配置环境变量
安装完成后,请先执行:
source ${install_path}/cann/set_env.sh请将
${install_path}替换为 toolkit 的实际安装目录,例如/usr/local/Ascend或${HOME}/Ascend。
⚡️ 快速入门
编译与测试
详细的 build.sh 参数说明请参考 build 参数说明。
# 编译所有算子(默认 8 线程)
./build.sh
# 编译指定算子
./build.sh --ops=add
# 编译并运行测试
./build.sh --run
# 编译并打包成 .run 文件
./build.sh --pkg
# 查看完整帮助信息
./build.sh --help
安装
# 标准安装(需要 root 权限)
sudo ./cann-950-ops-tensor_9.0.0_linux-*.run --full
# 查看安装包信息
./cann-950-ops-tensor_9.0.0_linux-*.run --help
# 安装到自定义路径
sudo ./cann-950-ops-tensor_9.0.0_linux-*.run --full --install-path=/opt/ascend
# 卸载
sudo ./cann-950-ops-tensor_9.0.0_linux-*.run --uninstall
# 升级
sudo ./cann-950-ops-tensor_9.0.0_linux-*.run --upgrade
📖 项目说明
支持的算子
当前支持的算子列表:
| 算子名称 | 描述 | 状态 |
|---|---|---|
| Add | 张量加法运算 | ✅ 已实现 |
更多算子正在持续开发中...
SoC 支持矩阵
| SoC 型号 | SOC_VERSION | 支持状态 |
|---|---|---|
| Ascend950 | ascend950dt_9595 | ✅ 默认支持 |
| Ascend910B | ascend910b3 | ❌ 暂不支持 |
| Ascend910_93 | ascend910_93 | ❌ 暂不支持 |
| Ascend910 | ascend910 | ❌ 暂不支持 |
| Ascend310P | ascend310p | ❌ 暂不支持 |
| Ascend310B | ascend310b | ❌ 暂不支持 |
公共模块
ops-tensor 通过模块化的公共代码为各算子提供统一的基础能力,算子按需调用:
| 模块 | 路径 | 形态 | 简介 |
|---|---|---|---|
tensor_api |
include/tensor_api/ |
header-only | 底层 Tensor 抽象(Layout / Shape / Coord 等类型与工具),用于在 Kernel 端构建结构化的张量视图 |
Blaze |
include/blaze/ |
header-only | 高性能线性代数加速引擎(Basic Linear Algebra Optimized Engine),服务于使用到矩阵乘计算的相关算子(Matmul、GroupedMatmul、MC2 等),提供分层的 Kernel / Block / Tile 抽象与配套 Policy / Epilogue / Utils。详见 include/blaze/README.md |
🔍 目录结构
ops-tensor/
├── cmake/ # CMake 配置文件
│ ├── func.cmake # 公共函数(算子注册等)
│ ├── init_env.cmake # 环境初始化
│ ├── variables.cmake # 变量定义
│ ├── package.cmake # 打包配置
│ ├── makeself_built_in.cmake # .run 包生成脚本
│ └── third_party/ # 第三方依赖
├── include/ # 公共头文件
│ ├── cann_ops_tensor.h # API 头文件
│ ├── cann_ops_tensor_types.h # 类型定义头文件
│ ├── tensor_api/ # 底层 Tensor 抽象(Layout/Shape/Coord 等)
│ └── blaze/ # Blaze 高性能线性代数加速引擎
├── scripts/ # 脚本目录
│ ├── check_build_dependencies.py # 依赖检查脚本
│ ├── generate_version_info.py # 版本信息生成
│ └── package/ # 打包相关脚本
│ ├── common/ # 通用打包工具
│ └── cfg/ # 打包配置
├── lib/ # 基础设施库(算子开发依赖)
│ ├── core/ # 核心模块
│ │ ├── handle.cpp/hpp # 句柄管理
│ │ ├── operation_descriptor.cpp/hpp # 算子描述符
│ │ ├── plan.cpp/hpp # 执行计划
│ │ ├── plan_preference.cpp/hpp # 计划偏好
│ │ └── tensor_descriptor.cpp/hpp # 张量描述符
│ ├── elementwise/ # 元素算子基础实现
│ │ ├── elementwise.cpp/hpp
│ │ └── elementwise_binary.cpp/hpp
│ ├── utils/ # 工具函数
│ │ ├── type_utils.hpp # 类型工具
│ │ ├── utils.cpp # 通用工具
│ │ └── validation.cpp/hpp # 验证工具
│ └── CMakeLists.txt
├── src/ # 源代码目录
│ ├── add/ # Add 算子实现
│ │ ├── add_solution.cpp # 解决方案实现(Tiling 计算、解决方案注册)
│ │ ├── add_kernel.cpp # Kernel 端实现
│ │ ├── arch35/ # 架构特定代码(可选)
│ │ │ └── add_struct.h # 数据结构定义(也可定义在 .cpp 中)
│ │ ├── tests/ # 算子测试
│ │ │ ├── add_test.h
│ │ │ └── add_test.cpp
│ │ └── CMakeLists.txt
│ ├── ... # 其他算子
│ └── CMakeLists.txt
├── tests/ # 测试框架
│ ├── test_common.h # 测试框架头文件
│ ├── test_common.cpp # 测试框架实现
│ ├── test_elementwise.cpp # 元素算子测试辅助
│ ├── all_tests.cpp.in # 测试入口模板
│ └── CMakeLists.txt
├── build.sh # 编译脚本
├── install_deps.sh # 依赖安装脚本
├── CMakeLists.txt # 主 CMake 配置
├── version.cmake # CMake 版本配置
├── version.info # 版本信息
└── README.md # 本文件
说明:仓库代码按角色分为三类:
- 框架代码:
lib/- 算子运行框架(编译产物),提供句柄、执行计划、算子/张量描述符、参数验证、解决方案注册等基础设施,所有算子链接依赖
- 公共模块(详见上文「公共模块」小节):
include/tensor_api/- 底层 Tensor 抽象(header-only)include/blaze/- 矩阵乘相关算子的高性能加速引擎(header-only),详见include/blaze/README.md
- 算子目录(
src/<op>/):<op>_solution.cpp- 解决方案实现(Tiling 计算、内存管理、解决方案注册)<op>_kernel.cpp- Kernel 核函数实现arch35/<op>_struct.h- Tiling 数据结构(可选,也可定义在 solution.cpp 中)arch35/目录是可选的,仅在需要区分不同 SOC 架构时使用tests/目录强烈推荐,但不是必需的
🛠️ 开发指南
添加新算子
详细的算子开发指南请参考 算子开发指南,包括:
- 完整的目录结构说明
- 解决方案实现模板
- Tiling 数据结构定义
- 解决方案注册机制
- 完整开发流程
快速开始:
- 创建目录
mkdir -p src/my_op/arch35 (可选)
mkdir -p src/my_op/tests
- 编写算子实现
创建
src/my_op/my_op_solution.cpp和src/my_op/my_op_kernel.cpp,包含:
- 解决方案部分:Tiling 计算、内存管理、解决方案注册
- Kernel 部分:核函数实现
- 创建 CMakeLists.txt
register_operator(NAME my_op ARCH_DIR arch35)
-
编写测试(推荐) 参考 测试编写指南
-
编译验证
./build.sh --ops=my_op --run
完整示例参考 src/add/ 目录。
编写测试
ops-tensor 提供了轻量级、自动化的测试框架。详细的测试编写指南请参考 测试编写指南,包括:
- 测试框架特性
- 测试文件结构
- 核心宏和函数说明
- 完整编写步骤和示例
- 最佳实践和常见问题
💬 相关信息
- 许可证: CANN Open Software License Agreement Version 2.0
- 安全声明: SECURITY.md
- 贡献指南: CONTRIBUTING.md
- 所属 SIG: CANN Community
🤝 联系我们
本项目功能和文档正在持续更新和完善中,欢迎您关注最新版本。
- 问题反馈: 通过 Issues 提交问题
- 社区互动: 通过 Discussions 参与交流
- 技术专栏: 通过 Wiki 获取技术文章