Pull Request已成功合入, 合并人@CANN-robot
(感谢 wuxiyuan 的贡献)变更摘要
此 PR 主要对 sort、sort_with_index、top_k_v2、kth_value 四个算子模块中的错误日志进行规范化整改。核心工作是将原有的通用 OP_LOGE 宏替换为一系列具备结构化语义的专用日志宏(如 OP_LOGE_FOR_INVALID_VALUE_WITH_REASON、OP_LOGE_FOR_INVALID_DTYPE、OP_LOGE_WITH_INVALID_INPUT、OP_LOGE_FOR_INVALID_SHAPE_WITH_REASON 等),使每条错误日志明确携带参数名、错误值和原因描述,提升问题定位效率与日志一致性。
主要改动
-
错误日志宏统一替换: 在
kth_value_tiling_arch35.cpp、sort_tiling_arch35.cpp、sort_tiling_common.cpp、sort_with_index_tiling.cpp、top_k_v2_tiling_arch35.cpp等多个 tiling 文件中,将原有的OP_LOGE调用系统性替换为OP_LOGE_FOR_INVALID_VALUE_WITH_REASON,每条日志新增参数名(如ubSize、tileData、maxCoreNum)和状态(如exceeds limit、insufficient、failed)两个字段。 -
数据类型与形状校验日志规范化: 在
sort_graph_infer.cpp、top_k_v2_graph_infer.cpp、top_k_v2_infershape.cpp等推断文件中,将 dtype 检查的OP_LOGE替换为OP_LOGE_FOR_INVALID_DTYPE或OP_LOGE_FOR_INVALID_DTYPE_WITH_REASON,形状检查替换为OP_LOGE_FOR_INVALID_SHAPE_WITH_REASON/OP_LOGE_FOR_INVALID_SHAPEDIM_WITH_REASON/OP_LOGE_FOR_INVALID_SHAPES_WITH_REASON,并附带具体 dtype 名称和形状信息。 -
空指针与属性校验日志规范化: 在
top_k_v2_tiling_arch35.cpp、sort_with_index_tiling.cpp、sort_with_index_tiling.h等文件中,将空指针检查(如GetInputDesc、platform_info、tilingData)的日志替换为OP_LOGE_WITH_INVALID_INPUT;在kth_value_infershape.cpp中将dim属性的范围校验日志替换为OP_LOGE_WITH_INVALID_ATTR,并补充了#include <string>以支持字符串拼接。 -
多行日志合并与格式统一: 将原本跨多行的
OP_LOGE调用(如ComputeInsertionBytesPerSeg、EstimateTwoStageUbBytes中的溢出日志)合并为单行OP_LOGE_FOR_INVALID_VALUE_WITH_REASON调用,信息通过字符串拼接纳入reason参数,减少代码冗余并保持可读性。


代码审查
经过对所有 12 个变更文件的逐文件、逐行审查,我确认本次 diff 是一次纯错误消息格式标准化改造:将 OP_LOGE 替换为结构化日志宏(如 OP_LOGE_FOR_INVALID_VALUE_WITH_REASON、OP_LOGE_FOR_INVALID_DTYPE、OP_LOGE_WITH_INVALID_INPUT、OP_LOGE_FOR_INVALID_SHAPES_WITH_REASON、OP_LOGE_WITH_INVALID_ATTR 等)。未引入任何逻辑变更、控制流变更或新缺陷。
审查结论摘要
| 优先级 | 问题数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 0 |
| P3 | 0 |
整体风险判定:无风险。此变更仅涉及错误消息格式的标准化,所有宏替换均保留了原有的错误条件和返回值逻辑,参数映射正确,字符串生命周期安全。
逐文件审查确认
| # | 文件 | 审查结果 |
|---|---|---|
| 1 | math/kth_value/op_host/arch35/kth_value_tiling_arch35.cpp |
无问题 — 15 处 OP_LOGE → 结构化宏替换,参数正确 |
| 2 | math/kth_value/op_host/kth_value_infershape.cpp |
无问题 — 新增 #include <string> 必要且正确,std::string 临时变量生命周期安全 |
| 3 | math/sort/op_graph/sort_graph_infer.cpp |
无问题 — 1 处 OP_LOGE → OP_LOGE_FOR_INVALID_DTYPE |
| 4 | math/sort/op_host/arch35/sort_tiling.cpp |
无问题 — 2 处替换,参数正确 |
| 5 | math/sort/op_host/arch35/sort_tiling_arch35.cpp |
无问题 — 多处分拆及替换,宏参数一致 |
| 6 | math/sort/op_host/arch35/sort_tiling_common.cpp |
无问题 — printf→字符串拼接转换正确,顺带修复了原 %u 格式化 uint64_t 的类型不匹配 |
| 7 | math/sort_with_index/op_host/arch35/sort_with_index_tiling.cpp |
无问题 — 6 处替换,参数正确 |
| 8 | math/sort_with_index/op_host/sort_with_index_infershape.cpp |
无问题 — 2 处替换,新增的 OP_LOGE_FOR_INVALID_SHAPES_WITH_REASON 参数正确 |
| 9 | math/top_k_v2/op_graph/top_k_v2_graph_infer.cpp |
无问题 — 1 处 OP_LOGE → OP_LOGE_FOR_INVALID_DTYPE |
| 10 | math/top_k_v2/op_host/arch35/sort_with_index_tiling.h |
无问题 — 5 处替换,C 头文件变更正确 |
| 11 | math/top_k_v2/op_host/arch35/top_k_v2_tiling_arch35.cpp |
无问题 — 多处宏替换,IsValidParam 分拆为独立检查为改进,std::string reasonMsg 生命周期正确 |
| 12 | math/top_k_v2/op_host/top_k_v2_infershape.cpp |
无问题 — 3 处替换,std::to_string + 字符串拼接的临时对象生命周期安全 |
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 1 |
| 🟡 建议 | 0 |
⛔ 需要修改


描述
将 sort、sort_with_index、top_k_v2、kth_value 四个算子中的通用 OP_LOGE 调用替换为结构化错误日志宏,使错误信息包含参数名、实际值、期望值等结构化字段,便于问题定位。
涉及算子
涉及文件
关联的Issue
https://gitcode.com/cann/ops-math/issues/2191
测试
已完成自验证
文档更新
无
类型标签