| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
修正 Sort 尾块 rightPadding 计算 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5303 merge fixaic into master 修正 Sort 尾块 rightPadding 计算 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本 PR 修复 Sort/KthValue 共用的 Ascend 950 非末轴 small-axis 路径在尾块搬运时的 padding 与 UB 行布局问题。 - 将 rightPadding 从“UB 行剩余元素数”修正为当前 burst 按块对齐后需要补齐的元素数,即 (curAlignedBytes - curBytes) / sizeof(T),使其符合 DataCopyPadExtParams 的语义。 - 当当前 burst 对齐后的大小与 UB 行跨度一致时,继续使用多 burst 搬运。 - 当尾块与 UB 行跨度不一致、行间存在完整数据块间隔时,改为逐轴执行单 burst 搬运,并显式写入每一行的起始位置,避免同时组合 burst padding 与目标端行间隔造成数据错位。 该修复覆盖共享的非末轴小轴加载逻辑,避免尾块场景影响 Sort、KthValue 及复用该路径的 Median/NanMedian 结果。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2968 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - Sort KthValue ST用例通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5303 | 16 天前 | |
feat(median): add Median/NanMedian and align NaN/signed-zero ordering Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5104 merge median into master feat(median): add Median/NanMedian and align NaN/signed-zero ordering Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增 Ascend 950 Median/NanMedian 算子,并复用 KthValue 的多调度选择框架,避免为中位数复制完整排序实现。 主要改动: - 新增 Median/NanMedian 的 OpDef、L0 API、InferShape、arch35 Tiling、AICore kernel、simplified key、golden、UT 和 TTK 用例。 - 支持 float16、float32、bfloat16、int8/16/32/64、uint8/16/32/64;values 保持输入 dtype,indices 为 int64,约简维保留为 1。 - 在 KthValue tiling data 中增加 STATIC、PROPAGATE_NAN、IGNORE_NAN 三种模式: - Median 对浮点 NaN 采用传播语义; - NanMedian 按非 NaN 数量动态计算 lower-median rank; - 整数输入沿用静态 k 快路径,不增加 NaN 扫描。 - 抽取统一 KthValue kernel dispatch,使 insertion、two-stage、merge、radix-select 和非末轴 small-axis 等 schedule 可由三个算子共享。 - 为多核动态 rank 路径补充对齐的 per-core count workspace,并保持原算法 workspace 布局。 - 完善 Sort/KthValue 公共逻辑中的 canonical NaN key、重复值与 signed-zero 稳定源顺序;同步补充 Sort、KthValue、TopKV2 golden 和回归用例。 详细设计、语义和约束见关联 Issue。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2968 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - Median/NanMedian/KthValue/Sort 累计677个ST用例通过 - 二级冒烟通过 - aclnnMedianDim,aclnnNanMedianDim 的门槛用例均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5104 | 18 天前 | |
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 | 3 个月前 | |
feat(median): add Median/NanMedian and align NaN/signed-zero ordering Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5104 merge median into master feat(median): add Median/NanMedian and align NaN/signed-zero ordering Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增 Ascend 950 Median/NanMedian 算子,并复用 KthValue 的多调度选择框架,避免为中位数复制完整排序实现。 主要改动: - 新增 Median/NanMedian 的 OpDef、L0 API、InferShape、arch35 Tiling、AICore kernel、simplified key、golden、UT 和 TTK 用例。 - 支持 float16、float32、bfloat16、int8/16/32/64、uint8/16/32/64;values 保持输入 dtype,indices 为 int64,约简维保留为 1。 - 在 KthValue tiling data 中增加 STATIC、PROPAGATE_NAN、IGNORE_NAN 三种模式: - Median 对浮点 NaN 采用传播语义; - NanMedian 按非 NaN 数量动态计算 lower-median rank; - 整数输入沿用静态 k 快路径,不增加 NaN 扫描。 - 抽取统一 KthValue kernel dispatch,使 insertion、two-stage、merge、radix-select 和非末轴 small-axis 等 schedule 可由三个算子共享。 - 为多核动态 rank 路径补充对齐的 per-core count workspace,并保持原算法 workspace 布局。 - 完善 Sort/KthValue 公共逻辑中的 canonical NaN key、重复值与 signed-zero 稳定源顺序;同步补充 Sort、KthValue、TopKV2 golden 和回归用例。 详细设计、语义和约束见关联 Issue。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2968 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - Median/NanMedian/KthValue/Sort 累计677个ST用例通过 - 二级冒烟通过 - aclnnMedianDim,aclnnNanMedianDim 的门槛用例均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5104 | 18 天前 | |
修复Sort访问越界问题 Co-authored-by: wuxiyuan<wuxiyuan@huawei.com> # message auto-generated for no-merge-commit merge: !5039 merge master into master 修复Sort访问越界问题 Created-by: wuxiyuan Commit-by: wuxiyuan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ### 问题根因 在 math/sort/op_kernel/arch35/sort_merge_sort.h 的 Process() 函数(第 344 行附近)中,原有的边界检查条件为 blockIdx_ > GetBlockNum()。当 blockIdx_ 恰好等于 GetBlockNum() 时,该条件不成立,无法触发提前返回逻辑,导致后续处理继续执行并发生越界访问。 ### 修复方案 将边界判断条件由严格大于改为大于等于: cpp // 修改前 if (blockIdx_ > GetBlockNum()) { return; } // 修改后 if (blockIdx_ >= GetBlockNum()) { return; } 当 blockIdx_ 不小于块数(即等于或超过 GetBlockNum())时,立即退出处理逻辑,从根本上规避越界风险。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2781 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 已完成ST验证、二级冒烟测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5039 | 23 天前 | |
feat(median): add Median/NanMedian and align NaN/signed-zero ordering Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5104 merge median into master feat(median): add Median/NanMedian and align NaN/signed-zero ordering Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增 Ascend 950 Median/NanMedian 算子,并复用 KthValue 的多调度选择框架,避免为中位数复制完整排序实现。 主要改动: - 新增 Median/NanMedian 的 OpDef、L0 API、InferShape、arch35 Tiling、AICore kernel、simplified key、golden、UT 和 TTK 用例。 - 支持 float16、float32、bfloat16、int8/16/32/64、uint8/16/32/64;values 保持输入 dtype,indices 为 int64,约简维保留为 1。 - 在 KthValue tiling data 中增加 STATIC、PROPAGATE_NAN、IGNORE_NAN 三种模式: - Median 对浮点 NaN 采用传播语义; - NanMedian 按非 NaN 数量动态计算 lower-median rank; - 整数输入沿用静态 k 快路径,不增加 NaN 扫描。 - 抽取统一 KthValue kernel dispatch,使 insertion、two-stage、merge、radix-select 和非末轴 small-axis 等 schedule 可由三个算子共享。 - 为多核动态 rank 路径补充对齐的 per-core count workspace,并保持原算法 workspace 布局。 - 完善 Sort/KthValue 公共逻辑中的 canonical NaN key、重复值与 signed-zero 稳定源顺序;同步补充 Sort、KthValue、TopKV2 golden 和回归用例。 详细设计、语义和约束见关联 Issue。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2968 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - Median/NanMedian/KthValue/Sort 累计677个ST用例通过 - 二级冒烟通过 - aclnnMedianDim,aclnnNanMedianDim 的门槛用例均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5104 | 18 天前 | |
fix: 修复 sort 和 kth_value 代码检查问题 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5296 merge codecheck into master fix: 修复 sort 和 kth_value 代码检查问题 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 修复 Sort 和 KthValue 的代码检查问题: - 为 KthValue SIMT 宏补充 do-while (0) 包裹,避免宏展开风险。 - 为 Sort bank rotation padding 计算补充零值及乘法溢出校验。 - 将 NDDMA 维度魔数提取为常量。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2968 ## 测试 1 sort kthvalue算子ST用例通过 2 二级冒烟通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:codecheck处理 See merge request: cann/ops-math!5296 | 16 天前 | |
feat(median): add Median/NanMedian and align NaN/signed-zero ordering Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5104 merge median into master feat(median): add Median/NanMedian and align NaN/signed-zero ordering Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增 Ascend 950 Median/NanMedian 算子,并复用 KthValue 的多调度选择框架,避免为中位数复制完整排序实现。 主要改动: - 新增 Median/NanMedian 的 OpDef、L0 API、InferShape、arch35 Tiling、AICore kernel、simplified key、golden、UT 和 TTK 用例。 - 支持 float16、float32、bfloat16、int8/16/32/64、uint8/16/32/64;values 保持输入 dtype,indices 为 int64,约简维保留为 1。 - 在 KthValue tiling data 中增加 STATIC、PROPAGATE_NAN、IGNORE_NAN 三种模式: - Median 对浮点 NaN 采用传播语义; - NanMedian 按非 NaN 数量动态计算 lower-median rank; - 整数输入沿用静态 k 快路径,不增加 NaN 扫描。 - 抽取统一 KthValue kernel dispatch,使 insertion、two-stage、merge、radix-select 和非末轴 small-axis 等 schedule 可由三个算子共享。 - 为多核动态 rank 路径补充对齐的 per-core count workspace,并保持原算法 workspace 布局。 - 完善 Sort/KthValue 公共逻辑中的 canonical NaN key、重复值与 signed-zero 稳定源顺序;同步补充 Sort、KthValue、TopKV2 golden 和回归用例。 详细设计、语义和约束见关联 Issue。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2968 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - Median/NanMedian/KthValue/Sort 累计677个ST用例通过 - 二级冒烟通过 - aclnnMedianDim,aclnnNanMedianDim 的门槛用例均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5104 | 18 天前 | |
feat(median): add Median/NanMedian and align NaN/signed-zero ordering Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5104 merge median into master feat(median): add Median/NanMedian and align NaN/signed-zero ordering Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增 Ascend 950 Median/NanMedian 算子,并复用 KthValue 的多调度选择框架,避免为中位数复制完整排序实现。 主要改动: - 新增 Median/NanMedian 的 OpDef、L0 API、InferShape、arch35 Tiling、AICore kernel、simplified key、golden、UT 和 TTK 用例。 - 支持 float16、float32、bfloat16、int8/16/32/64、uint8/16/32/64;values 保持输入 dtype,indices 为 int64,约简维保留为 1。 - 在 KthValue tiling data 中增加 STATIC、PROPAGATE_NAN、IGNORE_NAN 三种模式: - Median 对浮点 NaN 采用传播语义; - NanMedian 按非 NaN 数量动态计算 lower-median rank; - 整数输入沿用静态 k 快路径,不增加 NaN 扫描。 - 抽取统一 KthValue kernel dispatch,使 insertion、two-stage、merge、radix-select 和非末轴 small-axis 等 schedule 可由三个算子共享。 - 为多核动态 rank 路径补充对齐的 per-core count workspace,并保持原算法 workspace 布局。 - 完善 Sort/KthValue 公共逻辑中的 canonical NaN key、重复值与 signed-zero 稳定源顺序;同步补充 Sort、KthValue、TopKV2 golden 和回归用例。 详细设计、语义和约束见关联 Issue。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2968 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - Median/NanMedian/KthValue/Sort 累计677个ST用例通过 - 二级冒烟通过 - aclnnMedianDim,aclnnNanMedianDim 的门槛用例均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5104 | 18 天前 | |
feat(median): add Median/NanMedian and align NaN/signed-zero ordering Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5104 merge median into master feat(median): add Median/NanMedian and align NaN/signed-zero ordering Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增 Ascend 950 Median/NanMedian 算子,并复用 KthValue 的多调度选择框架,避免为中位数复制完整排序实现。 主要改动: - 新增 Median/NanMedian 的 OpDef、L0 API、InferShape、arch35 Tiling、AICore kernel、simplified key、golden、UT 和 TTK 用例。 - 支持 float16、float32、bfloat16、int8/16/32/64、uint8/16/32/64;values 保持输入 dtype,indices 为 int64,约简维保留为 1。 - 在 KthValue tiling data 中增加 STATIC、PROPAGATE_NAN、IGNORE_NAN 三种模式: - Median 对浮点 NaN 采用传播语义; - NanMedian 按非 NaN 数量动态计算 lower-median rank; - 整数输入沿用静态 k 快路径,不增加 NaN 扫描。 - 抽取统一 KthValue kernel dispatch,使 insertion、two-stage、merge、radix-select 和非末轴 small-axis 等 schedule 可由三个算子共享。 - 为多核动态 rank 路径补充对齐的 per-core count workspace,并保持原算法 workspace 布局。 - 完善 Sort/KthValue 公共逻辑中的 canonical NaN key、重复值与 signed-zero 稳定源顺序;同步补充 Sort、KthValue、TopKV2 golden 和回归用例。 详细设计、语义和约束见关联 Issue。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2968 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - Median/NanMedian/KthValue/Sort 累计677个ST用例通过 - 二级冒烟通过 - aclnnMedianDim,aclnnNanMedianDim 的门槛用例均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5104 | 18 天前 | |
perf(sort): improve UB utilization for non-last-axis small sorts Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5147 merge optimperf into master perf(sort): improve UB utilization for non-last-axis small sorts Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 本次改动继续优化 Ascend 950 Sort 非末轴小轴场景,降低 no-transpose 路径的 UB 峰值,并消除通用 two-stage 实现对连续末轴路径带来的额外分支开销。 主要改动: - Host tiling 按排序阶段与索引写回阶段分别计算 UB 峰值;当常规布局无法容纳更大的 inner chunk 时,通过 keyParams4 下发分阶段复用标志。 - Kernel 将输入、排序值、临时空间和输出索引组织到同一块共享 UB 中,固定保留 sortedIndex 尾部区域;values 写回完成后复用前缀空间构造并写回 indices。 - 在共享 UB 的 value/index 写回边界增加 V_MTE3、MTE3_V 事件同步,保证 MTE3 完成消费后再覆盖复用区域。 - 为连续末轴 two-stage Sort 增加专用 Process 热循环,非末轴场景继续复用通用批次映射逻辑。 改动仅涉及 arch35/Ascend 950 Sort 实现,不改变算子接口、支持的数据类型、输出语义及 binary 注册范围。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2882 ## 测试 - 二级冒烟通过 - Sort KthValue算子ST用例通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5147 | 21 天前 | |
perf(sort): improve UB utilization for non-last-axis small sorts Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5147 merge optimperf into master perf(sort): improve UB utilization for non-last-axis small sorts Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 本次改动继续优化 Ascend 950 Sort 非末轴小轴场景,降低 no-transpose 路径的 UB 峰值,并消除通用 two-stage 实现对连续末轴路径带来的额外分支开销。 主要改动: - Host tiling 按排序阶段与索引写回阶段分别计算 UB 峰值;当常规布局无法容纳更大的 inner chunk 时,通过 keyParams4 下发分阶段复用标志。 - Kernel 将输入、排序值、临时空间和输出索引组织到同一块共享 UB 中,固定保留 sortedIndex 尾部区域;values 写回完成后复用前缀空间构造并写回 indices。 - 在共享 UB 的 value/index 写回边界增加 V_MTE3、MTE3_V 事件同步,保证 MTE3 完成消费后再覆盖复用区域。 - 为连续末轴 two-stage Sort 增加专用 Process 热循环,非末轴场景继续复用通用批次映射逻辑。 改动仅涉及 arch35/Ascend 950 Sort 实现,不改变算子接口、支持的数据类型、输出语义及 binary 注册范围。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2882 ## 测试 - 二级冒烟通过 - Sort KthValue算子ST用例通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5147 | 21 天前 | |
perf(sort): optimize non-last-axis small sorts Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !5080 merge fix_sort_perf into master perf(sort): optimize non-last-axis small sorts Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 优化 Ascend 950 上 Sort 算子的非末轴小轴场景。现有 no-transpose two-stage 路径主要按相邻 inner 位置分批,在 innerSize 较小、outerSize 较大或 batch 分布不均时,可能出现活跃核不足、每核批次偏多及 UB 索引占用偏大的问题;部分低收益 shape 的 gather/scatter 开销也可能高于前后 transpose。 主要改动: - 新增 Sort 专用非末轴 two-stage 调度 schId 11,将 strided non-last-axis 策略与末轴 Sort、物理连续的 innerSize == 1 场景及 KthValue 原有路由隔离。 - host tiling 支持按完整 outer slice 分组 batch,并为非分组场景采用“优先更多活跃核、其次更少每核批次、最后更少空闲槽位”的选批策略。 - schId 11 在 UB 中使用 uint32 轴内索引,仅在 GM 写回时转换为输出索引类型,以降低 UB 占用;FP32 Sort32 场景增加更宽 inner chunk 候选。 - 新增 SortGroupedOuterSmallAxisTwoStage:block 对齐时通过三维 NDDMA 将 GM [outer, axis, inner] 聚集到密集 UB,否则使用 SIMT gather;排序后通过 SIMT scatter 恢复原始布局。非分组 strided batch 使用二维 NDDMA 加载。 - 为 merge 型非末轴路径增加 bank rotation padding,避免相邻 UB 行反复落在相同 bank group。 - aclnnSort 完善 no-transpose 收益判断:超小 inner row 且 outerSize 较大、整数大轴以及估算输出不小于 1 GiB 时继续走成熟的 transpose 路径。 - 保持既有接口和 dtype 范围不变,并补充 KthValue 回归用例,确保共享 tiling 代码的调整不改变其既有 two-stage 路由。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2882 ## 测试 - Sort 331个ST用例通过,KthValue 108个ST用例通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5080 | 23 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 16 天前 | ||
| 18 天前 | ||
| 3 个月前 | ||
| 18 天前 | ||
| 23 天前 | ||
| 18 天前 | ||
| 16 天前 | ||
| 18 天前 | ||
| 18 天前 | ||
| 18 天前 | ||
| 21 天前 | ||
| 21 天前 | ||
| 23 天前 |