| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
profiling性能优化 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !3359 merge master into master profiling性能优化 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. 2. 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!3359 | 12 天前 | |
[fix] the data race issue on variable oneSidedConns_ Co-authored-by: ouyangcaike<ouyangcaike@h-partners.com> # message auto-generated for no-merge-commit merge: !2572 merge issue-1 into master [fix] the data race issue on variable oneSidedConns_ Created-by: ouyangcaike Commit-by: ouyangcaike Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 增加 RAII 锁解决单边通信变量 oneSidedConns_ 的数据竞争问题。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [ ] 📝 文档更新 - [ ] 📋 其他,请描述: ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> https://gitcode.com/cann/hcomm/issues/190 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: 1. 编译成功 2. 全量拦截任务通过 3. 前冒烟测试通过 补充的UT用例: - **ascend910** **文件**: test/ut/framework/communicator/impl/one_sided_service/ut_hccl_one_sided_service.cc(新增 10 个) | # | 用例名 | 覆盖函数 | 覆盖分支 / 说明 | |---|---|---|---| | 1 | Ut_Prepare_When_PrepareFullMeshFailAndRankMissing_Expect_NoSpuriousEntry | Prepare | 失败清理:find()+.at() 即 break,不插入伪条目(**find/at 回归**) | | 2 | Ut_Prepare_When_AlreadyPrepared_Expect_ReturnSuccessImmediately | Prepare | prepared_ 为真直接返回 SUCCESS | | 3 | Ut_Prepare_When_TopoNotFullMesh_Expect_SkipFullMeshAndSuccess | Prepare | 非 FULLMESH 跳过建链,置 prepared_=true | | 4 | Ut_Prepare_When_PrepareFullMeshSuccess_Expect_PreparedTrue | Prepare | PrepareFullMesh 成功后 prepared_=true | | 5 | Ut_ExchangeMemDesc_When_SetupRemoteRankInfoFail_Expect_ReturnError | ExchangeMemDesc | 写路径 unique_lock + SetupRemoteRankInfo 失败,不入表 | | 6 | Ut_EnableMemAccess_When_ConnNotFound_Expect_ThrowLogicError | EnableMemAccess | 读路径 shared_lock + not-found 抛 logic_error | | 7 | Ut_DisableMemAccess_When_ConnNotFound_Expect_ThrowLogicError | DisableMemAccess | 读路径 shared_lock + not-found 抛 logic_error | | 8 | Ut_BatchPut_When_ConnNotFound_Expect_ThrowOutOfRange | BatchPut | 读路径 shared_lock + not-found 抛 out_of_range | | 9 | Ut_BatchGet_When_ConnNotFound_Expect_ThrowOutOfRange | BatchGet | 读路径 shared_lock + not-found 抛 out_of_range | | 10 | Ut_ConcurrentReadWrite_When_MixedReadWrite_Expect_NoDeadlock | ExchangeMemDesc + BatchPut | **多线程**:1 写(unique_lock) + 8 读(shared_lock),async+wait_for(10s) | - **ascend950** **文件**:test/legacy/ut/framework/service/one_sided_service/ut_hccl_one_sided_service.cc(新增 8 个) | # | 用例名 | 覆盖函数 | 覆盖分支 / 说明 | |---|---|---|---| | 1 | Ut_ExchangeMemDesc_When_AccStateNotAicpu_Expect_ReturnNotSupport | ExchangeMemDesc | accState 非 AICPU_TS 前置检查返回 HCCL_E_NOT_SUPPORT | | 2 | Ut_ExchangeMemDesc_When_CheckLinkFail_Expect_ReturnError | ExchangeMemDesc | 写路径 unique_lock + CheckLink 失败(RDMA→ROCE),不入表 | | 3 | Ut_ExchangeMemDesc_When_CreateConnectionFail_Expect_ReturnError | ExchangeMemDesc | 写路径 unique_lock + CheckLink 通过 + CreateConnection 失败,不入表 | | 4 | Ut_ExchangeMemDesc_When_ConnExists_Expect_Reuse | ExchangeMemDesc | 写路径 unique_lock + 已存在复用(else 分支),无重复插入 | | 5 | Ut_BatchPut_When_ConnNotFound_Expect_ThrowOutOfRange | BatchPut | 读路径 shared_lock + not-found 抛 out_of_range | | 6 | Ut_BatchGet_When_ConnNotFound_Expect_ThrowOutOfRange | BatchGet | 读路径 shared_lock + not-found 抛 out_of_range | | 7 | Ut_ConcurrentReads_When_MultiReadNotFound_Expect_NoDeadlock | BatchPut/BatchGet | **多线程**:8 读并发 shared_lock,async+wait_for(10s) | | 8 | Ut_ConcurrentReadWhileExchangeMemDesc_When_MixedReadWrite_Expect_NoDeadlock | ExchangeMemDesc + BatchPut | **多线程**:1 写(unique_lock) + 8 读(shared_lock),async+wait_for(10s) | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> NA ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [x] 📄 代码修改内容已简要描述,相关文档已更新 - [x] 📝 代码注释已更新,代码遵循项目整体代码风格 - [x] 🧪 代码UT测试已更新,覆盖率已达标 - [x] 🔬 验证方法已更新到"测试"部分 - [x] 🛠️ 代码已通过静态分析工具检查,无错误 - [x] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [x] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [x] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [x] 🔧 代码已通过compile,编译无错误,无告警 - [x] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [x] 📊 前冒烟 用例已全量通过 - [x] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2572 | 11 天前 | |
alter license Co-authored-by: maxinyuan1<maxinyuan2@h-partners.com> # message auto-generated for no-merge-commit merge: !941 merge master into master alter license Created-by: maxinyuan1 Commit-by: maxinyuan1 Merged-by: cann-robot Description: ## 描述 修改不规范的license ## 关联的Issue https://gitcode.com/cann/hccl/issues/50 ## 测试 编译成功 ## 文档更新 NA ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/hcomm!941 | 4 个月前 | |
legacy llt Co-authored-by: linzy_hccl<linzhiyang5@huawei.com> # message auto-generated for no-merge-commit merge: !542 merge lltv2 into master legacy llt Created-by: linzy_hccl Commit-by: linzy_hccl Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 增加legacy代码llt ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/hcomm!542 | 4 个月前 | |
profiling性能优化 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !3359 merge master into master profiling性能优化 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. 2. 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!3359 | 12 天前 | |
[build] update C++ version of LLT to C++ 17 Co-authored-by: ouyangcaike<ouyangcaike@h-partners.com> # message auto-generated for no-merge-commit merge: !2773 merge build-llt into master [build] update C++ version of LLT to C++ 17 Created-by: ouyangcaike Commit-by: ouyangcaike Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 升级 LLT 模块的 C++ 版本到 C++ 17 2. 修改LLT模块中所有 any() 为 mockcpp::any() ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [ ] 📝 文档更新 - [x] 📋 其他,请描述:工程构建 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> NA ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: - LLT 编译成功并运行正常 - 全量拦截任务通过 补充的UT用例: - NA ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> NA ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论 /lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [x] 📄 代码修改内容已简要描述,相关文档已更新 - [x] 📝 代码注释已更新,代码遵循项目整体代码风格 - [x] 🧪 代码UT测试已更新,覆盖率已达标 - [x] 🔬 验证方法已更新到"测试"部分 - [x] 🛠️ 代码已通过静态分析工具检查,无错误 - [x] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [x] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [x] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [x] 🔧 代码已通过compile,编译无错误,无告警 - [x] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [x] 📊 前冒烟 用例已全量通过 - [x] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2773 | 1 个月前 | |
profiling性能优化 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !3359 merge master into master profiling性能优化 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. 2. 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!3359 | 12 天前 | |
[build] update C++ version of LLT to C++ 17 Co-authored-by: ouyangcaike<ouyangcaike@h-partners.com> # message auto-generated for no-merge-commit merge: !2773 merge build-llt into master [build] update C++ version of LLT to C++ 17 Created-by: ouyangcaike Commit-by: ouyangcaike Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 升级 LLT 模块的 C++ 版本到 C++ 17 2. 修改LLT模块中所有 any() 为 mockcpp::any() ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [ ] 📝 文档更新 - [x] 📋 其他,请描述:工程构建 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR不涉及Issue,可填写"NA"。--> NA ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。--> 已完成的测试用例和场景: - LLT 编译成功并运行正常 - 全量拦截任务通过 补充的UT用例: - NA ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> NA ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论 /lgtm前的必要检查 - [x] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [x] 📄 代码修改内容已简要描述,相关文档已更新 - [x] 📝 代码注释已更新,代码遵循项目整体代码风格 - [x] 🧪 代码UT测试已更新,覆盖率已达标 - [x] 🔬 验证方法已更新到"测试"部分 - [x] 🛠️ 代码已通过静态分析工具检查,无错误 - [x] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [x] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [x] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [x] 🔧 代码已通过compile,编译无错误,无告警 - [x] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [x] 📊 前冒烟 用例已全量通过 - [x] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!2773 | 1 个月前 | |
profiling性能优化 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !3359 merge master into master profiling性能优化 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. 2. 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!3359 | 12 天前 | |
profiling性能优化 Co-authored-by: wlwy<wulinwenyuan@huawei.com> # message auto-generated for no-merge-commit merge: !3359 merge master into master profiling性能优化 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. 2. 补充的UT用例: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 合入检查 <!-- 在正式合入前,请做好必要的代码测试,用例补充,软件代码风格检查等。提高合入效率。--> <!-- [x] 表示选中 --> - [x] 🧐 已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 - [x] 🔍 邀请 committer评论/lgtm前的必要检查 - [ ] 🏷️ 标题中使用了合适的类型标签(如:[feat], [fix]) - [ ] 📄 代码修改内容已简要描述,相关文档已更新 - [ ] 📝 代码注释已更新,代码遵循项目整体代码风格 - [ ] 🧪 代码UT测试已更新,覆盖率已达标 - [ ] 🔬 验证方法已更新到"测试"部分 - [ ] 🛠️ 代码已通过静态分析工具检查,无错误 - [ ] 👥 代码检视/code review/同行评议和必要的代码串讲,确保代码质量 - [ ] ✅ 代码检视意见已处理或答复,无未处理的检视意见 - [x] 🚀 预约 前冒烟 用例前的必要检查 - [ ] ✔️ 代码已有committer的/lgtm 和 模块committer的/lgtm评论 - [ ] 🔧 代码已通过compile,编译无错误,无告警 - [ ] 🖥️ 代码已通过基本功能本地测试或者在线测试,确保基本功能正常 - [x] 🎯 预约 approver评论/approve,正式合入前的必要检查 - [ ] 📊 前冒烟 用例已全量通过 - [ ] 📦 新增功能已同步补充基本功能测试用例到前冒烟里 See merge request: cann/hcomm!3359 | 12 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 12 天前 | ||
| 11 天前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 12 天前 |