| Files | Last commit | Last update |
|---|---|---|
docs: 修正 aclnnKthvalue 参数 k 的合法范围 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !12372 merge docs/fix-kthvalue-k-range-6506 into master docs: 修正 aclnnKthvalue 参数 k 的合法范围 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修正 aclnnKthvalue 文档中参数 k 的合法范围为 [1, self.size(dim)],并将 k <= 0 明确列为参数错误,与 CheckParamValid 实现及算子 README 保持一致。仅澄清文档,不改变算子行为。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/6506 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 不涉及 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新 index/kth_value/docs/aclnnKthvalue.md 中的参数范围和错误码说明。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12372 | 23 days ago | |
feat(index): migrate kth_value, median and nan_median from ops-math Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !10222 merge master into master feat(index): migrate kth_value, median and nan_median from ops-math Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将 ops-math 的 kth_value、median、nan_median 迁入 index 对应目录,同时将 GatherV2 目录中的五个 ACLNN 接口归位,集中维护实现、接口、测试和文档。 - 承接三个算子的 Ascend950/arch35 Kernel、Host/Tiling、InferShape、L0 API、UT 和 ST 数据。主要算法、TilingKey、TilingData 保持原有设计;三个 golden.py 和三份 ST CSV 与源仓一致。 - 将依赖的 Sort 公共代码复制到 kth_value/op_host/arch35 与 op_kernel/arch35/common,调整命名和包含路径;适配目标仓 CMake、KERNEL_SRC、编译选项及公共头文件,UT 保持 arch35 隔离。分类归入 sort@ops-nn。 - 将 aclnnKthvalue、aclnnMedian、aclnnMedianDim、aclnnNanMedian、aclnnNanMedianDim 的实现、示例、文档和测试从 gather_v2 移到各自算子目录。删除三算子的 common 桩和弱符号判断,保留 IsRegbase 芯片路径选择。 - Median/NanMedian 的共用辅助函数由 median/op_api/median_common.cpp 单份定义,median_common.h 仅供内部 cpp 共享声明,通过 L0 函数指针避免 Median 反向依赖 NanMedian。这些辅助函数和常量原本属于 cpp 内部实现,未在原公共头文件中暴露;aclnn_median.h 不包含该内部头文件,安装规则也不将其作为公开 ACLNN 头文件导出。 - CMake 保留真实 ACLNN 调用依赖:KthValue 的旧芯片 Sort+Gather 路径仍依赖 GatherV2;Median/NanMedian 声明所需 KthValue、GatherV2、MedianDim、GatherElements 及共享实现依赖。GatherV2 移除已迁出调用方的 MedianDim 依赖。 接口兼容性:公共头文件统一为 index/median/op_api/aclnn_median.h,保留 aclnnMedian、aclnnMedianDim、aclnnNanMedian、aclnnNanMedianDim 的全部八个两阶段接口声明,函数签名及 extern "C" 保持不变。调用方仍包含 aclnnop/aclnn_median.h,无需修改原有 include;不新增 aclnn_nan_median.h。Median 与 NanMedian 的 cpp 按算子目录拆分,示例、测试及文档引用同步统一。 配套源仓清理 PR:https://gitcode.com/cann/ops-math/merge_requests/5550 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5783 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 5个aclnn接口各自500+ torch用例通过 - 3个算子总共500+ST用例通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 新增 kth_value、median、nan_median README,补充 op_list.md、op_api_list 及相关目录索引,修正 ACLNN 文档的源码链接与头文件引用。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [x] 其他,请描述:跨仓算子迁移及接口归位 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!10222 | 2 months ago | |
fix(index): KthValue公共头文件命名及代码质量整改 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !10851 merge master into master fix(index): KthValue公共头文件命名及代码质量整改 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 为 KthValue 的 12 个 common 头文件增加 kth_value_ 前缀,并同步更新引用和头文件保护宏;修正 aclnnKthvalue 数据类型说明;为只读 tiling 参数增加 const;区分 NanMedian 三处 ConvertToTensor 失败日志。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5998 https://gitcode.com/cann/ops-nn/issues/6002 ## 测试 - 二级冒烟通过 - 使用仓内 CSV 和 golden 进行 TTK release 验证:KthValue 30/30、Median 26/26、NanMedian 26/26,合计 82/82 通过。 ## 文档更新 更新 aclnn_kthvalue.h 中的参数数据类型说明。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!10851 | 1 month ago | |
feat(unique): add Regbase values-only AI Core support Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !10993 merge feature_op_unique into master feat(unique): add Regbase values-only AI Core support Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 为 aclnnUnique / aclnnUnique2 增加 Regbase values-only AI Core 路径,在单次 Kernel 调用中完成排序与去重,减少不必要的索引搬运和中间存储。 - 新增 arch35 Tiling、Kernel 和动态输出 shape 回传,接入 ACLNN 分流。 - 整理算子 L0、原型及 Ascend 950/350 构建注册;调整共享 radix 和 UniqueConsecutive 的大输入计算。 - 新增 ACLNN/Kernel 测试用例、golden 和 GEIR 示例。 新路径仅处理不返回 inverse/counts 且满足准入条件的调用,其余场景沿用既有路径;GE/ONNX 仍使用 AICPU。详细 Tiling 与 Kernel 设计见关联 Issue。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/6187 ## 测试 - 二级冒烟通过 - UniqueWithCountsAndSorting 和 KthValue 各自 300+ kernel ST通过 - aclnnUnique aclnnUnique2 各自 170+ aclnn用例通过 - onnx geir 通路兼容性验证通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!10993 | 1 month ago | |
fix: 修复 Median 和 NanMedian 负 subnormal 的 NaN 计数 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !12490 merge fix/median-subnormal-nan-count into master fix: 修复 Median 和 NanMedian 负 subnormal 的 NaN 计数 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复 Ascend 950 Median / NanMedian 在多核 radix 路径中将负 subnormal 误计为 NaN,导致中位数及索引错误的问题。输入本身无需包含 NaN,正确中位数也不一定是 subnormal。 PreProcess 会原地将输入转换为 radix key。原先随后调用的 OnRadixInputLoaded 读取已转换的数据,例如 FP32 0x80000001 对应 key 0x7ffffffe,按浮点解释即为 NaN,影响 Median 的 NaN 传播和 NanMedian 的中位秩计算。 本次将 OnRadixInputLoaded 移到 PreProcess 之前,针对原始输入统计 NaN,并说明调用顺序的原因。复用已有计算、同步与 buffer;KthValue / Unique 的该 hook 为空操作。Median 和 NanMedian 的库内 ST CSV 各增加一条 FP32 负 subnormal 零容差回归用例,shape 为 (1,1,151992)、dim=-1。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/7143 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本机 Ascend950DT_9574,TTK v3.0.0(8b3f093),release kernel 直调,显式加载各算子 golden 插件。 | 验证范围 | 结果 | |---|---| | Median 全量 | 417/417 通过 | | NanMedian 全量 | 427/427 通过 | | 上述全量中的新增 subnormal | 各 152 条,共 304 条,均通过;覆盖 FP32/FP16/BF16 的适用浮点模板 schId 0–11 | | KthValue 共享代码回归 | 366/366 通过,含 15 条新增 subnormal | | UniqueWithCountsAndSorting 共享代码回归 | 有效参考下 254/254 通过,含 12 条新增 subnormal;values-only 通路,校验 values 和动态 shape | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12490 | 21 days ago | |
perf(index): 优化 KthValue、Median 与 NanMedian 选择及归并路径 Co-authored-by: ConanHuang<huangxiaobin1@huawei.com> # message auto-generated for no-merge-commit merge: !10411 merge master into master perf(index): 优化 KthValue、Median 与 NanMedian 选择及归并路径 Created-by: ConanHuang Commit-by: ConanHuang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 优化 KthValue、Median、NanMedian 的选择与共享归并路径,减少完整排序、重复扫描和逐行控制开销,保持各算子的目标秩、NaN 和索引语义。 - 改进 radix select:累积字节直方图定位 bucket、UB 驻留 key、相同高位跳过及候选位置压缩,减少无效扫描。 - 补充窄轴 SIMT select、短秩选择和适用场景的驻留直方图路径,按 dtype、轴长、行数及 UB 容量选择路由。 - 同步公共 ping-pong 归并和批处理优化,完善 INT16 merge 路径与 host/kernel UB 布局对应关系。 - 精简相关 tiling 结构与分发,使用编译期 Median 模式分支;补充浮点 key、正负零、尾块及同步约束说明。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5977 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - Ascend950PR_9579:KthValue 338 条、Median 260 条、NanMedian 265 条全量 ST,加正负零逐位比较 32 条,合计 **895 条精度全部通过**。 - 相对前一版已验证实现,性能异常项复测及旧包/当前包同机对照后,未确认稳定超过 5% 且超过 0.5 μs 的设备耗时劣化。 - 二级冒烟通过。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!10411 | 1 month ago | |
kth_value,median,nan_median算子新增ascend350平台支持 Co-authored-by: jerry_gd<jerry.luo@huawei.com> # message auto-generated for no-merge-commit merge: !10327 merge master into master kth_value,median,nan_median算子新增ascend350平台支持 Created-by: jerry_gd Commit-by: jerry_gd Merged-by: cann-robot Description: ## 描述 kth_value,median,nan_median算子新增ascend350平台支持 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5838 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> bash build.sh --pkg --soc=ascend350 --ops="kth_value,median,nan_median",编译验证通过。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> NA ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10327 | 1 month ago | |
产品名称修改 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !11292 merge master into master 产品名称修改 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 产品名称修改 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11292 | 1 month ago |
KthValue
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | × |
| Atlas A2系列产品 | × |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | × |
功能说明
-
算子功能:返回输入张量x在指定维度dim上的第k个最小值及其在原输入中的索引。
-
计算流程: 对沿dim维度取出的每个一维切片,设升序排列后的值为s,p[j]表示s[j]在该切片排序前的位置(从0开始计数),则:
y=s[k−1],indices=p[k−1]y = s[k - 1], \quad indices = p[k - 1] y=s[k−1],indices=p[k−1]
例如输入张量x=[[3, 1, 2], [6, 4, 5]],k=2,dim=1,得到y=[[2], [5]],indices=[[2], [2]]。其中2和5在各自原始行中的索引均为2。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 待计算的输入张量。 | FLOAT、FLOAT16、BFLOAT16、INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64 | ND |
| y | 输出 | 第k个最小值。数据类型与x相同,shape与x相同但dim维度的长度为1。 | FLOAT、FLOAT16、BFLOAT16、INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64 | ND |
| indices | 输出 | 选中元素在输入张量dim维度上的索引,从0开始。shape与y相同。 | INT64 | ND |
| k | 必选属性 | 指定第k个最小值,取值范围为[1, x.shape[dim]]。 | INT64 | - |
| dim | 可选属性 |
|
INT64 | - |
约束说明
输入张量x不能为空,且维度数必须大于0。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_kthvalue | 通过aclnnKthvalue接口在指定维度上计算第k个最小值及索引。 |