简介

目的

说明本文档描述的 Graph-autofusion 需求或设计目标、目标读者和期望输出。

范围

说明本次设计包含和不包含的内容,明确涉及组件(SuperKernel、Autofuse、构建/打包、测试框架等)。

总体概述

软件概述

项目介绍

描述需求背景、所属组件、与现有功能的关系。

产品环境介绍

说明本功能与 CANN Toolkit、AscendC、runtime、Python 包、run 包或其他组件的关系。如涉及外部接口,列出接口边界。

软件功能

概述本需求需要实现的主要能力。这里只描述功能集合,不写实现细节。

设计约束

列出会限制实现方案的条件,包括但不限于:

  • CANN Toolkit 版本要求
  • ABI/API 兼容要求
  • 构建和打包路径约束
  • SuperKernel 与 Autofuse 解耦要求
  • 性能、内存、日志和线程约束

假设和依赖关系

列出设计依赖的前提条件。如前提不确定,标注“待确认”。

需求分析与设计

整体介绍

说明整体方案、数据流、控制流和关键模块边界。

功能需求

功能需求 1:{需求名}

  1. 介绍

    描述需求行为,要求简明、完整、无歧义、可验证。

  2. 输入

    描述输入来源、格式、范围、边界条件和非法输入。

  3. 处理

    描述处理流程、关键分支、异常处理和错误码。

  4. 输出

    描述输出结果、状态变化、产物文件或日志变化。

功能需求 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

验收标准

列出可验证的验收条件,包括功能、测试、性能、兼容性和文档更新要求。