手搓 Ascend C 算子太累?试试 ATVC 模板库——个人开发者的一点体验分享

仓库地址:https://gitcode.com/cann/atvc

写在前面

最近在折腾昇腾(Ascend)NPU 上的算子开发。用原生 Ascend C 写一个 Vector 算子,除了核心计算逻辑,还得自己搞定数据搬入搬出、Tiling 切分、多核调度这些底层活儿,一个简单算子写下来动辄几百行,对个人开发者实在不太友好。

偶然发现 CANN 官方在 GitCode 上开源了一个项目——ATVC(Ascend C Templates for Vector Compute),用了一段时间,感觉确实省了不少事,分享给大家。

ATVC 是什么

简单说,ATVC 是一套用 Ascend C API 搭建的 C++ 模板头文件集合,专门用于快速开发典型的 Vector 算子。它的思路是:

  • 把算子开发流程中的计算实现解耦成可自定义的模块
  • 数据搬入搬出等底层通用操作、通用 Tiling 计算,模板内部已经封装好
  • 开发者只需要选一个匹配的模板,填上核心计算逻辑,Kernel 侧开发就基本完成了。

官方给出的数据是:相比传统 Ascend C 开发方式,效率可以提升 3~5 倍。从我自己的体验看,最大的收益是不用手写 Tiling 就能拿到不错的性能,这块通常是新手最容易翻车的地方。

上手体验

环境要求不复杂,支持 Ascend 910B / 910C,装好 CANN toolkit 后三步就能跑起来:

# 1. 拉代码
git clone https://gitcode.com/cann/atvc.git

# 2. 编译(在仓库根目录)
bash build.sh --pkg

# 3. 跑官方自带的 add 样例验证环境
cd examples
bash run_examples.sh add

看到 Accuracy verification passed. 就说明环境和算子都没问题了。仓库里的 examples 目录 还有其他算子样例可以参考,照着抄一遍基本就能理解模板的用法。

想跑 UT 的话也很简单:bash build.sh -u,不需要额外搭测试框架(想看覆盖率再加 --cov,依赖 lcov)。

一点个人看法

适合谁:

  • 想快速产出典型 Vector 算子的个人开发者 / 小团队;
  • 刚入门 Ascend C、被 Tiling 劝退的新手;
  • 需要快速验证想法原型的场景。

需要注意的:

  • 目前面向的是典型 Vector 算子,特别定制化、非典型的场景可能还是得手写;
  • 需要真实的 910B/910C 硬件环境,纯 CPU 仿真环境跑不了样例。

总体来说,ATVC 把 Ascend C 算子开发的门槛拉低了不少,尤其"模板 + 只写核心逻辑"的模式,对个人开发者非常友好。项目 2025 年 11 月才首次上线,还在活跃开发中,感兴趣的建议先 Star 一个:

https://gitcode.com/cann/atvc

文档方面,官方提供了快速入门编程指南,跟着走基本不会踩坑。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐