这里整理 Ascend C 算子开发中的优化方法、代码示例和实验对照。内容来自昇腾 AI 创新大赛——算子挑战赛 S9 赛季的开发实践,实验环境主要为 Ascend 910B4、CANN 8.5.0。
文章面向已经接触 Ascend C 的开发者。每篇独立交代赛题要求和实验背景,再讨论地址布局、分核、UB 分配、流水及测量结果。成功和未获得收益的尝试都会保留,方便判断一种方法在什么条件下值得采用。
| 文章 | 主要内容 | 配套材料 |
|---|---|---|
| Ascend C 算子优化入门:数据搬运、分核与 Tiling | 以 Concat 为例,从地址关系推导任务划分、缓冲区容量和流水设计 | 布局示例 · 分核与容量示例 · 实验数据 |
后续计划讨论实现方案的切换,以及 Concat 的 UB 生命周期复用与分组优化。完成的正文会加入上表。
示例只使用 Python 标准库,Python 3.10 及以上版本即可运行,不需要 NPU 或 CANN。它们用于检查文章中的地址关系与容量计算,不模拟设备流水,也不测量算子性能。
git clone https://github.com/Gemo555/ascend-c-optimization-notes.git
cd ascend-c-optimization-notes
python examples/concat_layout.py
python examples/tiling_budget.py
python benchmarks/concat-grouping/recompute.py仓库的完整检查入口:
python scripts/check_repository.py该命令运行示例、复算历史数据,并检查 Markdown 本地文件链接。推送和 Pull Request 会触发同样的 GitHub Actions 检查。
Concat 分组实验提供四次完整运行的计时摘录与汇总,可以复算正文的中位数和耗时合计。这些是 2026 年 9 月的本地历史测量,不是新的赛事平台成绩。仓库未包含原实验的完整算子工程和输入集,因此不能据此重跑并复现相同的绝对耗时。
文章正文、可运行示例和历史测量分别保存在 articles/、examples/ 和 benchmarks/。代码中的合成输入会明确标注,不作为真实设备实验数据。
发现公式、代码或结论有问题,可以提交 Issue 或 Pull Request。反馈实验差异时,请附上芯片、CANN 版本、输入配置、计时方法,以及能够触发问题的最小示例。具体约定见 CONTRIBUTING.md。
AI 参与了原项目的代码实现、实验分析与文章整理。文中的性能结论以保留的代码和实验记录为依据。