| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
软件架构调整 Co-authored-by: ren-mengguang<renmengguang@h-partners.com> # message auto-generated for no-merge-commit merge: !2167 merge rmg_code into master 软件架构调整 Created-by: ren-mengguang Commit-by: ren-mengguang Merged-by: cann-robot Description: ## 描述 目录结构调整为和软件架构一致。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [x] 📝 文档更新 - [x] 📋 其他,请描述: 目录结构调整 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1.A5 hccltest&基础RDV用例自验 2. A5 RDV,部分A2&A3RDV 3. A2&A3daily,A5 8p后冒烟用例 补充的UT用例: 不涉及 ## 文档更新 待补充 ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [ ] 🔍 邀请 committer评论 /lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [ ] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [ ] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2167 | 27 天前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
软件架构调整 Co-authored-by: ren-mengguang<renmengguang@h-partners.com> # message auto-generated for no-merge-commit merge: !2167 merge rmg_code into master 软件架构调整 Created-by: ren-mengguang Commit-by: ren-mengguang Merged-by: cann-robot Description: ## 描述 目录结构调整为和软件架构一致。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [x] 📝 文档更新 - [x] 📋 其他,请描述: 目录结构调整 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1.A5 hccltest&基础RDV用例自验 2. A5 RDV,部分A2&A3RDV 3. A2&A3daily,A5 8p后冒烟用例 补充的UT用例: 不涉及 ## 文档更新 待补充 ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [ ] 🔍 邀请 committer评论 /lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [ ] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [ ] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2167 | 27 天前 | |
软件架构调整 Co-authored-by: ren-mengguang<renmengguang@h-partners.com> # message auto-generated for no-merge-commit merge: !2167 merge rmg_code into master 软件架构调整 Created-by: ren-mengguang Commit-by: ren-mengguang Merged-by: cann-robot Description: ## 描述 目录结构调整为和软件架构一致。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [x] 📝 文档更新 - [x] 📋 其他,请描述: 目录结构调整 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1.A5 hccltest&基础RDV用例自验 2. A5 RDV,部分A2&A3RDV 3. A2&A3daily,A5 8p后冒烟用例 补充的UT用例: 不涉及 ## 文档更新 待补充 ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [ ] 🔍 邀请 committer评论 /lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [ ] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [ ] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2167 | 27 天前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
软件架构调整 Co-authored-by: ren-mengguang<renmengguang@h-partners.com> # message auto-generated for no-merge-commit merge: !2167 merge rmg_code into master 软件架构调整 Created-by: ren-mengguang Commit-by: ren-mengguang Merged-by: cann-robot Description: ## 描述 目录结构调整为和软件架构一致。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [x] 📝 文档更新 - [x] 📋 其他,请描述: 目录结构调整 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1.A5 hccltest&基础RDV用例自验 2. A5 RDV,部分A2&A3RDV 3. A2&A3daily,A5 8p后冒烟用例 补充的UT用例: 不涉及 ## 文档更新 待补充 ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [ ] 🔍 邀请 committer评论 /lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [ ] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [ ] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2167 | 27 天前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 | |
软件架构调整 Co-authored-by: ren-mengguang<renmengguang@h-partners.com> # message auto-generated for no-merge-commit merge: !2167 merge rmg_code into master 软件架构调整 Created-by: ren-mengguang Commit-by: ren-mengguang Merged-by: cann-robot Description: ## 描述 目录结构调整为和软件架构一致。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [x] 📝 文档更新 - [x] 📋 其他,请描述: 目录结构调整 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1.A5 hccltest&基础RDV用例自验 2. A5 RDV,部分A2&A3RDV 3. A2&A3daily,A5 8p后冒烟用例 补充的UT用例: 不涉及 ## 文档更新 待补充 ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [ ] 🔍 邀请 committer评论 /lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [ ] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [ ] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2167 | 27 天前 | |
second_2 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !2768 merge master_6_8 into master second_2 Created-by: wlwy Commit-by: wlwy Merged-by: cann-robot Description: ### 简要描述 DFX profiling 链路性能优化:TaskInfo 存储从 shared_ptr 迁移至 unique_ptr 及 ProfilingReporter/ProfilingHandler 批量上报重构 ### 问题描述 1. 原 TaskInfo 队列使用 shared_ptr<TaskInfo> 管理,引用计数开销在频繁 AddTaskInfo/遍历场景下带来不必要的性能损耗 2. ProfilingReporter 构造函数中直接注册回调并抛异常,缺少 Init 返回码机制,初始化失败无法优雅处理 3. ProfilingHandler 逐条上报 TaskDetail,大量小粒度调用导致 profiling 上报效率低 4. VectorQueue 使用 push_back 动态扩容,内存分配不可控;CircularQueue/VectorQueue 重复实现 Size/IsEmpty 5. MirrorTaskManager 使用 queueMap_ + queueTaskNum 两个独立 map 维护队列和计数,结构松散 6. DfxOpInfo/CollOperator 中存在冗余字段(debugCase、oneSidedComm、costumArgs 等),且 A3/A5 类型转换分散在各处 7. MsprofAdditionalInfo 数据填充方式为构造局部变量后 memcpy,存在不必要的拷贝 ### 解决方案 1. **shared_ptr → unique_ptr 迁移**:Queue、MirrorTaskManager、GlobalMirrorTasks、TaskExceptionHandler 等全链路将 shared_ptr<TaskInfo> 替换为 unique_ptr<TaskInfo>,AddTaskInfo 接口改为右值引用传递 (std::unique_ptr<TaskInfo>&&),消除引用计数开销 2. **Queue 层级重构**:引入 QueueWithSize<T> 基类统一 Size/IsEmpty 实现;CircularQueue/VectorQueue 继承 QueueWithSize;新增 GetAndUpdate() 接口实现原地构造+索引更新原子操作,减少一次 move 3. **MirrorTaskManager 结构合并**:将 queueMap_ + queueTaskNum 合并为 streamQueues_(unordered_map<u32, MirrorStreamQueueEntry>),Queue 指针、类型、计数封装为单一 entry;AddTaskInfo 回调前 unlock 避免死锁 4. **ProfilingReporter 延迟初始化**:构造函数不再注册回调和校验,新增 Init() 返回 HcclResult;新增 SetCurrDfxOpInfo() 集中处理 A3→A5 类型转换(通过 CMD_OP_TYPE_INFO_MAP) 5. **批量上报优化**:ProfilingReporter::ReportAllTasks 收集 vector<TaskInfo*> 后调用 ReportHcclTaskDetailsBatch 批量上报;ProfilingHandler 新增 FillTaskAdditionInfo/FillProfCommonInfo 等直接填充 MsprofAdditionalInfo 的接口,消除 memcpy 6. **VectorQueue 预分配**:容量固定为 VECTOR_QUEUE_SIZE(2048),预分配内存,禁止动态扩容,Full 时抛异常 7. **冗余字段清理**:移除 CollOperator::debugCase、oneSidedComm,ParaCcu::costumArgs,ParaAiv::isOpbase,CollOpParams::debugCase,DfxOpInfo::algType_ 赋值等;新增 CollOperator::oldOpType/oldReduceOp/oldDataType 用于 A3 兼容 8. **日志优化**:高频路径日志增加 HcclCheckLogLevel 前置检查;DumpHCCLReportData 等日志函数延迟到 Log 专用方法 ### 影响范围 - 修改:TaskInfo 存储语义从共享变为独占,所有 AddTaskInfo 调用方需使用 std::move - 修改:MirrorTaskManager 队列迭代器从 unordered_map<u32, TaskInfoQueue*>::iterator 变为 unordered_map<u32, MirrorStreamQueueEntry>::iterator - 修改:ProfilingReporter 构造函数不再做初始化,需显式调用 Init();SetCurrDfxOpInfo 从 MirrorTaskManager 上移至 ProfilingReporter - 修改:HcclCommDfxLite::Init 签名增加 rankSize 参数;GetChannelRemoteRankId 返回值语义变更 - 修改:ProfilingHandlerLite::ReportHcclTaskDetails 参数从 vector<TaskInfo> 变为 vector<TaskInfo*> - 性能:unique_ptr 消除引用计数原子操作开销;VectorQueue 预分配消除动态内存分配;批量上报减少 profiling API 调用次数 - 兼容性:A3 类型转换逻辑统一至 CMD_OP_TYPE_INFO_MAP,新增 oldOpType/oldReduceOp/oldDataType 字段保持 A3 兼容 ### 新增用例 - 单元测试:ut_vector_queue 验证 VectorQueue 预分配容量、GetAndUpdate、越界访问 - 单元测试:ut_mirror_task_manager 适配 unique_ptr 接口及 MirrorStreamQueueEntry 结构 - 单元测试:ut_task_exception_handler 适配 unique_ptr 及 TaskInfo* 上下文收集 - 单元测试:ut_profiling_handler 验证 FillTaskAdditionInfo、ReportHcclTaskDetailsBatch - 单元测试:ut_profiling_reporter 验证 Init 返回码、SetCurrDfxOpInfo A3→A5 转换 - 单元测试:ut_ccuTaskexception 验证 unique_ptr 队列 Append/GetTaskInfo - 单元测试:ut_hcclCommDfx 验证 HcclCommDfxLite::Init 新签名及 GetChannelRemoteRankId 返回值 - 单元测试:ut_hcclCommTaskExceptionLite 验证 MirrorTaskManagerLite::GetTaskInfo 返回裸指针 ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. rdv 2. 本地 aicpu下发 ccu下发 dpu下发 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2768 | 11 小时前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 27 天前 | ||
| 11 小时前 | ||
| 11 小时前 | ||
| 11 小时前 | ||
| 11 小时前 | ||
| 11 小时前 | ||
| 27 天前 | ||
| 27 天前 | ||
| 11 小时前 | ||
| 11 小时前 | ||
| 27 天前 | ||
| 11 小时前 | ||
| 11 小时前 | ||
| 11 小时前 | ||
| 27 天前 | ||
| 11 小时前 |