| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
修复sort算子超大轴超时问题 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !3946 merge fix_timeout into master 修复sort算子超大轴超时问题 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 修复 Sort/KthValue 算子在超大轴( lastAxis 接近或超过 0x40000000)场景下的超时问题。 ### 根因分析 Radix sort 使用 uint32_t 计数器存储每个 bin 的累积直方图时,高 2 bits 被预留用于核间软同步状态标志(NOT_INIT_MODE / AGG_READY_MODE / PREFIX_READY_MODE)。因此实际可用于计数的只有低 30 bits,即最大安全轴长为 0x3fffffff。 此前的判断条件 lastAxis <= int32_t::max()(即 0x7fffffff)未考虑高 2 bits 的状态占用。当 lastAxis 落在 (0x40000000, 0x7fffffff] 区间时,Host Tiling 会错误地选择 uint32_t 计数器路径,导致计数溢出、核间同步状态位被污染,最终引发 Kernel 超时。 ### 变更内容 1. 统一 uint32 计数器适用范围判定 (sort_tiling_common.h) - 新增常量 RADIX_UINT32_VALUE_MAX = 0x3fffffff 及 IsRadixUint32CounterRange() 函数,集中管理判定逻辑 - Sort 和 KthValue 的 Tiling 层统一调用该函数,替代原有的 lastAxis <= int32_t::max() 判断 2. 直方图偏移量类型修正 (radix_more_core_base.h) - SimtGlobalOffset 函数的 excusiveBinOffset 参数类型由 uint32_t 改为 uint64_t,防止超大轴场景下的偏移量计算溢出 3. 测试补充 - Sort UT:新增 test_sort_radix_counter_range_boundary 边界测试 - KthValue UT:新增 test_kthvalue_radix_counter_range_boundary 边界测试 - 两个测试均验证 0x3fffffff 在范围内、0x40000000 在范围外 ### 涉及文件 | 文件 | 变更说明 | |------|--------| | math/sort/op_host/arch35/sort_tiling_common.h | 新增 RADIX_UINT32_VALUE_MAX 常量及 IsRadixUint32CounterRange() | | math/sort/op_host/arch35/sort_tiling_arch35.cpp | 用 IsRadixUint32CounterRange 替代 lastAxis <= int32_t::max() | | math/kth_value/op_host/arch35/kth_value_tiling_arch35.cpp | 同上 | | math/sort/op_kernel/arch35/common/radix_more_core_base.h | SimtGlobalOffset 参数 uint32_t → uint64_t | | math/sort/tests/ut/op_host/arch35/test_sort_tiling.cpp | 新增边界测试 | | math/kth_value/tests/ut/op_host/arch35/test_kth_value_tiling.cpp | 新增边界测试 | ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2194 ## 测试 1 sort 算子 331 个ST用例功能性能通过 2 kthvalue 算子 108 个ST用例功能性能通过 3 二级冒烟通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3946 | 1 个月前 | |
sort cleancode处理 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !4135 merge codecheck into master sort cleancode处理 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 1. 魔法数字消除:2/3/4/6/2048 等字面量替换为 DOUBLE_BUFFER_NUM、MERGE_LIST_MAX_NUM、ONE_CORE_DATA_SIZE 等具名常量,涉及 17+ 处 2. 函数提取:BuildSortGraph()、SelectAndFinalizeKthValueRoute()、FillRadixKernelResources()、LaunchSortKernel() 等 6 个 helper 函数从主流程中提取,减少重复 3. sort_apt.cpp 重构:内核派发链由 if constexpr + return 改为 if/else if,拆出 LaunchRadixMoreCore/LaunchMergeSortRoute 模板 4. Lambda 捕获修复:[&] → [&info, &computeBatchNum](sort_tiling_common.cpp:1168) 5. 格式化统一:const_cast<type> 间距、缩进(2→4空格)、注释对齐、文件末尾换行补全,涉及 30+ 文件 ## 关联的Issue 不涉及 ## 测试 1 sort sort_with_index top_k_v2 kth_value 全量ST通过 2 二级冒烟通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:格式和风格调整 See merge request: cann/ops-math!4135 | 29 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 29 天前 |