已关闭
[Requirement|需求建议]: 重构任务和机制,以任务为粒度组织不同版本&芯片的任务操作函数 #331
yanhaiyan创建于  4月3日关闭于  5月14日
yanhaiyan成员
4月3日 创建

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

likedislike
Yyanhaiyan成员
4月3日 添加了label:requirement
Yyanhaiyan成员
4月3日 修改了issue 的描述
Yyanhaiyan成员
4月3日 修改了issue 的描述
Yyanhaiyan成员
4月3日 关联了pull request:重构barrier和cmo任务
xiaocunxiaocun成员
4月7日 将 turing_yhy 设为负责人
yanhaiyan成员
4月14日 评论:

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

likedislike
Yyanhaiyan成员
4月14日 关联了pull request:stream task操作函数层次重构
Yyanhaiyan成员
4月15日 关联了pull request:refactor: dump task分层重构
zhangpengpeng8成员
4月17日 评论:

.

likedislike
Yyanhaiyan成员
4月17日 关联了pull request:refactor(task): profiling tasks分层重构
此处折叠了11条事件消息 查看更多
Yyanhaiyan成员
5月8日 关联了pull request:refactor: ffts_plus,fusion_kernel 任务分层重构
yanhaiyan成员
5月12日 评论:

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
likedislike
yanhaiyan成员
5月12日 评论:

函数迁移闭环流程图:

┌─────────────────────────────────────────────────────────────────────┐
│ 函数迁移闭环流程 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 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行 │ │
│ │ - 函数体逻辑: 不变 │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘

likedislike
Yyanhaiyan成员
5月14日 issue状态由 进行中 改变为 已确认
Yyanhaiyan成员
5月14日 issue状态由 已确认 改变为 已解决
Yyanhaiyan成员
5月14日 关闭了 issue
CANN-robotCANN-robot成员
5月14日 添加了label:resolved