| 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 | 7 天前 |