| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
topk_fusion_pass Co-authored-by: jerry_gd<jerry.luo@huawei.com> # message auto-generated for no-merge-commit merge: !6207 merge TopKFusionPass into master topk_fusion_pass Created-by: jerry_gd Commit-by: jerry_gd Merged-by: cann-robot Description: ## 描述 本 PR 在 math/topk/op_graph/fusion_pass 下新增旧版 fe::TopKFusionPass 重构的 TopKFusionPass(新 PatternFusionPass 框架 + ES 接口),将 TopK/TopKV2 替换为 AICore 优化路径,并按 opp 算子信息库实况覆盖构建矩阵内全部芯片家族。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/4203 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - 二级冒烟通过 - 相关topk的geir用例验证通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6207 | 10 天前 | |
TopkV2算子bitonic算法性能优化 Co-authored-by: caoyan_huawei<caoyan11@huawei.com> Co-authored-by: zhanghedong<zhanghedong@huawei.com> # message auto-generated for no-merge-commit merge: !6320 merge feat/topk-bitonic-perf-optimize into master TopkV2算子bitonic算法性能优化 Created-by: zhanghedong Commit-by: caoyan_huawei;zhanghedong Merged-by: cann-robot Description: 本 PR 围绕 RegBase(arch35)下 TopK / Sort 的小轴与宽整型场景进行选择策略与内核路径优化。在 Tiling 侧新增 SMALL_AXIS_DIRECT_MODE 分支并重写 TryTopKSmallAxisSort 的路由判定,放宽小轴阈值并按数据类型、innerSize、lastAxis、kValue 等条件细分路由;在内核侧新增基于寄存器直写的小轴 SIMT GM 选择内核 top_k_small_k_simt_gm_select.h 与 UB radix 选择内核 top_k_small_k_ub_radix_select.h,共享常量与 Host/Kernel 代价契约统一收敛至 top_k_constant_var_simd.h,并为 64 位整型的 Bitonic 排序接入小 k 阈值选择快路径;同时调整多处核数分配以避免空闲核与重复同步,并更新公版用例与 topk 的 AiCore 选择逻辑。 ## 主要改动 - **新增小轴 SIMT GM 直读直写内核路径**: 新增 SMALL_AXIS_DIRECT_MODE = 11 常量与 top_k_small_k_simt_gm_select.h(含 RunTopKSmallKSimtGmSelect、TopKSimtGmScalarRows、TopKThresholdSimtGm、TopKSimtGmWarpRows 等,并按职责拆分 Load/Collect/Search/Store 辅助函数),top_k_v2_apt.cpp 按 modeType == TOPK_DIRECT_MODE 直接调用该内核。 - **新增 UB radix 选择内核并接入单块模板**: top_k_small_k_ub_radix_select.h(原 input-select)提供两遍直方图阈值选择、候选收集及 B8/B16/B32/B64 的 SIMD/SIMT 变体;radix_sort_top_k_single_block.h 依 keyParams5 标志切换行距与双缓冲布局,通过 RunTopKSmallKUbRadixSelect 接入并支持 Prefetch 预取流水。 - **宽整型阈值选择快路径**: radix_sort_top_k_inter_core_template_optimization.h 在 IS_BITONIC_SORT 且 T 为 64 位整型、topkValueInput_ <= 32 时调用所属模板内的 TopKUbThresholdSelect,后者通过共享缓冲区报告是否走窄区间选择,否则回退原有 radix 选择。 - **重写小轴排序路由判定**: TryTopKSmallAxisSort 将小轴上限从 SMALL_AXIS_THRESHOLD 提升为 8192,新增标量选择直达、三类 input-select 让路、Direct 轴支持与最小行数判定,命中时写入 SMALL_AXIS_DIRECT_MODE 相关 tiling 字段,并对跨步浮点小 k 场景保留回落逻辑。 - **核数分配与并行度调整**: sort_tiling_arch35.cpp 对 DT_FLOAT 且 lastAxis 在 4~8、unsortedDim >= 2048 的场景收紧 maxCoreNum 以保留每核行数;TileModeSmallSize 将 maxCoreNum 限制为 unsortedDimNum;TopKV2Tiling 针对 int8/uint8 尾轴及 int64/uint64 多核优化模式调整 lastDimNeedCore、unsortedDimParallel、sortLoopTimes。 - **常量归并与检视意见修复**: 响应检视意见移除 top_k_small_axis_direct_config.h、top_k_input_select_config.h、top_k_threshold_select_ub.h,常量与 UB 预算函数并入 top_k_constant_var_simd.h 并由 Host 侧共享;公共 tiling 辅助函数下沉 top_k_v2_tiling_base.cpp;VF 循环边界按 SIMD 约束在 VF 外预计算。 - **AiCore 选择逻辑与公版用例更新**: topk.cpp 删除 DT_INT64 基于 size/轴长的 AiCPU 回退判断,RegBase 支持的 dtype 统一走 AiCore;golden.py 降低 _CUDA_SMALL_TOPK_PER_ROW_MAX 至 128,新增 aclnnTopk 映射及 signed_zero_values、_integer_full_range、_integer_extremes 等测试构造逻辑;本仓库 ST 精简为 4 条代表性冒烟用例,全量用例由独立仓库看护。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/4139 ## 测试 全量ST,二级冒烟测试通过 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6320 | 12 天前 | |
[Fix] 修复 TopKV2 Host InferShape 的 k 范围校验和错误码 Co-authored-by: KaranocaVe<karanocave@qq.com> # message auto-generated for no-merge-commit merge: !4987 merge fix/2026-08-23-ops-math-topkv2-invalid-k-infershape-01 into master [Fix] 修复 TopKV2 Host InferShape 的 k 范围校验和错误码 Created-by: KaranocaVe Commit-by: KaranocaVe Merged-by: cann-robot Description: ## 修复摘要 修复 TopKV2 Host InferShape 对动态输入 k 缺少范围校验的问题。此前 k < 0 或 k 大于排序轴长度时,形状推导仍返回成功并把非法值写入输出 shape;同时,负责 公共推导的 helper 使用 bool 返回类型,不能准确传递 GRAPH_FAILED。 现在将 helper 返回类型改为 graphStatus,对负 k 返回 GRAPH_FAILED,并在排序轴 长度已知时拒绝 k > axis_size,使 Host 形状推导与 TopKV2 约束及 AICPU 参数校验 保持一致。 ## 变更范围 - math/top_k_v2/op_host/top_k_v2_infershape.cpp:增加 k 非负校验和已知排序轴 长度的上界校验,并修正 helper 返回类型以保留标准错误码。 - math/top_k_v2/tests/ut/op_host/test_top_k_v2_infershape.cpp:增加 k 等于轴长 的合法边界对照,并覆盖 k=axis_size+1、k=-1 两个非法方向。 - 评审补充修复(当前 head c1ec6444d406e7572f26a9091ce05b1d08732a93):补全 dim < -rank 的非法负轴校验,避免归一化后使用负下标读取排序轴长度;同时增加 rank=2, dim=-3 返回 GRAPH_FAILED 的回归用例。 - 兼容性:合法 k、合法负轴和未知轴长度的动态 shape 推导保持原有行为;仅提前拒绝 明确非法参数,不涉及 ABI、kernel 或公开接口。 ## 测试结果 - 在固定 commit 0a2ce5b57caec6068d9e5658b740c2d41482aa15 的 Host UT 配置下,执行 cmake --build <build-dir> --target math_op_host_ut -- -j2,退出码为 0,完整 TopKV2 Host UT 共 12/12 通过。 - 执行 <build-dir>/tests/ut/op_host/math_op_host_ut --gtest_filter='TopKV2InferShape.*',退出码为 0,定向回归 4/4 通过: k=32 返回 GRAPH_SUCCESS,k=33 和 k=-1 返回 GRAPH_FAILED。 - 当前 head 已包含 dim=-3 的负轴越界回归用例,且该 head 的 GitCode CI 状态已回查为 通过。 - 验证环境 Toolkit/OPP 为 CANN 9.1.0,目标源码属于后续开发线;本次结论限定为 Host ## 关联的 Issue - https://gitcode.com/cann/ops-math/issues/2814 ## Patch 来源 - 初始基线 commit:0a2ce5b57caec6068d9e5658b740c2d41482aa15 - 初始 Patch SHA-256:bc407fd5d64ab0bff69c95f7e3d3b6834d2cf7d557f4516decd6b5882e6b6151 - 评审补充修复 commit:c1ec6444d406e7572f26a9091ce05b1d08732a93 See merge request: cann/ops-math!4987 | 21 天前 |