7个stream任务类型操作函数层次重构方案:
b6c1850e2a8f4d5aa9fbccb0861f7c6f.md


.


2.1 Issue 331及其13个子需求统计
| Issue | Issue名称 | PR链接 | 新增行 | 删除行 | 总变更行 | UT新增行 | UT删除行 | UT变更行 |
|---|---|---|---|---|---|---|---|---|
| #331 (父需求基础) | barrier/cmo任务重构 | PR 1412 | 552 | 394 | 946 | 23 | 4 | 27 |
| #331 (父需求基础) | stream task重构 | PR 1566 | 297 | 207 | 504 | 13 | 0 | 13 |
| #484 | ffts_fusion任务重构 | PR 1980 | 450 | 575 | 1025 | 10 | 23 | 33 |
| #481 | multi_task任务重构 | PR 1968 | 1321 | 1228 | 2549 | 35 | 16 | 51 |
| #471 | rdma_ubdma任务重构 | PR 1935 | 921 | 858 | 1779 | 23 | 11 | 34 |
| #469 | MULTIPLE_TASK重构 | PR 1935 | 921 | 858 | 1779 | 23 | 11 | 34 |
| #460 | stars_common/timeout_set重构 | PR 1895 | 788 | 490 | 1278 | 47 | 10 | 57 |
| #454 | maintenance等重构 | PR 1895 | 788 | 490 | 1278 | 47 | 10 | 57 |
| #443 | davinci_kernel_task重构 | PR 1869 | 1261 | 1144 | 2405 | 36 | 18 | 54 |
| #426 | event和notify重构 | PR 1749 | 680 | 564 | 1244 | 41 | 21 | 62 |
| #418 | Model任务重构 | PR 1718 | 1101 | 724 | 1825 | 66 | 20 | 86 |
| #384 | memory_task重构 | PR 1671 | 1279 | 1098 | 2377 | 42 | 14 | 56 |
| #380 | cond_op重构 | PR 1671 | 1279 | 1098 | 2377 | 42 | 14 | 56 |
| #376 | profiling task重构 | PR 1648 | 280 | 176 | 456 | 20 | 4 | 24 |
| #374 | dump task重构 | PR 1599 | 575 | 468 | 1043 | 12 | 2 | 14 |
2.2 Issue 331(父需求)汇总统计(不重复计算共享PR)
| Issue | 关联PR数 | 新增行 | 删除行 | 总变更行 | UT新增行 | UT删除行 | UT变更行 |
|---|---|---|---|---|---|---|---|
| #331 (父需求) | 12个独立PR | 9,505 | 7,926 | 17,431 | 368 | 143 | 511 |


函数迁移闭环流程图:
┌─────────────────────────────────────────────────────────────────────┐
│ 函数迁移闭环流程 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ Step 1: 创建目标目录和空文件 │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 操作: mkdir task_info/{category}/ │ │
│ │ touch {prefix}_task.cc │ │
│ │ touch {prefix}_task_v100.cc │ │
│ │ touch {prefix}_task_v200_base.cc │ │
│ │ │ │
│ │ 示例: mkdir task_info/memory/ │ │
│ │ touch memory_task.cc │ │
│ │ touch memory_task_v100.cc │ │
│ │ touch memory_task_v200_base.cc │ │
│ │ touch memory_task_v200.cc │ │
│ │ touch memory_task_v201.cc │ │
│ │ │ │
│ │ 验证: 目录存在、文件创建成功 │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ Step 2: 逐函数闭环迁移 │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 流程: 增 -> 声明 -> 删 (闭环,逐函数执行) │ │
│ │ │ │
│ │ 2.1 新增函数实现到目标文件 │ │
│ │ ├── 复制函数体到目标文件 │ │
│ │ ├── 保持函数体逻辑不变 │ │
│ │ ├── 保持Copyright年份(已有2025,新增2026) │ │
│ │ └ 禁止修改函数签名 │ │
│ │ │ │
│ │ 2.2 添加函数声明到目标头文件 │ │
│ │ ├── 基础函数 → {prefix}_task.h │ │
│ │ ├── v100函数 → task_info_v100.h │ │
│ │ ├── v200_base函数 → stars_david.hpp │ │
│ │ └ 禁止相对路径include │ │
│ │ │ │
│ │ 2.3 删除原文件中的函数实现 │ │
│ │ ├── 删除函数体 │ │
│ │ ├── 删除原头文件中的声明 │ │
│ │ └ 禁止跨函数批量操作 │ │
│ │ │ │
│ │ 示例: MemcpyAsyncTask迁移 │ │
│ │ ├── 新增: memory/memory_task.cc │ │
│ │ ├── 声明: memory_task.h │ │
│ │ ├── 删除: task_info/memory_task.cc │ │
│ │ │ │
│ │ 验证: 函数体完全相同、无重复定义 │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ Step 3: 更新所有调用方include │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 操作: 添加显式include │ │
│ │ │ │
│ │ 调用方类型: │ │
│ │ ├── runtime源文件: stream.cc、context.cc等 │ │
│ │ ├── feature文件: model.cc、profiler.cc等 │ │
│ │ ├── task文件: task_manager.cc、task_info.cc等 │ │
│ │ ├── UT文件: rt_utest_task.cc、rt_utest_context.cc │ │
│ │ │ │
│ │ 示例: │ │
│ │ // stream.cc │ │
│ │ #include "memory_task.h" // 新增 │ │
│ │ │ │
│ │ 禁止: │ │
│ │ ├── 禁止相对路径: #include "../memory_task.h" │ │
│ │ ├── 禁止间接依赖: 通过task_info.hpp间接引用 │ │
│ │ │ │
│ │ 验证: 所有调用文件编译无错误 │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ Step 4: 更新CMake配置 │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 文件列表: │ │
│ │ ├── runtime.cmake (v100版本) │ │
│ │ ├── v200.cmake (v200/v201版本) │ │
│ │ ├── cmodel.cmake │ │
│ │ ├── tiny.cmake │ │
│ │ ├── tests/ut/runtime/runtime/CMakeLists.txt │ │
│ │ └── tests/ut/runtime/runtime/test/platform/910B/ │ │
│ │ │ │
│ │ 配置规则: │ │
│ │ ├── v100版本: 基础层 + v100层 │ │
│ │ ├── v200/v201版本: 基础层 + v200_base层 + v200/v201 │ │
│ │ ├── v100文件在v200/v201中: mechanism dependance区块 │ │
│ │ │ │
│ │ 示例(runtime.cmake): │ │
│ │ ${RUNTIME_CORE_DIR}/src/task/task_info/memory/ │ │
│ │ memory_task.cc │ │
│ │ memory_task_v100.cc │ │
│ │ │ │
│ │ 示例(v200.cmake): │ │
│ │ david_series_common_task_src_file │ │
│ │ memory_task.cc │ │
│ │ memory_task_v200_base.cc │ │
│ │ # mechanism dependance │ │
│ │ memory_task_v100.cc │ │
│ │ │ │
│ │ 验证: 无旧路径残留、版本隔离正确 │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ Step 5: 删除空文件和空目录 │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 操作: 删除迁移后的空文件 │ │
│ │ │ │
│ │ 删除类型: │ │
│ │ ├── 原混合版本文件: task_info/memory_task.cc │ │
│ │ ├── v100版本旧文件: v100/memory_task.cc │ │
│ │ ├── v200_base旧文件: v200_base/memory_task.cc │ │
│ │ ├── v200旧文件: v200/memcpy_task_to_sqe.cc │ │
│ │ ├── v201旧文件: v201/memcpy_task_to_sqe.cc │ │
│ │ ├── 空头文件: task_info.h │ │
│ │ │ │
│ │ 删除时机: │ │
│ │ ├── 所有函数迁移完成 │ │
│ │ ├── CMake已更新 │ │
│ │ ├── 新文件已验证 │ │
│ │ │ │
│ │ 验证: 文件删除成功、目录清理完成 │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ Step 6: 编译验证 │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 操作: 各版本独立编译 │ │
│ │ │ │
│ │ 编译版本: │ │
│ │ ├── v100版本: runtime.cmake │ │
│ │ ├── v200版本: v200.cmake │ │
│ │ ├── v201版本: v200.cmake │ │
│ │ ├── cmodel版本: cmodel.cmake │ │
│ │ ├── tiny版本: tiny.cmake │ │
│ │ │ │
│ │ 验证项: │ │
│ │ ├── 编译成功: BUILD SUCCESSFUL │ │
│ │ ├── 无未定义符号: 所有函数声明正确 │ │
│ │ ├── 无重复定义: 同名多实现正确分离 │ │
│ │ ├── 无警告: 编译无新增警告 │ │
│ │ │ │
│ │ 失败处理: │ │
│ │ ├── 未定义符号 → 检查include │ │
│ │ ├── 重复定义 → 检查同名多实现分离 │ │
│ │ ├── CMake错误 → 检查版本隔离配置 │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ Step 7: UT验证 │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 操作: 运行UT测试套 │ │
│ │ │ │
│ │ UT类型: │ │
│ │ ├── runtimeut: runtime/CMakeLists.txt │ │
│ │ ├── 910B平台: test/platform/910B/CMakeLists.txt │ │
│ │ ├── 910_95平台: test/platform/910_95/ │ │
│ │ │ │
│ │ 验证项: │ │
│ │ ├── UT编译成功: 无编译错误 │ │
│ │ ├── UT测试通过: 所有测试用例通过 │ │
│ │ ├── 无新增失败用例 │ │
│ │ │ │
│ │ 示例结果: │ │
│ │ ├── 866 tests PASSED │ │
│ │ ├── 4个子测试套全部通过 │ │
│ │ ├── 43/43项通过 │ │
│ │ │ │
│ │ 失败处理: │ │
│ │ ├── UT编译失败 → 检查include路径 │ │
│ │ ├── UT测试失败 → 检查函数迁移完整性 │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 迁移完成,版本发布 │ │
│ │ │ │
│ │ 产物: cann-npu-runtime_9.0.0_linux-x86_64.run │ │
│ │ │ │
│ │ 代码统计: │ │
│ │ ├── #484: 648行新增 / 776行删除 (净减128行) │ │
│ │ ├── 总计: ~350+函数迁移 │ │
│ │ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
单个函数迁移详细流程图:
┌─────────────────────────────────────────────────────────────────────┐
│ 单个函数迁移闭环流程(以MemcpyAsyncTask为例) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 函数: ToCommandBodyForMemcpyAsyncTask │
│ 版本: 基础层 │
│ 原位置: task_info/memory_task.cc:45 │
│ 新位置: memory/memory_task.cc │
│ 新声明: memory_task.h │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 阶段A: 新增实现 │ │
│ │ │ │
│ │ 1. 创建目标文件memory/memory_task.cc │ │
│ │ │ │
│ │ 2. 复制函数体到目标文件 │ │
│ │ void ToCommandBodyForMemcpyAsyncTask(...) { │ │
│ │ // 函数体逻辑完全不变 │ │
│ │ // 约20行代码 │ │
│ │ } │ │
│ │ │ │
│ │ 3. 验证函数体一致 │ │
│ │ diff task_info/memory_task.cc │ │
│ │ memory/memory_task.cc │ │
│ │ 结果: 完全一致 │ │
│ │ │ │
│ │ 4. 验证编译 │ │
│ │ g++ -c memory/memory_task.cc │ │
│ │ 结果: 编译成功 │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 阶段B: 添加声明 │ │
│ │ │ │
│ │ 1. 新增memory_task.h │ │
│ │ │ │
│ │ 2. 添加函数声明 │ │
│ │ void ToCommandBodyForMemcpyAsyncTask( │ │
│ │ TaskInfo * const taskInfo, │ │
│ │ rtCommand_t * const command │ │
│ │ ); │ │
│ │ │ │
│ │ 3. 头文件规范 │ │
│ │ #include "task_info.hpp" // 使用task_info.hpp │ │
│ │ // 禁止相对路径 │ │
│ │ // 禁止rt_defines.h │ │
│ │ │ │
│ │ 4. 删除task_info.hpp中的声明 │ │
│ │ // 移除旧声明 │ │
│ │ // void ToCommandBodyForMemcpyAsyncTask(...); │ │
│ │ │ │
│ │ 5. 验证编译 │ │
│ │ #include "memory_task.h" │ │
│ │ 编译: 成功 │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 阶段C: 删除原实现 │ │
│ │ │ │
│ │ 1. 删除task_info/memory_task.cc中的函数体 │ │
│ │ // 删除: void ToCommandBodyForMemcpyAsyncTask │ │
│ │ │ │
│ │ 2. 验证文件 │ │
│ │ task_info/memory_task.cc: 行数减少 │ │
│ │ memory/memory_task.cc: 行数增加 │ │
│ │ │ │
│ │ 3. 验证编译 │ │
│ │ 编译: 成功,无未定义符号 │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 阶段D: 更新调用方 │ │
│ │ │ │
│ │ 1. 更新task_manager.cc │ │
│ │ #include "memory_task.h" // 新增 │ │
│ │ │ │
│ │ 2. 更新task_info.cc │ │
│ │ #include "memory_task.h" // 新增 │ │
│ │ │ │
│ │ 3. 更新UT文件 │ │
│ │ rt_utest_task.cc: #include "memory_task.h" │ │
│ │ rt_utest_context.cc: #include "memory_task.h" │ │
│ │ │ │
│ │ 4. 验证编译 │ │
│ │ 所有调用方编译成功 │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 阶段E: 更新CMake │ │
│ │ │ │
│ │ 1. runtime.cmake (v100) │ │
│ │ 替换: task_info/memory_task.cc │ │
│ │ 新增: memory/memory_task.cc │ │
│ │ │ │
│ │ 2. v200.cmake (v200/v201) │ │
│ │ 替换: task_info/memory_task.cc │ │
│ │ 新增: memory/memory_task.cc │ │
│ │ │ │
│ │ 3. 验证编译 │ │
│ │ v100编译: 成功 │ │
│ │ v200编译: 成功 │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 阶段F: 验证闭环 │ │
│ │ │ │
│ │ 1. 编译验证 │ │
│ │ BUILD SUCCESSFUL │ │
│ │ │ │
│ │ 2. UT验证 │ │
│ │ 866 tests PASSED │ │
│ │ │ │
│ │ 3. 声明完整性 │ │
│ │ task_info.hpp无残留 │ │
│ │ memory_task.h声明完整 │ │
│ │ │ │
│ │ 4. CMake正确性 │ │
│ │ 无旧路径引用 │ │
│ │ 版本隔离正确 │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ ↓ │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ ✓ 单个函数迁移完成 │ │
│ │ │ │
│ │ 统计: │ │
│ │ - 新增行: ~20行 │ │
│ │ - 删除行: ~20行 │ │
│ │ - 函数体逻辑: 不变 │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘


Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
1、机制是通用操作,不包含详细任务的操作,也不体现具体芯片的差异。
2、所有的任务的操作函数都由单独的目录/文件统一看护,具体芯片的差异由任务文件或目录来承载。
Origin(信息来源)
runtime
Benefit / Necessity (价值/作用)
以任务为粒度组织任务操作函数,支持不同芯片的任务操作函数隔离,为后续不同芯片仅关注所需任务如极致内存等边端芯片、快速上线/下线指定任务打下基础。
Design(设计方案)
0ac027538abf4b5188db4f5136b7a5f8.md