| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
KthValue需要指定ND格式以修复降维时报错 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !4284 merge fixkth into master KthValue需要指定ND格式以修复降维时报错 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 修复了 KthValue 算子在降维场景下因输出tensor格式不匹配导致的报错问题。原实现中,输出tensor values 和 indices 直接沿用了输入tensor的 ViewFormat,但在降维后输出维度减少,沿用原格式会导致shape与format不一致。改为强制指定 op::Format::FORMAT_ND 格式,确保输出tensor的格式与降维后的shape正确对应。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2405 ## 测试 1 二级冒烟通过 2 kthvalue st通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4284 | 1 个月前 | |
sort cleancode处理 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !4135 merge codecheck into master sort cleancode处理 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 1. 魔法数字消除:2/3/4/6/2048 等字面量替换为 DOUBLE_BUFFER_NUM、MERGE_LIST_MAX_NUM、ONE_CORE_DATA_SIZE 等具名常量,涉及 17+ 处 2. 函数提取:BuildSortGraph()、SelectAndFinalizeKthValueRoute()、FillRadixKernelResources()、LaunchSortKernel() 等 6 个 helper 函数从主流程中提取,减少重复 3. sort_apt.cpp 重构:内核派发链由 if constexpr + return 改为 if/else if,拆出 LaunchRadixMoreCore/LaunchMergeSortRoute 模板 4. Lambda 捕获修复:[&] → [&info, &computeBatchNum](sort_tiling_common.cpp:1168) 5. 格式化统一:const_cast<type> 间距、缩进(2→4空格)、注释对齐、文件末尾换行补全,涉及 30+ 文件 ## 关联的Issue 不涉及 ## 测试 1 sort sort_with_index top_k_v2 kth_value 全量ST通过 2 二级冒烟通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:格式和风格调整 See merge request: cann/ops-math!4135 | 1 个月前 | |
sort类算子AscendC MicroAPI整改 Co-authored-by: tujun6<tujun6@huawei.com> # message auto-generated for no-merge-commit merge: !4790 merge ascendc_api_replace into master sort类算子AscendC MicroAPI整改 Created-by: tujun6 Commit-by: tujun6 Merged-by: cann-robot Description: ## 描述 本 PR 对 sort 类算子( sort、sort_with_index、kth_value)执行 arch35 MicroAPI 旧接口别名替换整改。 CANN 9.1.0 的 arch35(ascend950)MicroAPI 中,大量旧接口名与新接口名是同一 Impl 函数的别名。本次将以下旧接口统一替换为新接口名,保证代码规范并维持二进制完全等价: | 旧接口 | 新接口 | 说明 | |---|---|---| | __local_mem__ | __ubuf__ | 存储类属性标识 | | DataCopy(RegTensor 首参) | LoadAlign | 按 Load 方向判定 | | DataCopy(addr 首参) | StoreAlign | 按 Store 方向判定 | | CompareScalar | Compares | 标量比较 | | ReduceSum(3 参数 MicroAPI) | Reduce<ReduceType::SUM> | 仅 MicroAPI 层级,排除传统高阶 4 参数 API | | DataCopyGather | Gather | 聚集拷贝 | 替换统计: | 算子 | 目录 | 修改文件数 | 替换处数 | .o md5 一致 | |---|---|---|---|---| | sort | math/sort | 5 | 158 | ✅ 22 个 .o 全部一致 | | sort_with_index | math/sort_with_index | 1 | 2 | ✅ 22 个 .o 全部一致 | | kth_value | math/kth_value | 2 | 62 | ✅ 11 个 .o 全部一致 | | **合计** | | **8** | **222** | | > 注:top_k_v2 算子的同类整改已拆分到独立分支 test_tj,后续单独提交。 ## 关联的Issue #2665 ## 测试 对每个算子分别执行编译验证(bash build.sh --ops=<算子> --soc=ascend950 --opkernel -j16): 1. 编译替换后的代码,保存所有 .o 文件的 md5。 2. git stash 暂存修改,编译原始代码,保存原始 .o 的 md5。 3. 对比修改前后 md5,全部完全一致,证明替换是二进制等价的。 4. git stash pop 恢复修改。 最终残留扫描:全部 28 类旧 API 零残留(不可替换项如 GatherMask、PrefixSum、传统高阶 API、参数结构体等保持不变属正常)。 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:arch35 MicroAPI 旧接口别名整改 See merge request: cann/ops-math!4790 | 17 天前 | |
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 | 10 天前 | |
新增 kthvalue 算子 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !3174 merge master into master 新增 kthvalue 算子 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 新增 KthValue 算子,重构 sort 公共逻辑 1. 新增 KthValue 算子,支持沿指定维度查找第 k 小值及其索引。支持数据类型:float16、float32、bfloat16、int8、int16、int32、int64、uint8、uint16、uint32、uint64,支持 last-axis 和 non-last small-axis(轴长 ∈ 2, 2048)两种场景。 2. 实现多策略 Tiling 路由:small axis insertion / two-stage、radix one-core / more-core、merge sort one-core / more-core、merge intra-core、non-last small axis、axis-one copy(axis=1 特化)。 3. 将 sort 算子的公共排序逻辑抽取到 sort/op_kernel/arch35/common/ 和 sort/op_host/arch35/sort_tiling_common.{h,cpp},供 kth_value 复用,包括 radix sort、merge sort、small axis、non-last small axis 等 base 类。 4. 新增 kth_value 的 tiling UT 和 infershape UT。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2018 ## 测试 1 sort算子原始250+ST用例全部通过 2 sort算子新增80+ 非尾轴排序ST用例全部通过 3 kthvalue算子新增100+ ST用例,涵盖各个模板,全部通过 4 topkv2,sort_with_index ST用例全部通过 5 二级冒烟通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3174 | 2 个月前 |