| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
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 个月前 | |
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 个月前 | |
TopkV2算子性能优化 Co-authored-by: caoyan_huawei<caoyan11@huawei.com> # message auto-generated for no-merge-commit merge: !2821 merge cy_br_518_xingneng into master TopkV2算子性能优化 Created-by: caoyan_huawei Commit-by: caoyan_huawei Merged-by: cann-robot Description: ## 描述 本次优化点主要有以下几个方面: 1. 针对SingleBlock场景提高UB默认初始能处理的数据量,将原来的int64(5120)提高到10240,将原来的非int64数据初始两由7680提高到15360。此目的是扩大了单核SingleBlock处理的数据范围,让更多的数落入到该模板中。进过调整,性能最高可以提升50%左右; 2. 针对SingleCore模板,将原来的int64(5120)提高到10240,将原来的非int64数据初始两由7680提高到15360。扩大了单核SingleCorek处理数据的能力,让更多的数落入到该模板中。进过调整,对于部分shape性能最高可以提升50%左右; 3. 针对float32数据类型,将sort的moreCore模板核intraCore模板迁移过来,用来替代之前处理多核基数的场景,借助sort的模板能力进行topk的业务改造,性能最高可提升50%; 4. 调整topk自身基数排序计算tileSize的逻辑,多核基数模板在处理超大尾轴时会出现tileSize自减到0的情况,当出现这种情况时,说明topk自身的多核基数模板不能进行处理,不应该抛出异常,而是由sortAndTopk模板进行超大尾轴处理; 5. 将sortAndTopk模板的顺序调整到最后,增加容错处理。 6. 调整TopKV2Tiling函数的结构,将不同场景的模板处理集中,让逻辑简单明了。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1759 ## 测试 ST测试,性能测试正常,David全量冒烟通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!2821 | 2 个月前 | |
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 个月前 | |
修复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 个月前 | |
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 个月前 | |
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 个月前 | |
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 个月前 | |
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 个月前 | |
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 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 |