文件最后提交记录最后更新时间
refactor: 删除废弃公共头文件,完成 math/random 算子头文件去重 Co-authored-by: tianqiguang<tianqiguang@huawei.com> # message auto-generated for no-merge-commit merge: !3000 merge math_tiling into master refactor: 删除废弃公共头文件,完成 math/random 算子头文件去重 Created-by: tianqiguang Commit-by: tianqiguang Merged-by: cann-robot Description: ## 描述 删除 4 个已废弃的公共头文件,并完成剩余 math 算子和全部 random 算子的重复头文件消除。本 PR 为此系列重构的收尾提交。 ### 改动原因 前三批 PR(#2951 conversion / #2969 math上 / #2980 math下)已完成所有算子到 base 仓头文件的迁移。原公共头文件已成为空壳转发或不再被引用,可安全删除: - tiling_base.h:已改为转发 tiling_base_class.h,可直接删除 - tiling_templates_registry.h:math 专用部分已拆分到 math_tiling_templates_registry.h - tiling_util.h / tiling_util.cpp:功能已迁移至 base 仓 tiling_base_util.h 此前几批遗漏了部分 math 算子(add_lora, atan2, histogram_v2, stft 等 10+ 个)以及 random 目录下全部算子。 ### 改动方法 1. 删除 4 个废弃文件并精简 common/CMakeLists.txt 2. 更新遗漏的 math 算子:#include + 命名空间修正 3. 更新 20+ 个 random 算子:同样的 #include + 命名空间修正 4. 更新示例(add_example, add_example_c_api)和 opgen 模板脚本 ## 关联的Issue - #1697 ## 测试 - 涉及的算子二级冒烟测试已通过 ## 文档更新 无文档变更 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码重构,删除废弃头文件并完成去重收尾 See merge request: cann/ops-math!30004 天前
add_example_aicpu修改 Co-authored-by: Ding_Jing<dingjing19@huawei.com> # message auto-generated for no-merge-commit merge: !2237 merge bugfix-0415 into master add_example_aicpu修改 Created-by: Ding_Jing Commit-by: Ding_Jing Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本PR的具体修改内容如下: 1、修复add_example_aicpu的ut 2、ut说明中添加aicpu的kernel执行 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> issue [#1122](https://gitcode.com/cann/ops-math/issues/1122) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ``` [2026-04-15 13:01:30] [ RUN ] TEST_AddExample_UT.INT32_VECTOR_ADD_SUCC [2026-04-15 13:01:30] [ OK ] TEST_AddExample_UT.INT32_VECTOR_ADD_SUCC (0 ms) [2026-04-15 13:01:30] [----------] 1 test from TEST_AddExample_UT (0 ms total) [2026-04-15 13:01:30] [2026-04-15 13:01:30] [----------] Global test environment tear-down [2026-04-15 13:01:30] [==========] 1 test from 1 test suite ran. (0 ms total) [2026-04-15 13:01:30] [ PASSED ] 1 test. [2026-04-15 13:01:30] [100%] Built target math_aicpu_op_kernel_ut ``` ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了docs/zh/install/compile.md ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!22371 个月前
refactor: 删除废弃公共头文件,完成 math/random 算子头文件去重 Co-authored-by: tianqiguang<tianqiguang@huawei.com> # message auto-generated for no-merge-commit merge: !3000 merge math_tiling into master refactor: 删除废弃公共头文件,完成 math/random 算子头文件去重 Created-by: tianqiguang Commit-by: tianqiguang Merged-by: cann-robot Description: ## 描述 删除 4 个已废弃的公共头文件,并完成剩余 math 算子和全部 random 算子的重复头文件消除。本 PR 为此系列重构的收尾提交。 ### 改动原因 前三批 PR(#2951 conversion / #2969 math上 / #2980 math下)已完成所有算子到 base 仓头文件的迁移。原公共头文件已成为空壳转发或不再被引用,可安全删除: - tiling_base.h:已改为转发 tiling_base_class.h,可直接删除 - tiling_templates_registry.h:math 专用部分已拆分到 math_tiling_templates_registry.h - tiling_util.h / tiling_util.cpp:功能已迁移至 base 仓 tiling_base_util.h 此前几批遗漏了部分 math 算子(add_lora, atan2, histogram_v2, stft 等 10+ 个)以及 random 目录下全部算子。 ### 改动方法 1. 删除 4 个废弃文件并精简 common/CMakeLists.txt 2. 更新遗漏的 math 算子:#include + 命名空间修正 3. 更新 20+ 个 random 算子:同样的 #include + 命名空间修正 4. 更新示例(add_example, add_example_c_api)和 opgen 模板脚本 ## 关联的Issue - #1697 ## 测试 - 涉及的算子二级冒烟测试已通过 ## 文档更新 无文档变更 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码重构,删除废弃头文件并完成去重收尾 See merge request: cann/ops-math!30004 天前
feat: migrate fast kernel launch example to ASC CMake Co-authored-by: zhangzijie<zhangzijie11@hisilicon.com> # message auto-generated for no-merge-commit merge: !2520 merge feature/fast-kernel-launch-asc into master feat: migrate fast kernel launch example to ASC CMake Created-by: zhangzijie Commit-by: zhangzijie Merged-by: cann-robot Description: ## 描述 将 examples/fast_kernel_launch_example 迁移到 CMake 原生 ASC 语言构建,并整理 Fast Kernel Launch 示例的算子构建组织方式: - 将 add/sqrt/gelu/layer_norm 算子实现从 .cpp 重命名为 .asc - 顶层 CMake 使用 find_package(ASC REQUIRED)project(... LANGUAGES C CXX ASC) 启用 ASC 语言 - 将示例算子目录从 ascend910b 收敛到编译器使用的 NPU_ARCH 命名,例如 dav-2201 - 将算子对象文件收集方式从全局 OBJECTS_LIST cache 变量改为 CMake object target + global property - 构建入口优先使用 Ninja,并在 README 中补充 NPU_ARCH 和新增算子的开发方式 ## Refactor 方案 ### 1. 构建入口改为 CMake 原生 ASC 语言 原方案通过普通 C/CXX 工程、手动指定 bisheng 编译器、给 .cpp 源文件追加 -xasc 的方式触发 ASC 编译。该方式把 ASC 编译细节散落在自定义宏和全局变量中,新增算子时需要理解较多隐藏约定。 本次重构改为在顶层 CMakeLists.txt 中先加载 cmake/ascend.cmake,再执行: ```cmake find_package(ASC REQUIRED) project(${PKG_NAME} VERSION 1.0.0 LANGUAGES C CXX ASC) ``` 这样 ASC 被声明为工程语言,.asc 源文件由 CMake/ASC 包正常识别,不再依赖 LANGUAGE CXX + -xasc 的绕行方式。cmake/ascend.cmake 只负责定位 Ascend Toolkit、bisheng 和默认 toolchain,ASC include/link 细节交给 find_package(ASC) 提供的能力处理。 ### 2. NPU 架构命名从芯片名切换到编译器参数 原目录使用 ascend910b,但实际传给编译器的是 --npu-arch=dav-2201。这会让目录名、CMake 参数和编译器参数不一致。 本次重构统一使用编译器 --npu-arch 对应的取值作为目录名和构建参数: - 默认 NPU_ARCH=dav-2201 - 支持 dav-2201dav-3510 - 支持通过环境变量 NPU_ARCH 或 CMake cache 覆盖 - 配置阶段校验不支持的架构并直接报错 因此示例目录迁移为: ```text csrc/<op_name>/<NPU_ARCH>/<op_name>.asc ``` 当前 PR 中 add/sqrt/gelu/layer_norm 均迁移到 dav-2201 目录。 ### 3. 算子发现从手写遍历改为按架构目录收敛 原 recursive_add_subdirectory() 会扫描 csrc 下每个算子的 ${NPU_ARCH}/CMakeLists.txt,但配合旧的 ascend910b 默认值时,目录名和真实编译参数存在错位。 新实现按如下规则发现算子: ```text csrc/*/${NPU_ARCH}/CMakeLists.txt ``` 并对结果排序后逐个 add_subdirectory(),保证构建输入稳定。如果当前架构下没有算子目录,会输出 warning,顶层仍可生成 dummy extension module,便于定位问题而不是在隐式变量处失败。 ### 4. 算子编译单元改为 object target 原 add_sources() 宏会: - 清理/重置部分全局 CMake 变量 - 递归查找 .cpp - 手动设置 LANGUAGE CXXCOMPILE_FLAGS - 将 $<TARGET_OBJECTS:...> 写入全局 cache 变量 OBJECTS_LIST 这类全局可变状态不利于维护,也容易受 CMake 配置顺序影响。 新方案提供: ```cmake ascend_ops_add_current_op(OP_TARGET) ``` 每个算子目录调用后会生成独立 object library,target 名包含算子名和 NPU_ARCH,例如 add_dav_2201_obj。函数内部负责: - 查找当前目录下的 .asc 源文件 - 为该 object target 添加通用编译选项 - 显式追加 --npu-arch=${NPU_ARCH} - 添加当前算子目录和公共 include 目录 - 将 object target 注册到全局 property ASCEND_OPS_OPERATOR_TARGETS 顶层 _C extension 再从 ASCEND_OPS_OPERATOR_TARGETS 中收集 $<TARGET_OBJECTS:${OPERATOR_TARGET}>,并在存在算子 target 时链接这些 target。这样算子自身需要的库可以留在各自目录,例如: ```cmake ascend_ops_add_current_op(OP_TARGET) target_link_libraries(${OP_TARGET} PUBLIC platform) target_link_libraries(${OP_TARGET} PUBLIC tiling_api) ``` ### 5. Python 构建入口保持轻量 setup.py 不再负责把 NPU_ARCH 翻译成 CMake 参数。架构选择统一留给 CMake 层处理,Python 侧只传入 Torch/Torch NPU 路径和构建类型。 同时 Python 构建入口优先选择 Ninja: - 环境中存在 ninja 时使用 -G Ninja - 否则回退到 Unix Makefiles requirements.txt 补充 ninja,使示例默认构建路径更稳定。 ### 6. 新增算子的维护方式 新增算子只需要按目标架构创建目录和 .asc 文件: ```text csrc/<op_name>/<NPU_ARCH>/CMakeLists.txt csrc/<op_name>/<NPU_ARCH>/<op_name>.asc ``` CMakeLists.txt 的最小内容为: ```cmake ascend_ops_add_current_op(OP_TARGET) ``` 如果算子需要额外库或编译选项,可继续对 ${OP_TARGET} 调用 target_link_libraries()target_compile_options() 等 target 级 CMake API,不需要修改顶层对象列表或全局变量。 ## 关联的Issue 无 ## 测试 测试结果: ```text 119 passed, 1 warning in 6.80s ``` ## 文档更新 更新 examples/fast_kernel_launch_example/README.md: - 补充默认 NPU_ARCH=dav-2201、可通过环境变量覆盖,以及当前支持 dav-2201/dav-3510 - 将新增算子开发说明从 .cpp + add_sources("--npu-arch=...") 更新为 .asc + ascend_ops_add_current_op(OP_TARGET) ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [x] 其他,请描述:构建重构 See merge request: cann/ops-math!25201 个月前
【描 述】 解决_add_example_aicpu eager模式下头文件找不到 Co-authored-by: j00427146<jialimin1@huawei.com> # message auto-generated for no-merge-commit merge: !2396 merge issue_1332 into master 【描 述】 解决_add_example_aicpu eager模式下头文件找不到 Created-by: jialimin1 Commit-by: j00427146 Merged-by: cann-robot Description: ## 描述 1、解add_example_aicpu eager模式下头文件找不到问题 2、修改aclnnLeftShift、aclnnLeftShifts、aclnnTriangularSolve确定性计算说明 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue Issue##1332 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 修复前: ![image.png](https://raw.gitcode.com/user-images/assets/7649531/5a6c7b8b-6850-46e5-9a5c-a8432396b480/image.png 'image.png') 修复后: ![image.png](https://raw.gitcode.com/user-images/assets/7649531/5e847575-51d8-4e10-908a-ef1c4c74a924/image.png 'image.png') <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!23961 个月前
feat: 新增 Add 算子 C API(asc_simd)风格示例工程 Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !2708 merge master into master feat: 新增 Add 算子 C API(asc_simd)风格示例工程 Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 新增 Add 算子的 C API(asc_simd)风格示例工程 add_example_c_api,展示使用 C API 方式开发 AI Core 算子的完整流程,区别于传统 C++ 类方式的 AscendC API。 ### 改动原因 现有示例仅包含 C++ 类方式(AscendC API)和 AI CPU 方式的算子开发样例,缺少 C API(asc_simd)风格的示例。本 PR 补充了该开发方式的端到端示例,方便开发者参考。 ### 改动方法 1. 新增 examples/add_example_c_api/ 目录,包含完整的算子工程结构: - op_kernel/:使用 C API(asc_simd)实现加法 kernel,核心接口包括 asc_init()asc_copy_gm2ub_sync()asc_add_sync()asc_copy_ub2gm_sync() - op_host/:Tiling 实现、算子定义(OpDef)、InferShape 实现 - op_graph/:图推理(InferShape/InferDataType)及 proto 定义 - examples/:aclnn 调用样例(test_aclnn_add_example_c_api.cpp) 2. 算子定义支持 ascend910b、ascend910_93、ascend950 硬件平台 3. 输入输出仅支持 FLOAT 数据类型,4 维 ND 格式 4. 更新 examples/README.md 添加新示例目录说明和样例表格条目 ## 关联的Issue - #1535 ## 测试 提供 aclnn 调用样例(test_aclnn_add_example_c_api.cpp),使用 32×4×4×4 的 FLOAT 张量进行端到端验证,计算 x1 + x2 = y 并打印结果。 ## 文档更新 - 新增 examples/add_example_c_api/README.md,说明产品支持情况、功能说明、参数说明、约束说明、调用方式和 Kernel 开发方式 - 更新 examples/README.md 添加 add_example_c_api 目录结构和样例表格 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!270820 天前
README.md

简介

说明:

  • 目前算子库中大部分算子运行在AI Core上,少部分算子运行在AI CPU上。默认情况下,项目中提到的算子指AI Core算子。
  • 关于AI Core和AI CPU的介绍请参见《Ascend C算子开发》中“概念原理和术语 > 硬件架构与数据处理原理”。

本项目提供了AI Core算子和AI CPU算子的开发和调用样例,请开发者根据实际情况参考对应实现。

目录说明

├── examples                       
│   ├── add_example                # AI Core算子名
│   │   ├── CMakeLists.txt         # 算子编译配置文件,保留原文件即可   
│   │   ├── examples               # 算子使用示例
│   │   ├── op_graph               # 算子构图相关目录
│   │   ├── op_host                # 算子信息库、Tiling、InferShape相关实现
│   │   └── op_kernel              # 算子kernel目录
│   ├── add_example_c_api          # AI Core C API算子名(使用C API/asc_simd开发kernel)
│   │   ├── CMakeLists.txt         # 算子编译配置文件,保留原文件即可   
│   │   ├── examples               # 算子使用示例
│   │   ├── op_graph               # 算子构图相关目录
│   │   ├── op_host                # 算子信息库、Tiling、InferShape相关实现
│   │   └── op_kernel              # 算子kernel目录(C API风格)
│   ├── add_example_aicpu          # AI CPU算子名
│   │   ├── CMakeLists.txt         # 算子编译配置文件,保留原文件即可   
│   │   ├── examples               # 算子使用示例
│   │   ├── op_graph               # 算子构图相关目录
│   │   ├── op_host                # 算子信息库、InferShape相关实现
│   │   └── op_kernel_aicpu        # 算子kernel目录
│   ├── CMakeLists.txt             # 算子编译配置文件,保留原文件即可
│   └── README.md                  # 算子说明文档

算子开发样例

样例目录 样例介绍 算子开发 算子调用
add_example 实现两个张量相加功能的算子。 算子端到端开发过程参见AI Core算子开发指南 调用参见README
add_example_c_api 实现两个张量相加功能的算子,kernel使用C API(asc_simd)开发方式。 算子端到端开发过程参见AI Core算子开发指南 调用参见README
add_example_aicpu 实现两个张量相加功能的算子。 算子端到端开发过程参见AI CPU算子开发指南 调用参见README
fast_kernel_launch_example 实现一种PyTorch场景下快速端到端开发算子的样例。 算子端到端开发过程参见PyTorch算子快速开发指南 调用参见README