| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
修复sort算子超大轴超时问题 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !3959 merge 9.1.0 into 9.1.0 修复sort算子超大轴超时问题 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 修复 Sort 算子在超大排序轴场景下的超时和地址溢出问题。 radix 排序使用 uint32_t 保存计数及状态位,其中最高两位用于状态标记,因此有效计数范围上限为 0x3fffffff。原实现使用 int32_t 最大值判断,可能导致状态位被计数值占用。 ### 变更内容 - 将 radix 排序使用 uint32_t 计数的有效范围限制为 0x3fffffff。 - 超过该范围时,自动切换到 int64_t 计数和前缀和路径。 - 将 radix more-core 中的全局偏移、workspace 偏移和 scatter 输出偏移统一扩展为 64 位计算。 - 将 SimtGlobalOffset 和 CopyOutGm 的偏移参数调整为 uint64_t。 - 修正 tile、histogram、workspace 及输出数据访问中的大尺寸地址计算。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2194 ## 测试 1 sort算子331个ST用例通过 2 问题脚本可成功运行,结果正确 ## 文档更新 无 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3959 | 1 个月前 | |
feat(sort): 小轴场景排序性能优化,新增3个kernel并优化已有策略 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !2843 merge master into master feat(sort): 小轴场景排序性能优化,新增3个kernel并优化已有策略 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 ### 背景 Sort 算子在排序轴长度较小(small axis)时,原有大核策略(radix sort / merge sort)存在并行度不足、资源利用率低的问题,导致小轴场景性能退化。 ### 主要变更 **新增 3 个 Kernel:** - **SortAxisOneCopy**:axis=1 快路径,直接 DataCopy 搬运,跳过排序流程 - **SortSmallAxisInsertion**:SIMT 256 线程并行插入排序,适合几十以内的小轴 - **SortSmallAxisTwoStage**:两阶段排序(radix → rank-inverse/二次排序),batch 级并发,适合几十到几百的中等轴 **已有 Kernel 优化:** - **MergeSort**:新增 Sort32 编译期优化(Sort32 API + Extract repeatTimes=1 硬件快速路径) - **MergeSortBigSize**:支持多行并行,新增每行独立 workspace 分区(rowIdx/rowDataOffset),blockIdx 替换为 rowCoreIdx - **RadixSortMoreCore**:排序后 8bit 值通过 Queue 传递,ScatterKeysGlobal 直接使用 sortedValueLocal,优化UB访问 - **RadixSortOneCore**:新增双缓冲支持(bufferNum 从 tiling 动态配置) **重命名 Kernel:** - SortMergeBigBatch → SortMergeIntraCore(体现 core 内 block merge 真实语义) **Tiling 路由重构:** - 新增 schId 5-8 及对应 tiling key selector(INSERTION / TWO_STAGE / AXIS_ONE_COPY) - schId 0 与 schId 8 合并路由,通过 isSort32SmallAxis 标志控制 Sort32 优化 - 增加 uint64 溢出保护,标准化 CeilDiv/CeilDivMul 为 Ops::Base 版本 - ONE_CORE_DATA_SIZE 从 1024 调整为 2048 - IsSortMergeMultiCore 扩展支持 unsortDimNum > 1 多行场景 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1612 ## 测试 1. 新增117用例覆盖边界场景和性能采集,精度通过,性能达标 2. 原始155用例精度验证通过,性能提升或者持平 3. 二级冒烟通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!2843 | 2 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 2 个月前 |