| Files | Last commit | Last update |
|---|---|---|
fix: E*9****内部错误码整改为正式语义码并保留内部异常EZ9999上报 Co-authored-by: chenyifeng<chenyifeng27@h-partners.com> # message auto-generated for no-merge-commit merge: !6606 merge fix_errorNum_1021 into master fix: E*9****内部错误码整改为正式语义码并保留内部异常EZ9999上报 Created-by: chen_0715 Commit-by: chenyifeng Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本次 PR 整改以下 43 个算子中非法使用的内部错误码(E*9****),使其符合错误码使用规范: - cholesky / complex / cross / cummax / cummin / cumprod / get_shape / histogram_v2 / is_finite / is_inf - kl_div_v2 / lin_space / log_add_exp / non_finite_check / pdist / polar / pows / radix_top_k - reduce_log_sum / reduce_log_sum_exp / reduce_max / reduce_mean / reduce_mean_with_count / reduce_min - reduce_nansum / reduce_std_with_mean / rfft1_d / search_sorted / signbit / sin / sinc / sinkhorn / topk - affine_grid / amp_update_scale / angle_v2 / arg_max_v2 / arg_min / arg_min_with_value / atan2 / bessel_i1e / cdist_grad - conversion/tril 改动原因:上述算子 op_host / op_api / op_graph 源码中存在裸 OP_LOGE (EZ9999 兜底上报)、 OP_CHECK_NULL_WITH_CONTEXT / OP_CHECK_NOTNULL (EZ9999 上报)等不符合错误码使用规范的上报路径,需按失败原因分类整改为正式语义码或内部透传。 采取的方法: - op_host 参数/输入校验类(shape / dtype / format / attr 值域等)裸 OP_LOGE → 正式语义宏(EZ0004 / EZ0008–EZ0038) - op_host 内部 API 失败类(平台能力查询、tiling API 失败等)→ OP_LOGE_WITHOUT_REPORT 透传,去掉 EZ9999 上报、保留日志 - OP_CHECK_NULL_WITH_CONTEXT (EZ9999)→ 显式空指针检查 + 正式码宏 - op_api OP_CHECK_NOTNULL (EZ9999)→ 显式检查 + OP_LOGE_WITHOUT_REPORT(ACLNN_ERR_INNER_NULLPTR) + 返回公共错误码 - op_api OP_LOGE(ACLNN_ERR_INNER_* / RUNTIME_ERROR) (561xxx / 361xxx)→ OP_LOGE_WITHOUT_REPORT ;正式参数码 ACLNN_ERR_PARAM_* (161xxx)保留 - 删除 CREATE_EXECUTOR 之后不可达的空指针死检查( CHECK_RET(executor.get()!=nullptr, ACLNN_ERR_INNER_CREATE_EXECUTOR) ,40 处) - op_graph(histogram_v2 / reduce_mean 融合 pass)E9 上报 → 正式码或透传 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/3977 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - 43 算子 op_host / op_api / op_graph 全量编译通过,exit 0(910b + 950/arch35) - 本地增加ut测试130 用例全量通过(910b 83 + 950 47),日志级验证触发 78 次正式 EZ 错误码上报,覆盖 14 个正式错误码 - 原版 math_op_host_ut 300 用例全量通过,无回归 - 静态复扫:范围内 E*9**** 正式上报清零(残留均为 CHECK_RET 返回公共码 / 动态 return 等允许项) - 附:适配 CANN 9.3.0 atvoss 库 tiling key 编码变化,更新 reduce_max / reduce_mean_with_count 测试的 9 处 expectedTilingKey (官方 master 在 9.3.0 下同样失败,非本 PR 引入) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6606 | 14 days ago | |
fix(radix_top_k): 修复 WS 变体 V→MTE3 同步缺失与 CreateVecIndex4TopK 越界,统一跨核前缀和累加为 int64 Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !6396 merge addut into master fix(radix_top_k): 修复 WS 变体 V→MTE3 同步缺失与 CreateVecIndex4TopK 越界,统一跨核前缀和累加为 int64 Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ### 改动原因 RadixTopK 在 int64 大 shape(sortLen 超 int32 上限)与 WS 变体路径上存在三处缺陷,且 host UT 的 tiling key 期望值只编码 3 位,int64 主路径恒测不到: 1. WS 变体同步缺失: Add 在 V 流水线写 tileTopK,紧接着 MTE3 读同一块 UB;PipeBarrier<PIPE_V> 只保证 V 流水线内部顺序,SToMTE3Sync 只覆盖 S→MTE3,两者都管不到 V→MTE3,MTE3 可能读到 Add 之前的旧值,导致该段 k 配额错乱。同文件 AddTileHist2TileTopKInWs 对同样的 Add→CopyOut 序列用的是 VToMTE3Sync。 2. 索引序列越界:i64 变体的多段 regime 会命中 tileNum_ > MAX_TILE_NUM_IN_UB,此时 CreateVecIndex4TopK 中的无符号相减会下溢成巨大值,再被 tileLen_ 兜住,最终 GetWithOffset(maxIndexLen, tileNumAlign_ * 4) 的偏移会写出 6144 元素 buffer。 3. 跨核前缀和累加溢出:前驱 core 边界 bin 累计元素数总量可达 sortLen > 2^31,UB 变体用 int32 累加(cumSumValuePrev / remainCoreBoundaryNum)存在溢出风险;同时 WS 变体维护了一份只差累加器类型的 ComputeCumSumPrevI64。 4. UT 覆盖缺口:ComputeExpectedTilingKey 只编码 sorted/largest/isLargeShape 3 位,未编码 isInt64Shape(bit3),int64 主路径(sortLen > 2^31)恒测不到。 ### 改动方法 1. op_kernel/radix_top_k_ws.h - HandleLastRoundBoundary 中 Add→CopyTileTopKUb2Ws 的同步由 SToMTE3Sync() 改为 VToMTE3Sync(),与同文件 AddTileHist2TileTopKInWs 口径一致; - CreateVecIndex4TopK 增加前置防御:tileNumAlign_ >= MAX_TILE_NUM_IN_UB 时直接 return 0,下游走「现算索引」分支,与 maxIndexLen==0 的既有兜底行为一致; - 删除 ComputeCumSumPrevI64,改用基类 ComputeCumSumPrev(出参已是 int64),消除 UB/WS 两份仅差累加器类型的实现。 2. op_kernel/radix_top_k_common.h:ComputeCumSumPrev 出参由 int32_t& 改为 int64_t&(每 core 边界 bin 计数 < 2^31,int64 累加对 int32 形状同样安全);IsNaNValue 的 float 位模式读取由指针 reinterpret 改为 union,规避浮点相等/自比较类告警;补充提取相与计数相 NaN 规范化口径不对称的说明。 3. op_kernel/radix_top_k_ub.h:cumSumValuePrev / remainCoreBoundaryNum 改为 int64,回写 tileTopK 时显式 static_cast<int32_t>(per-core 配额 < 该 tile 边界 bin 计数 < 2^31,int32 通道安全)。 4. op_host/radix_top_k_tiling.cpp:新增 static_assert(LARGE_SORT_LEN < INT32_SORT_LEN_MAX),把「isInt64Shape_ 蕴含 isLargeShape_」钉死,避免后续调大 LARGE_SORT_LEN 时 i64 分支被漏掉;needWorkspace / GetWorkspaceSize 两处 || isInt64Shape_ 补充防御性冗余注释。 5. tests/ut/op_host/test_radix_top_k_tiling.cpp:ComputeExpectedTilingKey 补齐第 4 位 isInt64Shape(与 GET_TPL_TILING_KEY(sorted, largest, isLargeShape, isInt64Shape) 一一对应,此前 int64 主路径恒测不到);新增两条用例:i64_shape_tiling_key_bit3(sortLen=2^31 ⇒ bit3+bit2、indices int64、必须申请 workspace)、i64_shape_reject_int32_indices(sortLen > 2^31 且 indices int32 必须 tiling 失败);MakeRadixTopKTilingContext 支持指定输出 indices dtype。 6. math/radix_top_k/README.md:约束说明由「无」改为「本算子为选取类实现,输出为选中元素在排序轴上的索引序,不保证有序」。 7. math/topk/op_api/topk.cpp:补充 int64 大 shape 分支拦截条件的注释(说明放掉 k 比例门限与 MIN_K 门限、且 int64 索引无法通过 GatherElementsV2 补有序性的原因),不改变逻辑。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> - #3604 https://gitcode.com/cann/ops-math/issues/3604 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - 本次提交包含 host UT 变更(math/radix_top_k/tests/ut/op_host/test_radix_top_k_tiling.cpp):修正 tiling key 期望值编码并新增 int64 主路径两条用例;本地未执行,预期由 CI 运行。 - kernel 侧改动(VToMTE3Sync、CreateVecIndex4TopK 防御、int64 累加)建议结合 RadixTopK int64 大 shape 场景回归验证(实施类用例未包含在本次提交内)。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新 math/radix_top_k/README.md 约束说明(补充输出无序约束);另含 op_host/op_kernel 注释更新,不涉及其他文档。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6396 | 25 days ago | |
fix(radix_top_k): 修复 WS 变体 V→MTE3 同步缺失与 CreateVecIndex4TopK 越界,统一跨核前缀和累加为 int64 Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !6396 merge addut into master fix(radix_top_k): 修复 WS 变体 V→MTE3 同步缺失与 CreateVecIndex4TopK 越界,统一跨核前缀和累加为 int64 Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ### 改动原因 RadixTopK 在 int64 大 shape(sortLen 超 int32 上限)与 WS 变体路径上存在三处缺陷,且 host UT 的 tiling key 期望值只编码 3 位,int64 主路径恒测不到: 1. WS 变体同步缺失: Add 在 V 流水线写 tileTopK,紧接着 MTE3 读同一块 UB;PipeBarrier<PIPE_V> 只保证 V 流水线内部顺序,SToMTE3Sync 只覆盖 S→MTE3,两者都管不到 V→MTE3,MTE3 可能读到 Add 之前的旧值,导致该段 k 配额错乱。同文件 AddTileHist2TileTopKInWs 对同样的 Add→CopyOut 序列用的是 VToMTE3Sync。 2. 索引序列越界:i64 变体的多段 regime 会命中 tileNum_ > MAX_TILE_NUM_IN_UB,此时 CreateVecIndex4TopK 中的无符号相减会下溢成巨大值,再被 tileLen_ 兜住,最终 GetWithOffset(maxIndexLen, tileNumAlign_ * 4) 的偏移会写出 6144 元素 buffer。 3. 跨核前缀和累加溢出:前驱 core 边界 bin 累计元素数总量可达 sortLen > 2^31,UB 变体用 int32 累加(cumSumValuePrev / remainCoreBoundaryNum)存在溢出风险;同时 WS 变体维护了一份只差累加器类型的 ComputeCumSumPrevI64。 4. UT 覆盖缺口:ComputeExpectedTilingKey 只编码 sorted/largest/isLargeShape 3 位,未编码 isInt64Shape(bit3),int64 主路径(sortLen > 2^31)恒测不到。 ### 改动方法 1. op_kernel/radix_top_k_ws.h - HandleLastRoundBoundary 中 Add→CopyTileTopKUb2Ws 的同步由 SToMTE3Sync() 改为 VToMTE3Sync(),与同文件 AddTileHist2TileTopKInWs 口径一致; - CreateVecIndex4TopK 增加前置防御:tileNumAlign_ >= MAX_TILE_NUM_IN_UB 时直接 return 0,下游走「现算索引」分支,与 maxIndexLen==0 的既有兜底行为一致; - 删除 ComputeCumSumPrevI64,改用基类 ComputeCumSumPrev(出参已是 int64),消除 UB/WS 两份仅差累加器类型的实现。 2. op_kernel/radix_top_k_common.h:ComputeCumSumPrev 出参由 int32_t& 改为 int64_t&(每 core 边界 bin 计数 < 2^31,int64 累加对 int32 形状同样安全);IsNaNValue 的 float 位模式读取由指针 reinterpret 改为 union,规避浮点相等/自比较类告警;补充提取相与计数相 NaN 规范化口径不对称的说明。 3. op_kernel/radix_top_k_ub.h:cumSumValuePrev / remainCoreBoundaryNum 改为 int64,回写 tileTopK 时显式 static_cast<int32_t>(per-core 配额 < 该 tile 边界 bin 计数 < 2^31,int32 通道安全)。 4. op_host/radix_top_k_tiling.cpp:新增 static_assert(LARGE_SORT_LEN < INT32_SORT_LEN_MAX),把「isInt64Shape_ 蕴含 isLargeShape_」钉死,避免后续调大 LARGE_SORT_LEN 时 i64 分支被漏掉;needWorkspace / GetWorkspaceSize 两处 || isInt64Shape_ 补充防御性冗余注释。 5. tests/ut/op_host/test_radix_top_k_tiling.cpp:ComputeExpectedTilingKey 补齐第 4 位 isInt64Shape(与 GET_TPL_TILING_KEY(sorted, largest, isLargeShape, isInt64Shape) 一一对应,此前 int64 主路径恒测不到);新增两条用例:i64_shape_tiling_key_bit3(sortLen=2^31 ⇒ bit3+bit2、indices int64、必须申请 workspace)、i64_shape_reject_int32_indices(sortLen > 2^31 且 indices int32 必须 tiling 失败);MakeRadixTopKTilingContext 支持指定输出 indices dtype。 6. math/radix_top_k/README.md:约束说明由「无」改为「本算子为选取类实现,输出为选中元素在排序轴上的索引序,不保证有序」。 7. math/topk/op_api/topk.cpp:补充 int64 大 shape 分支拦截条件的注释(说明放掉 k 比例门限与 MIN_K 门限、且 int64 索引无法通过 GatherElementsV2 补有序性的原因),不改变逻辑。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> - #3604 https://gitcode.com/cann/ops-math/issues/3604 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - 本次提交包含 host UT 变更(math/radix_top_k/tests/ut/op_host/test_radix_top_k_tiling.cpp):修正 tiling key 期望值编码并新增 int64 主路径两条用例;本地未执行,预期由 CI 运行。 - kernel 侧改动(VToMTE3Sync、CreateVecIndex4TopK 防御、int64 累加)建议结合 RadixTopK int64 大 shape 场景回归验证(实施类用例未包含在本次提交内)。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新 math/radix_top_k/README.md 约束说明(补充输出无序约束);另含 op_host/op_kernel 注释更新,不涉及其他文档。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6396 | 25 days ago | |
UT工程添加ARCH的设置替换SOC设置 Co-authored-by: zhu-lei0614<zhulei113@huawei.com> # message auto-generated for no-merge-commit merge: !3499 merge master into master UT工程添加ARCH的设置替换SOC设置 Created-by: huang-qiang Commit-by: zhu-lei0614 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3499 | 4 months ago | |
fix(radix_top_k): 修复 WS 变体 V→MTE3 同步缺失与 CreateVecIndex4TopK 越界,统一跨核前缀和累加为 int64 Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !6396 merge addut into master fix(radix_top_k): 修复 WS 变体 V→MTE3 同步缺失与 CreateVecIndex4TopK 越界,统一跨核前缀和累加为 int64 Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ### 改动原因 RadixTopK 在 int64 大 shape(sortLen 超 int32 上限)与 WS 变体路径上存在三处缺陷,且 host UT 的 tiling key 期望值只编码 3 位,int64 主路径恒测不到: 1. WS 变体同步缺失: Add 在 V 流水线写 tileTopK,紧接着 MTE3 读同一块 UB;PipeBarrier<PIPE_V> 只保证 V 流水线内部顺序,SToMTE3Sync 只覆盖 S→MTE3,两者都管不到 V→MTE3,MTE3 可能读到 Add 之前的旧值,导致该段 k 配额错乱。同文件 AddTileHist2TileTopKInWs 对同样的 Add→CopyOut 序列用的是 VToMTE3Sync。 2. 索引序列越界:i64 变体的多段 regime 会命中 tileNum_ > MAX_TILE_NUM_IN_UB,此时 CreateVecIndex4TopK 中的无符号相减会下溢成巨大值,再被 tileLen_ 兜住,最终 GetWithOffset(maxIndexLen, tileNumAlign_ * 4) 的偏移会写出 6144 元素 buffer。 3. 跨核前缀和累加溢出:前驱 core 边界 bin 累计元素数总量可达 sortLen > 2^31,UB 变体用 int32 累加(cumSumValuePrev / remainCoreBoundaryNum)存在溢出风险;同时 WS 变体维护了一份只差累加器类型的 ComputeCumSumPrevI64。 4. UT 覆盖缺口:ComputeExpectedTilingKey 只编码 sorted/largest/isLargeShape 3 位,未编码 isInt64Shape(bit3),int64 主路径(sortLen > 2^31)恒测不到。 ### 改动方法 1. op_kernel/radix_top_k_ws.h - HandleLastRoundBoundary 中 Add→CopyTileTopKUb2Ws 的同步由 SToMTE3Sync() 改为 VToMTE3Sync(),与同文件 AddTileHist2TileTopKInWs 口径一致; - CreateVecIndex4TopK 增加前置防御:tileNumAlign_ >= MAX_TILE_NUM_IN_UB 时直接 return 0,下游走「现算索引」分支,与 maxIndexLen==0 的既有兜底行为一致; - 删除 ComputeCumSumPrevI64,改用基类 ComputeCumSumPrev(出参已是 int64),消除 UB/WS 两份仅差累加器类型的实现。 2. op_kernel/radix_top_k_common.h:ComputeCumSumPrev 出参由 int32_t& 改为 int64_t&(每 core 边界 bin 计数 < 2^31,int64 累加对 int32 形状同样安全);IsNaNValue 的 float 位模式读取由指针 reinterpret 改为 union,规避浮点相等/自比较类告警;补充提取相与计数相 NaN 规范化口径不对称的说明。 3. op_kernel/radix_top_k_ub.h:cumSumValuePrev / remainCoreBoundaryNum 改为 int64,回写 tileTopK 时显式 static_cast<int32_t>(per-core 配额 < 该 tile 边界 bin 计数 < 2^31,int32 通道安全)。 4. op_host/radix_top_k_tiling.cpp:新增 static_assert(LARGE_SORT_LEN < INT32_SORT_LEN_MAX),把「isInt64Shape_ 蕴含 isLargeShape_」钉死,避免后续调大 LARGE_SORT_LEN 时 i64 分支被漏掉;needWorkspace / GetWorkspaceSize 两处 || isInt64Shape_ 补充防御性冗余注释。 5. tests/ut/op_host/test_radix_top_k_tiling.cpp:ComputeExpectedTilingKey 补齐第 4 位 isInt64Shape(与 GET_TPL_TILING_KEY(sorted, largest, isLargeShape, isInt64Shape) 一一对应,此前 int64 主路径恒测不到);新增两条用例:i64_shape_tiling_key_bit3(sortLen=2^31 ⇒ bit3+bit2、indices int64、必须申请 workspace)、i64_shape_reject_int32_indices(sortLen > 2^31 且 indices int32 必须 tiling 失败);MakeRadixTopKTilingContext 支持指定输出 indices dtype。 6. math/radix_top_k/README.md:约束说明由「无」改为「本算子为选取类实现,输出为选中元素在排序轴上的索引序,不保证有序」。 7. math/topk/op_api/topk.cpp:补充 int64 大 shape 分支拦截条件的注释(说明放掉 k 比例门限与 MIN_K 门限、且 int64 索引无法通过 GatherElementsV2 补有序性的原因),不改变逻辑。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> - #3604 https://gitcode.com/cann/ops-math/issues/3604 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> - 本次提交包含 host UT 变更(math/radix_top_k/tests/ut/op_host/test_radix_top_k_tiling.cpp):修正 tiling key 期望值编码并新增 int64 主路径两条用例;本地未执行,预期由 CI 运行。 - kernel 侧改动(VToMTE3Sync、CreateVecIndex4TopK 防御、int64 累加)建议结合 RadixTopK int64 大 shape 场景回归验证(实施类用例未包含在本次提交内)。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新 math/radix_top_k/README.md 约束说明(补充输出无序约束);另含 op_host/op_kernel 注释更新,不涉及其他文档。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6396 | 25 days ago |
RadixTopK
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | × |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | × |
功能说明
-
接口功能:返回输入Tensor在指定维度上的k个极值及索引。RadixTopK算子支持通过输入Tensor指定k值。
-
计算说明:
- 当largest=True时,返回指定维度上最大的k个值及其索引
- 当largest=False时,返回指定维度上最小的k个值及其索引
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 待进行TopK计算的输入张量,支持1-8维度。 | FLOAT16、BFLOAT16 | ND |
| k | 输入 | 0D标量Tensor,表示计算维度上输出的极值个数。取值范围为[0, x.size(dim)]。 | INT32、INT64 | ND |
| values | 输出 | TopK计算的输出值,数据类型与x保持一致。shape排序轴与k一致,非排序轴与x一致。 | FLOAT16、BFLOAT16 | ND |
| indices | 输出 | TopK计算的输出索引,数据类型由indices_dtype属性指定。shape排序轴与k一致,非排序轴与x一致。 | INT32、INT64 | ND |
| sorted | 属性 | 可选布尔型,默认为True。True表示输出结果排序,False表示输出结果不排序。 | Bool | - |
| dim | 属性 | 可选整型,默认为-1。表示计算维度。取值范围为[-x.dim(), x.dim())。 | Int | - |
| largest | 属性 | 可选布尔型,默认为True。True表示返回最大的k个元素,False表示返回最小的k个元素。 | Bool | - |
| indices_dtype | 属性 | 可选整型,默认为DT_INT32(3)。表示输出indices的数据类型,支持DT_INT32(3)或DT_INT64(9)。 | Int | - |
约束说明
- 本算子为选取类实现,输出为选中元素在排序轴上的索引序,不保证有序。