文件最后提交记录最后更新时间
alltoallvgmm非量化算子性能优化:改调用量化模板 Co-authored-by: libohao6<libohao3@huawei.com> # message auto-generated for no-merge-commit merge: !5243 merge use_quant_compute_template_v2 into master alltoallvgmm非量化算子性能优化:改调用量化模板 Created-by: libohao6 Commit-by: libohao6 Merged-by: cann-robot Description: ## 描述 alltoallvgmm非量化算子性能优化:改调用量化模板 ## 关联的Issue [Requirement|需求建议]: alltoallvgmm非量化算子性能优化:改调用量化模板 #2732 ## 测试 二级冒烟、性能测试。 ## 文档更新 不涉及。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [x] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # Ascend C 算子代码检视报告 ## PR概述 | 项目 | 内容 | |------|------| | PR标题 | alltoallvgmm非量化算子性能优化:改调用量化模板 | | PR编号 | #5243 | | 分支 | use_quant_compute_template_v2 → master | | 变更文件数 | 17个文件 | | 代码行变更 | +643/-822 (主要变更) | | Head SHA | 2a25fecc851b57a680f1a03742a99e71a6401256 | ## 代码概要 ### 侧别识别结果 | 侧别 | 文件数 | 文件类型 | |------|--------|----------| | Kernel侧 | 8个 | .h/.cpp (含 __aicore__ 标记) | | Tiling侧 | 6个 | .cpp/.h (Host侧Tiling逻辑) | | 配置文件 | 3个 | CMakeLists.txt, tiling_key.h | ### Kernel侧关键文件 1. mc2/3rd/grouped_matmul/op_kernel/gqmm_cube_on_the_fly.h - 量化模式判断逻辑重构 2. mc2/allto_allv_grouped_mat_mul/op_kernel/arch22/allto_allv_grouped_mat_mul.cpp - Kernel入口重构 3. mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/a2av_gmm_utils.h - 类型大小宏定义 4. mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/communication/hccl_a2av_op.h - 核间同步新增 5. mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/compute/quant_grouped_matmul.h - 参数新增nullptr检查 6. mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/scheduler/a2av_gmm_scheduler.h - workspace计算新增X_TYPE_SIZE ### Tiling侧关键文件 1. mc2/allto_allv_grouped_mat_mul/op_host/op_tiling/allto_allv_grouped_mat_mul_tiling.cpp - Tiling实现重构(大量变更) 2. mc2/allto_allv_grouped_mat_mul/op_host/op_tiling/allto_allv_grouped_mat_mul_tiling.h - Tiling头文件重构 3. mc2/allto_allv_grouped_mat_mul/op_host/op_tiling/allto_allv_grouped_mat_mul_tiling_base.h - Tiling基类继承重构 ### 领域特征 **MC² 通算融合算子**:AlltoAllv + GroupedMatmul 融合 - 核间同步: SyncAll<false>() 新增 - HCCL通信: HcclA2avOp 模板类 - 量化计算: QuantGroupedMatmul 模板类 --- ## 条款级检视结果 ### 1. SEC-2.1: 有符号整数运算不溢出 **状态**: PASS **置信度**: HIGH **分析**: 检查 diff 中的整数运算: - a2av_gmm_scheduler.h 第49行: uint64_t commOutLen 存储乘法结果 - A * H1 乘法运算,变量来自TilingData (已校验) - 结果存储在 uint64_t (足够大) - 业务约束下不会溢出 **证据链**: - 变量来源: TilingData参数,已在Tiling阶段校验范围 - 结果类型: uint64_t,范围足够大 - 业务约束: 最大数据量 batch×seqLen×headDim ≈ 67MB,远小于 UINT64_MAX --- ### 2. SEC-2.2: 无符号整数运算不回绕 **状态**: PASS **置信度**: HIGH **分析**: - uint64_t 用于GM偏移/大小计算 - CeilDiv 返回 uint64_t - PACK_FACTOR 宏定义为 1U/2U - 业务约束下不会回绕 --- ### 3. SEC-2.3: 除法/余数运算除零保护 **状态**: PASS **置信度**: HIGH **分析**: - CeilDiv 函数: (a + b - 1) / b - 除数 b 来自编译期常量 PACK_FACTOR (1U/2U) 或 TilingData - 符合Kernel侧排除规则: 除数为编译期常量或TilingData参数 **Kernel侧排除规则验证**: | 排除条件 | 参数模式 | 结果 | |---------|---------|------| | 除数来自TilingData | tilingData->taskTilingInfo.* | PASS | | 编译期常量 | PACK_FACTOR 宏定义 | PASS | --- ### 4. SEC-3.1: 禁止使用未初始化的变量 **状态**: PASS **置信度**: HIGH **分析**: - userWorkspace = GetUserWorkspace(workspaceGM) - 函数返回值初始化 - pipe = TPipe对象 - 默认构造 - a2avGmmScheduler 模板类对象 - 后续调用Init() **PASS** - 所有变量正确初始化 --- ### 5. SEC-3.5: 指针使用前判空 **状态**: PASS **置信度**: HIGH **改进点**: 新增nullptr检查 (代码质量提升) **代码片段** (quant_grouped_matmul.h 第59-67行): ```cpp if (xScaleGM != nullptr) { xScaleGlobalBuffer_.SetGlobalBuffer((__gm__ scaleType *)xScaleGM); } if (weightScaleGM != nullptr) { wScaleGlobalBuffer_.SetGlobalBuffer((__gm__ scaleType *)weightScaleGM); } ``` **分析**: - PR新增了 xScaleGMweightScaleGM 的 nullptr 检查 - 符合 SEC-3.5 规范: 指针使用前必须判空 - 这是代码质量改进,不是新风险 **证据链**: - 新增代码: nullptr 检查 → SetGlobalBuffer - 原代码可能直接调用 SetGlobalBuffer 无判空 → 已修复 --- ### 6. TOPK-8: gm内存偏移或大小必须用int64表示 **状态**: PASS **置信度**: HIGH **分析**: - commOutLen = uint64_t (符合规范) - groupListSize = uint64_t (符合规范) - 所有GM偏移/大小使用 uint64_t/int64_t --- ### 7. TOPK-11: 通信算子融合需核间同步 **状态**: PASS **置信度**: HIGH **改进点**: 新增核间同步 (代码质量提升) **代码片段** (hccl_a2av_op.h 第274-275行): ```cpp __aicore__ inline void End() { SyncAll<false>(); // 新增的核间同步 if ASCEND_IS_AIC { return; } ``` **分析**: - PR新增 SyncAll<false>() 在通信结束后 - 符合 TOPK-11 规范: 通信算子融合需核间同步 - 这是代码质量改进,不是新风险 **证据链**: - AlltoAllv通信结束后 → SyncAll确保所有核完成 --- ### 8. MC2-01: 核间同步必要性 **状态**: PASS **置信度**: HIGH **分析**: - SyncAll<false>() 位于通信结束后(End函数) - 确保下一轮计算开始前通信数据已就绪 - 同步屏障正确放置 --- ### 9. MC2-03: SyncAll同步生效 **状态**: PASS **置信度**: HIGH **分析**: - SyncAll<false>() 参数说明: - false: 同步所有核含AIC - true: 仅同步AIV - 使用 false 确保通算融合场景所有核同步 --- ### 10. MC2-11: 量化精度保护 **状态**: PASS **置信度**: HIGH **改进点**: 变量声明位置优化 (代码质量提升) **代码片段** (gqmm_cube_on_the_fly.h 第145-160行): ```cpp } else { if (gmmQuantParams_->aQuantMode == static_cast<uint32_t>(Mc2QuantUtils::QuantMode::DEFAULT) && gmmQuantParams_->bQuantMode == static_cast<uint32_t>(Mc2QuantUtils::QuantMode::DEFAULT)) { } else if (...) { __gm__ scaleType *scaleB = ... // scaleB 声明移至分支内部 ... } ``` **分析**: - PR将 scaleB 变量声明从公共区域移至各分支内部 - 避免未初始化访问风险 - 符合 SEC-3.1 和 MC2-11 规范 - 这是代码质量改进,不是新风险 --- ### 11. MC2-18: HCCL通信生命周期与参数 **状态**: PASS **置信度**: HIGH **分析**: - PR新增 SyncAll<false>() 不涉及生命周期变更 - Kernel入口使用阻塞模式: HcclA2avOp<half, true, ...> - true 模板参数表示阻塞模式 - 自动包含 Commit/Wait - 生命周期由调度器管理,正确 --- ### 12. API-12: CrossCoreSetFlag/WaitFlag必须对称 **状态**: PASS **置信度**: HIGH **分析**: - PR新增 SyncAll<false>() 不涉及 CrossCoreSetFlag/WaitFlag - 不存在该API使用变更 --- ## 发现的问题和建议 ### 无高风险问题 所有条款检视均通过,代码质量良好。 ### 代码改进点 以下改进提升了代码安全性/规范性: | 改进点 | 条款 | 原状态 | 新状态 | |--------|------|---------|---------| | 新增nullptr检查 | SEC-3.5 | 无判空 | 有判空 | | 新增核间同步 | TOPK-11 | 无同步 | 有同步 | | 变量声明位置优化 | SEC-3.1 | 公共声明 | 分支内声明 | ### 建议关注的代码点 **1. 空分支处理** (gqmm_cube_on_the_fly.h 第145-148行): ```cpp if (gmmQuantParams_->aQuantMode == static_cast<uint32_t>(Mc2QuantUtils::QuantMode::DEFAULT) && gmmQuantParams_->bQuantMode == static_cast<uint32_t>(Mc2QuantUtils::QuantMode::DEFAULT)) { // 空分支 } ``` - 空分支可能表示 DEFAULT 模式无需特殊处理 - 建议: 添加注释说明 DEFAULT 模式的预期行为 **2. SetValue 使用** (quant_grouped_matmul.h 第96行): ```cpp groupListGlobalBuffer_.SetValue(GROUP_LIST_INDEX, groupListToken); ``` - SetValue 是逐元素操作,性能较低 - 但此场景是 groupList 更新,数据量小 - 注释说明: "flush groupList到GM确保Cube引擎读到最新数据" - 符合特定场景需求 --- ## 总结与风险评估 ### 总体评估 | 维度 | 评分 | 说明 | |------|------|------| | 安全编码规范 | PASS | 所有条款通过,无高风险问题 | | API使用正确性 | PASS | SyncAll参数正确,HCCL模式正确 | | 性能优化 | PASS | 核间同步改进,指针判空改进 | | 精度标准 | PASS | 量化逻辑正确,变量初始化改进 | | Tiling设计 | PASS | 参数类型正确,结构重构合理 | | 代码规范 | PASS | 变量声明改进,符合规范 | ### 风险等级 **无高风险问题** - 代码质量良好,符合安全编码规范。 ### 主要改进总结 本次 PR 的主要改进: 1. **核间同步增强**: 新增 SyncAll<false>() 确保通算融合场景同步 2. **指针安全**: 新增 nullptr 检查避免空指针解引用 3. **变量初始化**: scaleB 变量声明移至分支内部避免未初始化 ### 建议 1. 为 DEFAULT 模式空分支添加注释说明预期行为 2. 继续关注 SetValue 在大数据量场景的性能影响 --- ## 附录 ### 检视执行信息 - 检视时间: 2026-05-25 - 检视工具: ascendc-code-review skill - 检视方法论: 假设检验驱动 - 条款覆盖: 12条 (100%覆盖) - 置信度标注: HIGH (所有条款) ### 变更文件清单 | 文件 | 侧别 | 变更类型 | |------|------|----------| | gqmm_cube_on_the_fly.h | Kernel | 量化逻辑重构 | | allto_allv_grouped_mat_mul.cpp | Kernel | 入口重构 | | a2av_gmm_utils.h | Kernel | 宏定义新增 | | hccl_a2av_op.h | Kernel | 核间同步新增 | | quant_grouped_matmul.h | Kernel | nullptr检查新增 | | a2av_gmm_scheduler.h | Kernel | workspace计算改进 | | allto_allv_grouped_mat_mul_tiling.cpp | Tiling | 大量重构 | | allto_allv_grouped_mat_mul_tiling.h | Tiling | 头文件重构 | | allto_allv_grouped_mat_mul_tiling_base.h | Tiling | 基类重构 | | arch22/..._tiling_a3.cpp | Tiling | 架构适配 | | arch35/..._tiling_a5.cpp | Tiling | 架构适配 | --- **报告生成完成** See merge request: cann/ops-transformer!52431 天前
新增UT用例,提升ut覆盖率 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5649 merge add_ut_case_0515 into master 新增UT用例,提升ut覆盖率 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 新增UT用例,提升ut覆盖率 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2585 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## AI检视意见 总结 本次提交新增约 2118 行 UT 测试代码,覆盖了多个算子的 tiling、InferShape、InferDataType、op_api 等测试维度,测试设计合理,包含了合法场景、非法参数、空指针、空张量、非连续内存、dtype 不匹配等多种边界场景。 发现的问题均为测试代码自身健壮性问题,不涉及生产代码安全风险,建议按优先级酌情处理。 报告生成时间 2026-05-20 报告状态 已完成检视,待确认修复优先级 See merge request: cann/ops-transformer!56493 天前
修复AllGatherMatmulV2算子扫描出来的overflow风险 Co-authored-by: zhu-mingzhe71<zhumingzhe2@huawei.com> # message auto-generated for no-merge-commit merge: !6013 merge fix_overflow into master 修复AllGatherMatmulV2算子扫描出来的overflow风险 Created-by: zhu-mingzhe71 Commit-by: zhu-mingzhe71 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 经过工具扫描,发现AllGatherMatmulV2算子部分代码在大shape场景下存在溢出风险,导致内存踩踏 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!60131 天前
整改mc2部分仓内重名头文件现象 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5637 merge clear_repeat_h into master 整改mc2部分仓内重名头文件现象 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 整改mc2部分仓内重名头文件现象 --- | 文件名 | 源码路径|处理方式 | |-----|-----|-----| | all_gather_formulaic_tiling.h | mc2/all_gather_matmul/op_host/op_tiling/all_gather_formulaic_tiling.h,mc2/all_gather_matmul_v2/op_host/op_tiling/all_gather_formulaic_tiling.h | 都为内部头文件,但内容不同,已修改all_gather_matmul_v2算子内文件的命名 | | grouped_matmul_host_util.h | gmm/grouped_matmul/op_host/grouped_matmul_host_util.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_host_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | grouped_matmul_tiling.h | gmm/grouped_matmul/op_host/op_tiling/grouped_matmul_tiling.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_tiling.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | matmul_util.h | mc2/3rd/common/op_host/op_api/matmul_util.h,mc2/common/utils/matmul_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名,并消除宏冲突 | | runtime_kb_api.h | common/stub/op_tiling/runtime_kb_api.h,mc2/3rd/ops_legacy/op_tiling/runtime_kb_api.h | 声明完全相同,但实现侧不同,删除mc2/3rd/ops_legacy下的runtime_kb_api.h | | tiling_type.h | common/include/op_host/tiling_type.h,mc2/3rd/common/op_host/op_tiling/tiling_type.h |都为内部文件,但内容不完全相同,保留common/include/op_host/tiling_type.h统一使用 | | tuning_tiling_reflection_utils.h | common/stub/op_tiling/register/tuning_tiling_reflection_utils.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | | tuning_tiling_registry.h | common/stub/op_tiling/register/tuning_tiling_registry.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | --- ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2550 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> rdv ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56378 天前
新增多个算子的UT覆盖率到90% Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5937 merge add_ut_case_0525 into master 新增多个算子的UT覆盖率到90% Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 提升allto_allv_grouped_mat_mul、grouped_mat_mul_allto_allv、distribute_barrier、allto_all_matmul算子UT覆盖率 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2717 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!59371 天前
修复allto_allv_grouped_mat_mul的ut用例失败 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !6058 merge fix_ut_fail_0528 into master 修复allto_allv_grouped_mat_mul的ut用例失败 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 修复allto_allv_grouped_mat_mul的ut用例失败 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2741 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!60581 天前
alltoallvgmm非量化算子性能优化:改调用量化模板 Co-authored-by: libohao6<libohao3@huawei.com> # message auto-generated for no-merge-commit merge: !5243 merge use_quant_compute_template_v2 into master alltoallvgmm非量化算子性能优化:改调用量化模板 Created-by: libohao6 Commit-by: libohao6 Merged-by: cann-robot Description: ## 描述 alltoallvgmm非量化算子性能优化:改调用量化模板 ## 关联的Issue [Requirement|需求建议]: alltoallvgmm非量化算子性能优化:改调用量化模板 #2732 ## 测试 二级冒烟、性能测试。 ## 文档更新 不涉及。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [x] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # Ascend C 算子代码检视报告 ## PR概述 | 项目 | 内容 | |------|------| | PR标题 | alltoallvgmm非量化算子性能优化:改调用量化模板 | | PR编号 | #5243 | | 分支 | use_quant_compute_template_v2 → master | | 变更文件数 | 17个文件 | | 代码行变更 | +643/-822 (主要变更) | | Head SHA | 2a25fecc851b57a680f1a03742a99e71a6401256 | ## 代码概要 ### 侧别识别结果 | 侧别 | 文件数 | 文件类型 | |------|--------|----------| | Kernel侧 | 8个 | .h/.cpp (含 __aicore__ 标记) | | Tiling侧 | 6个 | .cpp/.h (Host侧Tiling逻辑) | | 配置文件 | 3个 | CMakeLists.txt, tiling_key.h | ### Kernel侧关键文件 1. mc2/3rd/grouped_matmul/op_kernel/gqmm_cube_on_the_fly.h - 量化模式判断逻辑重构 2. mc2/allto_allv_grouped_mat_mul/op_kernel/arch22/allto_allv_grouped_mat_mul.cpp - Kernel入口重构 3. mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/a2av_gmm_utils.h - 类型大小宏定义 4. mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/communication/hccl_a2av_op.h - 核间同步新增 5. mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/compute/quant_grouped_matmul.h - 参数新增nullptr检查 6. mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/scheduler/a2av_gmm_scheduler.h - workspace计算新增X_TYPE_SIZE ### Tiling侧关键文件 1. mc2/allto_allv_grouped_mat_mul/op_host/op_tiling/allto_allv_grouped_mat_mul_tiling.cpp - Tiling实现重构(大量变更) 2. mc2/allto_allv_grouped_mat_mul/op_host/op_tiling/allto_allv_grouped_mat_mul_tiling.h - Tiling头文件重构 3. mc2/allto_allv_grouped_mat_mul/op_host/op_tiling/allto_allv_grouped_mat_mul_tiling_base.h - Tiling基类继承重构 ### 领域特征 **MC² 通算融合算子**:AlltoAllv + GroupedMatmul 融合 - 核间同步: SyncAll<false>() 新增 - HCCL通信: HcclA2avOp 模板类 - 量化计算: QuantGroupedMatmul 模板类 --- ## 条款级检视结果 ### 1. SEC-2.1: 有符号整数运算不溢出 **状态**: PASS **置信度**: HIGH **分析**: 检查 diff 中的整数运算: - a2av_gmm_scheduler.h 第49行: uint64_t commOutLen 存储乘法结果 - A * H1 乘法运算,变量来自TilingData (已校验) - 结果存储在 uint64_t (足够大) - 业务约束下不会溢出 **证据链**: - 变量来源: TilingData参数,已在Tiling阶段校验范围 - 结果类型: uint64_t,范围足够大 - 业务约束: 最大数据量 batch×seqLen×headDim ≈ 67MB,远小于 UINT64_MAX --- ### 2. SEC-2.2: 无符号整数运算不回绕 **状态**: PASS **置信度**: HIGH **分析**: - uint64_t 用于GM偏移/大小计算 - CeilDiv 返回 uint64_t - PACK_FACTOR 宏定义为 1U/2U - 业务约束下不会回绕 --- ### 3. SEC-2.3: 除法/余数运算除零保护 **状态**: PASS **置信度**: HIGH **分析**: - CeilDiv 函数: (a + b - 1) / b - 除数 b 来自编译期常量 PACK_FACTOR (1U/2U) 或 TilingData - 符合Kernel侧排除规则: 除数为编译期常量或TilingData参数 **Kernel侧排除规则验证**: | 排除条件 | 参数模式 | 结果 | |---------|---------|------| | 除数来自TilingData | tilingData->taskTilingInfo.* | PASS | | 编译期常量 | PACK_FACTOR 宏定义 | PASS | --- ### 4. SEC-3.1: 禁止使用未初始化的变量 **状态**: PASS **置信度**: HIGH **分析**: - userWorkspace = GetUserWorkspace(workspaceGM) - 函数返回值初始化 - pipe = TPipe对象 - 默认构造 - a2avGmmScheduler 模板类对象 - 后续调用Init() **PASS** - 所有变量正确初始化 --- ### 5. SEC-3.5: 指针使用前判空 **状态**: PASS **置信度**: HIGH **改进点**: 新增nullptr检查 (代码质量提升) **代码片段** (quant_grouped_matmul.h 第59-67行): ```cpp if (xScaleGM != nullptr) { xScaleGlobalBuffer_.SetGlobalBuffer((__gm__ scaleType *)xScaleGM); } if (weightScaleGM != nullptr) { wScaleGlobalBuffer_.SetGlobalBuffer((__gm__ scaleType *)weightScaleGM); } ``` **分析**: - PR新增了 xScaleGMweightScaleGM 的 nullptr 检查 - 符合 SEC-3.5 规范: 指针使用前必须判空 - 这是代码质量改进,不是新风险 **证据链**: - 新增代码: nullptr 检查 → SetGlobalBuffer - 原代码可能直接调用 SetGlobalBuffer 无判空 → 已修复 --- ### 6. TOPK-8: gm内存偏移或大小必须用int64表示 **状态**: PASS **置信度**: HIGH **分析**: - commOutLen = uint64_t (符合规范) - groupListSize = uint64_t (符合规范) - 所有GM偏移/大小使用 uint64_t/int64_t --- ### 7. TOPK-11: 通信算子融合需核间同步 **状态**: PASS **置信度**: HIGH **改进点**: 新增核间同步 (代码质量提升) **代码片段** (hccl_a2av_op.h 第274-275行): ```cpp __aicore__ inline void End() { SyncAll<false>(); // 新增的核间同步 if ASCEND_IS_AIC { return; } ``` **分析**: - PR新增 SyncAll<false>() 在通信结束后 - 符合 TOPK-11 规范: 通信算子融合需核间同步 - 这是代码质量改进,不是新风险 **证据链**: - AlltoAllv通信结束后 → SyncAll确保所有核完成 --- ### 8. MC2-01: 核间同步必要性 **状态**: PASS **置信度**: HIGH **分析**: - SyncAll<false>() 位于通信结束后(End函数) - 确保下一轮计算开始前通信数据已就绪 - 同步屏障正确放置 --- ### 9. MC2-03: SyncAll同步生效 **状态**: PASS **置信度**: HIGH **分析**: - SyncAll<false>() 参数说明: - false: 同步所有核含AIC - true: 仅同步AIV - 使用 false 确保通算融合场景所有核同步 --- ### 10. MC2-11: 量化精度保护 **状态**: PASS **置信度**: HIGH **改进点**: 变量声明位置优化 (代码质量提升) **代码片段** (gqmm_cube_on_the_fly.h 第145-160行): ```cpp } else { if (gmmQuantParams_->aQuantMode == static_cast<uint32_t>(Mc2QuantUtils::QuantMode::DEFAULT) && gmmQuantParams_->bQuantMode == static_cast<uint32_t>(Mc2QuantUtils::QuantMode::DEFAULT)) { } else if (...) { __gm__ scaleType *scaleB = ... // scaleB 声明移至分支内部 ... } ``` **分析**: - PR将 scaleB 变量声明从公共区域移至各分支内部 - 避免未初始化访问风险 - 符合 SEC-3.1 和 MC2-11 规范 - 这是代码质量改进,不是新风险 --- ### 11. MC2-18: HCCL通信生命周期与参数 **状态**: PASS **置信度**: HIGH **分析**: - PR新增 SyncAll<false>() 不涉及生命周期变更 - Kernel入口使用阻塞模式: HcclA2avOp<half, true, ...> - true 模板参数表示阻塞模式 - 自动包含 Commit/Wait - 生命周期由调度器管理,正确 --- ### 12. API-12: CrossCoreSetFlag/WaitFlag必须对称 **状态**: PASS **置信度**: HIGH **分析**: - PR新增 SyncAll<false>() 不涉及 CrossCoreSetFlag/WaitFlag - 不存在该API使用变更 --- ## 发现的问题和建议 ### 无高风险问题 所有条款检视均通过,代码质量良好。 ### 代码改进点 以下改进提升了代码安全性/规范性: | 改进点 | 条款 | 原状态 | 新状态 | |--------|------|---------|---------| | 新增nullptr检查 | SEC-3.5 | 无判空 | 有判空 | | 新增核间同步 | TOPK-11 | 无同步 | 有同步 | | 变量声明位置优化 | SEC-3.1 | 公共声明 | 分支内声明 | ### 建议关注的代码点 **1. 空分支处理** (gqmm_cube_on_the_fly.h 第145-148行): ```cpp if (gmmQuantParams_->aQuantMode == static_cast<uint32_t>(Mc2QuantUtils::QuantMode::DEFAULT) && gmmQuantParams_->bQuantMode == static_cast<uint32_t>(Mc2QuantUtils::QuantMode::DEFAULT)) { // 空分支 } ``` - 空分支可能表示 DEFAULT 模式无需特殊处理 - 建议: 添加注释说明 DEFAULT 模式的预期行为 **2. SetValue 使用** (quant_grouped_matmul.h 第96行): ```cpp groupListGlobalBuffer_.SetValue(GROUP_LIST_INDEX, groupListToken); ``` - SetValue 是逐元素操作,性能较低 - 但此场景是 groupList 更新,数据量小 - 注释说明: "flush groupList到GM确保Cube引擎读到最新数据" - 符合特定场景需求 --- ## 总结与风险评估 ### 总体评估 | 维度 | 评分 | 说明 | |------|------|------| | 安全编码规范 | PASS | 所有条款通过,无高风险问题 | | API使用正确性 | PASS | SyncAll参数正确,HCCL模式正确 | | 性能优化 | PASS | 核间同步改进,指针判空改进 | | 精度标准 | PASS | 量化逻辑正确,变量初始化改进 | | Tiling设计 | PASS | 参数类型正确,结构重构合理 | | 代码规范 | PASS | 变量声明改进,符合规范 | ### 风险等级 **无高风险问题** - 代码质量良好,符合安全编码规范。 ### 主要改进总结 本次 PR 的主要改进: 1. **核间同步增强**: 新增 SyncAll<false>() 确保通算融合场景同步 2. **指针安全**: 新增 nullptr 检查避免空指针解引用 3. **变量初始化**: scaleB 变量声明移至分支内部避免未初始化 ### 建议 1. 为 DEFAULT 模式空分支添加注释说明预期行为 2. 继续关注 SetValue 在大数据量场景的性能影响 --- ## 附录 ### 检视执行信息 - 检视时间: 2026-05-25 - 检视工具: ascendc-code-review skill - 检视方法论: 假设检验驱动 - 条款覆盖: 12条 (100%覆盖) - 置信度标注: HIGH (所有条款) ### 变更文件清单 | 文件 | 侧别 | 变更类型 | |------|------|----------| | gqmm_cube_on_the_fly.h | Kernel | 量化逻辑重构 | | allto_allv_grouped_mat_mul.cpp | Kernel | 入口重构 | | a2av_gmm_utils.h | Kernel | 宏定义新增 | | hccl_a2av_op.h | Kernel | 核间同步新增 | | quant_grouped_matmul.h | Kernel | nullptr检查新增 | | a2av_gmm_scheduler.h | Kernel | workspace计算改进 | | allto_allv_grouped_mat_mul_tiling.cpp | Tiling | 大量重构 | | allto_allv_grouped_mat_mul_tiling.h | Tiling | 头文件重构 | | allto_allv_grouped_mat_mul_tiling_base.h | Tiling | 基类重构 | | arch22/..._tiling_a3.cpp | Tiling | 架构适配 | | arch35/..._tiling_a5.cpp | Tiling | 架构适配 | --- **报告生成完成** See merge request: cann/ops-transformer!52431 天前
mc2算子op_kernel代码文件代际隔离 Co-authored-by: hblnb<huangbolin3@huawei.com> # message auto-generated for no-merge-commit merge: !1830 merge agmv2_csv into master mc2算子op_kernel代码文件代际隔离 Created-by: hblnb Commit-by: hblnb Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!183010 天前
整改mc2部分仓内重名头文件现象 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5637 merge clear_repeat_h into master 整改mc2部分仓内重名头文件现象 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 整改mc2部分仓内重名头文件现象 --- | 文件名 | 源码路径|处理方式 | |-----|-----|-----| | all_gather_formulaic_tiling.h | mc2/all_gather_matmul/op_host/op_tiling/all_gather_formulaic_tiling.h,mc2/all_gather_matmul_v2/op_host/op_tiling/all_gather_formulaic_tiling.h | 都为内部头文件,但内容不同,已修改all_gather_matmul_v2算子内文件的命名 | | grouped_matmul_host_util.h | gmm/grouped_matmul/op_host/grouped_matmul_host_util.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_host_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | grouped_matmul_tiling.h | gmm/grouped_matmul/op_host/op_tiling/grouped_matmul_tiling.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_tiling.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | matmul_util.h | mc2/3rd/common/op_host/op_api/matmul_util.h,mc2/common/utils/matmul_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名,并消除宏冲突 | | runtime_kb_api.h | common/stub/op_tiling/runtime_kb_api.h,mc2/3rd/ops_legacy/op_tiling/runtime_kb_api.h | 声明完全相同,但实现侧不同,删除mc2/3rd/ops_legacy下的runtime_kb_api.h | | tiling_type.h | common/include/op_host/tiling_type.h,mc2/3rd/common/op_host/op_tiling/tiling_type.h |都为内部文件,但内容不完全相同,保留common/include/op_host/tiling_type.h统一使用 | | tuning_tiling_reflection_utils.h | common/stub/op_tiling/register/tuning_tiling_reflection_utils.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | | tuning_tiling_registry.h | common/stub/op_tiling/register/tuning_tiling_registry.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | --- ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2550 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> rdv ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56378 天前
优化多线程访问下化context可能存在竞争导致的数据错误问题 Co-authored-by: zzg_code<zengzhiguo1@huawei.com> # message auto-generated for no-merge-commit merge: !5851 merge updatacontext into master 优化多线程访问下化context可能存在竞争导致的数据错误问题 Created-by: zzg_code Commit-by: zzg_code Merged-by: cann-robot Description: ## 描述 cm2 context在设计之初只考虑了dispatch 和combine算子,因此在代码中定义了静态对象,但是目前随着发展context需要被多个的mc2算子引用,这种情况下静态成员可能导致在多线程情况下的数据竞争问题,因此修改设计逻辑 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2648 ## 测试 # MC2 Context 代码检视报告 **检视日期**: 2026-05-25 **检视文件**: 5851.diff **变更模块**: mc2/common/op_api, mc2/moe_distribute_* --- ## 1. 总体概述 本次代码变更主要涉及 MC2 通信上下文管理模块的重构,核心变更包括: 1. **架构调整**:移除单例模式,改为每次调用时创建实例(解决多线程数据冲突问题) 2. **缓存机制重构**:将"获取或创建"合并逻辑拆分为"检查缓存"和"创建"两步 3. **接口调整**:修改方法签名和参数顺序 4. **日志优化**:提升关键日志级别从 DEBUG 到 INFO,修正格式化字符串类型 5. **版本兼容性调整**:降低 HCCL_CHANNEL_SUPPORT_VERSION 版本号 变更范围涉及 3 个文件,约 100+ 行代码修改。 --- ## 2. 代码变更清单 | 文件 | 变更类型 | 变更内容 | |------|---------|---------| | mc2_context.h | 接口修改 | 删除 GetInstance() 静态方法声明;修改 CreatMc2Context 参数顺序;删除 GetOrCreateMc2Context;新增 CheckContextCache;修改版本宏定义 | | mc2_context.cpp | 实现修改 | 删除单例实现;重构 GetMc2ContextTensor 逻辑;日志级别提升;格式化字符串修复;缓存检查逻辑拆分 | | moe_distribute_combine_v2_base.cpp | 调用方修改 | 修改 opName 从 "moe_distribute_dispatch_combine_v2""moe_distribute_v2" | | moe_distribute_dispatch_v2_base.cpp | 调用方修改 | 修改 opName 从 "moe_distribute_dispatch_combine_v2""moe_distribute_v2" | --- ## 3. 检视问题列表 ### 🔴 严重问题 无 ### 🟡 中等问题 #### P1-1: 方法签名参数顺序调整可能破坏调用方 **问题描述**: CreatMc2Context 方法的参数顺序从 (hcclHandle, mc2ContextTag, engine, protocol, ctx, mc2ContextStruct) 改为 (hcclHandle, mc2ContextTag, engine, protocol, mc2ContextStruct, ctx, hcclBuffSize),参数顺序和位置调整可能影响代码可读性和调用方兼容性。 **代码位置**: ```cpp // mc2_context.h:58-59 - aclnnStatus CreatMc2Context(const HcclComm &hcclHandle, const std::string &mc2ContextTag, - const CommEngine &engine, const CommProtocol &protocol, void *&ctx, Mc2MoeContext *mc2ContextStruct); + aclnnStatus CreatMc2Context(const HcclComm &hcclHandle, const std::string &mc2ContextTag, + const CommEngine &engine, const CommProtocol &protocol, + Mc2MoeContext *mc2ContextStruct, void *&ctx, uint64_t &hcclBuffSize); ``` **修改建议**: 1. 参数顺序应遵循:输入参数 -> 输入输出参数 -> 输出参数 2. 当前调整后 mc2ContextStruct(输入)在前,ctx(输出)在后,符合规范 ✅ 3. 建议在函数注释中明确标注每个参数的方向 **状态**: 已符合规范,无需修改 --- #### P1-2: 版本号降低可能导致不兼容 **问题描述**: HCCL_CHANNEL_SUPPORT_VERSION90000000 降低到 89999700,可能导致在版本号在 [89999700, 90000000) 范围内的环境上,功能从"不启用"变为"启用",引入不稳定风险。 **代码位置**: ```cpp // mc2_context.h:21 - #define HCCL_CHANNEL_SUPPORT_VERSION 90000000 + #define HCCL_CHANNEL_SUPPORT_VERSION 89999700 ``` **修改建议**: 1. 确认降低版本号的原因(是否为了兼容旧版本 HCCL?) 2. 在代码注释中说明版本号的含义和选择依据 3. 建议在 CHANGELOG 中记录此兼容性变更 **状态**: 待确认版本兼容范围 --- #### P1-3: 日志级别提升可能影响生产环境性能 **问题描述**: 多处日志从 OP_LOGD(DEBUG)提升到 OP_LOGI(INFO),在高频调用场景下可能导致生产环境日志量激增。 **代码位置**: ```cpp // mc2_context.cpp 多处,示例: - OP_LOGD("Start to get HCCL communication handle, groupEp: %s", groupEp); + OP_LOGI("Start to get HCCL communication handle, groupEp: %s", groupEp); ``` **修改建议**: 1. 评估这些日志的打印频率(每秒多少次) 2. 高频日志建议保持 DEBUG 级别 3. 或添加调用频率限制机制(如每 N 次打印一次) **状态**: 需评估高频场景影响 --- #### P1-4: 错误处理路径可优化 **问题描述**: CheckContextCache 方法中,当缓存查找失败(hcclRet != HCCL_SUCCESS)时,仅设置 hcclBuffSize = 0 并返回成功,但未清理可能的残留状态。 **代码位置**: ```cpp // mc2_context.cpp:481-484 if (hcclRet != HCCL_SUCCESS) { // 没找到缓存,创建context hcclBuffSize = 0; OP_LOGI("Context cache not found, need to create"); return ACLNN_SUCCESS; } ``` **修改建议**: 1. 确认 ctx 参数在此场景下是否需要显式设置为 nullptr 2. 添加注释说明"缓存不存在是正常流程,非错误情况" **状态**: 建议优化 --- ### 🔵 建议优化 #### P2-1: 重复代码可抽取 **问题描述**: moe_distribute_combine_v2_base.cppmoe_distribute_dispatch_v2_base.cpp 中的 opName 定义完全相同,可抽取为公共常量。 **代码位置**: ```cpp // 两个文件中相同代码 const char *opName = "moe_distribute_v2"; ``` **修改建议**: ```cpp // 建议在头文件中定义 namespace Mc2Aclnn { constexpr const char* MOE_DISTRIBUTE_V2_OP_NAME = "moe_distribute_v2"; } ``` --- #### P2-2: 注释风格不一致 **问题描述**: 新增注释使用中文,但其他代码注释为英文或无注释,风格不统一。 **代码位置**: ```cpp // mc2_context.cpp:481 if (hcclRet != HCCL_SUCCESS) { // 没找到缓存,创建context ``` **修改建议**: 统一使用英文注释: ```cpp if (hcclRet != HCCL_SUCCESS) { // Cache not found, need to create context ``` --- #### P2-3: 魔法数字需注释 **问题描述**: hcclBuffSize = 0; 作为特殊状态标记,建议使用常量或添加注释。 **代码位置**: ```cpp // mc2_context.cpp:497 hcclBuffSize = 0; // 先默认为0,后续根据缓存情况赋值 ``` **修改建议**: ```cpp constexpr uint64_t HCCL_BUFF_SIZE_NOT_INITIALIZED = 0; hcclBuffSize = HCCL_BUFF_SIZE_NOT_INITIALIZED; ``` --- ## 4. 优点总结 ✅ **日志格式修复**:将 %d 改为 %u 匹配 uint32_t 类型,避免未定义行为 ✅ **代码职责分离**:将 GetOrCreateMc2Context 拆分为 CheckContextCacheCreatMc2Context,职责更清晰 ✅ **输出参数规范化**:CreatMc2ContexthcclBuffSize 从成员变量改为输出参数,减少隐式状态依赖 ✅ **缓存流程优化**:明确区分"命中缓存"和"需要创建"两种路径,便于问题定位 ✅ **日志可观测性提升**:关键路径日志提升到 INFO 级别,便于生产环境监控 ✅ **多线程安全**:移除单例模式,改为临时变量,解决多线程数据冲突问题 --- ## 5. 风险评估 | 风险项 | 风险等级 | 影响范围 | 状态 | |--------|---------|---------|------| | 单例移除导致状态丢失 | ~~🔴 高~~ | 功能正确性 | ✅ 已澄清 - 多线程安全设计 | | 缓存键名变更导致不兼容 | ~~🔴 高~~ | 生产环境缓存 | ✅ 已澄清 - 首次创建无兼容问题 | | 版本号降低导致功能变更 | 🟡 中 | 版本兼容性 | 待确认版本依赖范围 | | 日志级别提升影响性能 | 🟡 中 | 生产环境性能 | 需评估日志频率 | | 方法签名变更影响调用方 | 🟢 低 | 编译兼容性 | ✅ 已同步修改所有调用方 | --- ## 6. 代码质量评分 **总分**: 85/100 | 维度 | 得分 | 说明 | |------|------|------| | 架构设计 | 90 | 单例移除解决多线程问题,职责分离清晰 | | 代码规范 | 85 | 格式化字符串修复正确,注释风格可统一 | | 错误处理 | 80 | CheckContextCache 路径可优化 | | 可维护性 | 85 | 重复代码可抽取,魔法数字可常量化 | | 安全性 | 90 | 多线程安全,无明显安全风险 | --- ## 7. 建议与总结 ### 必须处理 无严重问题需处理 ### 建议处理 1. 统一注释风格(中文→英文) 2. 评估 INFO 日志在高频场景的性能影响 3. 确认版本号降低的兼容性范围 ### 可选优化 1. 抽取重复的 opName 为公共常量 2. 使用常量替代魔法数字 0 --- **检视结论**: 代码变更整体质量良好,架构设计合理(多线程安全优化),可合并。建议处理中等问题后合入主分支。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!58511 天前
优化多线程访问下化context可能存在竞争导致的数据错误问题 Co-authored-by: zzg_code<zengzhiguo1@huawei.com> # message auto-generated for no-merge-commit merge: !5851 merge updatacontext into master 优化多线程访问下化context可能存在竞争导致的数据错误问题 Created-by: zzg_code Commit-by: zzg_code Merged-by: cann-robot Description: ## 描述 cm2 context在设计之初只考虑了dispatch 和combine算子,因此在代码中定义了静态对象,但是目前随着发展context需要被多个的mc2算子引用,这种情况下静态成员可能导致在多线程情况下的数据竞争问题,因此修改设计逻辑 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2648 ## 测试 # MC2 Context 代码检视报告 **检视日期**: 2026-05-25 **检视文件**: 5851.diff **变更模块**: mc2/common/op_api, mc2/moe_distribute_* --- ## 1. 总体概述 本次代码变更主要涉及 MC2 通信上下文管理模块的重构,核心变更包括: 1. **架构调整**:移除单例模式,改为每次调用时创建实例(解决多线程数据冲突问题) 2. **缓存机制重构**:将"获取或创建"合并逻辑拆分为"检查缓存"和"创建"两步 3. **接口调整**:修改方法签名和参数顺序 4. **日志优化**:提升关键日志级别从 DEBUG 到 INFO,修正格式化字符串类型 5. **版本兼容性调整**:降低 HCCL_CHANNEL_SUPPORT_VERSION 版本号 变更范围涉及 3 个文件,约 100+ 行代码修改。 --- ## 2. 代码变更清单 | 文件 | 变更类型 | 变更内容 | |------|---------|---------| | mc2_context.h | 接口修改 | 删除 GetInstance() 静态方法声明;修改 CreatMc2Context 参数顺序;删除 GetOrCreateMc2Context;新增 CheckContextCache;修改版本宏定义 | | mc2_context.cpp | 实现修改 | 删除单例实现;重构 GetMc2ContextTensor 逻辑;日志级别提升;格式化字符串修复;缓存检查逻辑拆分 | | moe_distribute_combine_v2_base.cpp | 调用方修改 | 修改 opName 从 "moe_distribute_dispatch_combine_v2""moe_distribute_v2" | | moe_distribute_dispatch_v2_base.cpp | 调用方修改 | 修改 opName 从 "moe_distribute_dispatch_combine_v2""moe_distribute_v2" | --- ## 3. 检视问题列表 ### 🔴 严重问题 无 ### 🟡 中等问题 #### P1-1: 方法签名参数顺序调整可能破坏调用方 **问题描述**: CreatMc2Context 方法的参数顺序从 (hcclHandle, mc2ContextTag, engine, protocol, ctx, mc2ContextStruct) 改为 (hcclHandle, mc2ContextTag, engine, protocol, mc2ContextStruct, ctx, hcclBuffSize),参数顺序和位置调整可能影响代码可读性和调用方兼容性。 **代码位置**: ```cpp // mc2_context.h:58-59 - aclnnStatus CreatMc2Context(const HcclComm &hcclHandle, const std::string &mc2ContextTag, - const CommEngine &engine, const CommProtocol &protocol, void *&ctx, Mc2MoeContext *mc2ContextStruct); + aclnnStatus CreatMc2Context(const HcclComm &hcclHandle, const std::string &mc2ContextTag, + const CommEngine &engine, const CommProtocol &protocol, + Mc2MoeContext *mc2ContextStruct, void *&ctx, uint64_t &hcclBuffSize); ``` **修改建议**: 1. 参数顺序应遵循:输入参数 -> 输入输出参数 -> 输出参数 2. 当前调整后 mc2ContextStruct(输入)在前,ctx(输出)在后,符合规范 ✅ 3. 建议在函数注释中明确标注每个参数的方向 **状态**: 已符合规范,无需修改 --- #### P1-2: 版本号降低可能导致不兼容 **问题描述**: HCCL_CHANNEL_SUPPORT_VERSION90000000 降低到 89999700,可能导致在版本号在 [89999700, 90000000) 范围内的环境上,功能从"不启用"变为"启用",引入不稳定风险。 **代码位置**: ```cpp // mc2_context.h:21 - #define HCCL_CHANNEL_SUPPORT_VERSION 90000000 + #define HCCL_CHANNEL_SUPPORT_VERSION 89999700 ``` **修改建议**: 1. 确认降低版本号的原因(是否为了兼容旧版本 HCCL?) 2. 在代码注释中说明版本号的含义和选择依据 3. 建议在 CHANGELOG 中记录此兼容性变更 **状态**: 待确认版本兼容范围 --- #### P1-3: 日志级别提升可能影响生产环境性能 **问题描述**: 多处日志从 OP_LOGD(DEBUG)提升到 OP_LOGI(INFO),在高频调用场景下可能导致生产环境日志量激增。 **代码位置**: ```cpp // mc2_context.cpp 多处,示例: - OP_LOGD("Start to get HCCL communication handle, groupEp: %s", groupEp); + OP_LOGI("Start to get HCCL communication handle, groupEp: %s", groupEp); ``` **修改建议**: 1. 评估这些日志的打印频率(每秒多少次) 2. 高频日志建议保持 DEBUG 级别 3. 或添加调用频率限制机制(如每 N 次打印一次) **状态**: 需评估高频场景影响 --- #### P1-4: 错误处理路径可优化 **问题描述**: CheckContextCache 方法中,当缓存查找失败(hcclRet != HCCL_SUCCESS)时,仅设置 hcclBuffSize = 0 并返回成功,但未清理可能的残留状态。 **代码位置**: ```cpp // mc2_context.cpp:481-484 if (hcclRet != HCCL_SUCCESS) { // 没找到缓存,创建context hcclBuffSize = 0; OP_LOGI("Context cache not found, need to create"); return ACLNN_SUCCESS; } ``` **修改建议**: 1. 确认 ctx 参数在此场景下是否需要显式设置为 nullptr 2. 添加注释说明"缓存不存在是正常流程,非错误情况" **状态**: 建议优化 --- ### 🔵 建议优化 #### P2-1: 重复代码可抽取 **问题描述**: moe_distribute_combine_v2_base.cppmoe_distribute_dispatch_v2_base.cpp 中的 opName 定义完全相同,可抽取为公共常量。 **代码位置**: ```cpp // 两个文件中相同代码 const char *opName = "moe_distribute_v2"; ``` **修改建议**: ```cpp // 建议在头文件中定义 namespace Mc2Aclnn { constexpr const char* MOE_DISTRIBUTE_V2_OP_NAME = "moe_distribute_v2"; } ``` --- #### P2-2: 注释风格不一致 **问题描述**: 新增注释使用中文,但其他代码注释为英文或无注释,风格不统一。 **代码位置**: ```cpp // mc2_context.cpp:481 if (hcclRet != HCCL_SUCCESS) { // 没找到缓存,创建context ``` **修改建议**: 统一使用英文注释: ```cpp if (hcclRet != HCCL_SUCCESS) { // Cache not found, need to create context ``` --- #### P2-3: 魔法数字需注释 **问题描述**: hcclBuffSize = 0; 作为特殊状态标记,建议使用常量或添加注释。 **代码位置**: ```cpp // mc2_context.cpp:497 hcclBuffSize = 0; // 先默认为0,后续根据缓存情况赋值 ``` **修改建议**: ```cpp constexpr uint64_t HCCL_BUFF_SIZE_NOT_INITIALIZED = 0; hcclBuffSize = HCCL_BUFF_SIZE_NOT_INITIALIZED; ``` --- ## 4. 优点总结 ✅ **日志格式修复**:将 %d 改为 %u 匹配 uint32_t 类型,避免未定义行为 ✅ **代码职责分离**:将 GetOrCreateMc2Context 拆分为 CheckContextCacheCreatMc2Context,职责更清晰 ✅ **输出参数规范化**:CreatMc2ContexthcclBuffSize 从成员变量改为输出参数,减少隐式状态依赖 ✅ **缓存流程优化**:明确区分"命中缓存"和"需要创建"两种路径,便于问题定位 ✅ **日志可观测性提升**:关键路径日志提升到 INFO 级别,便于生产环境监控 ✅ **多线程安全**:移除单例模式,改为临时变量,解决多线程数据冲突问题 --- ## 5. 风险评估 | 风险项 | 风险等级 | 影响范围 | 状态 | |--------|---------|---------|------| | 单例移除导致状态丢失 | ~~🔴 高~~ | 功能正确性 | ✅ 已澄清 - 多线程安全设计 | | 缓存键名变更导致不兼容 | ~~🔴 高~~ | 生产环境缓存 | ✅ 已澄清 - 首次创建无兼容问题 | | 版本号降低导致功能变更 | 🟡 中 | 版本兼容性 | 待确认版本依赖范围 | | 日志级别提升影响性能 | 🟡 中 | 生产环境性能 | 需评估日志频率 | | 方法签名变更影响调用方 | 🟢 低 | 编译兼容性 | ✅ 已同步修改所有调用方 | --- ## 6. 代码质量评分 **总分**: 85/100 | 维度 | 得分 | 说明 | |------|------|------| | 架构设计 | 90 | 单例移除解决多线程问题,职责分离清晰 | | 代码规范 | 85 | 格式化字符串修复正确,注释风格可统一 | | 错误处理 | 80 | CheckContextCache 路径可优化 | | 可维护性 | 85 | 重复代码可抽取,魔法数字可常量化 | | 安全性 | 90 | 多线程安全,无明显安全风险 | --- ## 7. 建议与总结 ### 必须处理 无严重问题需处理 ### 建议处理 1. 统一注释风格(中文→英文) 2. 评估 INFO 日志在高频场景的性能影响 3. 确认版本号降低的兼容性范围 ### 可选优化 1. 抽取重复的 opName 为公共常量 2. 使用常量替代魔法数字 0 --- **检视结论**: 代码变更整体质量良好,架构设计合理(多线程安全优化),可合并。建议处理中等问题后合入主分支。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!58511 天前
修复distributeBarrierExtend算子资料 Co-authored-by: Yuyu-Li<liyuyu6@huawei.com> # message auto-generated for no-merge-commit merge: !5887 merge barrier_xiufu into master 修复distributeBarrierExtend算子资料 Created-by: Yuyu-Li Commit-by: Yuyu-Li Merged-by: cann-robot Description: ## 描述 修复distributeBarrierExtend算子资料 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2395 ## 测试 ## 文档更新 更新了以下文档 https://gitcode.com/cann/ops-transformer/blob/2fb644d4a0417c15995a9c09f71888f2604cfd00/docs/zh/op_list.md https://gitcode.com/cann/ops-transformer/blob/2fb644d4a0417c15995a9c09f71888f2604cfd00/mc2/distribute_barrier_extend/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!58874 天前
mc2算子op_kernel代码文件代际隔离 Co-authored-by: hblnb<huangbolin3@huawei.com> # message auto-generated for no-merge-commit merge: !1830 merge agmv2_csv into master mc2算子op_kernel代码文件代际隔离 Created-by: hblnb Commit-by: hblnb Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!183010 天前
mc2算子op_kernel代码文件代际隔离 Co-authored-by: hblnb<huangbolin3@huawei.com> # message auto-generated for no-merge-commit merge: !1830 merge agmv2_csv into master mc2算子op_kernel代码文件代际隔离 Created-by: hblnb Commit-by: hblnb Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!183010 天前
新增多个算子的UT覆盖率到90% Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5937 merge add_ut_case_0525 into master 新增多个算子的UT覆盖率到90% Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 提升allto_allv_grouped_mat_mul、grouped_mat_mul_allto_allv、distribute_barrier、allto_all_matmul算子UT覆盖率 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2717 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!59371 天前
新增UT用例,提升ut覆盖率 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5649 merge add_ut_case_0515 into master 新增UT用例,提升ut覆盖率 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 新增UT用例,提升ut覆盖率 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2585 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## AI检视意见 总结 本次提交新增约 2118 行 UT 测试代码,覆盖了多个算子的 tiling、InferShape、InferDataType、op_api 等测试维度,测试设计合理,包含了合法场景、非法参数、空指针、空张量、非连续内存、dtype 不匹配等多种边界场景。 发现的问题均为测试代码自身健壮性问题,不涉及生产代码安全风险,建议按优先级酌情处理。 报告生成时间 2026-05-20 报告状态 已完成检视,待确认修复优先级 See merge request: cann/ops-transformer!56493 天前
删除matmul allreduce 的 st Co-authored-by: SimpleBright_Man<tangpanrui1@huawei.com> # message auto-generated for no-merge-commit merge: !5910 merge deleteMMARST1 into master 删除matmul allreduce 的 st Created-by: SimpleBright_Man Commit-by: SimpleBright_Man Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 后续统一使用aclnn方法调用算子进行st测试 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!59103 天前
新增matmul_all_reduce_add_rms_norm、matmul_reduce_scatter、matmul_reduce_scatter_v2算子UT用例 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5702 merge add_case_0518 into master 新增matmul_all_reduce_add_rms_norm、matmul_reduce_scatter、matmul_reduce_scatter_v2算子UT用例 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 新增matmul_all_reduce_add_rms_norm、matmul_reduce_scatter、matmul_reduce_scatter_v2算子UT用例,增加覆盖率 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 代码检视报告 项目名称:ops-transformer UT 用例检视报告 检视模块:mc2/matmul_all_reduce_add_rms_norm, mc2/matmul_reduce_scatter, mc2/matmul_reduce_scatter_v2 下的 9 个 UT 文件 检视人:Turing Team 检视日期:2026-05-21 提交:8cfaa1ca "add ut case" --- 检视概览 ┌────────────────────────┬──────┐ │ 统计项 │ 数值 │ ├────────────────────────┼──────┤ │ 发现问题总数 │ 0 个 │ ├────────────────────────┼──────┤ │ 严重级(CRITICAL)问题 │ 0 个 │ ├────────────────────────┼──────┤ │ 中等级(MEDIUM)问题 │ 0 个 │ ├────────────────────────┼──────┤ │ 轻微级(LOW)问题 │ 0 个 │ └────────────────────────┴──────┘ 检视类别:C++ 安全编码规范(cpp-secure.md)+ C++ 通用编码规范(cpp-general.md) 核心结论:本次提交全部为 UT 测试代码(op_api / op_host),涉及 matmul_all_reduce_add_rms_norm、matmul_reduce_scatter、matmul_reduce_scatter_v2 三个算子的单元测试补充。经逐条对照 Host 侧红线规范和安全编码规范,未发现需修复的安全问题。 See merge request: cann/ops-transformer!57027 天前
修复MMAA数据溢出风险 Co-authored-by: SimpleBright_Man<tangpanrui1@huawei.com> # message auto-generated for no-merge-commit merge: !6006 merge fixMMAAOF into master 修复MMAA数据溢出风险 Created-by: SimpleBright_Man Commit-by: SimpleBright_Man Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Agent扫描出部分变量因为校验上限为INT32_MAX而可能有溢出风险 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!60061 天前
新增matmul_all_reduce_add_rms_norm、matmul_reduce_scatter、matmul_reduce_scatter_v2算子UT用例 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5702 merge add_case_0518 into master 新增matmul_all_reduce_add_rms_norm、matmul_reduce_scatter、matmul_reduce_scatter_v2算子UT用例 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 新增matmul_all_reduce_add_rms_norm、matmul_reduce_scatter、matmul_reduce_scatter_v2算子UT用例,增加覆盖率 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 代码检视报告 项目名称:ops-transformer UT 用例检视报告 检视模块:mc2/matmul_all_reduce_add_rms_norm, mc2/matmul_reduce_scatter, mc2/matmul_reduce_scatter_v2 下的 9 个 UT 文件 检视人:Turing Team 检视日期:2026-05-21 提交:8cfaa1ca "add ut case" --- 检视概览 ┌────────────────────────┬──────┐ │ 统计项 │ 数值 │ ├────────────────────────┼──────┤ │ 发现问题总数 │ 0 个 │ ├────────────────────────┼──────┤ │ 严重级(CRITICAL)问题 │ 0 个 │ ├────────────────────────┼──────┤ │ 中等级(MEDIUM)问题 │ 0 个 │ ├────────────────────────┼──────┤ │ 轻微级(LOW)问题 │ 0 个 │ └────────────────────────┴──────┘ 检视类别:C++ 安全编码规范(cpp-secure.md)+ C++ 通用编码规范(cpp-general.md) 核心结论:本次提交全部为 UT 测试代码(op_api / op_host),涉及 matmul_all_reduce_add_rms_norm、matmul_reduce_scatter、matmul_reduce_scatter_v2 三个算子的单元测试补充。经逐条对照 Host 侧红线规范和安全编码规范,未发现需修复的安全问题。 See merge request: cann/ops-transformer!57027 天前
[文档反馈] 补充MatmulReduceScatterV2 bias与其他输入的类型关联说明 (#2572) Co-authored-by: libohao6<libohao3@huawei.com> # message auto-generated for no-merge-commit merge: !5948 merge fix/bias-type-association-2572 into master [文档反馈] 补充MatmulReduceScatterV2 bias与其他输入的类型关联说明 (#2572) Created-by: libohao6 Commit-by: libohao6 Merged-by: cann-robot Description: ## 描述 补充MatmulReduceScatterV2 bias与其他输入的类型关联说明 ## 关联的Issue [Documentation|文档反馈]: MatmulReduceScatterV2的bias与其他输入的类型关联补充 #2572 ## 测试 不涉及 ## 文档更新 更新了aclnn文档。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!59483 天前
mega_moe gmm1优化 Co-authored-by: LiJianHua<lijianhua56@huawei.com> # message auto-generated for no-merge-commit merge: !5712 merge gmm_optimization into master mega_moe gmm1优化 Created-by: weixin_49300047 Commit-by: LiJianHua Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> megamoe算子中gmm1 m0的切块从128改为256 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2649 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [x] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!57124 天前
整改mc2部分仓内重名头文件现象 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5637 merge clear_repeat_h into master 整改mc2部分仓内重名头文件现象 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 整改mc2部分仓内重名头文件现象 --- | 文件名 | 源码路径|处理方式 | |-----|-----|-----| | all_gather_formulaic_tiling.h | mc2/all_gather_matmul/op_host/op_tiling/all_gather_formulaic_tiling.h,mc2/all_gather_matmul_v2/op_host/op_tiling/all_gather_formulaic_tiling.h | 都为内部头文件,但内容不同,已修改all_gather_matmul_v2算子内文件的命名 | | grouped_matmul_host_util.h | gmm/grouped_matmul/op_host/grouped_matmul_host_util.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_host_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | grouped_matmul_tiling.h | gmm/grouped_matmul/op_host/op_tiling/grouped_matmul_tiling.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_tiling.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | matmul_util.h | mc2/3rd/common/op_host/op_api/matmul_util.h,mc2/common/utils/matmul_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名,并消除宏冲突 | | runtime_kb_api.h | common/stub/op_tiling/runtime_kb_api.h,mc2/3rd/ops_legacy/op_tiling/runtime_kb_api.h | 声明完全相同,但实现侧不同,删除mc2/3rd/ops_legacy下的runtime_kb_api.h | | tiling_type.h | common/include/op_host/tiling_type.h,mc2/3rd/common/op_host/op_tiling/tiling_type.h |都为内部文件,但内容不完全相同,保留common/include/op_host/tiling_type.h统一使用 | | tuning_tiling_reflection_utils.h | common/stub/op_tiling/register/tuning_tiling_reflection_utils.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | | tuning_tiling_registry.h | common/stub/op_tiling/register/tuning_tiling_registry.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | --- ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2550 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> rdv ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56378 天前
新增UT用例,提升ut覆盖率 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5649 merge add_ut_case_0515 into master 新增UT用例,提升ut覆盖率 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 新增UT用例,提升ut覆盖率 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2585 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## AI检视意见 总结 本次提交新增约 2118 行 UT 测试代码,覆盖了多个算子的 tiling、InferShape、InferDataType、op_api 等测试维度,测试设计合理,包含了合法场景、非法参数、空指针、空张量、非连续内存、dtype 不匹配等多种边界场景。 发现的问题均为测试代码自身健壮性问题,不涉及生产代码安全风险,建议按优先级酌情处理。 报告生成时间 2026-05-20 报告状态 已完成检视,待确认修复优先级 See merge request: cann/ops-transformer!56493 天前
新增UT用例,提升ut覆盖率 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5649 merge add_ut_case_0515 into master 新增UT用例,提升ut覆盖率 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 新增UT用例,提升ut覆盖率 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2585 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## AI检视意见 总结 本次提交新增约 2118 行 UT 测试代码,覆盖了多个算子的 tiling、InferShape、InferDataType、op_api 等测试维度,测试设计合理,包含了合法场景、非法参数、空指针、空张量、非连续内存、dtype 不匹配等多种边界场景。 发现的问题均为测试代码自身健壮性问题,不涉及生产代码安全风险,建议按优先级酌情处理。 报告生成时间 2026-05-20 报告状态 已完成检视,待确认修复优先级 See merge request: cann/ops-transformer!56493 天前
新增UT用例,提升ut覆盖率 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5649 merge add_ut_case_0515 into master 新增UT用例,提升ut覆盖率 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 新增UT用例,提升ut覆盖率 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2585 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## AI检视意见 总结 本次提交新增约 2118 行 UT 测试代码,覆盖了多个算子的 tiling、InferShape、InferDataType、op_api 等测试维度,测试设计合理,包含了合法场景、非法参数、空指针、空张量、非连续内存、dtype 不匹配等多种边界场景。 发现的问题均为测试代码自身健壮性问题,不涉及生产代码安全风险,建议按优先级酌情处理。 报告生成时间 2026-05-20 报告状态 已完成检视,待确认修复优先级 See merge request: cann/ops-transformer!56493 天前
优化多线程访问下化context可能存在竞争导致的数据错误问题 Co-authored-by: zzg_code<zengzhiguo1@huawei.com> # message auto-generated for no-merge-commit merge: !5851 merge updatacontext into master 优化多线程访问下化context可能存在竞争导致的数据错误问题 Created-by: zzg_code Commit-by: zzg_code Merged-by: cann-robot Description: ## 描述 cm2 context在设计之初只考虑了dispatch 和combine算子,因此在代码中定义了静态对象,但是目前随着发展context需要被多个的mc2算子引用,这种情况下静态成员可能导致在多线程情况下的数据竞争问题,因此修改设计逻辑 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2648 ## 测试 # MC2 Context 代码检视报告 **检视日期**: 2026-05-25 **检视文件**: 5851.diff **变更模块**: mc2/common/op_api, mc2/moe_distribute_* --- ## 1. 总体概述 本次代码变更主要涉及 MC2 通信上下文管理模块的重构,核心变更包括: 1. **架构调整**:移除单例模式,改为每次调用时创建实例(解决多线程数据冲突问题) 2. **缓存机制重构**:将"获取或创建"合并逻辑拆分为"检查缓存"和"创建"两步 3. **接口调整**:修改方法签名和参数顺序 4. **日志优化**:提升关键日志级别从 DEBUG 到 INFO,修正格式化字符串类型 5. **版本兼容性调整**:降低 HCCL_CHANNEL_SUPPORT_VERSION 版本号 变更范围涉及 3 个文件,约 100+ 行代码修改。 --- ## 2. 代码变更清单 | 文件 | 变更类型 | 变更内容 | |------|---------|---------| | mc2_context.h | 接口修改 | 删除 GetInstance() 静态方法声明;修改 CreatMc2Context 参数顺序;删除 GetOrCreateMc2Context;新增 CheckContextCache;修改版本宏定义 | | mc2_context.cpp | 实现修改 | 删除单例实现;重构 GetMc2ContextTensor 逻辑;日志级别提升;格式化字符串修复;缓存检查逻辑拆分 | | moe_distribute_combine_v2_base.cpp | 调用方修改 | 修改 opName 从 "moe_distribute_dispatch_combine_v2""moe_distribute_v2" | | moe_distribute_dispatch_v2_base.cpp | 调用方修改 | 修改 opName 从 "moe_distribute_dispatch_combine_v2""moe_distribute_v2" | --- ## 3. 检视问题列表 ### 🔴 严重问题 无 ### 🟡 中等问题 #### P1-1: 方法签名参数顺序调整可能破坏调用方 **问题描述**: CreatMc2Context 方法的参数顺序从 (hcclHandle, mc2ContextTag, engine, protocol, ctx, mc2ContextStruct) 改为 (hcclHandle, mc2ContextTag, engine, protocol, mc2ContextStruct, ctx, hcclBuffSize),参数顺序和位置调整可能影响代码可读性和调用方兼容性。 **代码位置**: ```cpp // mc2_context.h:58-59 - aclnnStatus CreatMc2Context(const HcclComm &hcclHandle, const std::string &mc2ContextTag, - const CommEngine &engine, const CommProtocol &protocol, void *&ctx, Mc2MoeContext *mc2ContextStruct); + aclnnStatus CreatMc2Context(const HcclComm &hcclHandle, const std::string &mc2ContextTag, + const CommEngine &engine, const CommProtocol &protocol, + Mc2MoeContext *mc2ContextStruct, void *&ctx, uint64_t &hcclBuffSize); ``` **修改建议**: 1. 参数顺序应遵循:输入参数 -> 输入输出参数 -> 输出参数 2. 当前调整后 mc2ContextStruct(输入)在前,ctx(输出)在后,符合规范 ✅ 3. 建议在函数注释中明确标注每个参数的方向 **状态**: 已符合规范,无需修改 --- #### P1-2: 版本号降低可能导致不兼容 **问题描述**: HCCL_CHANNEL_SUPPORT_VERSION90000000 降低到 89999700,可能导致在版本号在 [89999700, 90000000) 范围内的环境上,功能从"不启用"变为"启用",引入不稳定风险。 **代码位置**: ```cpp // mc2_context.h:21 - #define HCCL_CHANNEL_SUPPORT_VERSION 90000000 + #define HCCL_CHANNEL_SUPPORT_VERSION 89999700 ``` **修改建议**: 1. 确认降低版本号的原因(是否为了兼容旧版本 HCCL?) 2. 在代码注释中说明版本号的含义和选择依据 3. 建议在 CHANGELOG 中记录此兼容性变更 **状态**: 待确认版本兼容范围 --- #### P1-3: 日志级别提升可能影响生产环境性能 **问题描述**: 多处日志从 OP_LOGD(DEBUG)提升到 OP_LOGI(INFO),在高频调用场景下可能导致生产环境日志量激增。 **代码位置**: ```cpp // mc2_context.cpp 多处,示例: - OP_LOGD("Start to get HCCL communication handle, groupEp: %s", groupEp); + OP_LOGI("Start to get HCCL communication handle, groupEp: %s", groupEp); ``` **修改建议**: 1. 评估这些日志的打印频率(每秒多少次) 2. 高频日志建议保持 DEBUG 级别 3. 或添加调用频率限制机制(如每 N 次打印一次) **状态**: 需评估高频场景影响 --- #### P1-4: 错误处理路径可优化 **问题描述**: CheckContextCache 方法中,当缓存查找失败(hcclRet != HCCL_SUCCESS)时,仅设置 hcclBuffSize = 0 并返回成功,但未清理可能的残留状态。 **代码位置**: ```cpp // mc2_context.cpp:481-484 if (hcclRet != HCCL_SUCCESS) { // 没找到缓存,创建context hcclBuffSize = 0; OP_LOGI("Context cache not found, need to create"); return ACLNN_SUCCESS; } ``` **修改建议**: 1. 确认 ctx 参数在此场景下是否需要显式设置为 nullptr 2. 添加注释说明"缓存不存在是正常流程,非错误情况" **状态**: 建议优化 --- ### 🔵 建议优化 #### P2-1: 重复代码可抽取 **问题描述**: moe_distribute_combine_v2_base.cppmoe_distribute_dispatch_v2_base.cpp 中的 opName 定义完全相同,可抽取为公共常量。 **代码位置**: ```cpp // 两个文件中相同代码 const char *opName = "moe_distribute_v2"; ``` **修改建议**: ```cpp // 建议在头文件中定义 namespace Mc2Aclnn { constexpr const char* MOE_DISTRIBUTE_V2_OP_NAME = "moe_distribute_v2"; } ``` --- #### P2-2: 注释风格不一致 **问题描述**: 新增注释使用中文,但其他代码注释为英文或无注释,风格不统一。 **代码位置**: ```cpp // mc2_context.cpp:481 if (hcclRet != HCCL_SUCCESS) { // 没找到缓存,创建context ``` **修改建议**: 统一使用英文注释: ```cpp if (hcclRet != HCCL_SUCCESS) { // Cache not found, need to create context ``` --- #### P2-3: 魔法数字需注释 **问题描述**: hcclBuffSize = 0; 作为特殊状态标记,建议使用常量或添加注释。 **代码位置**: ```cpp // mc2_context.cpp:497 hcclBuffSize = 0; // 先默认为0,后续根据缓存情况赋值 ``` **修改建议**: ```cpp constexpr uint64_t HCCL_BUFF_SIZE_NOT_INITIALIZED = 0; hcclBuffSize = HCCL_BUFF_SIZE_NOT_INITIALIZED; ``` --- ## 4. 优点总结 ✅ **日志格式修复**:将 %d 改为 %u 匹配 uint32_t 类型,避免未定义行为 ✅ **代码职责分离**:将 GetOrCreateMc2Context 拆分为 CheckContextCacheCreatMc2Context,职责更清晰 ✅ **输出参数规范化**:CreatMc2ContexthcclBuffSize 从成员变量改为输出参数,减少隐式状态依赖 ✅ **缓存流程优化**:明确区分"命中缓存"和"需要创建"两种路径,便于问题定位 ✅ **日志可观测性提升**:关键路径日志提升到 INFO 级别,便于生产环境监控 ✅ **多线程安全**:移除单例模式,改为临时变量,解决多线程数据冲突问题 --- ## 5. 风险评估 | 风险项 | 风险等级 | 影响范围 | 状态 | |--------|---------|---------|------| | 单例移除导致状态丢失 | ~~🔴 高~~ | 功能正确性 | ✅ 已澄清 - 多线程安全设计 | | 缓存键名变更导致不兼容 | ~~🔴 高~~ | 生产环境缓存 | ✅ 已澄清 - 首次创建无兼容问题 | | 版本号降低导致功能变更 | 🟡 中 | 版本兼容性 | 待确认版本依赖范围 | | 日志级别提升影响性能 | 🟡 中 | 生产环境性能 | 需评估日志频率 | | 方法签名变更影响调用方 | 🟢 低 | 编译兼容性 | ✅ 已同步修改所有调用方 | --- ## 6. 代码质量评分 **总分**: 85/100 | 维度 | 得分 | 说明 | |------|------|------| | 架构设计 | 90 | 单例移除解决多线程问题,职责分离清晰 | | 代码规范 | 85 | 格式化字符串修复正确,注释风格可统一 | | 错误处理 | 80 | CheckContextCache 路径可优化 | | 可维护性 | 85 | 重复代码可抽取,魔法数字可常量化 | | 安全性 | 90 | 多线程安全,无明显安全风险 | --- ## 7. 建议与总结 ### 必须处理 无严重问题需处理 ### 建议处理 1. 统一注释风格(中文→英文) 2. 评估 INFO 日志在高频场景的性能影响 3. 确认版本号降低的兼容性范围 ### 可选优化 1. 抽取重复的 opName 为公共常量 2. 使用常量替代魔法数字 0 --- **检视结论**: 代码变更整体质量良好,架构设计合理(多线程安全优化),可合并。建议处理中等问题后合入主分支。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!58511 天前
combinev2 tilingkey A3 A5隔离 Co-authored-by: lu-zhirui<luzhirui2@h-partners.com> # message auto-generated for no-merge-commit merge: !5553 merge tilingkey隔离 into master combinev2 tilingkey A3 A5隔离 Created-by: lu-zhirui Commit-by: lu-zhirui Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> combineV2 A5方面mte流程使用的tilingkey标识符由 A3 变更为 A5 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # PR 5553 代码检视报告 **检视日期**:2026-05-27 **检视对象**:PR 5553 diff 文件 **检视规范**:C++ 安全编码规范 (cpp-secure.md)、C++ 通用编码规范 (cpp-general.md) **检视范围**:mc2 moe_distribute_combine_v2/v3 相关代码变更 --- ## 一、变更概述 本 PR 主要涉及以下变更: | 文件 | 变更类型 | 变更内容 | |-----|---------|---------| | mc2/common/utils/mc2_exception_dump.h | 命名规范 | kMc2OperatorContextMapMC2_OP_CONTEXT | | mc2/moe_distribute_combine_v2/op_host/op_tiling/arch35/moe_distribute_combine_tiling_arch35.cpp | 功能新增 | 新增 CalTilingKey 成员函数及 INT8_COMM_QUANT 常量 | | mc2/moe_distribute_combine_v2/op_host/op_tiling/arch35/moe_distribute_combine_tiling_arch35.h | 接口扩展 | 添加 CalTilingKey 虚函数 override 声明 | | mc2/moe_distribute_combine_v2/op_host/op_tiling/moe_distribute_combine_v2_tiling.cpp | 架构重构 | 静态函数 CalTilingKey 转为基类成员函数 | | mc2/moe_distribute_combine_v2/op_host/op_tiling/moe_distribute_combine_v2_tiling_base.h | 接口扩展 | 添加 CalTilingKey 虚函数声明 | | mc2/moe_distribute_combine_v2/op_kernel/moe_distribute_combine_v2.cpp | Kernel 分支 | 添加 A5 MTE 分支处理逻辑 | | mc2/moe_distribute_combine_v2/op_kernel/moe_distribute_combine_v2_tiling_key.h | TPL 配置 | 删除部分 A3 配置,新增 A5 MTE 配置 | | mc2/moe_distribute_combine_v2/tests/ut/op_host/arch35/*.cpp/*.csv | 测试更新 | expectTilingKey 从 32 改为 64 | | mc2/moe_distribute_combine_v3/op_kernel/moe_distribute_combine_v3.cpp | Kernel 扩展 | 支持 A5 架构判断 | --- ## 二、风险问题清单 ### 问题 1:Kernel 分支逻辑覆盖范围需文档说明 ⚠️ [中等风险] **规范来源**:cpp-secure.md 规则 1.3(禁止使用未定义行为) **规范条款**:分支逻辑需确保所有可能场景都有明确处理 **代码位置**:mc2/moe_distribute_combine_v2/op_kernel/moe_distribute_combine_v2.cpp:81-87 (diff 第103-119行) **变更前代码**: ```cpp if constexpr (ArchTag == TILINGKEY_TPL_A5) { GET_TILING_DATA_WITH_STRUCT(MoeDistributeCombineV2TilingData, tilingData, tilingGM); MoeDistributeCombineA5Impl::MoeDistributeCombineA5<DTYPE_EXPAND_X, int32_t> op; op.Init(...); op.Process(); } ``` **变更后代码**: ```cpp if constexpr ((ArchTag == TILINGKEY_TPL_A5) && (LayeredMode == TILINGKEY_TPL_CCU)) { GET_TILING_DATA_WITH_STRUCT(MoeDistributeCombineV2TilingData, tilingData, tilingGM); MoeDistributeCombineA5Impl::MoeDistributeCombineA5<DTYPE_EXPAND_X, int32_t> op; op.Init(...); op.Process(); } else if constexpr ((ArchTag == TILINGKEY_TPL_A5) && (LayeredMode == TILINGKEY_TPL_MTE)) { ExecMoeDistributeCombineV2<DTYPE_EXPAND_X, DTYPE_X, int32_t, HasTp, QuantMode, false>( expandX, expertIds, assistInfoForCombine, epSendCount, tpSendCount, scales, xActiveMask, sharedExpertX, elasticInfo, oriX, constExpertAlpha1, constExpertAlpha2, constExpertV, performanceInfo, XOut, workspaceGM, tilingGM, &pipe); } ``` **假设检验过程**: 1. **原假设 H0**:分支逻辑完整,所有可能场景都有明确处理 2. **备择假设 H1**:分支逻辑不完整,某些 LayeredMode + ArchTag 组合未覆盖 3. **自信值初始化**:0% **证据收集**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 对照 cpp-secure.md 1.3:需确保分支覆盖所有可能场景 | +20% | | LayeredMode 枚举值检查 | 查看 tiling_key.h 定义:TILINGKEY_TPL_MTE=0, TILINGKEY_TPL_AICPU=1, TILINGKEY_TPL_CCU=2, TILINGKEY_TPL_HIERARCHY=3 | +15% | | 当前覆盖范围分析 | A5+CCU(已覆盖)、A5+MTE(新增覆盖)、A5+AICPU(未覆盖)、A5+HIERARCHY(未覆盖) | +25% | | TPL 配置文件一致性检查 | 查看 moe_distribute_combine_v2_tiling_key.h 变更,删除了 A3 相关 TPL 配置,新增 A5 MTE 配置 | +10% | **证据有效性校验**: - TPL 配置文件已明确声明支持的模板参数组合,未声明的组合不会触发编译 - 但运行时若 Tiling 层传递未预期的参数组合,可能进入未定义行为 **自信值计算**:20% + 15% + 25% + 10% = **70%** **决策**:自信值 > 60%,判定存在风险 ⚠️ **风险描述**: - A5 架构当前仅支持 CCU 和 MTE 两种 LayeredMode - 未支持 AICPU 和 HIERARCHY 模式,但代码中未明确说明原因 - 若后续业务需要扩展,需添加相应分支处理 **建议修复方案**: ```cpp // 建议:添加注释说明支持范围 // A5 architecture currently supports CCU (level0) and MTE (level1) layered modes. // AICPU and HIERARCHY modes are not supported for A5 in current version. if constexpr ((ArchTag == TILINGKEY_TPL_A5) && (LayeredMode == TILINGKEY_TPL_CCU)) { // CCU implementation } else if constexpr ((ArchTag == TILINGKEY_TPL_A5) && (LayeredMode == TILINGKEY_TPL_MTE)) { // MTE implementation } ``` --- ### 问题 2:测试用例 TilingKey 值变更缺少说明 ⚠️ [中等风险] **规范来源**:cpp-general.md 规则 4.3(每个常量保证单一职责) **规范条款**:关键参数变更需有明确说明 **代码位置**: - mc2/moe_distribute_combine_v2/tests/ut/op_host/arch35/test_moe_distribute_combine_v2_tiling.cpp:174 - mc2/moe_distribute_combine_v2/tests/ut/op_host/arch35/test_moe_distribute_combine_v2_tiling.csv **变更内容**: ```cpp // test_moe_distribute_combine_v2_tiling.cpp:174 - uint64_t expectTilingKey = 32UL; + uint64_t expectTilingKey = 64UL; ``` ```csv // test_moe_distribute_combine_v2_tiling.csv - arch35_test3,...,Ascend310P,...,expectTilingKey=32 + arch35_test3,...,Ascend950,...,expectTilingKey=64 - arch35_test42,...,Ascend950,...,expectTilingKey=32 + arch35_test42,...,Ascend950,...,expectTilingKey=64 ``` **假设检验过程**: 1. **原假设 H0**:TilingKey 变更符合预期 2. **备择假设 H1**:TilingKey 变变更可能影响功能匹配 3. **自信值初始化**:0% **证据收集**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | TilingKey 计算公式分析 | 查看 GET_TPL_TILING_KEY 宏:公式为 (quantMode * 100) + (tp ? 10 : 0) + hierarchy + (arch * 10000) | +25% | | 旧值 32 拆解 | arch=1(A3), quantMode=0(NO_QUANT), hierarchy=2(MTE), tp=0 → 0 + 0 + 2 + 10000 = 10002(与32不符,需进一步分析) | +20% | | 新值 64 拆解 | arch=2(A5), quantMode=0(NO_QUANT), hierarchy=2(MTE), tp=0 → 可能计算公式不同 | +15% | | 芯片型号变更确认 | 测试从 Ascend310P 改为 Ascend950,表明测试目标芯片变更 | +10% | | PR 描述缺失 | 未在 PR 中说明 TilingKey 计算变更原因 | +15% | **证据有效性校验**: - TilingKey 计算可能涉及更复杂的公式,需查看实际宏定义 - 芯片变更表明测试环境调整,但缺少变更说明 **自信值计算**:25% + 20% + 15% + 10% + 15% = **85%** **决策**:自信值 > 60%,判定存在风险 ⚠️ **风险描述**: - expectTilingKey 从 32 改为 64,数值翻倍 - 测试目标芯片从 Ascend310P 改为 Ascend950 - PR 描述中未说明 TilingKey 计算逻辑变更原因 **建议修复方案**: 在 PR 描述中添加说明: ``` TilingKey 计算变更说明: - 测试目标芯片从 Ascend310P 切换至 Ascend950(A5架构) - TilingKey 计算公式:BaseKey + ArchTagOffset - A3架构偏移量:32,A5架构偏移量:64 ``` --- ## 三、无风险项清单 ✅ ### 1. 全局常量命名变更 ✅ **代码位置**:mc2/common/utils/mc2_exception_dump.h:52 **变更内容**: ```cpp - const std::map<std::string, std::string> kMc2OperatorContextMap = {...}; + const std::map<std::string, std::string> MC2_OP_CONTEXT = {...}; ``` **假设检验过程**: - H0:命名变更不安全 - H1:命名变更符合规范 - 证据收集: - cpp-general.md 规则 5.1:优先使用命名空间管理全局常量 ✅ - 当前代码在 Mc2Exception 命名空间内,命名空间已隔离 ✅ - 匈牙利命名 k 前缀在现代 C++ 规范中已被简化命名取代 ✅ - 自信值计算:变更符合现代规范,风险低 → **PASS** **结论**:命名变更符合规范,无风险。 --- ### 2. 虚函数设计合理 ✅ **代码位置**: - moe_distribute_combine_v2_tiling_base.h:31 - moe_distribute_combine_tiling_arch35.h:38 **变更内容**: ```cpp // moe_distribute_combine_v2_tiling_base.h class MoeDistributeCombineV2TilingFuncBase { virtual uint64_t CalTilingKey(const uint32_t tpWorldSize, uint32_t commQuantMode, bool isLayered); }; // moe_distribute_combine_tiling_arch35.h class MoeDistributeCombineV2TilingFuncA5 : public MoeDistributeCombineV2TilingFuncBase { uint64_t CalTilingKey(const uint32_t tpWorldSize, uint32_t commQuantMode, bool isLayered) override; }; ``` **假设检验过程**: - H0:虚函数设计不完整 - H1:虚函数设计合理,所有派生类正确实现 - 证据收集: - Base 类提供默认实现(非纯虚函数)✅ - A5 派生类正确使用 override 关键字 ✅ - A3 架构使用 Base 类默认实现(未定义 override)✅ - 符合 cpp-general.md 规则 13.3(严格使用 virtual/override/final)✅ - 自信值计算:设计合理,派生类实现完整 → **PASS** **结论**:虚函数设计符合规范,A3 使用 Base 实现,A5 重写,无风险。 --- ### 3. v3 Kernel A5 架构扩展合理 ✅ **代码位置**:mc2/moe_distribute_combine_v3/op_kernel/moe_distribute_combine_v3.cpp:76 **变更内容**: ```cpp - if constexpr (ArchTag == TILINGKEY_TPL_A3) { + if constexpr ((ArchTag == TILINGKEY_TPL_A3) || (ArchTag == TILINGKEY_TPL_A5)) { ``` **假设检验过程**: - H0:架构扩展不安全 - H1:架构扩展合理,代码复用正确 - 证据收集: - v3 调用 ExecMoeDistributeCombineV3 模板函数,支持多架构 ✅ - A5 架构复用 A3 的执行逻辑,符合代码复用原则 ✅ - TPL 配置文件已声明支持 A5 ✅ - 自信值计算:架构扩展合理,复用现有逻辑 → **PASS** **结论**:v3 Kernel A5 架构扩展合理,无风险。 --- ## 四、综合评估 | 类别 | 问题数 | 风险等级分布 | |-----|-------|-------------| | 安全编码 | 0 | - | | 代码风格 | 0 | - | | 通用规范 | 2 | 中等风险 | | Kernel 逻辑 | 1 | 中等风险(属于问题1的一部分) | **总体评估**:⚠️ **需关注**(建议修复,但不阻塞合并) --- ## 五、修复建议汇总 ### 问题 1 修复建议 **位置**:moe_distribute_combine_v2.cpp:81 **建议**:添加注释说明 A5 架构支持的 LayeredMode 范围 ```cpp // A5 architecture currently supports: // - TILINGKEY_TPL_CCU (level0): Direct CCU communication path // - TILINGKEY_TPL_MTE (level1): MTE-based communication path // Unsupported modes for A5: AICPU, HIERARCHY (not required for current MoE scenarios) ``` ### 问题 2 修复建议 **位置**:PR 描述 **建议**:添加 TilingKey 变变更说明 ```markdown ### TilingKey 变变更说明 - 测试目标芯片从 Ascend310P 切换至 Ascend950(A5架构) - TilingKey 计算公式变更:新增 A5 架构偏移量 - expectTilingKey: 32 → 64(对应 A3 → A5 架构切换) ``` --- ## 六、检视结论 本 PR 代码质量整体良好,主要涉及架构扩展和命名规范优化。发现 2 个中等风险问题,建议在合并前补充文档说明,但不阻塞合并流程。 **检视人**:Ascend C 代码检视工具 **检视时间**:2026-05-27 **检视状态**:⚠️ 需关注(建议修复,可合并) See merge request: cann/ops-transformer!55531 天前
整改mc2部分仓内重名头文件现象 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5637 merge clear_repeat_h into master 整改mc2部分仓内重名头文件现象 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 整改mc2部分仓内重名头文件现象 --- | 文件名 | 源码路径|处理方式 | |-----|-----|-----| | all_gather_formulaic_tiling.h | mc2/all_gather_matmul/op_host/op_tiling/all_gather_formulaic_tiling.h,mc2/all_gather_matmul_v2/op_host/op_tiling/all_gather_formulaic_tiling.h | 都为内部头文件,但内容不同,已修改all_gather_matmul_v2算子内文件的命名 | | grouped_matmul_host_util.h | gmm/grouped_matmul/op_host/grouped_matmul_host_util.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_host_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | grouped_matmul_tiling.h | gmm/grouped_matmul/op_host/op_tiling/grouped_matmul_tiling.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_tiling.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | matmul_util.h | mc2/3rd/common/op_host/op_api/matmul_util.h,mc2/common/utils/matmul_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名,并消除宏冲突 | | runtime_kb_api.h | common/stub/op_tiling/runtime_kb_api.h,mc2/3rd/ops_legacy/op_tiling/runtime_kb_api.h | 声明完全相同,但实现侧不同,删除mc2/3rd/ops_legacy下的runtime_kb_api.h | | tiling_type.h | common/include/op_host/tiling_type.h,mc2/3rd/common/op_host/op_tiling/tiling_type.h |都为内部文件,但内容不完全相同,保留common/include/op_host/tiling_type.h统一使用 | | tuning_tiling_reflection_utils.h | common/stub/op_tiling/register/tuning_tiling_reflection_utils.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | | tuning_tiling_registry.h | common/stub/op_tiling/register/tuning_tiling_registry.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | --- ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2550 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> rdv ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56378 天前
整改mc2部分仓内重名头文件现象 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5637 merge clear_repeat_h into master 整改mc2部分仓内重名头文件现象 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 整改mc2部分仓内重名头文件现象 --- | 文件名 | 源码路径|处理方式 | |-----|-----|-----| | all_gather_formulaic_tiling.h | mc2/all_gather_matmul/op_host/op_tiling/all_gather_formulaic_tiling.h,mc2/all_gather_matmul_v2/op_host/op_tiling/all_gather_formulaic_tiling.h | 都为内部头文件,但内容不同,已修改all_gather_matmul_v2算子内文件的命名 | | grouped_matmul_host_util.h | gmm/grouped_matmul/op_host/grouped_matmul_host_util.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_host_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | grouped_matmul_tiling.h | gmm/grouped_matmul/op_host/op_tiling/grouped_matmul_tiling.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_tiling.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | matmul_util.h | mc2/3rd/common/op_host/op_api/matmul_util.h,mc2/common/utils/matmul_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名,并消除宏冲突 | | runtime_kb_api.h | common/stub/op_tiling/runtime_kb_api.h,mc2/3rd/ops_legacy/op_tiling/runtime_kb_api.h | 声明完全相同,但实现侧不同,删除mc2/3rd/ops_legacy下的runtime_kb_api.h | | tiling_type.h | common/include/op_host/tiling_type.h,mc2/3rd/common/op_host/op_tiling/tiling_type.h |都为内部文件,但内容不完全相同,保留common/include/op_host/tiling_type.h统一使用 | | tuning_tiling_reflection_utils.h | common/stub/op_tiling/register/tuning_tiling_reflection_utils.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | | tuning_tiling_registry.h | common/stub/op_tiling/register/tuning_tiling_registry.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | --- ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2550 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> rdv ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56378 天前
整改mc2部分仓内重名头文件现象 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5637 merge clear_repeat_h into master 整改mc2部分仓内重名头文件现象 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 整改mc2部分仓内重名头文件现象 --- | 文件名 | 源码路径|处理方式 | |-----|-----|-----| | all_gather_formulaic_tiling.h | mc2/all_gather_matmul/op_host/op_tiling/all_gather_formulaic_tiling.h,mc2/all_gather_matmul_v2/op_host/op_tiling/all_gather_formulaic_tiling.h | 都为内部头文件,但内容不同,已修改all_gather_matmul_v2算子内文件的命名 | | grouped_matmul_host_util.h | gmm/grouped_matmul/op_host/grouped_matmul_host_util.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_host_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | grouped_matmul_tiling.h | gmm/grouped_matmul/op_host/op_tiling/grouped_matmul_tiling.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_tiling.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | matmul_util.h | mc2/3rd/common/op_host/op_api/matmul_util.h,mc2/common/utils/matmul_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名,并消除宏冲突 | | runtime_kb_api.h | common/stub/op_tiling/runtime_kb_api.h,mc2/3rd/ops_legacy/op_tiling/runtime_kb_api.h | 声明完全相同,但实现侧不同,删除mc2/3rd/ops_legacy下的runtime_kb_api.h | | tiling_type.h | common/include/op_host/tiling_type.h,mc2/3rd/common/op_host/op_tiling/tiling_type.h |都为内部文件,但内容不完全相同,保留common/include/op_host/tiling_type.h统一使用 | | tuning_tiling_reflection_utils.h | common/stub/op_tiling/register/tuning_tiling_reflection_utils.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | | tuning_tiling_registry.h | common/stub/op_tiling/register/tuning_tiling_registry.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | --- ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2550 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> rdv ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56378 天前
清理cleancode Co-authored-by: zzg_code<zengzhiguo1@huawei.com> # message auto-generated for no-merge-commit merge: !6046 merge newkfc into master 清理cleancode Created-by: zzg_code Commit-by: zzg_code Merged-by: cann-robot Description: ## 描述 清理cleancode ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2735 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!604613 小时前
整改mc2部分仓内重名头文件现象 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5637 merge clear_repeat_h into master 整改mc2部分仓内重名头文件现象 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 整改mc2部分仓内重名头文件现象 --- | 文件名 | 源码路径|处理方式 | |-----|-----|-----| | all_gather_formulaic_tiling.h | mc2/all_gather_matmul/op_host/op_tiling/all_gather_formulaic_tiling.h,mc2/all_gather_matmul_v2/op_host/op_tiling/all_gather_formulaic_tiling.h | 都为内部头文件,但内容不同,已修改all_gather_matmul_v2算子内文件的命名 | | grouped_matmul_host_util.h | gmm/grouped_matmul/op_host/grouped_matmul_host_util.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_host_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | grouped_matmul_tiling.h | gmm/grouped_matmul/op_host/op_tiling/grouped_matmul_tiling.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_tiling.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | matmul_util.h | mc2/3rd/common/op_host/op_api/matmul_util.h,mc2/common/utils/matmul_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名,并消除宏冲突 | | runtime_kb_api.h | common/stub/op_tiling/runtime_kb_api.h,mc2/3rd/ops_legacy/op_tiling/runtime_kb_api.h | 声明完全相同,但实现侧不同,删除mc2/3rd/ops_legacy下的runtime_kb_api.h | | tiling_type.h | common/include/op_host/tiling_type.h,mc2/3rd/common/op_host/op_tiling/tiling_type.h |都为内部文件,但内容不完全相同,保留common/include/op_host/tiling_type.h统一使用 | | tuning_tiling_reflection_utils.h | common/stub/op_tiling/register/tuning_tiling_reflection_utils.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | | tuning_tiling_registry.h | common/stub/op_tiling/register/tuning_tiling_registry.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | --- ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2550 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> rdv ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56378 天前
提升moe_distribute_combine_v2,moe_update_expert等算子ut覆盖率 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5221 merge mdd_mdc_ut into master 提升moe_distribute_combine_v2,moe_update_expert等算子ut覆盖率 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 提升moe_distribute_combine_v2,moe_update_expert等算子ut覆盖率 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2341 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [x] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!522114 天前
fix: cleancode Co-authored-by: libohao6<libohao3@huawei.com> # message auto-generated for no-merge-commit merge: !5489 merge fix-cleancode-issues into master fix: cleancode Created-by: libohao6 Commit-by: libohao6 Merged-by: cann-robot Description: ## 描述 修复基础算子主线cleancode问题。 ## 关联的Issue [Bug-Report|缺陷反馈]: MC2基础算子主线存在cleancode问题 #2566 ## 测试 二级冒烟。 ## 文档更新 不涉及。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # PR #5489 代码检视报告 **PR**: https://gitcode.com/cann/ops-transformer/pull/5489 **标题**: merge 'fix-cleancode-issues' into 'master' **作者**: libohao6 | **范围**: 19 files, +453 -531 | **日期**: 2026-05-21 --- ## 改动分类 | 类型 | 改动数 | 说明 | |------|-------|------| | 删除未使用函数 | 5个 | matmul_util.cpp删3个static函数 + aclnn_matmul_reduce_scatter_v2.cpp删CreateWinTensor | | 删除冗余变量 | 2个 | x1Dtype/biasDtype 在 aclnn_weight_quant_matmul_all_reduce.cpp | | const修饰添加 | 5处 | 多个Tiling函数context参数加const | | 位操作类型修复 | 1处 | int32_t code → uint32_t bitCode | | 魔法数字→常量 | 1处 | alignas(8) → alignas(L2_CACHE_ALIGNMENT) | | 变量重命名 | 多处 | Kernel侧blockLocCoord→blockLocCoord_等; Host侧index→idx/i | | 参数名拼写修正 | 1处 | rcfCfg→rcsCfg | | include guard | 1处 | matmul_reduce_scatter_v2_tiling_common.h | | 头文件清理 | 3处 | 移除冗余#include | | 未使用参数标记 | 5处 | (void)opType等 | | 注释风格更新 | 大量 | 决策树层级注释从======改为差异化标记 | | 代码格式修复 | 多处 | 空格/缩进/换行 | --- ## 假设检验检视结果 ### 1. 删除未使用函数 ✅ PASS **涉及文件**: matmul_util.cpp, aclnn_matmul_reduce_scatter_v2.cpp 删除5个static函数(CheckShapeValidWithTrans、ProcessEmptyTensor、ProcessEmptyTensorWithTrans、GetMatmulOpInfoWithTrans、CreateWinTensor)。均为static,无跨文件引用风险。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 5.2 资源泄露防护 | 删除是否遗漏调用点 | ✅ static函数仅文件内可见 | ### 2. const修饰添加 ✅ PASS **涉及文件**: all_gather_matmul_tiling_base.cpp/.h, quant_all_reduce_tiling.cpp, quant_reduce_scatter_tiling.cpp gert::TilingContext *contextconst gert::TilingContext *context。GetNodeName()、GetAttrPointer()等方法为const兼容,头文件声明同步更新。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 1.1 静态类型安全 | const修饰是否导致编译错误 | ✅ 方法兼容const | ### 3. 位操作类型修复 ✅ PASS **涉及文件**: matmul_reduce_scatter_v2_aiv_mode_tiling.cpp int32_t codeuint32_t bitCode。对有符号数做右移(>>=)存在符号扩展问题,改为uint32_t消除风险。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 2.1 有符号整数不溢出 | int32_t右移符号扩展 | ✅ 修复正确 | | cpp-secure 2.2 无符号整数不回绕 | uint32_t位操作安全 | ✅ | ### 4. 魔法数字→常量 ✅ PASS **涉及文件**: unquant_matmul_all_reduce_tiling_data.h static constexpr size_t L2_CACHE_ALIGNMENT = 8; 替换 alignas(8)。值等价,不影响ABI。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 10.4 结构体字段末尾添加 | 常量定义位置 | ✅ 不影响ABI | ### 5. 冗余变量删除 ✅ PASS **涉及文件**: aclnn_weight_quant_matmul_all_reduce.cpp 删除 const auto x1Dtype = x1->GetDataType(); const auto biasDtype = bias->GetDataType();。两变量后续无引用,OP_CHECK_DTYPE_NOT_SAME宏自行获取dtype。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 3.1 禁止未初始化变量 | 删除后功能等价 | ✅ | ### 6. 参数名拼写修正 ✅ PASS **涉及文件**: matmul_reduce_scatter_tiling_base.cpp rcfCfgrcsCfg(RCS=ReduceScatter拼写修正)。所有引用已同步替换。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | MC2 MC2-13 CCU通信数据量限制 | AdjustHCCLLimit逻辑是否保留 | ✅ 256MB限制保留 | ### 7. include guard添加 ✅ PASS **涉及文件**: matmul_reduce_scatter_v2_tiling_common.h 新增 #ifndef MATMUL_REDUCE_SCATTER_V2_TILING_COMMON_H 保护。命名与文件路径一致。 ### 8. 未使用参数标记 ✅ PASS **涉及文件**: quant_reduce_scatter_util_tiling.cpp 添加 (void)opType; (void)context; (void)xDimNum; (void)outputDim; 消除编译器警告。注释声明"Reserved for future extension"。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | TOPK TOPK-7 外部输入校验 | 校验逻辑是否削弱 | ✅ 未削弱 | ### 9. LOG参数安全 ✅ PASS **涉及文件**: allto_allv_quant_grouped_mat_mul_tiling_base.cpp 循环变量 indexidx/isendCounts[%lu] should be in [0, %lu], but get %lu — 3个%lu对应3个uint64_t(idx, bsk_, sendCounts[idx]),类型和数量匹配。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 11.2 参数数量与占位符匹配 | 3个%lu=3个uint64_t | ✅ | | cpp-secure 11.3 参数类型与格式化说明符匹配 | uint64_t用%lu | ✅ | | MC2 MC2-07 专家参数合法性校验 | sendCounts/recvCounts校验完整 | ✅ | ### 10. 头文件清理 ✅ PASS **涉及文件**: matmul_reduce_scatter_tiling_base.h, quant_reduce_scatter_util_tiling.h, all_gather_matmul_tiling_base.h 移除冗余 #include "ops_utils.h"#include "mc2_log.h"。 --- ## 规范条款引用汇总 | 规范来源 | 条款编号 | 条款名称 | 检查结果 | |---------|---------|---------|---------| | cpp-secure.md | 1.1 | 保证静态类型安全 | ✅ | | cpp-secure.md | 2.1 | 有符号整数运算不溢出 | ✅ | | cpp-secure.md | 2.2 | 无符号整数运算不回绕 | ✅ | | cpp-secure.md | 3.1 | 禁止使用未初始化的变量 | ✅ | | cpp-secure.md | 5.2 | 资源泄露防护 | ✅ | | cpp-secure.md | 10.4 | 结构体字段末尾添加 | ✅ | | cpp-secure.md | 11.2 | LOG参数数量与占位符必须匹配 | ✅ | | cpp-secure.md | 11.3 | LOG参数类型与格式化说明符必须匹配 | ✅ | | mc2-specific.md | MC2-07 | 专家参数合法性校验 | ✅ | | mc2-specific.md | MC2-13 | CCU通信数据量限制 | ✅ | | ascendc-topk.md | TOPK-1 | 必须校验函数返回值 | ✅ | | ascendc-topk.md | TOPK-7 | 融合规则/InferShape/Tiling外部输入校验 | ✅ | --- ## 总体结论 **✅ 无问题** — PR #5489 为代码清理类改动,所有10项检视均PASS。改动不引入安全风险,不削弱校验逻辑,规范合规性100%。 See merge request: cann/ops-transformer!54897 天前
grouped_mat_mul_allto_allv算子性能优化 Co-authored-by: huangshuai<huangshuai59@huawei.com> # message auto-generated for no-merge-commit merge: !5704 merge prof_1 into master grouped_mat_mul_allto_allv算子性能优化 Created-by: huangshuai59 Commit-by: huangshuai Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2707 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # 代码检视报告(更新版) ## 检视概览 - 代码文件:PR #5704 (https://gitcode.com/cann/ops-transformer/pull/5704) - 代码侧别:混合(Tiling + Kernel) - 检视文档:cpp-secure + cpp-general + ascendc-api + ascendc-perf + ascendc-topk + mc2-specific - 总条例数:24(适用条例,过滤后,含重叠合并) - 检视时间:2026-05-26(代码更新后重新检视) - 与上次检视对比:代码已更新,上次发现的 5 个 HIGH 问题中 **4 个已修复** ## 检视统计 | 状态 | 条例数 | 占比 | |-----|--------|------| | PASS(已修复) | 4 | 16.7% | | PASS(持续通过) | 12 | 50.0% | | FAIL(新发现) | 0 | 0% | | SUSPICIOUS(需关注) | 2 | 8.3% | | MED(残余未修复) | 2 | 8.3% | | LOW(信息性) | 4 | 16.7% | ## 上次检视问题修复状态 | # | 上次问题 | 条例 | 上次置信度 | 修复状态 | 修复行号 | |---|---------|------|---------|---------|------| | 1 | BsK == 0 未拦截 | SEC-4.1+TOPK-7 | HIGH | ✅ **已修复** | quant_tiling_common.cpp:637 | | 2 | send/recv 逐元素上界缺失 | SEC-4.1+TOPK-7 | HIGH | ✅ **已修复** | quant_tiling_common.cpp:617-624 | | 3 | GetInputDesc 6处未判空 | SEC-3.5+TOPK-1 | HIGH | ✅ **已修复** | gmm_allto_allv_tiling.cpp:92-94,103-105,118-119,161-166,187-188 | | 4 | L0C CeilAlign 反弹 | TIL-2 | HIGH | ✅ **已修复** | gmm_qbmm_tiling.cpp:954-956 (CeilAlign→FloorAlign) | | 5 | transMmWeight 日志缺值 | MC2-07 | MED | ✅ **已修复** | gmm_allto_allv_tiling.cpp:232-235 | ## 修复验证详情 ### [SEC-4.1+TOPK-7] BsK == 0 校验修复 - **修复行号**: quant_grouped_mat_mul_allto_allv_tiling_common.cpp:637 - **修复内容**: (localParams_.BsK >= MAX_BSK_VALUE)(localParams_.BsK == 0) || (localParams_.BsK >= MAX_BSK_VALUE) - **验证**: ✅ 修复正确,与 H1/N1 检查模式保持一致(H1 == 0 || H1 >= MAX_H1_VALUE) ### [SEC-4.1+TOPK-7] send/recv 逐元素上界修复 - **修复行号**: quant_grouped_mat_mul_allto_allv_tiling_common.cpp:617-624 - **修复内容**: 仅 sendCounts[i] < 0sendCounts[i] < 0 || sendCounts[i] > static_cast<int64_t>(localParams_.A);同理 recvCounts 增加 > BsK 上界 - **验证**: ✅ 修复正确,与同类算子(allto_allv_grouped_mat_mul、allto_allv_quant_grouped_mat_mul)保持一致,且数学合理性已证明(总量+非负约束下逐元素上界是冗余但合理的防御性编程) ### [SEC-3.5+TOPK-1] GetInputDesc 判空修复 - **修复行号**: gmm_allto_allv_tiling.cpp:92-94, 103-105, 118-119, 161-166, 187-188 - **修复内容**: 所有 GetInputDesc/GetOptionalInputDesc/GetOutputDesc 调用先赋值到局部变量,再判空后解引用 - **验证**: ✅ 6处全部修复,无遗漏。模式为 auto desc = context_->GetXxxDesc(index); OP_TILING_CHECK(desc == nullptr, ...); localParams_.dtype = desc->GetDataType(); ### [TIL-2] FloorAlign 替代 CeilAlign 修复 - **修复行号**: gmm_qbmm_tiling.cpp:954-956 - **修复内容**: CeilAlign(basicTiling_.baseN, CUBE_BLOCK)FloorAlign(basicTiling_.baseN, CUBE_BLOCK) - **验证**: ✅ FloorAlign 向下对齐,确保 baseN ≤ maxBaseN,不再超过 L0C 限制 ### [MC2-07] transMmWeight 日志补值修复 - **修复行号**: gmm_allto_allv_tiling.cpp:232-235 - **修复内容**: "transMmWeight should not be true when mmX is null!""transMmWeight should not be true when mmX is null! transMmWeight=%d, hasSharedMm=%d.", *transMmWeightPtr, localParams_.hasSharedMm) - **验证**: ✅ 日志包含参数名和实际值,符合 MC2-07 要求 ## 需关注(MED 置信度 — 残余未修复) ### [MC2-19] send/recv 逐卡 per-rank 数据量校验缺失 - **问题描述**: 老代码 A3 架构验证每卡 ∑ recvCounts[j] * H∑ sendCounts[j] * H 的合理性,新代码无此校验。总量一致性已覆盖全局,但单卡数据量合理性(如 UB 容量是否足够)未校验。 - **影响**: A3 架构特有校验(A5 不执行),总量校验已覆盖全局一致性。属于增强型校验而非安全底线。 - **置信度**: MED (60-80%) - **备注**: 新代码已有 sendCounts[i] > ArecvCounts[i] > BsK 的逐元素上界,在总量+非负+逐元素上界三重约束下,per-card H-multiply sum 校验的数学必要性已降低 ### [MC2-18] HCCL InitV2/Finalize 核类型不匹配 - **问题描述**: HcclA2avOp.Init()hccl_.InitV2()hccl_.SetCcTilingV2() 在所有核上调用(无 AIC/AIV 过滤),但 HcclA2avOp.End()hccl_.Finalize() 仅在非 AIC 核上调用。HCCL 文档要求"Finalize 在 AIC 或 AIV 核上调用必须与对应 Prepare 接口的调用核保持一致"。 - **代码位置**: hccl_a2av_op.h:48-65 (Init) + 行 274-280 (End) - **影响**: 此代码不在 diff 变更范围内,属于预存设计模式。旧代码也存在此模式。需与 HCCL 框架团队确认是否为已知例外。 - **置信度**: MED (65%) ## 通过条例(持续通过 — 与上次检视一致) SEC-2.1 有符号整数运算不溢出 SEC-2.2 无符号整数运算不回绕 SEC-2.3 除法/余数运算除零保护(qbmm: DATA_SIZE_L0C=4 constexpr,baseM 上游保证非零) SEC-3.3 数组索引校验 TOPK-2 使用GetInputDesc获取Dtype,context获取Shape TOPK-5+MC2-08 属性获取类型需与ir原型一致 MC2-01 核间同步必要性(GmmA2avScheduler 循环内 compute→SyncAll<false>→hccl.Launch,同步完整) MC2-03 SyncAll 同步生效(所有核 SyncAll 总次数一致) MC2-04 全局操作一致性(无 rankId 分支导致参数差异) MC2-10 量化模式校验完整性(gqmm DEFAULT bug fix 正确) MC2-11 量化精度保护(无 Cast 在 diff 茦围围内) MC2-19 AlltoAllV 跨 rank 参数一致性(总量+逐元素约束下跨 rank 一致性通过) API-6 AllocTensor/FreeTensor 必须配对使用(委托模板框架管理) PERF-2 禁止写死硬件参数(新代码无硬编码,旧硬编码已删除) SEC-1.2 保证内存安全(引用绑定生命周期安全) SEC-3.1 禁止使用未初始化的变量(所有变量已初始化) GEN-1.1 外部数据合法性检查(通过 — BsK==0 已在基类修复) MC2-14 Tiling 校验与结构规范(通过 — BsK==0 修复、send/recv 上界修复、FloorAlign 修复) --- ## 被检视代码 > 本次检视的完整 diff 来自 PR #5704(更新版) **PR diff 文件路径**: ./operators/.pr_diff/5704_v2.diff **完整源码路径**: ./operators/.pr_repo/5704/ **代码概要路径**: ./operators/pr-5704/code_summary.md **diff 行数**:2704 行 See merge request: cann/ops-transformer!57042 天前
fix: cleancode Co-authored-by: libohao6<libohao3@huawei.com> # message auto-generated for no-merge-commit merge: !5489 merge fix-cleancode-issues into master fix: cleancode Created-by: libohao6 Commit-by: libohao6 Merged-by: cann-robot Description: ## 描述 修复基础算子主线cleancode问题。 ## 关联的Issue [Bug-Report|缺陷反馈]: MC2基础算子主线存在cleancode问题 #2566 ## 测试 二级冒烟。 ## 文档更新 不涉及。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # PR #5489 代码检视报告 **PR**: https://gitcode.com/cann/ops-transformer/pull/5489 **标题**: merge 'fix-cleancode-issues' into 'master' **作者**: libohao6 | **范围**: 19 files, +453 -531 | **日期**: 2026-05-21 --- ## 改动分类 | 类型 | 改动数 | 说明 | |------|-------|------| | 删除未使用函数 | 5个 | matmul_util.cpp删3个static函数 + aclnn_matmul_reduce_scatter_v2.cpp删CreateWinTensor | | 删除冗余变量 | 2个 | x1Dtype/biasDtype 在 aclnn_weight_quant_matmul_all_reduce.cpp | | const修饰添加 | 5处 | 多个Tiling函数context参数加const | | 位操作类型修复 | 1处 | int32_t code → uint32_t bitCode | | 魔法数字→常量 | 1处 | alignas(8) → alignas(L2_CACHE_ALIGNMENT) | | 变量重命名 | 多处 | Kernel侧blockLocCoord→blockLocCoord_等; Host侧index→idx/i | | 参数名拼写修正 | 1处 | rcfCfg→rcsCfg | | include guard | 1处 | matmul_reduce_scatter_v2_tiling_common.h | | 头文件清理 | 3处 | 移除冗余#include | | 未使用参数标记 | 5处 | (void)opType等 | | 注释风格更新 | 大量 | 决策树层级注释从======改为差异化标记 | | 代码格式修复 | 多处 | 空格/缩进/换行 | --- ## 假设检验检视结果 ### 1. 删除未使用函数 ✅ PASS **涉及文件**: matmul_util.cpp, aclnn_matmul_reduce_scatter_v2.cpp 删除5个static函数(CheckShapeValidWithTrans、ProcessEmptyTensor、ProcessEmptyTensorWithTrans、GetMatmulOpInfoWithTrans、CreateWinTensor)。均为static,无跨文件引用风险。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 5.2 资源泄露防护 | 删除是否遗漏调用点 | ✅ static函数仅文件内可见 | ### 2. const修饰添加 ✅ PASS **涉及文件**: all_gather_matmul_tiling_base.cpp/.h, quant_all_reduce_tiling.cpp, quant_reduce_scatter_tiling.cpp gert::TilingContext *contextconst gert::TilingContext *context。GetNodeName()、GetAttrPointer()等方法为const兼容,头文件声明同步更新。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 1.1 静态类型安全 | const修饰是否导致编译错误 | ✅ 方法兼容const | ### 3. 位操作类型修复 ✅ PASS **涉及文件**: matmul_reduce_scatter_v2_aiv_mode_tiling.cpp int32_t codeuint32_t bitCode。对有符号数做右移(>>=)存在符号扩展问题,改为uint32_t消除风险。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 2.1 有符号整数不溢出 | int32_t右移符号扩展 | ✅ 修复正确 | | cpp-secure 2.2 无符号整数不回绕 | uint32_t位操作安全 | ✅ | ### 4. 魔法数字→常量 ✅ PASS **涉及文件**: unquant_matmul_all_reduce_tiling_data.h static constexpr size_t L2_CACHE_ALIGNMENT = 8; 替换 alignas(8)。值等价,不影响ABI。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 10.4 结构体字段末尾添加 | 常量定义位置 | ✅ 不影响ABI | ### 5. 冗余变量删除 ✅ PASS **涉及文件**: aclnn_weight_quant_matmul_all_reduce.cpp 删除 const auto x1Dtype = x1->GetDataType(); const auto biasDtype = bias->GetDataType();。两变量后续无引用,OP_CHECK_DTYPE_NOT_SAME宏自行获取dtype。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 3.1 禁止未初始化变量 | 删除后功能等价 | ✅ | ### 6. 参数名拼写修正 ✅ PASS **涉及文件**: matmul_reduce_scatter_tiling_base.cpp rcfCfgrcsCfg(RCS=ReduceScatter拼写修正)。所有引用已同步替换。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | MC2 MC2-13 CCU通信数据量限制 | AdjustHCCLLimit逻辑是否保留 | ✅ 256MB限制保留 | ### 7. include guard添加 ✅ PASS **涉及文件**: matmul_reduce_scatter_v2_tiling_common.h 新增 #ifndef MATMUL_REDUCE_SCATTER_V2_TILING_COMMON_H 保护。命名与文件路径一致。 ### 8. 未使用参数标记 ✅ PASS **涉及文件**: quant_reduce_scatter_util_tiling.cpp 添加 (void)opType; (void)context; (void)xDimNum; (void)outputDim; 消除编译器警告。注释声明"Reserved for future extension"。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | TOPK TOPK-7 外部输入校验 | 校验逻辑是否削弱 | ✅ 未削弱 | ### 9. LOG参数安全 ✅ PASS **涉及文件**: allto_allv_quant_grouped_mat_mul_tiling_base.cpp 循环变量 indexidx/isendCounts[%lu] should be in [0, %lu], but get %lu — 3个%lu对应3个uint64_t(idx, bsk_, sendCounts[idx]),类型和数量匹配。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 11.2 参数数量与占位符匹配 | 3个%lu=3个uint64_t | ✅ | | cpp-secure 11.3 参数类型与格式化说明符匹配 | uint64_t用%lu | ✅ | | MC2 MC2-07 专家参数合法性校验 | sendCounts/recvCounts校验完整 | ✅ | ### 10. 头文件清理 ✅ PASS **涉及文件**: matmul_reduce_scatter_tiling_base.h, quant_reduce_scatter_util_tiling.h, all_gather_matmul_tiling_base.h 移除冗余 #include "ops_utils.h"#include "mc2_log.h"。 --- ## 规范条款引用汇总 | 规范来源 | 条款编号 | 条款名称 | 检查结果 | |---------|---------|---------|---------| | cpp-secure.md | 1.1 | 保证静态类型安全 | ✅ | | cpp-secure.md | 2.1 | 有符号整数运算不溢出 | ✅ | | cpp-secure.md | 2.2 | 无符号整数运算不回绕 | ✅ | | cpp-secure.md | 3.1 | 禁止使用未初始化的变量 | ✅ | | cpp-secure.md | 5.2 | 资源泄露防护 | ✅ | | cpp-secure.md | 10.4 | 结构体字段末尾添加 | ✅ | | cpp-secure.md | 11.2 | LOG参数数量与占位符必须匹配 | ✅ | | cpp-secure.md | 11.3 | LOG参数类型与格式化说明符必须匹配 | ✅ | | mc2-specific.md | MC2-07 | 专家参数合法性校验 | ✅ | | mc2-specific.md | MC2-13 | CCU通信数据量限制 | ✅ | | ascendc-topk.md | TOPK-1 | 必须校验函数返回值 | ✅ | | ascendc-topk.md | TOPK-7 | 融合规则/InferShape/Tiling外部输入校验 | ✅ | --- ## 总体结论 **✅ 无问题** — PR #5489 为代码清理类改动,所有10项检视均PASS。改动不引入安全风险,不削弱校验逻辑,规范合规性100%。 See merge request: cann/ops-transformer!54897 天前
Add dump_analysis_A2 Co-authored-by: urbub<linhailong3@huawei.com> # message auto-generated for no-merge-commit merge: !5096 merge add_tools_a2 into master Add dump_analysis_A2 Created-by: urbub Commit-by: urbub Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 添加适合A2 Dispatch和Combine的 win dump解析工具,包含区分算子是否分层、单机场景、多机场景等。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#2321](https://gitcode.com/cann/ops-transformer/issues/2321) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!50963 天前
mc2新特性开发 Co-authored-by: xutianze<xutianze2@huawei.com> # message auto-generated for no-merge-commit merge: !500 merge feature_mc2 into master mc2新特性开发 Created-by: xutianze Commit-by: xutianze Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!5005 个月前