文件最后提交记录最后更新时间
增加mmalltoall校验和ut用例 Co-authored-by: qzzzy1<qiziyu2@huawei.com> # message auto-generated for no-merge-commit merge: !5078 merge master into master 增加mmalltoall校验和ut用例 Created-by: qzzzy1 Commit-by: qzzzy1 Merged-by: cann-robot Description: ## 描述 matmulalltoall存在一些检验不足的场景,还有未覆盖的UT ## 关联的Issue 关联Issue 2316 ## 测试 rdv,本地测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!507820 天前
MmA2A_init Co-authored-by: 何梓洋_蓝区<heziyang5@h-partners.com> # message auto-generated for no-merge-commit merge: !765 merge MmA2a_master into master MmA2A_init Created-by: Hilfsblaetter Commit-by: 何梓洋_蓝区 Merged-by: cann-robot Description: ## 描述 新增算子 MatmulAlltoAll ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!7654 个月前
增加mmalltoall校验和ut用例 Co-authored-by: qzzzy1<qiziyu2@huawei.com> # message auto-generated for no-merge-commit merge: !5078 merge master into master 增加mmalltoall校验和ut用例 Created-by: qzzzy1 Commit-by: qzzzy1 Merged-by: cann-robot Description: ## 描述 matmulalltoall存在一些检验不足的场景,还有未覆盖的UT ## 关联的Issue 关联Issue 2316 ## 测试 rdv,本地测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!507820 天前
MmA2A_init Co-authored-by: 何梓洋_蓝区<heziyang5@h-partners.com> # message auto-generated for no-merge-commit merge: !765 merge MmA2a_master into master MmA2A_init Created-by: Hilfsblaetter Commit-by: 何梓洋_蓝区 Merged-by: cann-robot Description: ## 描述 新增算子 MatmulAlltoAll ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!7654 个月前
add check tensor x2 is contiguous Co-authored-by: yifux<xiongyifu1@huawei.com> # message auto-generated for no-merge-commit merge: !3441 merge pr_conti into master add check tensor x2 is contiguous Created-by: xiongyifu Commit-by: yifux Merged-by: cann-robot Description: ## 描述 修改 all_to_all_matmul & matmul_all_to_all 两个算子的信息库定义 ## 关联的Issue DTS2026032625016 ## 测试 线上出子包验证通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!34412 个月前
add scenario info in error check Co-authored-by: wangkechen<wangkechen3@huawei.com> # message auto-generated for no-merge-commit merge: !4164 merge adderrorcheckinfo into master add scenario info in error check Created-by: Kiana1216 Commit-by: wangkechen Merged-by: cann-robot Description: ## 描述 alltoallmatmul和matmulalltoall算子部分报错信息缺少当前场景的描述,原因是aclnn侧使用的是公共OP_CHECK_xxxx宏,导致在不同量化场景下,使用该宏的校验打印LOG日志相似,不方便用户定位当前的场景。 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1865 ## 测试 本地出包验证,本地UT验证,线上rdv验证 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # PR 4164 代码检视报告 ## 检视概览 **PR编号**: 4164 **PR标题**: add scenario info in error check **提交哈希**: 891de2353c837399839c07daa47f36e2f950d9b1 **检视日期**: 2026-04-15 **检视范围**: TOPK问题、红线问题、代码质量 ### 修改文件清单 | 文件路径 | 修改类型 | 变更统计 | |---------|---------|---------| | mc2/allto_all_matmul/op_api/aclnn_allto_all_quant_matmul.cpp | 修改 | 19处变更 | | mc2/matmul_allto_all/op_api/aclnn_quant_matmul_allto_all.cpp | 修改 | 20处变更 | | mc2/matmul_allto_all/op_api/matmul_allto_all_util.h | 修改 | 新增26行 | ### 修改内容摘要 该PR主要修改了 alltoallquantmatmulquantmatmulalltoall 使用宏校验的地方,增加了当前场景信息,使得报错信息更加清晰。具体修改包括: 1. 新增三个场景常量:KC_SCENEKCDYN_SCENEMX_SCENE 2. 新增三个带场景标识的校验宏: - OP_CHECK_WRONG_DIMENSION_WITH_SCENARIO - OP_CHECK_DTYPE_NOT_SUPPORT_WITH_SCENARIO - OP_CHECK_DTYPE_NOT_SAME_WITH_SCENARIO 3. 将原有的校验宏替换为带场景标识的宏,共替换30处 --- ## 检视结果汇总 ### 整体评分 | 评分维度 | 得分 | 满分 | 说明 | |---------|------|------|------| | TOPK问题合规性 | 95 | 100 | 发现1个建议性问题 | | 红线问题合规性 | 100 | 100 | 无红线问题 | | 代码质量 | 90 | 100 | 发现1个建议性问题 | | **总分** | **95** | **100** | **代码质量优秀** | ### 问题统计 | 严重级别 | 数量 | 说明 | |---------|------|------| | 🔴 严重(必须修复) | 0 | 无严重问题 | | 🟡 中等(建议修复) | 2 | 建议性优化 | | 🟢 轻微(可选修复) | 0 | 无轻微问题 | --- ## TOPK问题检查结果 ### ✅ 通过的TOPK检查项 | 序号 | 检查项 | 结果 | 说明 | |-----|--------|------|------| | TOPK-1 | 必须校验函数返回值 | ✅ 通过 | 所有函数调用均正确处理返回值 | | TOPK-2 | 使用GetInputDesc获取Dtype | ✅ 通过 | 代码中使用GetViewShape获取Shape | | TOPK-3 | 生命周期内使用局部变量指针 | ✅ 通过 | 无野指针风险 | | TOPK-4 | 属性从context获取 | ✅ 通过 | 不涉及属性获取 | | TOPK-5 | 属性获取类型需与ir原型一致 | ✅ 通过 | 不涉及属性获取 | | TOPK-6 | 必须考虑nan/inf/+0/-0等特殊值 | ✅ 通过 | 不涉及数值计算 | | TOPK-7 | 融合规则/InferShape/Tiling外部输入校验 | ✅ 通过 | 宏定义中包含输入校验 | | TOPK-8 | gm内存偏移或大小必须用int64表示 | ✅ 通过 | 不涉及内存操作 | | TOPK-9 | atomic累加需src(ub)与dst(gm)清零处理 | ✅ 通过 | 不涉及atomic操作 | | TOPK-10 | 可整数计算时不允许转浮点数计算 | ✅ 通过 | 不涉及数值计算 | | TOPK-11 | 通信算子融合需核间同步 | ✅ 通过 | 不涉及通信算子 | | TOPK-12 | 宏定义中临时变量命名不能和外部变量冲突 | ✅ 通过 | 宏定义中未使用临时变量 | | TOPK-13 | dlopen管理的so禁用thread_local | ✅ 通过 | 不涉及动态库 | ### 🟡 发现的TOPK问题 #### 问题1:宏定义中缺少空指针检查(建议性) **问题编号**: TOPK-3(生命周期内使用局部变量指针,避免野指针) **严重级别**: 🟡 中等(建议修复) **影响范围**: 所有新增的校验宏 **问题描述**: 新增的三个校验宏 OP_CHECK_WRONG_DIMENSION_WITH_SCENARIOOP_CHECK_DTYPE_NOT_SUPPORT_WITH_SCENARIOOP_CHECK_DTYPE_NOT_SAME_WITH_SCENARIO 在宏定义中直接调用 tensor->GetViewShape()tensor->GetDataType(),没有对 tensor 参数进行空指针检查。 虽然原有的宏定义 OP_CHECK_WRONG_DIMENSIONOP_CHECK_DTYPE_NOT_SUPPORTOP_CHECK_DTYPE_NOT_SAME 也没有空指针检查,但为了提高代码健壮性,建议在新宏中增加空指针检查。 **代码位置**: ```cpp // 文件:mc2/matmul_allto_all/op_api/matmul_allto_all_util.h // 行号:55-75 #define OP_CHECK_WRONG_DIMENSION_WITH_SCENARIO(tensor, expectedDimNum, scenario, retExpr) \ if (tensor->GetViewShape().GetDimNum() != expectedDimNum) { \ OP_LOGE(ACLNN_ERR_PARAM_INVALID, "In [%s] scenario, dimension check failed: Expected %zu dimension input, but got %s with sizes %s.", \ scenario, static_cast<size_t>(expectedDimNum), #tensor, op::ToString(tensor->GetViewShape()).GetString()); \ retExpr; \ } #define OP_CHECK_DTYPE_NOT_SUPPORT_WITH_SCENARIO(tensor, supportList, scenario, retExpr) \ if (!CheckType(tensor->GetDataType(), supportList)) { \ OP_LOGE(ACLNN_ERR_PARAM_INVALID, "In [%s] scenario, dtype check failed: Tensor %s not implemented for %s, should be in dtype support list %s.", \ scenario, #tensor, op::ToString(tensor->GetDataType()).GetString(), op::ToString(supportList).GetString()); \ retExpr; \ } #define OP_CHECK_DTYPE_NOT_SAME_WITH_SCENARIO(tensor1, tensor2, scenario, retExpr) \ if (tensor1->GetDataType() != tensor2->GetDataType()) { \ OP_LOGE(ACLNN_ERR_PARAM_INVALID, "In [%s] scenario, dtype consistency check failed: Expected both tensors to have same dtype, but found %s %s and %s %s.", \ scenario, #tensor1, op::ToString(tensor1->GetDataType()).GetString(), \ #tensor2, op::ToString(tensor2->GetDataType()).GetString()); \ retExpr; \ } ``` **风险分析**: - **风险等级**: 中等 - **触发条件**: 当传入的 tensor 参数为 nullptr 时 - **影响后果**: 导致空指针解引用,程序崩溃 - **实际风险**: 较低,因为调用这些宏的函数通常已经在上层进行了空指针检查 **修复建议**: 建议在宏定义中增加空指针检查,与 OP_CHECK_NULL 宏保持一致: ```cpp #define OP_CHECK_WRONG_DIMENSION_WITH_SCENARIO(tensor, expectedDimNum, scenario, retExpr) \ if (IsNullptr(tensor, #tensor)) { \ retExpr; \ } \ if (tensor->GetViewShape().GetDimNum() != expectedDimNum) { \ OP_LOGE(ACLNN_ERR_PARAM_INVALID, "In [%s] scenario, dimension check failed: Expected %zu dimension input, but got %s with sizes %s.", \ scenario, static_cast<size_t>(expectedDimNum), #tensor, op::ToString(tensor->GetViewShape()).GetString()); \ retExpr; \ } #define OP_CHECK_DTYPE_NOT_SUPPORT_WITH_SCENARIO(tensor, supportList, scenario, retExpr) \ if (IsNullptr(tensor, #tensor)) { \ retExpr; \ } \ if (!CheckType(tensor->GetDataType(), supportList)) { \ OP_LOGE(ACLNN_ERR_PARAM_INVALID, "In [%s] scenario, dtype check failed: Tensor %s not implemented for %s, should be in dtype support list %s.", \ scenario, #tensor, op::ToString(tensor->GetDataType()).GetString(), op::ToString(supportList).GetString()); \ retExpr; \ } #define OP_CHECK_DTYPE_NOT_SAME_WITH_SCENARIO(tensor1, tensor2, scenario, retExpr) \ if (IsNullptr(tensor1, #tensor1) || IsNullptr(tensor2, #tensor2)) { \ retExpr; \ } \ if (tensor1->GetDataType() != tensor2->GetDataType()) { \ OP_LOGE(ACLNN_ERR_PARAM_INVALID, "In [%s] scenario, dtype consistency check failed: Expected both tensors to have same dtype, but found %s %s and %s %s.", \ scenario, #tensor1, op::ToString(tensor1->GetDataType()).GetString(), \ #tensor2, op::ToString(tensor2->GetDataType()).GetString()); \ retExpr; \ } ``` **注意**: 如果需要保持与原有宏的一致性,可以暂不添加空指针检查,但需要在调用这些宏的函数中确保已经进行了空指针检查。 --- ## 红线问题检查结果 ### ✅ 通过的红线检查项 | 规范编号 | 检查项 | 结果 | 说明 | |---------|--------|------|------| | cpp-secure-1.1 | 保证静态类型安全 | ✅ 通过 | 无类型转换问题 | | cpp-secure-1.2 | 保证内存安全 | ✅ 通过 | 无内存操作 | | cpp-secure-1.3 | 禁止使用未定义行为 | ✅ 通过 | 无未定义行为 | | cpp-secure-2.1 | 有符号整数运算不溢出 | ✅ 通过 | 不涉及整数运算 | | cpp-secure-2.2 | 无符号整数运算不回绕 | ✅ 通过 | 不涉及整数运算 | | cpp-secure-2.3 | 除法/余数运算除零保护 | ✅ 通过 | 不涉及除法运算 | | cpp-secure-3.1 | 禁止使用未初始化的变量 | ✅ 通过 | 所有变量均正确初始化 | | cpp-secure-3.3 | 数组索引校验 | ✅ 通过 | 不涉及数组操作 | | cpp-secure-3.4 | 禁止 sizeof 指针 | ✅ 通过 | 不涉及 sizeof | | cpp-secure-3.5 | 指针使用前判空 | ✅ 通过 | 见TOPK问题1(建议性) | | cpp-secure-4.1 | 外部输入合法性校验 | ✅ 通过 | 宏定义中包含校验 | | cpp-secure-4.2 | 内存操作长度校验 | ✅ 通过 | 不涉及内存操作 | ### 🔴 发现的红线问题 无严重红线问题。 --- ## 代码质量检查结果 ### ✅ 代码质量优点 1. **代码风格一致**:新增的宏定义与原有宏定义保持一致的代码风格和命名规范 2. **错误信息清晰**:新增的场景信息使得错误信息更加明确,便于问题定位 3. **向后兼容**:保留了原有的宏定义,不影响现有代码 4. **场景覆盖完整**:覆盖了KC、KCDYN、MX三种量化场景 5. **参数匹配正确**:所有宏调用的参数数量和类型均正确 ### 🟡 发现的代码质量问题 #### 问题2:场景常量定义位置建议优化 **严重级别**: 🟡 中等(建议修复) **影响范围**: matmul_allto_all_util.h **问题描述**: 新增的三个场景常量 KC_SCENEKCDYN_SCENEMX_SCENE 定义在头文件中,且使用了 constexpr char[] 类型。这些常量可能会在多个编译单元中重复定义,导致链接时出现符号重复定义的问题。 **代码位置**: ```cpp // 文件:mc2/matmul_allto_all/op_api/matmul_allto_all_util.h // 行号:31-33 constexpr char KC_SCENE[] = "KC quantization(x1QuantMode=3, x2QuantMode=2)"; constexpr char KCD[] = "KCDYN quantization(x1QuantMode=7, x2QuantMode=2)"; constexpr char MX_SCENE[] = "MX quantization(x1QuantMode=6, x2QuantMode=6)"; ``` **修复建议**: 建议将场景常量定义为 inline 变量或使用字符串字面量: ```cpp // 方案1:使用 inline 变量(C++17+) inline constexpr char KC_SCENE[] = "KC quantization(x1QuantMode=3, x2QuantMode=2)"; inline constexpr char KCDYN_SCENE[] = "KCDYN quantization(x1QuantMode=7, x2QuantMode=2)"; inline constexpr char MX_SCENE[] = "MX quantization(x1QuantMode=6, x2QuantMode=6)"; // 方案2:使用字符串字面量(推荐) #define KC_SCENE "KC quantization(x1QuantMode=3, x2QuantMode=2)" #define KCDYN_SCENE "KCDYN quantization(x1QuantMode=7, x2QuantMode=2)" #define MX_SCENE "MX quantization(x1QuantMode=6, x2QuantMode=6)" ``` **注意**: 如果项目中已经使用了类似的常量定义方式且没有出现问题,可以保持现状。但从代码质量和可移植性角度考虑,建议使用方案2(宏定义)。 --- ## 性能影响分析 ### 性能影响评估 | 影响方面 | 评估结果 | 说明 | |---------|---------|------| | 编译时间 | 无影响 | 仅增加宏定义,不增加编译负担 | | 运行时性能 | 无影响 | 仅在错误情况下执行,正常路径无影响 | | 内存占用 | 无影响 | 仅增加少量字符串常量 | | 代码体积 | 轻微增加 | 增加约26行代码 | ### 性能优化建议 无性能优化建议,代码修改对性能无负面影响。 --- ## 精度影响分析 ### 精度影响评估 | 影响方面 | 评估结果 | 说明 | |---------|---------|------| | 计算精度 | 无影响 | 不涉及数值计算 | | 数据类型 | 无影响 | 不涉及数据类型转换 | | 边界处理 | 无影响 | 不涉及边界值处理 | --- ## 安全性分析 ### 安全性评估 | 安全方面 | 评估结果 | 说明 | |---------|---------|------| | 空指针安全 | 🟡 良好 | 见TOPK问题1(建议性) | | 内存安全 | ✅ 优秀 | 无内存操作 | | 输入验证 | ✅ 优秀 | 宏定义中包含校验 | | 日志安全 | ✅ 优秀 | 参数匹配正确 | --- ## 可维护性分析 ### 可维护性评估 | 维护方面 | 评估结果 | 说明 | |---------|---------|------| | 代码可读性 | ✅ 优秀 | 错误信息清晰,易于理解 | | 代码可扩展性 | ✅ 优秀 | 宏定义易于扩展新场景 | | 代码可测试性 | ✅ 优秀 | 宏定义易于测试 | | 文档完整性 | 🟡 良好 | 建议添加宏使用说明 | ### 可维护性建议 建议在 matmul_allto_all_util.h 文件头部添加宏使用说明注释: ```cpp /** * @brief 带场景标识的校验宏,用于区分不同量化场景下的校验错误 * * 使用场景: * - KC_SCENE: KC量化场景(x1QuantMode=3, x2QuantMode=2) * - KCDYN_SCENE: KCDYN量化场景(x1QuantMode=7, x2QuantMode=2) * - MX_SCENE: MX量化场景(x1QuantMode=6, x2QuantMode=6) * * 注意事项: * - 调用这些宏前请确保tensor参数已进行空指针检查 * - 这些宏主要用于参数校验,不应在性能关键路径中使用 */ ``` --- ## 代码示例对比 ### 修改前(错误信息) ``` Expected 1 dimension input, but got x2Scale with sizes [128]. ``` ### 修改后(错误信息) ``` In [KCDYN quantization(x1QuantMode=7, x2QuantMode=2)] scenario, dimension check failed: Expected 1 dimension input, but got x2Scale with sizes [128]. ``` ### 改进效果 - ✅ 明确了当前量化场景(KCDYN) - ✅ 提供了量化模式的详细信息(x1QuantMode=7, x2QuantMode=2) - ✅ 便于用户快速定位问题原因 --- ## 检视结论 ### 总体评价 该PR的代码修改质量优秀,主要改进了错误信息的清晰度,使得用户在遇到参数校验错误时能够快速定位问题所在的具体量化场景。代码风格与现有代码保持一致,没有引入新的安全风险或性能问题。 ### 检视结论 **✅ 通过检视,建议合并** ### 评分详情 | 评分维度 | 得分 | 满分 | 权重 | 加权得分 | |---------|------|------|------|-- See merge request: cann/ops-transformer!41641 个月前