简介
目的
说明本文档描述的 Graph-autofusion 需求或设计目标、目标读者和期望输出。
范围
说明本次设计包含和不包含的内容,明确涉及组件(SuperKernel、Autofuse、构建/打包、测试框架等)。
总体概述
软件概述
项目介绍
描述需求背景、所属组件、与现有功能的关系。
产品环境介绍
说明本功能与 CANN Toolkit、AscendC、runtime、Python 包、run 包或其他组件的关系。如涉及外部接口,列出接口边界。
软件功能
概述本需求需要实现的主要能力。这里只描述功能集合,不写实现细节。
设计约束
列出会限制实现方案的条件,包括但不限于:
- CANN Toolkit 版本要求
- ABI/API 兼容要求
- 构建和打包路径约束
- SuperKernel 与 Autofuse 解耦要求
- 性能、内存、日志和线程约束
假设和依赖关系
列出设计依赖的前提条件。如前提不确定,标注“待确认”。
需求分析与设计
整体介绍
说明整体方案、数据流、控制流和关键模块边界。
功能需求
功能需求 1:{需求名}
-
介绍
描述需求行为,要求简明、完整、无歧义、可验证。
-
输入
描述输入来源、格式、范围、边界条件和非法输入。
-
处理
描述处理流程、关键分支、异常处理和错误码。
-
输出
描述输出结果、状态变化、产物文件或日志变化。
功能需求 2:{需求名}
按同样结构补充。
非功能需求
可维护性
说明代码结构、命名、注释、复用和后续扩展约束。
可测试性
说明测试入口、桩/夹具、验证方式和覆盖目标。
可移植性
说明对平台、芯片、编译器、Python 版本和 CANN Toolkit 的依赖。
可靠性
说明错误处理、资源释放、异常分支、并发和内存安全策略。
特性交叉影响
必须读取并填写 cross_feature_check.md。在正文中给出逐项结论。
性能
编译时长
涉及 autofuse/optimize、autofuse/codegen、CMake、脚本或全量遍历逻辑时,评估新增耗时。
执行性能
涉及 runtime 调度、kernel launch、内存拷贝、日志或高频路径时,评估执行耗时和并发影响。
内存和产物大小
评估新增结构、缓存、运行包、wheel、动态库大小和常驻内存影响。
接口设计
新增/修改接口描述
列出接口原型、参数、返回值、错误码、调用时序和兼容性。
接口检查项
| 检查项 | 子检查项 | 是否涉及 | 说明 |
|---|---|---|---|
| 接口说明 | 是否需要接口评审 | ||
| 接口说明 | 是否需要补充文档 | ||
| 接口兼容 | 行为是否兼容 | ||
| 接口兼容 | ABI/API 是否兼容 | ||
| 接口约束 | 约束不满足时是否清晰报错 | ||
| 接口测试 | 是否需要独立接口用例 |
软件设计
关键数据结构
说明新增或修改的数据结构、生命周期和所有权。
关键技术/算法
说明核心算法、边界条件和复杂度。
流程设计
说明主流程、异常流程和回滚/清理流程。
对子模块的修改
说明每个涉及目录或模块的修改点,避免只写笼统描述。
错误处理
系统错误
说明内存申请失败、文件失败、编译失败、runtime 调用失败等错误处理方式。
接口错误
说明对外返回错误码、异常、日志和用户可见提示。
安全检查
必须读取并检查 编码红线.md。重点关注:
- 敏感信息和公网地址硬编码
- 外部输入作为数组索引、长度、偏移或内存申请大小
- 整数溢出、反转、除 0
- 资源生命周期和异常分支释放
- ABI/API 兼容
- 图改写等价性和确定性
- runtime/aclrt/AscendC 接口生命周期约束
兼容性检查
说明是否影响已有脚本参数、配置文件、安装目录、动态库、Python 包、旧产物或用户代码。
测试设计
测试边界
说明测试入口、测试出口、打桩模块和验证数据。
测试用例设计
| 测试类别 | 关键测试项 | 测试方法 | 用例类型 |
|---|---|---|---|
| 功能 | UT/ST/RDV | ||
| 异常 | UT/ST | ||
| 性能 | Benchmark/手工验证 | ||
| 兼容性 | UT/ST | ||
| 特性交叉 | UT/ST/E2E |
测试命令
列出可直接执行的命令和预期结果。例如:
sh build.sh -u --module=autofuse_framework -j 8
sh build.sh -s --module=autofuse_e2e -j 8
验收标准
列出可验证的验收条件,包括功能、测试、性能、兼容性和文档更新要求。