文件最后提交记录最后更新时间
[AICPU] 算子根据环境变量选择commMode通信引擎 Co-authored-by: libohao6<libohao3@huawei.com> # message auto-generated for no-merge-commit merge: !4961 merge aicpu_only into master [AICPU] 算子根据环境变量选择commMode通信引擎 Created-by: libohao6 Commit-by: libohao6 Merged-by: cann-robot Description: ## 描述 [AICPU] 算子根据环境变量选择commMode通信引擎 #4961 ## 关联的Issue [Requirement|需求建议]: [AICPU] 算子根据环境变量选择commMode通信引擎 #4961 #2354 ## 测试 level0测试。 ## 文档更新 不涉及。 ## 类型标签 <!-- [x] 表示选中 --> - [.] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # MC2代码检视报告 - MR#4961 ## 基本信息 | 项目 | 内容 | |------|------| | MR编号 | #4961 | | 分支 | aicpu_only | | Commit | c3c02630a | | 检视时间 | 2026-05-11 | | 检视人 | AI Code Reviewer | ## 修改概述 支持ENV_MC2_COMM_MODE_AICPU环境变量切换CCU/AICPU通信模式: 1. 新增Mc2Comm::GetCommModeFromEnv()统一环境变量读取入口(header-only) 2. 全层级环境变量判断: aclnn + gen_task + tiling + kernel 3. gen_task结合平台判断(A5→CCU, 非A5→AICPU) + 环境变量覆盖 4. Kernel层HcclTypeSelector模板选择HCCL服务器类型 5. tilingKey删除D_T_MM和TILINGKEY_MM维度,模板实例数减少67% ## 检视范围 - mc2/common/utils/mc2_comm_utils.h - mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/communication/hccl_a2av_op.h - mc2/allto_allv_grouped_mat_mul/op_kernel/allto_allv_grouped_mat_mul_coarse_grained.h - mc2/allto_allv_quant_grouped_mat_mul/op_host/op_tiling/arch35/allto_allv_quant_grouped_mat_mul_tiling_common.cpp - mc2/allto_allv_grouped_mat_mul/op_host/op_tiling/allto_allv_grouped_mat_mul_tiling.cpp --- ## MC2领域规则检视 ### 规则对照分析 | 规则ID | 规则名称 | 检视结果 | 说明 | |--------|----------|----------|------| | MC2-01 | 核间同步必要性 | ✅ 合规 | 本次修改未新增循环结构调用通信API | | MC2-02 | 流同步正确性 | ✅ 合规 | 未涉及SetFlag/WaitFlag修改 | | MC2-03 | SyncAll同步生效 | ✅ 合规 | 未涉及SyncAll修改 | | MC2-04 | 全局操作一致性 | ✅ 合规 | 环境变量全局生效,所有rank参数一致 | | MC2-16 | 编译规范 | ✅ 合规 | 正确使用ASC_DEVKIT_MAJOR宏隔离 | --- ## 潜在风险点分析 ### 1. 环境变量线程安全性(低风险) **代码位置**: mc2/common/utils/mc2_comm_utils.h **代码片段**: ```cpp inline uint8_t GetCommModeFromEnv() { auto commModeEnv = getenv(COMM_MODE_ENV); // getenv非线程安全 if (commModeEnv != nullptr) { return COMM_MODE_AICPU; } return COMM_MODE_CCU; } ``` **假设检验**: - 原假设H0:代码线程安全 - 证据:getenv()是非线程安全的POSIX函数(C标准) - 自信值:30%(低风险) **结论**: 低风险,算子执行前环境变量已稳定,无需修改。 --- ### 2. HcclTypeSelector模板默认值一致性(无风险) **代码位置**: - mc2/allto_allv_quant_grouped_mat_mul/op_kernel/mc2_templates/communication/hccl_a2av_op.h - mc2/allto_allv_grouped_mat_mul/op_kernel/allto_allv_grouped_mat_mul_coarse_grained.h **代码片段**: ```cpp // 量化算子 template<int commMode = TILINGKEY_TPL_CCU> struct HcclTypeSelector { using type = Hccl<HcclServerType::HCCL_SERVER_TYPE_CCU>; // 默认CCU }; // 非量化算子 template<int commMode = CCU_COMM_MODE> struct HcclTypeSelector { using type = Hccl<HcclServerType::HCCL_SERVER_TYPE_CCU>; // 默认CCU }; ``` **假设检验**: - 原假设H0:两个算子默认值一致 - 证据:两者默认值都为CCU(0),一致 - 自信值:0%(无风险) **结论**: ✅ 合规,默认行为一致。 --- ## 环境变量逻辑验证 ### 默认行为(无环境变量) | 层级 | 平台 | 默认行为 | |------|------|----------| | mc2_comm_utils.h | - | 返回CCU(0) | | gen_task | A5 | CCU server/stream | | gen_task | 非A5 | AICPU server/stream | | aclnn | - | NnopbaseSetHcclServerType(CCU) | | tiling | - | SetCommEngine(CCU_ENGINE) | | kernel | - | HCCL_SERVER_TYPE_CCU | ### 强制AICPU行为(设置ENV_MC2_COMM_MODE_AICPU) | 层级 | 行为 | |------|------| | mc2_comm_utils.h | 返回AICPU(1) | | gen_task | 强制aicpu kfc server | | aclnn | NnopbaseSetHcclServerType(AICPU) | | tiling | SetCommEngine(AICPU_ENGINE) | | kernel | HCCL_SERVER_TYPE_AICPU | --- ## 总体结论 **✅ 代码检视通过** 本次修改符合MC2领域规则: - 无新增同步风险点 - HCCL模板选择正确 - 编译规范合规 - 全局参数一致性保证 - 环境变量逻辑清晰,默认行为与原代码一致 --- ## 附录 ### MR链接 https://gitcode.com/cann/ops-transformer/merge_requests/4961 ### Commit链接 https://gitcode.com/cann/ops-transformer/commit/c3c02630a See merge request: cann/ops-transformer!496117 天前
修复mc2算子编kernel的ut编译出错的问题 Co-authored-by: hblnb<huangbolin3@huawei.com> # message auto-generated for no-merge-commit merge: !5373 merge fix_issue_2445 into master 修复mc2算子编kernel的ut编译出错的问题 Created-by: hblnb Commit-by: hblnb Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!537314 天前
distributebarrier算子在A5上context结构体切换 Co-authored-by: Yuyu-Li<liyuyu6@huawei.com> # message auto-generated for no-merge-commit merge: !3730 merge hccl_context_lyy into master distributebarrier算子在A5上context结构体切换 Created-by: Yuyu-Li Commit-by: Yuyu-Li Merged-by: cann-robot Description: ## 描述 distributebarrier算子在A5上context结构体切换 # 代码检视报告 ## 基本信息 | 项目 | 内容 | |-----|-----| | Commit ID | eaa63da32ae4e3c706de387152a8b8d946c5a932 | | 提交说明 | distributebarrier算子在A5上context结构体切换 | | 检视范围 | C++安全规范 + 通用编码规范 + TOPK高频问题 | | 检视日期 | 2026-05-12 | --- ## 检视摘要 | 类别 | 问题数 | 严重级别 | |-----|-------|---------| | C++ 安全规范 | 0 | - | | C++ 通用规范 | 1 | 中 | | TOPK 高频问题 | 0 | - | | **总计** | **1** | **中危问题: 1** | --- ## 详细检视结果 ### 一、C++ 通用编码规范问题 #### 问题1: 未使用的头文件包含 [中] [规范2.3] **文件**: mc2/distribute_barrier_extend/op_host/op_tiling/distribute_barrier_extend_tiling.cpp **位置**: 行1827-1838 **风险代码**: ```cpp #include <dlfcn.h> #include <fcntl.h> #include <sys/types.h> #include <unistd.h> #include <cmath> #include <cstdio> #include <cstdlib> #include <queue> ``` **假设检验过程**: | 步骤 | 分析内容 | 自信值增量 | |-----|---------|-----------| | 头文件用途识别 | dlfcn.h: 动态加载, fcntl.h: 文件控制, sys/types.h: 系统类型定义 | +30% | | 代码引用检查 | 文件中未调用 dlopen/dlclose, open/fcntl, 未使用 pid_t 等类型 | +40% | | 规范违反 | cpp-general.md 2.3: 禁止包含用不到的头文件 | +40% | | **自信值** | **110%** | **存在风险** | **问题说明**: - 文件包含多个未使用的系统头文件和标准库头文件 - 增加编译依赖,可能导致不必要的重新编译 - 实际仅使用 <string><vector> (通过间接引用) **修复建议**: 删除以下未使用的头文件: ```cpp // 删除以下行 #include <dlfcn.h> #include <fcntl.h> #include <sys/types.h> #include <unistd.h> #include <cmath> #include <cstdio> #include <cstdlib> #include <queue> // 保留实际使用的头文件 #include <string> // 用于 std::string #include <vector> // 可能通过其他头文件间接使用 ``` **规范引用**: [cpp-general.md] 2.3 禁止包含用不到的头文件 --- ## 安全红线问题检视结果 ### Host侧红线问题 | 红线要求 | 检视结果 | 说明 | |---------|---------|-----| | 除法操作除零保护 | ✅ 通过 | 所有除法操作除数来自TilingData,已校验非零 | | 数组访问越界保护 | ✅ 通过 | 数组索引均有边界判断或来自TilingData | | 整数运算溢出保护 | ✅ 通过 | 关键运算有业务约束保护 | | 指针操作判空 | ✅ 通过 | 属性获取和指针操作均有判空检查 | | 变量初始化 | ✅ 通过 | 成员变量在Init函数中正确初始化 | | 资源匹配 | ✅ 通过 | Kernel侧静态分配,无需释放 | ### Kernel侧红线问题 | 红线要求 | 检视结果 | 说明 | |---------|---------|-----| | GM地址偏移用int64 | ✅ 通过 | 业务约束确保安全范围 | | 除法除零保护 | ✅ 通过 | 除数来自TilingData,符合排除规则 | | 数组索引校验 | ✅ 通过 | 索引访问有边界保护 | --- ## Kernel侧排除规则执行说明 根据 cpp-secure.md Kernel侧排除规则,以下情况在检视中自动排除: | 排除规则 | 排除原因 | 检视执行情况 | |---------|---------|-------------| | 除数来自TilingData | Tiling阶段已校验非零 | ✅ 已严格执行 | | 索引来自TilingData | Tiling阶段已校验范围 | ✅ 已严格执行 | | 循环边界内索引 | 循环条件保证范围 | ✅ 已严格执行 | --- ## TOPK高频问题检视结果 | TOPK问题 | 检视结果 | 说明 | |---------|---------|-----| | 函数返回值校验 | ✅ 通过 | 所有关键函数调用均有返回值检查 | | GetInputDesc获取Dtype | ✅ 通过 | 正确使用GetInputDesc获取数据类型 | | 属性从context获取 | ✅ 通过 | 属性正确从context获取,未通过CompileInfo传递 | | 属性类型与IR原型一致 | ✅ 通过 | int64_t与IR原型Int类型匹配 | | 外部输入校验 | ✅ 通过 | Tiling阶段有完整的输入校验 | | GM偏移用int64表示 | ✅ 通过 | 业务约束确保安全 | | 特殊值处理 | ✅ 通过 | 无特殊值计算场景 | | atomic累加清零 | ✅ 通过 | 无atomic操作 | | 通信算子核间同步 | ✅ 通过 | 有SyncAll同步 | | 宏定义变量冲突 | ✅ 通过 | 无风险宏定义 | --- ## 建议修复优先级 ### 中危问题(建议修复) **唯一待修复问题**: 删除未使用的头文件 - 文件: distribute_barrier_extend_tiling.cpp - 行: 1827-1838 - 操作: 删除8个未使用的头文件包含 - 影响: 减少编译依赖,提升代码整洁度 --- ## 总结 本次检视严格执行假设检验方法论和Kernel侧排除规则: **检视统计**: - 代码文件: 32个文件变更 - 检视重点: Tiling代码 + Kernel代码 - 发现问题: 1个中危问题(未使用头文件) - 安全红线: 全部通过 ✅ - TOPK问题: 全部通过 ✅ **整体评价**: 代码质量优秀,安全防护完善。Host侧和Kernel侧均符合安全红线要求。唯一发现的问题为代码整洁性问题(未使用头文件),不影响功能和安全。 **建议**: 删除 distribute_barrier_extend_tiling.cpp 中的未使用头文件,保持代码整洁。 --- ## 附录: 检视方法论 本次检视采用假设检验驱动方法论: | 阶段 | 执行情况 | |-----|---------| | 阶段1: 参数校验 | ✅ 已校验必需参数完整性 | | 阶段2: 规范学习 | ✅ 已完整阅读3份规范文档 | | 阶段3: 代码段识别 | ✅ 已划分代码段进行分析 | | 阶段4: 假设建立 | ✅ 对每个代码段建立H0/H1假设 | | 阶段5: 证据收集 | ✅ 按规范条款系统性收集证据 | | 阶段6: 有效性校验 | ✅ 已排除误报(应用排除规则) | | 阶段7: 决策判断 | ✅ 自信值超过60%才判定为风险 | | 阶段8: 报告生成 | ✅ 已生成完整检视报告 | **排除规则应用统计**: - Kernel侧除法排除: 3处 - Kernel侧索引排除: 5处 - 业务约束保护认定: 2处 --- *报告生成时间: 2026-05-12* *检视工具: ascendc-code-review skill* *规范版本: cpp-secure.md (47条), cpp-general.md (46条), ascendc-topk.md (13条)* ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2300 ## 测试 二级冒烟,泛化测试 ## 文档更新 更新了README.md文档 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!373017 天前