已合并
feat(sort): 小轴场景排序性能优化,新增3个kernel并优化已有策略 #2985
feat(sort): 小轴场景排序性能优化,新增3个kernel并优化已有策略 #2985
已合并
黄晓彬创建于 5月27日
黄晓彬成员
5月27日

描述

背景

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/1684

测试

  1. 新增117用例覆盖边界场景和性能采集,精度通过,性能达标
  2. 原始155用例精度验证通过,性能提升或者持平
  3. 二级冒烟通过

文档更新

不涉及

类型标签

  • Bug修复
  • 新特性
  • 性能优化
  • 文档更新
  • 其他,请描述:
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 黄晓彬 的贡献)
黄晓彬成员
5月27日 创建了 pull request,commit d1bed58f
CANN-robotCANN-robot成员
5月27日 添加了label:stat/needs-squash
CANN-robot
CANN-robot成员
5月27日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
math/sort 宋凯, wangrui_ (2/2) 宋凯, wangrui_ (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

ConanHuang, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robotCANN-robot成员
5月27日 添加了label:cann-cla/yes
CANN-robotCANN-robot成员
5月27日 将FelixTang7,zhou-qilong,wangrui_,rxtfeng,loov1,zhangzijie,jia0liang,songkai111,zhangyuxiang0119,llimwang,gubaocheng设为评审人
CANN-robotCANN-robot成员
5月27日 将FelixTang7,zhou-qilong,wangrui_,rxtfeng,loov1,zhangzijie,songkai111,zhangyuxiang0119,llimwang,gubaocheng设为审查人
黄晓彬成员
5月27日 评论:

compile

likedislike
黄晓彬成员
5月27日 update merge request[project id: 7649531, iid: 2985, commit_id: 2e513ab0a59f5e0648cb39d41e3a085ef88a1922] virtual merging success
CANN-robotCANN-robot成员
5月27日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
5月27日 评论:

流水线任务触发成功
任务链接 [7b49f708b5fd4f2a9913ddf76768a3c2][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_mobile_station ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_experimental ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_experimental ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_single ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_A5 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_A5 ✅ SUCCESS >>>>> >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_harmony-infer ✅ SUCCESS >>>>>
Compile_X86_monitor_910b ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910c ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_950 ✅ SUCCESS >>>>> >>>>>
UT_Test ✅ SUCCESS
UT_Test_experimental ✅ SUCCESS
UT_Test_kernel ✅ SUCCESS
PreSmoke_A900 ✅ SUCCESS >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>

[2026-05-27 19:50:22]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
5月27日 评论:

流水线任务触发成功
任务链接 [e6febb3b7b7b42c5bece63078a4fc653][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck_Pr ✅ SUCCESS
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_codestyle ⚠️ WARNING >>>>>
codecheck_precommit ⚠️ WARNING >>>>> >>>>>

[2026-05-27 19:42:34]    CI执行结束

likedislike
黄晓彬成员
5月27日 修改标题为 “feat(sort): 小轴场景排序性能优化,新增3个kernel并优化已有策略”,原标题为“sort tiling int截断风险修复”
黄晓彬成员
5月27日 修改了pull request 的描述
CANN-robotCANN-robot成员
5月27日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
5月27日 添加了label:ci-pipeline-passed
黄晓彬成员
5月27日 评论:

/check-pr

likedislike
CANN-robot
CANN-robot成员
5月27日 评论:

The following labels are not ready.

lgtm: Please wait for reviewers to review the code.

approved: Please wait for committers to review the code.

likedislike
songkai111成员
5月27日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
5月27日 添加了label:approved
RuiWang_成员
5月28日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
5月28日 添加了label:lgtm
CANN-robot
CANN-robot成员
5月28日 评论:

Review Guide

This pull-request passes review.
Committers who wrote a comment of /approve are: wangrui_, 宋凯.
Reviewers who wrote a comment of /lgtm are: 宋凯, wangrui_.

likedislike
CANN-robotCANN-robot成员
5月28日 合入了pull request