CANN算子开发工程初始化 Step 1: 工程初始化【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills定位Agent 拿到算子需求后第一件事做的事——搭建工程目录、拉取依赖、配置构建。§1 工程目录结构Blaze matmul 类算子工程采用以下标准目录结构your_op/ ├── test_your_op.cpp # Launcherhost 端入口tiling 内存管理 kernel 启动 ├── CMakeLists.txt # 构建配置 ├── op_kernel/ # Kernel 层device 端 │ ├── your_op_kernel.h # Kernel 模板函数组装类型链 调用组件 │ ├── your_op_kernel.cpp # Wrapperextern C 包装供 launcher 调用 │ └── include/ │ ├── blaze/ # [拉取] Blaze 库从 ops-tensor 仓 │ ├── tensor_api/ # [拉取] tensor_api从 ops-tensor 仓 │ └── blaze_custom/ # [可选] Grouped/Fusion/自定义扩展场景才拷贝MX CV 需 bridge Kernel/Epilogue └── op_tiling/ # Tiling 层host 端 ├── your_op_tiling_data.h # TilingData POD 结构体host-device 数据交换 └── your_op_tiling.h # Tiling 引擎包含常量 / helper / 平台查询目录职责说明顶层Launcher 构建test_your_op.cpp是 host 端入口CMakeLists.txt配置编译op_kernel/Kernel 层kernel 模板函数 Blaze 库依赖 自定义扩展op_kernel/include/blaze/Blaze 库从 ops-tensor 仓拉取提供 BlockMmad/BlockScheduler/Kernel 组件op_kernel/include/tensor_api/tensor_api从 ops-tensor 仓拉取Blaze 的底层依赖op_kernel/include/blaze_custom/自定义扩展仅 Grouped MatMul、CV 融合或标准 Blaze 组件无法满足需求时使用assets/op_tiling/Tiling 层TilingData 结构体 Tiling 引擎§2 拉取 blaze 库ops-tensor 仓由 plugin init.sh 自动克隆到plugin-root/ops-tensor/。手动开发时执行cp -r ops-tensor/include/blaze op_kernel/include/ cp -r ops-tensor/include/tensor_api op_kernel/include/编译时需将以下路径同时加入 include pathop_kernel/include/tensor_api/includeop_kernel/include/tensor_apiop_kernel/include/blaze§3 可选拷贝 blaze_custom 扩展模块普通 MatMul 单算子和纯 MX 量化 MatMul 默认不拷贝 blaze_custom仅使用op_kernel/include/blaze/与op_kernel/include/tensor_api/。当使用 Grouped MatMul、CV 融合或自定义 Block/Scheduler/Epilogue 扩展时才从 skill 拷贝自定义模块cp -r skill-path/blaze_custom op_kernel/include/blaze_custom 包含 5 个子目录kernel/4 个文件MatmulKernel、MatmulKernelFused、GroupMatmulKernel、MatmulKernelMxFusedblock/BlockMmad SWAT 主模板 Schedulerpolicy/1 个文件DispatchPolicy 定义epilogue/3 个文件RegBase/MemBase Epilogue CV 同步常量utils/6 个文件布局工具、常量、通用工具按需裁剪仅拷贝当前场景所需的模块。模块能力详见references/modules/blaze-custom/目录。MX CV 依赖规则MXFP8/MXFP4 MatMul Vector Epilogue 是受控组合态需要同时具备blaze library 的 MXBlockMmad/BlockSchedulerQuantBatchMatmulV3头文件blaze_custom 的kernel/matmul_kernel_mx_fused.h、epilogue/cv_sync_constants.h和自定义 Epilogueassets/op_tiling/mx/下的QuantMatmulTilingData与QuantMatmulTilingSwat。混用规则默认禁止 blaze_custom 模块和 blaze 库模块在同一 kernel 入口函数中任意混用。普通 MatMul 单算子和纯 MX 量化 MatMul 均使用 blaze library 全套组件普通 CV 和 Grouped CV 使用 blaze_custom唯一受控例外是Kernel::MxMatmulKernelFused桥接 blaze library MX Block/Scheduler 与自定义 Epilogue。详见references/development/step2-kernel-design.md§2。§4 CMake 骨架cmake_minimum_required(VERSION 3.16) project(my_matmul LANGUAGES ASC CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(MATMUL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/op_kernel ${CMAKE_CURRENT_SOURCE_DIR}/op_kernel/include ${CMAKE_CURRENT_SOURCE_DIR}/op_kernel/include/blaze ${CMAKE_CURRENT_SOURCE_DIR}/op_kernel/include/tensor_api ${CMAKE_CURRENT_SOURCE_DIR}/op_kernel/include/tensor_api/include ${CMAKE_CURRENT_SOURCE_DIR}/op_tiling ${CMAKE_CURRENT_SOURCE_DIR}/common ) set(ASCEND_INCLUDE_DIRS ${ASCEND_DIR}/include ${ASCEND_DIR}/asc ${ASCEND_DIR}/asc/include ${ASCEND_DIR}/compiler/asc/include ${ASCEND_DIR}/compiler/tikcpp/tikcfw ${ASCEND_DIR}/compiler/tikcpp/tikcfw/impl ${ASCEND_DIR}/compiler/tikcpp/tikcfw/interface ${ASCEND_DIR}/compiler/tikcpp/include ${ASCEND_DIR}/compiler/ascendc/include/basic_api/impl ${ASCEND_DIR}/compiler/ascendc/include/basic_api/interface ${ASCEND_DIR}/compiler/ascendc/impl/aicore/basic_api ) add_executable(${PROJECT_NAME} test_${PROJECT_NAME}.cpp) target_include_directories(${PROJECT_NAME} PRIVATE ${MATMUL_INCLUDE_DIRS}) target_include_directories(${PROJECT_NAME} PRIVATE ${ASCEND_INCLUDE_DIRS}) target_compile_options(${PROJECT_NAME} PRIVATE $$COMPILE_LANGUAGE:ASC:--npu-archdav-3510 $$COMPILE_LANGUAGE:ASC:-w $$COMPILE_LANGUAGE:ASC:-O3 ) target_link_libraries(${PROJECT_NAME} PRIVATE m dl platform tiling_api register)关键点语言设置为ASC非CXX这是 Ascend C 编译器的要求--npu-archdav-3510指定目标架构为 Ascend 950C17 标准是必须的ASCEND_INCLUDE_DIRS建议从最小可编译集合起步避免默认复制大而全的 SDK 头路径普通 MatMul 单算子和 MX 量化 MatMul 的 include path 必须包含op_kernel/include/blaze与 tensor_api 两级路径基础 MatMul 场景下SDK include 应保持最小可编译集合避免引入无关头路径基础 MatMul 的 tiling 资产建议使用带blaze_或basic_前缀的文件名避免与 SDKmatmul_tiling*.h同名冲突仅 Grouped/Fusion/自定义扩展场景需要额外加入op_kernel/include/blaze_customMX CV 还必须保留op_kernel/include/blaze和 tensor_api 路径因为 Block/Scheduler 来自 blaze library下一步→references/development/step2-kernel-design.md定义 Kernel 入口函数可选参考→references/fundamentals/blaze-framework-overview.md如需理解 NPU 执行模型和 Blaze 架构【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考