- CANN
- Ascend
- 人工智能
- 任务调度
【免费下载链接】runtime
本项目提供CANN运行时组件和维测功能组件。
导读
本文档定义了一套面向 CANN Runtime 开源仓库的断点记录格式(Blockpoint Format),用于在模拟新手走通任意 aclnn 预置算子(如aclnnAdd、aclnnMatMul)完整调用流程时,标准化地记录每一个"资料缺失或不足"的瞬间。断点分析的价值在于:它不是评估"理论上可能存在的文档缺陷",而是捕捉开发者实际会撞上的真实阻塞时刻。读完本文,你将掌握断点记录模板的完整字段体系、三种问题类型与三级影响程度的判定标准、衔接缺口的特别处理流程,以及如何将断点记录沉淀为可执行的整改清单,反哺 Runtime 仓库的 docs/ 与 example/ 建设。
一、断点记录在分析流程中的定位
1.1 断点分析的背景
CANN(Compute Architecture for Neural Networks)Runtime 是昇腾平台的运行时组件,为开发者提供设备管理、内存管理、Stream/Context 管理等底层运行时 API。对于想快速使用 CANN内置算子(而不是编写 AscendC 自定义核函数)的开发者,实际调用路径是aclnn 预置算子路径:通过aclnnXxxGetWorkspaceSize→aclnnXxx的两段式接口完成计算。
断点分析模拟的是这样一类角色(详见 角色画像):
- 熟练掌握 C/C++ 与 CMake,理解 Host/Device 分离与异步执行的基本概念;
- 不了解CANN Runtime API 的具体用法,也不了解 Device-Context-Stream 编程模型;
- 唯一的学习来源是 Runtime 仓库内的
docs/与example/。
因此,断点记录的核心使命是:如实记录这个角色在每一步"我卡住了,不知道怎么往下走"的时刻,并为每一个卡点给出责任归属与整改方向。
1.2 断点记录在整个 Skill 中的作用
断点记录格式服务于 cann-runtime-blockpoint-analysis-aclnn Skill 的完整分析流程(Step 1 环境准备 → Step 10 验证包编译运行)。在该流程中,断点记录承担三类职责:
| 职责 | 说明 |
|---|---|
| 过程证据 | 每一步记录"资料支撑情况"与"资料来源",保证分析的每一步都有据可查 |
| 问题分类 | 为每个卡点判定责任归属(Runtime 缺陷 / 外源知识缺失 / 体验问题),为整改提供依据 |
| 闭环输入 | 断点汇总表直接驱动整改 TodoList(阻塞点 → P0,优化点 → P1),并用于生成代码完成度统计 |
二、标准格式:断点记录模板
每遇到一个资料缺失或不足的问题,按以下格式记录:
+---------------------------------------------------------------------+ | 断点 #N | | 问题类型:Runtime 缺陷 / 衔接缺口 / 体验问题 | | 发生步骤:Step X - 步骤名称 | | 问题描述:我在尝试做什么,遇到了什么障碍 | | 查找过程:我在哪些文件中查找过(列出具体路径) | | Runtime 文档中的相关内容:有/无(若有,覆盖了什么,遗漏了什么) | | quickstart 示例中的相关内容:有/无(若有,覆盖了什么,遗漏了什么) | | 缺失资料:具体缺少哪个文档 / 哪个 API 的说明 | | 影响程度:阻塞(无法继续)/ 半阻塞(靠猜测勉强推进)/ 不阻塞 | | [推测]:根据类似框架经验的猜测(标注为推测,不计入产出) | | 期望补充:理想情况下该有什么资料,建议由哪方补充 | +---------------------------------------------------------------------+模板要点:
- 断点编号(
断点 #N)与发生步骤(Step X - 步骤名称)用于将断点精确定位到分析流程中的位置,方便后续生成"断裂地图"——以文本图示展示 Step 1→8 全链路的断点分布(✅顺畅 /🔴阻塞点 /🟡优化点 /📦外源知识缺失); - 问题描述使用第一人称叙述,还原真实探索路径(如"我在尝试做什么,遇到了什么障碍");
- [推测] 字段允许记录基于类似框架经验(如 PyTorch、CUDA)的猜测,但必须显式标注为推测,不计入代码产出,推测性代码一律用
[UNKNOWN: 原因]占位。
三、字段说明与判定标准
3.1 问题类型:三类问题归属
| 类型 | 含义 | 适用场景 |
|---|---|---|
| Runtime 缺陷 | 问题完全在 Runtime 仓库责任范围内 | 基础 API 文档缺失、示例不完整、错误码未说明等 |
| 衔接缺口 | aclnn 算子库与 Runtime 交界处,仓库文档未完整覆盖 | Tensor/Scalar API 文档、workspace 机制、aclnn 头文件/库文件说明等 |
| 体验问题 | 不阻塞功能,但影响开发效率或学习体验 | 文档组织混乱、缺少导航、quickstart 说明不足等 |
需要特别注意的是:在 Skill 的"卡点判定规则(责任归属)"中,三类问题被进一步细化为更严格的责任边界——Runtime 仓与非 Runtime 仓的职责边界明确划分,不设灰色地带:
- 属于Runtime 仓(记录为 Runtime 缺陷):
aclInit/aclrtSetDevice/aclrtCreateStream等初始化与设备管理 API、内存分配/拷贝/释放 API、aclrtSynchronizeStream/aclrtDestroyStream等同步与销毁 API、Runtime 在 CANN 软件栈中的位置说明; - 属于非 Runtime 仓(记录为外源知识缺失,不计入 Runtime 整改项):两段式调用范式(GetWorkspaceSize → Execute)、workspace / executor 概念、
aclCreateTensor/aclCreateScalar用法、aclnnXxxGetWorkspaceSize/aclnnXxx的具体参数含义、aclnn 头文件与链接库说明、aclnnStatus错误码。
在断点记录中,衔接缺口类问题对应"aclnn 算子库与 Runtime 交界处"的覆盖盲区,其处理规范详见本文第五节。
3.2 影响程度:三级判定标准
| 等级 | 含义 | 判定标准 |
|---|---|---|
| 阻塞 | 无法继续开发 | 关键 API 无任何文档、必要步骤完全不知如何操作 |
| 半阻塞 | 靠猜测勉强推进 | 有部分信息但不完整,需要靠经验推测或从示例代码反推 |
| 不阻塞 | 体验差但可绕过 | 信息存在但不够清晰,多花时间可以找到 |
影响程度是后续优先级映射的直接输入:阻塞 → P0(立即修复),半阻塞/优化点 → P1(近期改善)。
3.3 查找过程:必须给出实际文件路径
查找过程字段必须列出实际查找过的文件路径,并说明查找结果,例如:
docs/zh/api_ref/— 搜索 aclCreateTensor,未找到example/0_quickstart/0_hello_cann/main.cpp— 有使用但参数含义不清楚example/0_quickstart/0_hello_cann/README.md— 有 API 列表但无参数说明
这一字段的价值在于:它把"缺什么"落到"我在哪里找过、为什么不够"的具体证据链上,避免空泛地断言"文档缺失"。例如在仓库的 0_hello_cann README 中,aclnnAddGetWorkspaceSize的签名、运算公式out = self + alpha * other均有说明,但若某个参数的取值范围未覆盖,就应在查找过程中如实记录"README 有签名但无参数取值范围"。
3.4 期望补充:明确三要素
期望补充字段必须明确指出:
- 理想情况下应该有什么资料(如某个 API 的完整参数说明、取值范围、示例);
- 建议放在哪个位置(如
docs/zh/api_ref/下对应分类文件,例如 11-01_device_memory_malloc_and_free.md 对应aclrtMalloc等内存接口,06_stream_management.md 对应 Stream 管理接口); - 责任方:是 Runtime 仓库应补充,还是属于 aclnn 算子库(ops 仓库)的文档范畴。
四、衔接缺口的特别处理
对于 aclnn 算子库与 Runtime 的衔接区域问题,除了标准字段外,需要额外记录以下四点:
- Runtime docs/ 覆盖情况:在文档中查找了哪些文件,找到了什么;
- quickstart 示例覆盖情况:示例代码和 README 提供了什么信息;
- 断裂描述:文档信息如何不足以支撑开发;
- 补充建议:建议在 Runtime docs/ 中补充什么内容。
衔接缺口最容易出现在以下区域(详见 代码骨架 中的"核心衔接区域标记"):
| 衔接 API / 概念 | 典型断点风险 |
|---|---|
aclCreateTensor | shape / strides / format / dataType 的传递方式与计算规则 |
aclCreateScalar | 标量值的传递方式(如算子需要 alpha 等缩放因子) |
aclnnXxxGetWorkspaceSize | workspace + executor 概念的理解 |
aclnnXxx | workspace、workspaceSize、executor、stream 的传参方式 |
aclDestroyTensor/aclDestroyScalar | 资源释放的正确顺序 |
| 头文件和链接库 | aclnnop/下对应头文件、libnnopbase.so、libopapi.so的链接 |
在处理衔接缺口时须遵守知识来源边界规则(详见 source-rules.md):
- Runtime API 用法仅限仓库
docs/与example/,不得使用华为官网、CSDN、博客等外部资料,也不得凭 CUDA/ROCm 经验推断; - 两段式调用范式、workspace/executor 概念属于 aclnn 知识,应查阅 aclnn-two-phase-calling.md 或 ops 仓库文档;
- Tensor/Scalar API 先查 Runtime 仓库 docs/ 与 example/(如 0_hello_cann 的 main.cpp 中有
aclCreateTensor/aclCreateScalar的完整调用示例),不足时再查 reference/ 外源仓库; - 记录为外源知识缺失的问题不计入 Runtime 整改项,仅作为分析过程的完整性补充。
五、完整示例:一个真实的断点记录
以下是一个针对aclCreateTensor参数文档缺失的完整断点记录示例:
+---------------------------------------------------------------------+ | 断点 #3 | | 问题类型:衔接缺口 | | 发生步骤:Step 4 - 创建输入输出 Tensor | | 问题描述:尝试调用 aclCreateTensor 创建输入 Tensor,但不知道 | | strides 参数如何计算,也不确定 aclFormat 应该传什么值 | | 查找过程: | | - docs/zh/api_ref/ — 搜索 aclCreateTensor,无专门文档 | | - example/0_quickstart/0_hello_cann/main.cpp — 有使用,可看到参数但无注释 | | - example/0_quickstart/0_hello_cann/README.md — API 表中有 aclCreateTensor | | 但仅一行说明"创建 Tensor" | | Runtime 文档中的相关内容:无专门的 aclCreateTensor API 文档 | | quickstart 示例中的相关内容:有代码使用,可反推参数顺序 | | 缺失资料:aclCreateTensor 的参数说明文档 | | 影响程度:半阻塞(可从示例代码反推,但不确定每个参数的含义) | | [推测]:类似 PyTorch 的 tensor 构造,需要 shape + strides + dtype | | 期望补充: | | 1. 在 docs/zh/api_ref/ 中补充 aclCreateTensor 的完整 API 文档 | | 2. 包含每个参数的含义、取值范围、示例 | +---------------------------------------------------------------------+该示例展示了几条核心实践:
- 断点真实发生:strides 计算、aclFormat 取值是新手必然遇到的问题,但 quickstart 示例中只有代码使用、无注释说明;
- 查找过程落到具体文件:精确到
docs/zh/api_ref/目录、main.cpp、README.md; - 影响程度如实评估:
aclCreateTensor可从示例反推,因此是"半阻塞"而非"阻塞"; - [推测] 与确定信息分离:PyTorch 类比仅作参考方向,不当作事实写入产出;
- 期望补充给出落地位置:建议补充到
docs/zh/api_ref/对应分类下。
六、断点记录与分析产出的联动
断点记录不是孤立的流水账,而是整套分析产出的源头数据。在 SKILL.md 定义的分析流程中,每条断点记录将联动生成以下产出:
6.1 API 资料支撑情况表
在 Step 5(编写 Runtime 调用框架代码)中,逐 API 填写支撑情况表(模板见 api-coverage-table.md):
| API / 操作 | 文档位置 | 参数说明完整度 | 示例代码位置 | 资料来源 | 能否写出调用 |
|---|---|---|---|---|---|
| aclInit | 有/无/不完整 | 完整/缺参数/无说明 | 有/无 | Runtime docs | 是/否/靠猜测 |
| aclrtMalloc | 有/无/不完整 | 完整/缺参数/无说明 | 有/无 | Runtime docs | 是/否/靠猜测 |
| aclCreateTensor | 有/无/不完整 | 完整/缺参数/无说明 | 有/无 | Runtime docs | 衔接重点 |
| aclnnXxxGetWorkspaceSize | 有/无/不完整 | 完整/缺参数/无说明 | 有/无 | Runtime docs | 衔接重点 |
| 资源释放 | 有/无/不完整 | 完整/缺参数/无说明 | 有/无 | Runtime docs | 是/否/靠猜测 |
其中"能否写出调用"一栏的取值直接反映断点影响程度:是(有充分文档支撑)/否(资料完全缺失)/靠猜测(资料不完整,靠推测或从示例反推勉强写出)/衔接重点(aclnn 算子库与 Runtime 衔接区域的关键 API)/不适用(如算子不需要 Scalar 参数)。例如,仓库 0_hello_cann 的 main.cpp 中aclrtMalloc使用了ACL_MEM_MALLOC_HUGE_FIRST分配策略(第 46 行),对应文档可在 11-01_device_memory_malloc_and_free.md 中核对参数说明是否完整。
6.2 代码完成度统计
基于断点记录生成完成度统计(模板见 completion-stats-template.md):
总步骤数:12(Step 1-8 含 7a-7b 和 8a-8c,Step 9-12 后续流程) Runtime 基础 API 步骤:N 步 aclnn 衔接区域步骤:N 步 ├─ 可完成(有明确文档支撑):N 步 ├─ 靠猜测勉强完成:N 步 └─ 无法完成(资料完全缺失):N 步 代码完成率:XX%注意两点:"靠猜测"的步骤不计入可完成(推测性代码不可靠);如果仅靠 example/ 代码反推而文档无说明,也算"靠猜测"。代码完成率的计算公式为:可完成步骤数 / 总步骤数 × 100%。
6.3 整改 TodoList 与验证包
断点分析完成后,基于断点汇总表立即生成整改 TodoList(写入reports/目录),优先级映射规则为:阻塞点 → P0(立即修复),优化点 → P1(近期改善)。每条任务需包含问题定位(定位到文件/函数/章节)、改进目标、具体操作步骤、负责模块(docs / example / 根目录)与关联断点编号。
同时,为验证分析结论,会生成一个完整可编译的验证包(如reports/aclnnadd_verify/),其代码风格对齐example/0_quickstart/0_hello_cann:输入数据硬编码、两段式调用、结果逐元素打印并与 expected 值对比、使用CHECK_ERROR宏检查每个 API 返回值、完整的资源释放。程序输出Sample run successfully且结果一致即验证通过。验证包中的外源符号(aclnn 函数名、头文件名、枚举值等)必须逐一 grep 确认实际写法,不得凭推断或类比补全。
七、最佳实践与常见误区
7.1 记录质量要点
- 每条断点都对应一个真实的"我卡住了"时刻,而非理论上的文档改进建议;宁可多记录"半阻塞"细节,也不要漏掉影响开发的真实卡点;
- 查找过程要具体:精确到文件路径(如
docs/zh/api_ref/、example/0_quickstart/0_hello_cann/main.cpp),并说明在该文件中"找到了什么、缺了什么"; - 影响程度要诚实:能从示例反推就如实标"半阻塞",不夸大也不缩小;
- [推测] 永远与结论分离:推测性内容不计入代码产出,推测性代码用
[UNKNOWN: 原因]占位。
7.2 责任归属误区
- 不要把外源知识缺失记录为 Runtime 缺陷:两段式调用范式、Tensor/Scalar 创建 API、aclnn 算子签名等由 aclnn 算子库(ops 仓库)维护,Runtime 仓库没有义务提供其概念文档,但可以(不是必须)提供指向外源文档的指引链接;
- 不要脑补 Runtime API:Runtime API 遇到资料不足时必须记录为断点,不得凭 CUDA/PyTorch 经验推断参数含义;
- 衔接缺口要按知识归属分别处理:先确认该 API/概念是否由 Runtime 仓库维护——是则记 Runtime 缺陷,否则记外源知识缺失,不存在中间状态。
结语
断点记录格式是 CANN Runtime 文档质量评估的"测量仪器":它以模板化的方式,把"开发者被文档卡住"这一模糊体验转化为可分类、可分级、可定位、可整改的结构化记录。结合 SKILL.md 定义的 10 步分析流程、知识来源边界规则 以及仓库内的 docs/zh/api_ref 与 example/ 资料,这套方法既能量化评估仓库文档的自足性,也能为 docs/ 与 example/ 的持续改进输出明确、可执行的整改清单。
- CANN
- Ascend
- 人工智能
- 任务调度
【免费下载链接】runtime
本项目提供CANN运行时组件和维测功能组件。
相关推荐
CANN Runtime 断点分析:用 API 资料支撑情况表评估 aclnn 预置算子调用链路的文档覆盖度
CANN Runtime 断点分析:用 API 资料支撑情况表评估 aclnn 预置算子调用链路的文档覆盖度 本篇指南介绍 CANN Runtime 开源仓库中
CANNAscend人工智能任务调度CANN Runtime 文档断点记录格式:资料缺失问题的结构化记录与分析指南
CANN Runtime 文档断点记录格式:资料缺失问题的结构化记录与分析指南 本指南详解 CANN Runtime 开源仓库中用于文档质量评估与开发者体验分析
CANNAscend人工智能任务调度CANN Runtime 预置算子(aclnn)路径代码完成度统计:12 步调用流程完成率评估方法
CANN Runtime 预置算子(aclnn)路径代码完成度统计:12 步调用流程完成率评估方法 本文围绕 CANN Runtime 开源仓库中"aclnn
CANNAscend人工智能任务调度
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考