| Files | Last commit | Last update |
|---|---|---|
add aicpu:topk&calc_buckets_limit_and_offset&compare_and_bit_pack Co-authored-by: sujunwei3<sujunwei3@huawei.com> # message auto-generated for no-merge-commit merge: !3724 merge dev into master add aicpu:topk&calc_buckets_limit_and_offset&compare_and_bit_pack Created-by: sujunwei3 Commit-by: sujunwei3 Merged-by: cann-robot Description: ## 描述 新增 TopK、CalcBucketsLimitAndOffset、CompareAndBitPack 三个 AICPU 算子的完整实现,共涉及 28 个文件变更。 ### 1. TopK(math/topk/) 从已有 aclnn 接口扩展为完整 AICPU 算子实现: - 新增 op_graph/topk_proto.h:算子协议定义 - 新增 op_host/topk_infershape.cpp:host 侧 shape 推导 - 新增 op_kernel_aicpu/topk_aicpu.cpp、topk_aicpu.h、topk_aicpu_def.cpp:AICPU kernel 实现及注册 - 新增 op_kernel_aicpu/CMakeLists.txt、op_graph/CMakeLists.txt:构建配置 - 新增 examples/test_geir_topk.cpp:使用示例 - 新增 tests/ut/op_kernel_aicpu/test_topk.cpp:单元测试 - 修改 CMakeLists.txt:添加 UT 测试配置 - 修改 README.md:补充完整算子文档(产品支持情况、接口说明等) ### 2. CalcBucketsLimitAndOffset(conversion/calc_buckets_limit_and_offset/) 全新 AICPU 算子,用于计算 buckets 的 limit 和 offset 值: - 新增 CMakeLists.txt、op_graph/calc_buckets_limit_and_offset_proto.h - 新增 op_kernel_aicpu/calc_buckets_limit_and_offset_aicpu.cpp、.h、_def.cpp - 新增 examples/test_geir_calc_buckets_limit_and_offset.cpp - 新增 tests/ut/op_kernel_aicpu/test_calc_buckets_limit_and_offset.cpp - 新增 README.md:算子文档 ### 3. CompareAndBitPack(math/compare_and_bit_pack/) 全新 AICPU 算子,将输入与阈值进行比较并将比较结果的比特位打包为 uint8 输出: - 新增 CMakeLists.txt、op_graph/compare_and_bit_pack_proto.h - 新增 op_kernel_aicpu/compare_and_bit_pack_aicpu.cpp、.h、_def.cpp - 新增 examples/test_geir_compare_and_bit_pack.cpp - 新增 tests/ut/op_kernel_aicpu/test_compare_and_bit_pack.cpp - 新增 README.md:算子文档 ### 4. 文档更新 - 修改 docs/zh/op_list.md:在算子列表中添加 compare_and_bit_pack 等算子条目 ## 关联的Issue #2187 ## 测试 根据代码变更,测试场景如下: 1. **算子构建测试** - 执行 cmake 配置和编译,验证三个算子(TopK、CalcBucketsLimitAndOffset、CompareAndBitPack)的 CMakeLists.txt 配置正确,能正常编译构建 2. **单元测试(UT)** - 运行 tests/ut/op_kernel_aicpu/test_topk.cpp,验证 TopK 算子在不同数据类型(float16、float32、int32)和 shape 下的计算正确性 - 运行 tests/ut/op_kernel_aicpu/test_calc_buckets_limit_and_offset.cpp,验证 CalcBucketsLimitAndOffset 算子的功能正确性 - 运行 tests/ut/op_kernel_aicpu/test_compare_and_bit_pack.cpp,验证 CompareAndBitPack 算子在不同数据类型下的比较和比特打包功能正确性 3. **Example 验证** - 编译并运行 examples/test_geir_topk.cpp,验证 TopK 算子端到端调用流程 - 编译并运行 examples/test_geir_calc_buckets_limit_and_offset.cpp,验证 CalcBucketsLimitAndOffset 算子端到端调用流程 - 编译并运行 examples/test_geir_compare_and_bit_pack.cpp,验证 CompareAndBitPack 算子端到端调用流程 4. **算子加载测试** - 验证三个算子的 AICPU kernel 注册成功,接口可正常调用 ## 文档更新 - 新增 math/topk/README.md:TopK 算子完整文档(产品支持情况、接口说明、约束限制等) - 新增 conversion/calc_buckets_limit_and_offset/README.md:CalcBucketsLimitAndOffset 算子文档 - 新增 math/compare_and_bit_pack/README.md:CompareAndBitPack 算子文档 - 修改 docs/zh/op_list.md:算子列表新增条目 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3724 | 3 months ago | |
feat: CompareAndBitpack 支持 RT2 InferShape Co-authored-by: zhaowenrui666<zhaowenrui7@huawei.com> # message auto-generated for no-merge-commit merge: !5680 merge feature/compare-and-bitpack-rt2-infershape into master feat: CompareAndBitpack 支持 RT2 InferShape Created-by: zhaowenrui666 Commit-by: zhaowenrui666 Merged-by: cann-robot Description: ## 描述 为 CompareAndBitpack 补充 RT2 InferShape 和 InferDataType 实现,使算子可在 RT2 图编译流程中完成输出 shape 与 dtype 推导。 - 校验输入 x 至少为 1 维、threshold 为标量或未知秩。 - 输出 shape 继承 x,已知末维要求可被 8 整除并缩小为原来的 1/8;未知末维保持未知。 - 输出 dtype 固定推导为 DT_UINT8。 - 对照原 RT1 实现补充单元测试,覆盖正常、动态 shape、非法输入和未知秩场景,保持 RT1/RT2 行为一致。 ## 关联的Issue 无。 ## 测试 - TDD 修改前:新增 RT2 InferShape 用例后,因缺少 RT2 注册,测试执行到首个用例时失败。 - 反向对照:临时移除未知末维处理后,CompareAndBitpackInferShape.PreservesUnknownLastDimension 按预期失败;恢复实现后通过。 - bash build.sh -u --ophost --ops=compare_and_bit_pack:8 个用例全部通过。 - cmake -S . -B build -DENABLE_TEST=TRUE -DASCEND_OP_NAME=compare_and_bit_pack -DOP_HOST_UT=FALSE -DOP_GRAPH_UT=TRUE -DENABLE_UT_EXEC=TRUE && cmake --build build --target math_op_graph_ut -j8:1 个用例通过,graph_plugin_math_obj 编译成功。 - pre-commit run --from-ref ups/master --to-ref HEAD:全部检查通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5680 | 1 month ago | |
feat: CompareAndBitpack 支持 RT2 InferShape Co-authored-by: zhaowenrui666<zhaowenrui7@huawei.com> # message auto-generated for no-merge-commit merge: !5680 merge feature/compare-and-bitpack-rt2-infershape into master feat: CompareAndBitpack 支持 RT2 InferShape Created-by: zhaowenrui666 Commit-by: zhaowenrui666 Merged-by: cann-robot Description: ## 描述 为 CompareAndBitpack 补充 RT2 InferShape 和 InferDataType 实现,使算子可在 RT2 图编译流程中完成输出 shape 与 dtype 推导。 - 校验输入 x 至少为 1 维、threshold 为标量或未知秩。 - 输出 shape 继承 x,已知末维要求可被 8 整除并缩小为原来的 1/8;未知末维保持未知。 - 输出 dtype 固定推导为 DT_UINT8。 - 对照原 RT1 实现补充单元测试,覆盖正常、动态 shape、非法输入和未知秩场景,保持 RT1/RT2 行为一致。 ## 关联的Issue 无。 ## 测试 - TDD 修改前:新增 RT2 InferShape 用例后,因缺少 RT2 注册,测试执行到首个用例时失败。 - 反向对照:临时移除未知末维处理后,CompareAndBitpackInferShape.PreservesUnknownLastDimension 按预期失败;恢复实现后通过。 - bash build.sh -u --ophost --ops=compare_and_bit_pack:8 个用例全部通过。 - cmake -S . -B build -DENABLE_TEST=TRUE -DASCEND_OP_NAME=compare_and_bit_pack -DOP_HOST_UT=FALSE -DOP_GRAPH_UT=TRUE -DENABLE_UT_EXEC=TRUE && cmake --build build --target math_op_graph_ut -j8:1 个用例通过,graph_plugin_math_obj 编译成功。 - pre-commit run --from-ref ups/master --to-ref HEAD:全部检查通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5680 | 1 month ago | |
fix: compare_and_bit_pack 和 clip_by_value_v2 infershape整改 Co-authored-by: liu-lu<www.liulu824910939@qq.com> # message auto-generated for no-merge-commit merge: !5925 merge master into master fix: compare_and_bit_pack 和 clip_by_value_v2 infershape整改 Created-by: liu-lu Commit-by: liu-lu Merged-by: cann-robot Description: ## 描述 为 clip_by_value_v2 与 compare_and_bit_pack 两个 AICPU 算子完成 host 侧注册整改,使能 GE 图编译期常量折叠编入链路: 1. **构建配置**:两个算子的 CMakeLists.txt 中 add_all_modules_sources 增加 HOSTCPU TRUE,将 op_kernel_aicpu/*_aicpu.cpp 以 x86 OBJECT 形式编入 host 侧常量折叠库 libopconstant_folding_math.so; 2. **注册宏迁移 V2**:kernel 注册宏由 REGISTER_CPU_KERNEL 替换为 OPS_MATH_REGISTER_CPU_KERNELV2(新增 #include "aicpu/math_aicpu_register.h")。host so 编译(定义 OPS_MATH_AICPU_HOST_KERNEL)时通过 RegistCpuKernelV2 注册到 V2 框架;AICPU 侧编译时宏退化为 REGISTER_CPU_KERNEL,原有行为不变; 3. **格式对齐**:对 clip_by_value_v2_aicpu.cpp 按 clang-format 风格统一排版,并在文件末尾补充换行符。 ## 关联的Issue #3281 ## 测试 根据代码变更,测试场景如下: 1. **编译构建测试** - 全量构建验证 HOSTCPU TRUE 生效,两个算子的 op_kernel_aicpu/*_aicpu.cpp 正确编入 libopconstant_folding_math.so(host so 中可见 RegistCpuKernelV2 注册的 ClipByValueV2 / CompareAndBitpack kernel 符号); - 验证 AICPU 侧 kernel so 构建不受影响(宏退化为 REGISTER_CPU_KERNEL,注册行为不变)。 2. **常量折叠功能验证** - GE 图编译期输入为常量时,两个算子可在 host 侧完成折叠,运行期不再拉起 AICPU kernel; - 非常量输入场景下计算结果与整改前一致(数值一致性比对)。 3. **UT 回归** - 运行既有 UT(如 tests/ut/op_kernel_aicpu/test_compare_and_bit_pack.cpp),确认注册方式迁移后用例全部通过。 4. **CI 流水线** - 仓内 CI 已通过(ci-pipeline-passed)。 ## 文档更新 不涉及文档更新。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:AICPU 算子 host 侧注册整改:HOSTCPU 编入使能 + kernel 注册宏迁移 V2 See merge request: cann/ops-math!5925 | 1 month ago | |
feat: CompareAndBitpack 支持 RT2 InferShape Co-authored-by: zhaowenrui666<zhaowenrui7@huawei.com> # message auto-generated for no-merge-commit merge: !5680 merge feature/compare-and-bitpack-rt2-infershape into master feat: CompareAndBitpack 支持 RT2 InferShape Created-by: zhaowenrui666 Commit-by: zhaowenrui666 Merged-by: cann-robot Description: ## 描述 为 CompareAndBitpack 补充 RT2 InferShape 和 InferDataType 实现,使算子可在 RT2 图编译流程中完成输出 shape 与 dtype 推导。 - 校验输入 x 至少为 1 维、threshold 为标量或未知秩。 - 输出 shape 继承 x,已知末维要求可被 8 整除并缩小为原来的 1/8;未知末维保持未知。 - 输出 dtype 固定推导为 DT_UINT8。 - 对照原 RT1 实现补充单元测试,覆盖正常、动态 shape、非法输入和未知秩场景,保持 RT1/RT2 行为一致。 ## 关联的Issue 无。 ## 测试 - TDD 修改前:新增 RT2 InferShape 用例后,因缺少 RT2 注册,测试执行到首个用例时失败。 - 反向对照:临时移除未知末维处理后,CompareAndBitpackInferShape.PreservesUnknownLastDimension 按预期失败;恢复实现后通过。 - bash build.sh -u --ophost --ops=compare_and_bit_pack:8 个用例全部通过。 - cmake -S . -B build -DENABLE_TEST=TRUE -DASCEND_OP_NAME=compare_and_bit_pack -DOP_HOST_UT=FALSE -DOP_GRAPH_UT=TRUE -DENABLE_UT_EXEC=TRUE && cmake --build build --target math_op_graph_ut -j8:1 个用例通过,graph_plugin_math_obj 编译成功。 - pre-commit run --from-ref ups/master --to-ref HEAD:全部检查通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5680 | 1 month ago | |
fix: compare_and_bit_pack 和 clip_by_value_v2 infershape整改 Co-authored-by: liu-lu<www.liulu824910939@qq.com> # message auto-generated for no-merge-commit merge: !5925 merge master into master fix: compare_and_bit_pack 和 clip_by_value_v2 infershape整改 Created-by: liu-lu Commit-by: liu-lu Merged-by: cann-robot Description: ## 描述 为 clip_by_value_v2 与 compare_and_bit_pack 两个 AICPU 算子完成 host 侧注册整改,使能 GE 图编译期常量折叠编入链路: 1. **构建配置**:两个算子的 CMakeLists.txt 中 add_all_modules_sources 增加 HOSTCPU TRUE,将 op_kernel_aicpu/*_aicpu.cpp 以 x86 OBJECT 形式编入 host 侧常量折叠库 libopconstant_folding_math.so; 2. **注册宏迁移 V2**:kernel 注册宏由 REGISTER_CPU_KERNEL 替换为 OPS_MATH_REGISTER_CPU_KERNELV2(新增 #include "aicpu/math_aicpu_register.h")。host so 编译(定义 OPS_MATH_AICPU_HOST_KERNEL)时通过 RegistCpuKernelV2 注册到 V2 框架;AICPU 侧编译时宏退化为 REGISTER_CPU_KERNEL,原有行为不变; 3. **格式对齐**:对 clip_by_value_v2_aicpu.cpp 按 clang-format 风格统一排版,并在文件末尾补充换行符。 ## 关联的Issue #3281 ## 测试 根据代码变更,测试场景如下: 1. **编译构建测试** - 全量构建验证 HOSTCPU TRUE 生效,两个算子的 op_kernel_aicpu/*_aicpu.cpp 正确编入 libopconstant_folding_math.so(host so 中可见 RegistCpuKernelV2 注册的 ClipByValueV2 / CompareAndBitpack kernel 符号); - 验证 AICPU 侧 kernel so 构建不受影响(宏退化为 REGISTER_CPU_KERNEL,注册行为不变)。 2. **常量折叠功能验证** - GE 图编译期输入为常量时,两个算子可在 host 侧完成折叠,运行期不再拉起 AICPU kernel; - 非常量输入场景下计算结果与整改前一致(数值一致性比对)。 3. **UT 回归** - 运行既有 UT(如 tests/ut/op_kernel_aicpu/test_compare_and_bit_pack.cpp),确认注册方式迁移后用例全部通过。 4. **CI 流水线** - 仓内 CI 已通过(ci-pipeline-passed)。 ## 文档更新 不涉及文档更新。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:AICPU 算子 host 侧注册整改:HOSTCPU 编入使能 + kernel 注册宏迁移 V2 See merge request: cann/ops-math!5925 | 1 month ago | |
产品名变更 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !5912 merge master into master 产品名变更 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> AI处理器对应的产品型号名称更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3258](https://gitcode.com/cann/ops-math/issues/3258) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> *.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5912 | 1 month ago |
CompareAndBitpack
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | √ |
| Atlas推理系列产品 | √ |
| Atlas训练系列产品 | √ |
功能说明
- 算子功能:将输入张量x中的每个元素与阈值threshold进行比较,将比较结果(大于为1,否则为0)打包为uint8类型的位域输出。每8个连续输入元素的比较结果打包为一个uint8值。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 待比较的输入张量,维度至少为1维。 | FLOAT、FLOAT16、DOUBLE、INT8、INT16、INT32、INT64、BOOL | ND |
| threshold | 输入 | 标量阈值,用于与x中的元素进行比较。 | FLOAT、FLOAT16、DOUBLE、INT8、INT16、INT32、INT64、BOOL | ND |
| y | 输出 | 打包后的位域输出张量,最内维大小为输入最内维的1/8。 | UINT8 | ND |
约束说明
- threshold必须为标量(scalar)
- x必须至少为一维张量(vector或更高维度),不支持标量输入
- x的最内维(最后一个维度)大小必须能被8整除
- x和threshold的数据类型必须一致
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| 图模式接口 | test_geir_compare_and_bit_pack | 通过算子IR接口方式调用CompareAndBitpack算子。 |