文件最后提交记录最后更新时间
move template Co-authored-by: qq_43844249<fanglin17@huawei.com> # message auto-generated for no-merge-commit merge: !2662 merge move_mc2template_to_common into master move template Created-by: qq_43844249 Commit-by: qq_43844249 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将matmulalltoall算子下模板库迁移至common目录,下沉不能算子间复用的alltoall流水线 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!26621 个月前
move template Co-authored-by: qq_43844249<fanglin17@huawei.com> # message auto-generated for no-merge-commit merge: !2662 merge move_mc2template_to_common into master move template Created-by: qq_43844249 Commit-by: qq_43844249 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将matmulalltoall算子下模板库迁移至common目录,下沉不能算子间复用的alltoall流水线 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!26621 个月前
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!183014 天前
move template Co-authored-by: qq_43844249<fanglin17@huawei.com> # message auto-generated for no-merge-commit merge: !2662 merge move_mc2template_to_common into master move template Created-by: qq_43844249 Commit-by: qq_43844249 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将matmulalltoall算子下模板库迁移至common目录,下沉不能算子间复用的alltoall流水线 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!26621 个月前
A3注册opFile.value名需要和A2保持一致 Co-authored-by: w00951525<wangfuhao7@huawei.com> # message auto-generated for no-merge-commit merge: !2975 merge all2allmm_A2A3A5_version_lsolation into master A3注册opFile.value名需要和A2保持一致 Created-by: w00951525 Commit-by: w00951525 Merged-by: cann-robot Description: ## 描述 A3注册opFile.value名需要和A2保持一致 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1059 mc2/allto_all_matmul/op_host/allto_all_matmul_def.cpp中 算子原型中allto_all_matmul .ExtendCfgInfo("opFile.value", "allto_all_matmul_apt"); A3注册opFile.value名需要和A2保持一致 ## 测试 UT+RDV+ST测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [x] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!29751 个月前
调整common目录结构 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !2465 merge master_v3 into master 调整common目录结构 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 调整common目录调整 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!24652 个月前
aicpu Co-authored-by: qq_43844249<fanglin17@huawei.com> # message auto-generated for no-merge-commit merge: !4948 merge aicpu into master aicpu Created-by: qq_43844249 Commit-by: qq_43844249 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> # 代码检视报告 **项目名称**:ops-transformer mc2 模块检视报告 **检视模块**:mc2/allto_all_matmul (提交 3aa780ab) **检视人**:Ascend C Code Review Agent **检视日期**:2026-05-13 ## 🔍 检视概览 | 统计项 | 数值 | | ---- | ---- | | 发现问题总数 | 2 个 | | 严重级(CRITICAL)问题 | 0 个 | | 中等级(MEDIUM)问题 | 2 个 | | 轻微级(LOW)问题 | 0 个 | | 存疑数量 | 1 个 | **核心结论**:本次提交主要修改通信模式配置方式,通过环境变量动态选择 CCU/AICPU 通信引擎。代码变更涉及 Host侧、Tiling侧和 Kernel侧的多个文件。发现 2 处中等风险问题:外部输入未显式校验(防御性编程缺失)。存疑 1 处核间同步问题需人工确认。建议优先修复防御性编程问题,确保代码健壮性。 --- ## ❌ 问题详情及修改建议 ### 问题ID:ISSUE-001 | 严重级别:MEDIUM(中等) #### 🔬 假设检验过程 **代码段**:GetCommModeFromEnv() 调用未显式校验返回值 **假设**:H0: 该代码段是安全的 | 证据序号 | 证据类型 | 规范ID | 证据描述 | 分值增量 | 累计自信值 | |---------|---------|--------|---------|---------|-----------| | 1 | 规范违反 | TOPK-1 | Host侧代码调用函数后未显式校验返回值,违反"必须校验函数返回值"条款 | +40% | 40% | | 2 | 函数实现缓解 | - | 查看 GetCommModeFromEnv() 实现,函数内部保证返回值只能是 0 或 1,缓解风险 | -20% | 20% | | 3 | 上下文防御缺失 | TOPK-7 | 调用侧无防御性编程校验,依赖函数内部逻辑 | +20% | 40% | **结论**:自信值 **40%** > 60%阈值未达到,但存在防御性编程缺失,判定为**中等风险**。 --- **关联红线条款**:TOPK-1(必须校验函数返回值)+ TOPK-7(外部输入校验) **代码路径**:多处文件 - mc2/allto_all_matmul/op_api/aclnn_allto_all_matmul.cpp:318-326 - mc2/allto_all_matmul/op_api/aclnn_allto_all_quant_matmul.cpp:544-552 - mc2/allto_all_matmul/op_graph/allto_all_matmul_gen_task.cpp:35-48 - mc2/allto_all_matmul/op_host/op_tiling/arch35/allto_all_fp_matmul_tiling_base.cpp:191-192, 218-220 - mc2/allto_all_matmul/op_host/op_tiling/arch35/allto_all_kc_quant_matmul_tiling_base.cpp:232-233, 553-555 - mc2/allto_all_matmul/op_host/op_tiling/arch35/allto_all_mx_quant_matmul_tiling_base.cpp:491-493, 797-800 **问题类型**:外部输入未显式校验(防御性编程缺失) **问题描述**: 代码中调用 Mc2Comm::GetCommModeFromEnv() 获取通信模式,返回值 commMode 未显式校验合法性。虽然函数实现(mc2/common/utils/mc2_comm_utils.h:27-34)保证返回值只能是 COMM_MODE_CCU (0)COMM_MODE_AICPU (1),但调用侧缺乏防御性编程校验,违反 TOPK-1(必须校验函数返回值)和 TOPK-7(外部输入校验)条款要求。如果函数实现发生变更或环境变量配置异常,可能导致通信类型设置错误,影响算子正确性。 #### 修改建议 **修改前代码**(aclnn_allto_all_matmul.cpp:318-326): ```cpp uint8_t commMode = Mc2Comm::GetCommModeFromEnv(); if (commMode == Mc2Comm::COMM_MODE_CCU) { NnopbaseSetHcclServerType(executor, NnopbaseHcclServerType::NNOPBASE_HCCL_SERVER_TYPE_CCU); } else { NnopbaseSetHcclServerType(executor, NnopbaseHcclServerType::NNOPBASE_HCCL_SERVER_TYPE_AICPU); } ``` **修改后代码**: ```cpp uint8_t commMode = Mc2Comm::GetCommModeFromEnv(); // 显式校验返回值合法性 if (commMode != Mc2Comm::COMM_MODE_CCU && commMode != Mc2Comm::COMM_MODE_AICPU) { OPS_LOGE("aclnnAlltoAllMatmul", "Invalid commMode from env: %u", commMode); return ACLNN_ERR_INNER; } if (commMode == Mc2Comm::COMM_MODE_CCU) { NnopbaseSetHcclServerType(executor, NnopbaseHcclServerType::NNOPBASE_HCCL_SERVER_TYPE_CCU); } else { NnopbaseSetHcclServerType(executor, NnopbaseHcclServerType::NNOPBASE_HCCL_SERVER_TYPE_AICPU); } ``` **修改说明**: 在调用 GetCommModeFromEnv() 后添加显式返回值校验,确保 commMode 在合法范围内(COMM_MODE_CCU 或 COMM_MODE_AICPU)。若返回非法值,记录错误日志并返回错误码,避免后续通信类型设置错误。符合 TOPK-1(必须校验函数返回值)和 TOPK-7(外部输入校验)条款要求,增强代码健壮性和防御性编程能力。建议在其他调用位置同步修改。 --- ### 问题ID:ISSUE-002 | 严重级别:MEDIUM(中等) #### 🔬 假设检验过程 **代码段**:Tiling侧 hcclServerType 参数未校验范围 **假设**:H0: 该代码段是安全的 | 证据序号 | 证据类型 | 规范ID | 证据描述 | 分值增量 | 累计自信值 | |---------|---------|--------|---------|---------|-----------| | 1 | 规范违反 | TOPK-7 | Tiling外部输入 hcclServerType 来自环境变量,未显式校验合法性 | +40% | 40% | | 2 | 函数实现缓解 | - | GetCommModeFromEnv() 保证返回值范围 | -20% | 20% | | 3 | TilingKey 计算风险 | - | hcclServerType 直接用于 TilingKey 计算,若非法可能导致模板选择错误 | +20% | 40% | **结论**:自信值 **40%**,存在防御性编程缺失,判定为**中等风险**。 --- **关联红线条款**:TOPK-7(融合规则/InferShape/Tiling外部输入校验) **代码路径**: - mc2/allto_all_matmul/op_host/op_tiling/arch35/allto_all_fp_matmul_tiling_base.cpp:218-220 - mc2/allto_all_matmul/op_host/op_tiling/arch35/allto_all_kc_quant_matmul_tiling_base.cpp:553-555 - mc2/allto_all_matmul/op_host/op_tiling/arch35/allto_all_mx_quant_matmul_tiling_base.cpp:797-800 **问题类型**:Tiling 外部输入未校验 **问题描述**: Tiling 代码中 hcclServerType 来自环境变量(外部输入),未显式校验是否在合法范围内。该值直接用于 TilingKey 计算(GET_TPL_TILING_KEY),若为非法值可能导致 TilingKey 计算错误,进而选择错误的 Kernel 模板,影响算子正确性。虽然函数实现保证返回值范围,但 Tiling侧应遵循防御性编程原则,显式校验外部输入。 #### 修改建议 **修改前代码**(allto_all_fp_matmul_tiling_base.cpp:218-220): ```cpp uint8_t hcclServerType = Mc2Comm::GetCommModeFromEnv(); const uint64_t tilingKey = GET_TPL_TILING_KEY(NON_QUANT_MODE, x2TransposeFlag, biasDType, false, hcclServerType); OP_LOGD(opName_, "QUANTMODE,X2TRANSPOSE,DTYPEBIAS,ISSMALLK,COMMTYPE is: [%d,%d,%d,0,%d], and tilingKey is [%lu].", NON_QUANT_MODE, x2TransposeFlag, biasDType, hcclServerType, tilingKey); ``` **修改后代码**: ```cpp uint8_t hcclServerType = Mc2Comm::GetCommModeFromEnv(); // 显式校验外部输入合法性 if (hcclServerType != Mc2Comm::COMM_MODE_CCU && hcclServerType != Mc2Comm::COMM_MODE_AICPU) { OP_LOGE(opName_, "Invalid hcclServerType from env: %u", hcclServerType); return ge::GRAPH_FAILED; } const uint64_t tilingKey = GET_TPL_TILING_KEY(NON_QUANT_MODE, x2TransposeFlag, biasDType, false, hcclServerType); OP_LOGD(opName_, "QUANTMODE,X2TRANSPOSE,DTYPEBIAS,ISSMALLK,COMMTYPE is: [%d,%d,%d,0,%d], and tilingKey is [%lu].", NON_QUANT_MODE, x2TransposeFlag, biasDType, hcclServerType, tilingKey); ``` **修改说明**: 在 TilingKey 计算前添加显式校验,确保 hcclServerType 在合法范围内。若为非法值,记录错误日志并返回失败状态,避免 TilingKey 计算错误。符合 TOPK-7(Tiling外部输入校验)条款要求,增强防御性编程能力。建议在其他 Tiling 文件中同步修改。 --- ## ⚠️ 存疑问题 ### 存疑ID:SUSPICIOUS-001 | 核间同步确认 **问题描述**: Kernel 侧代码变更修改了通信宏定义(DEFINE_MC2_HCCL_FOR_COMMUNICATION),涉及通信算子融合。根据 TOPK-11条款,通信算子融合需核间同步(使用 SyncAll() 等 API)。由于宏定义内部逻辑未在 diff 中展示,无法确认是否包含核间同步操作,需要人工查看完整宏定义实现进行确认。 **建议确认项**: 1. 查看 DEFINE_MC2_HCCL_FOR_COMMUNICATION 宏的完整定义 2. 确认宏内部是否包含 AscendC::SyncAll() 或其他核间同步 API 3. 确认同步时机是否合理(多轮计算和集合通信之间) **相关代码路径**: - mc2/allto_all_matmul/op_kernel/allto_all_matmul_apt.cpp:31-33, 54-56, 77-79 --- ## ✅ 通过条款 以下条款检视未发现问题,代码符合规范要求: | 条款ID | 条款名称 | 检视结论 | |-------|---------|---------| | TOPK-2 | 使用GetInputDesc获取Dtype,context获取Shape | 通过(未涉及) | | TOPK-3 | 生命周期内使用局部变量指针,避免野指针 | 通过 | | TOPK-4 | 属性从context获取,禁止CompileInfo传递 | 通过(未涉及) | | TOPK-5 | 属性获取类型需与ir原型一致 | 通过(未涉及) | | TOPK-6 | 必须考虑nan/inf/+0/-0等特殊值和边界值处理 | 通过 | | TOPK-8 | gm内存偏移或大小必须用int64表示 | 通过 | | TOPK-9 | atomic累加需src(ub)与dst(gm)清零处理 | 通过(未涉及) | | TOPK-10 | 可整数计算时不允许转浮点数计算 | 通过 | | TOPK-12 | 宏定义中临时变量命名不能和外部变量冲突 | 通过 | | TOPK-13 | dlopen管理的so禁用thread_local | 通过(未涉及) | | CPP-SEC-2.1 | 有符号整数运算不溢出 | 通过 | | CPP-SEC-2.2 | 无符号整数运算不回绕 | 通过 | | CPP-SEC-2.3 | 除法/余数运算除零保护 | 通过(未涉及) | | CPP-SEC-3.1 | 禁止使用未初始化的变量 | 通过 | | CPP-SEC-3.3 | 数组索引校验 | 通过(未涉及) | | CPP-SEC-3.5 | 指针使用前判空 | 通过(未涉及) | --- ## 📊 检视统计 ### 按严重级别统计 - CRITICAL(严重):0 个 - MEDIUM(中等):2 个 - LOW(轻微):0 个 ### 按条款来源统计 - TOPK 问题清单:2 个问题(TOPK-1、TOPK-7) - C++ 安全编码规范:0 个问题 ### 按代码侧别统计 - Host侧(API层):1 个问题(ISSUE-001,多文件) - Tiling侧:1 个问题(ISSUE-002,多文件) - Kernel侧:1 个存疑(SUSPICIOUS-001) --- ## 💡 总结与建议 ### 核心问题 本次提交引入环境变量配置通信模式的功能,但缺乏防御性编程校验。虽然 GetCommModeFromEnv() 函数内部保证返回值安全性,但调用侧(Host侧和Tiling侧)未显式校验外部输入,违反 TOPK-1 和 TOPK-7条款要求,存在中等风险。 ### 建议措施 1. **立即修复**:在所有 GetCommModeFromEnv() 调用位置添加显式返回值校验(共6个文件,多处位置) 2. **优先级**:中等风险,建议在下个迭代中修复 3. **影响范围**:Host侧、Tiling侧,不影响 Kernel侧编译和执行 4. **人工确认**:查看通信宏定义内部逻辑,确认核间同步机制 ### 代码质量评估 - 整体代码变更符合 Ascend C 编程规范 - 数值安全、内存安全方面无明显问题 - 输入验证和防御性编程方面存在改进空间 - 建议加强外部输入校验,提升代码健壮性 --- ## 报告生成时间 2026-05-13 14:30:00 ## 报告状态 已完成检视,待修复验证 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!494820 天前
fix error offset in alltoallmm. Co-authored-by: qq_43844249<fanglin17@huawei.com> # message auto-generated for no-merge-commit merge: !6131 merge fix-bug-alltoallmm into master fix error offset in alltoallmm. Created-by: qq_43844249 Commit-by: qq_43844249 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> # 代码检视报告 ## 检视概要 | 统计项 | 数值 | | ------ | ---- | | **分支名称** | fix-bug-alltoallmm | | **提交哈希** | c6adcb86feb3a585f7ec0090cc1ded7f85d2f197 | | **提交信息** | fix error offset. | | **变更文件** | 1 个 | | **变更行数** | 1 行(+1, -1) | | **检视条款** | 17 条(TOPK 5 条 + CPP-SECURE 12 条) | | **发现问题** | 0 个(变更部分通过检视) | | **潜在风险** | 2 个(需人工确认) | **核心结论**:本次提交修复了 ProcessTail 函数中 x1ScaleOffset 计算错误,从使用 tileM 改为使用 tailM,修复逻辑正确。代码整体符合安全编码规范,TOPK 问题清单中未发现明显违规。 --- ## TOPK 问题清单检视结果 ### TOPK-3: 生命周期内使用局部变量指针,避免野指针 [适用: All] **检视结果**:✅ 通过 **分析**:代码中无局部变量指针返回问题,所有指针均在作用域内有效使用。 --- ### TOPK-6: 必须考虑nan/inf/+0/-0等特殊值和边界值处理 [适用: All] **检视结果**:✅ 通过 **分析**:本次变更代码主要为地址偏移计算(整数乘法),不涉及浮点运算或特殊值处理场景。 --- ### TOPK-8: gm内存偏移或大小必须用int64表示 [适用: All] **检视结果**:✅ 通过 **分析**:变更代码(第 269 行)使用 uint64_t 进行偏移计算: ```cpp pipeLineContext_.computationContext->additionalData.x1ScaleOffset = static_cast<uint64_t>(mc2Tiling_.tailM) * tempScaleKBytes; ``` 符合规范要求,防止大地址空间溢出。 --- ### TOPK-10: 可整数计算时不允许转浮点数计算 [适用: All] **检视结果**:✅ 通过 **分析**:代码中全部使用整数类型进行偏移计算,无不必要的浮点转换。 --- ### TOPK-12: 宏定义中临时变量命名不能和外部变量冲突 [适用: All] **检视结果**:✅ 通过 **分析**:代码中无宏定义,不存在此风险。 --- ## C++ 安全编码规范检视结果 ### CPP-SECURE-2.1: 有符号整数运算不溢出 [适用: All] **检视结果**:✅ 通过 **分析**:代码中使用 uint64_t 进行乘法运算(第 235-236 行、第 255-256 行),防止溢出: ```cpp uint64_t tailMMultiRankK = static_cast<uint64_t>(mc2Tiling_.tailM) * rankForComm_; uint64_t tileCntMultitileMMultiRankK = static_cast<uint64_t>(mc2Tiling_.tileCnt) * static_cast<uint64_t>(mc2Tiling_.tileM) * rankForComm_; ``` --- ### CPP-SECURE-2.3: 除法/余数运算除零保护 [适用: All] **检视结果**:✅ 通过 **分析**:CeilDiv 函数(第 21-27 行)有除零保护: ```cpp template <typename T1, typename T2> __aicore__ inline T1 CeilDiv(T1 a, T2 b) { if (b == 0) { return 0; } return (a + b - 1) / b; } ``` --- ### CPP-SECURE-3.5: 指针使用前判空 [适用: All] **检视结果**:✅ 通过 **分析**:Process 函数(第 114-122 行)有指针判空保护: ```cpp if (pipeLine_ == nullptr || tilingData_ == nullptr) { return; } if (mc2Tiling_.rankDim == 0) { return; } ``` --- ### 其他条款检视结果 | 规范编号 | 规范名称 | 检视结果 | 说明 | | -------- | -------- | -------- | ---- | | 1.1 | 保证静态类型安全 | ✅ 通过 | 使用正确的类型转换 | | 1.2 | 保证内存安全 | ✅ 通过 | 无内存越界访问 | | 1.3 | 禁止使用未定义行为 | ✅ 通过 | 无 UB 操作 | | 2.2 | 无符号整数运算不回绕 | ✅ 通过 | 使用 uint64_t 防止回绕 | | 3.1 | 禁止使用未初始化的变量 | ✅ 通过 | 成员变量在 Init 中初始化 | | 3.3 | 数组索引校验 | ✅ 通过 | 无数组索引访问 | | 4.1 | 外部输入合法性校验 | ✅ 通过 | TilingData 已校验 | | 4.2 | 内存操作长度校验 | ✅ 通过 | 偏移量计算安全 | | 10.10 | 敏感信息使用后清零 | ✅ 通过 | 无敏感信息处理 | --- ## 变更代码正确性分析 ### 变更内容 **修改前**: ```cpp pipeLineContext_.computationContext->additionalData.x1ScaleOffset = static_cast<uint64_t>(mc2Tiling_.tileM) * tempScaleKBytes; ``` **修改后**: ```cpp pipeLineContext_.computationContext->additionalData.x1ScaleOffset = static_cast<uint64_t>(mc2Tiling_.tailM) * tempScaleKBytes; ``` ### 修复逻辑分析 **ProcessTile 函数(主块处理)**:使用 tileM 计算 x1ScaleOffset(第 217-223 行) **ProcessTail 函数(尾块处理)**:应使用 tailM 计算 x1ScaleOffset **修复原因**: - tileM 表示主块的 M 维度大小 - tailM 表示尾块的 M 维度大小 - ProcessTail 处理尾块,应使用尾块的参数计算偏移 **修复正确性**:✅ 修复逻辑正确 --- ## 潜在风险提示(需人工确认) ### 风险1:x1Scale 起始地址计算一致性 **位置**:第 266-267 行 ```cpp pipeLineContext_.computationContext->additionalData.x1Scale = transX1ScaleGM1_ + mc2Tiling_.tileCnt * mc2Tiling_.tileM * tempScaleKBytes; ``` **风险描述**: 此处使用 tileCnt * tileM 计算 x1Scale 的起始偏移(表示所有主块的总大小),而 x1ScaleOffset 使用 tailM(表示尾块的大小)。需确认: 1. transX1ScaleGM1_ 的数据布局是否为主块数据连续排列,尾块数据紧随其后? 2. 如果尾块数据布局与主块不同,x1Scale 的起始地址计算是否需要调整? **严重级别**:Suggestion(建议) **建议**:人工确认 transX1ScaleGM1_ 的内存布局设计,确保 ProcessTail 的地址计算与实际数据布局一致。 --- ### 风险2:cGM 输出地址计算一致性 **位置**:第 261 行 ```cpp pipeLineContext_.computationContext->baseData.cGM = y_ + static_cast<uint64_t>(mc2Tiling_.tileCnt) * mc2Tiling_.tileM * mc2Tiling_.rankN * sizeof(DTYPE_Y); ``` **风险描述**: 此处使用 tileCnt * tileM 计算输出矩阵 Y 的起始偏移,需确认: 1. 输出矩阵 Y 的布局是否为主块数据在前,尾块数据在后? 2. 与 x1Scale 的地址计算是否保持一致的布局逻辑? **严重级别**:Suggestion(建议) **建议**:人工确认 Y 矩阵的内存布局,确保 ProcessTail 的地址计算正确。 --- ## 总结与建议 ### 整体评价 本次提交是一个正确的 bug 修复,解决了 ProcessTail 函数中 x1ScaleOffset 计算使用错误参数(tileM 应为 tailM)的问题。代码整体符合 TOPK 问题清单和 C++ 安全编码规范,未发现严重安全风险。 ### 改进建议 1. **代码审查建议**: - 人工确认 transX1ScaleGM1_ 和 Y 矩阵的内存布局设计,确保 ProcessTail 的所有地址计算与实际数据布局一致 - 建议在代码注释中说明数据布局设计,提高可维护性 2. **后续测试建议**: - 增加边界值测试用例(如 tailM 较小、tileCnt 较大等场景) - 验证修复后的算子输出精度和功能正确性 ### 核间同步说明 根据用户提供的信息,调用的 process 代码已经保证了同步,不需要添加 AscendC::SyncAll() 等同步机制。因此 TOPK-11(通信算子融合需核间同步)不适用本次检视。 --- **报告生成时间**:2026-05-30 **报告状态**:已完成检视,建议人工确认潜在风险 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!61313 天前
move template Co-authored-by: qq_43844249<fanglin17@huawei.com> # message auto-generated for no-merge-commit merge: !2662 merge move_mc2template_to_common into master move template Created-by: qq_43844249 Commit-by: qq_43844249 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将matmulalltoall算子下模板库迁移至common目录,下沉不能算子间复用的alltoall流水线 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!26621 个月前