Merged
增加算子工程目录说明 #73
sky_leilinAdd on Oct 15, 2025
增加算子工程目录说明 #73
Merged
Merged fromsky_leilin/ops-mathdevelop_code_v1intocann/ops-mathmaster
Total: 2 files changed+127-2
| @@ -11,7 +11,7 @@ ops-math是[CANN](https://hiascend.com/software/cann) (Compute Architecture fo | |||
| 11 | <img src="docs/figures/architecture.png" alt="架构图" width="750px" height="400px"> | 11 | <img src="docs/figures/architecture.png" alt="架构图" width="750px" height="400px"> |
| 12 | 12 | ||
| 13 | ## 🔍目录结构 | 13 | ## 🔍目录结构 |
| 14 | - | 14 | +关键目录如下,详细目录介绍参见[目录介绍](./docs/context/dir_structure.md#目录介绍)。 |
| 15 | ``` | 15 | ``` |
| 16 | ├── cmake # 项目工程编译目录 | 16 | ├── cmake # 项目工程编译目录 |
| 17 | ├── common # 项目公共头文件和公共源码 | 17 | ├── common # 项目公共头文件和公共源码 |
| @@ -25,7 +25,7 @@ ops-math是[CANN](https://hiascend.com/software/cann) (Compute Architecture fo | |||
| 25 | │ │ ├── examples # 算子使用示例 | 25 | │ │ ├── examples # 算子使用示例 |
| 26 | │ │ ├── op_graph # 算子构图相关目录 | 26 | │ │ ├── op_graph # 算子构图相关目录 |
| 27 | │ │ ├── op_host # 算子信息库、Tiling、InferShape相关实现目录 | 27 | │ │ ├── op_host # 算子信息库、Tiling、InferShape相关实现目录 |
| 28 | -│ │ │ └── op_api # 算子aclnn接口实现目录 | 28 | +│ │ │ └── op_api # 可选,算子aclnn接口实现目录,如未提供则表示此算子的aclnn接口会让工程自动生成 |
| 29 | │ │ ├── op_kernel # 算子kernel目录 | 29 | │ │ ├── op_kernel # 算子kernel目录 |
| 30 | │ │ └── README.md # 算子介绍文档 | 30 | │ │ └── README.md # 算子介绍文档 |
| 31 | │ ├── ... | 31 | │ ├── ... |
| @@ -0,0 +1,125 @@ | |||
| 1 | +# 项目目录 | ||
| 2 | + | ||
| 3 | +## 目录介绍 | ||
| 4 | + | ||
| 5 | +详细目录介绍说明如下: | ||
| 6 | +``` | ||
| 7 | +├── build.sh # 项目工程编译脚本 | ||
| 8 | +├── install_deps.sh # 安装依赖包脚本 | ||
| 9 | +├── cmake # 项目工程编译目录 | ||
| 10 | +├── CMakeLists.txt # ops-math工程cmakelist入口 | ||
| 11 | +├── classify_rule.yaml # 组件划分信息 | ||
| 12 | +├── common # 项目公共头文件和公共代码 | ||
| 13 | +│ ├── CMakeLists.txt | ||
| 14 | +│ ├── inc # 公共头文件目录 | ||
| 15 | +│ └── src # 公共代码目录 | ||
| 16 | +├── CONTRIBUTING.md # 贡献指南文档 | ||
| 17 | +├── conversion # conversion类算子 | ||
| 18 | +├── docs # 项目文档介绍目录 | ||
| 19 | +├── examples # 端到端算子开发和调用示例 | ||
| 20 | +│ ├── add_example # AI Core算子示例目录 | ||
| 21 | +│ │ ├── CMakeLists.txt # 算子编译配置文件 | ||
| 22 | +│ │ ├── examples # 算子使用示例目录 | ||
| 23 | +│ │ ├── op_graph # 算子构图相关目录 | ||
| 24 | +│ │ ├── op_host # 算子信息库、Tiling、InferShape相关实现目录 | ||
| 25 | +│ │ ├── op_kernel # 算子kernel目录 | ||
| 26 | +│ │ └── tests # 算子测试用例目录 | ||
| 27 | +│ ├── add_example_aicpu # AI CPU算子示例目录 | ||
| 28 | +│ │ ├── CMakeLists.txt # 算子编译配置文件 | ||
| 29 | +│ │ ├── examples # 算子使用示例目录 | ||
| 30 | +│ │ ├── op_graph # 算子构图相关目录 | ||
| 31 | +│ │ ├── op_host # 算子信息库、InferShape相关实现 | ||
| 32 | +│ │ ├── op_kernel_aicpu # 算子kernel目录 | ||
| 33 | +│ │ └── tests # 算子测试用例目录 | ||
| 34 | +│ ├── CMakeLists.txt | ||
| 35 | +│ ├── fast_kernel_launch_example # 轻量级,高性能的算子开发工程模板 | ||
| 36 | +│ │ ├── ascend_ops # 示例算子实现目录 | ||
| 37 | +│ │ ├── CMakeLists.txt # 算子编译配置文件 | ||
| 38 | +│ │ ├── README.md # 轻量级,高性能的算子开发工程说明资料 | ||
| 39 | +│ │ ├── requirements.txt | ||
| 40 | +│ │ └── setup.py # 构建脚本 | ||
| 41 | +│ └── README.md # 示例工程详细说明文档 | ||
| 42 | +├── math # math类算子 | ||
| 43 | +│ ├${op_name} # 算子工程目录,${op_name}表示实际的算子名(小写下划线形式) | ||
| 44 | +│ │ ├── CMakeLists.txt # 算子cmakelist入口 | ||
| 45 | +│ │ ├── README.md # 算子说明资料 | ||
| 46 | +│ │ ├── docs # 算子aclnn资料目录 | ||
| 47 | +│ │ │ └── aclnn${OpName}.md # 算子aclnn接口说明资料,${OpName}表示实际的算子(大驼峰形式) | ||
| 48 | +│ │ ├── examples # 算子接口调用示例目录 | ||
| 49 | +│ │ │ ├── test_aclnn_${op_name}.cpp # 算子aclnn调用示例 | ||
| 50 | +│ │ │ └── test_geir_${op_name}.cpp # 算子geir调用示例 | ||
| 51 | +│ │ ├── op_graph # 图融合相关实现 | ||
| 52 | +│ │ │ ├── CMakeLists.txt # op_graph侧cmakelist文件 | ||
| 53 | +│ │ │ ├── ${op_name}_graph_infer.cpp # InferDataType文件,实现算子数据类型推导 | ||
| 54 | +│ │ │ ├── ${op_name}_proto.h # 算子原型定义,用于图优化和融合阶段识别算子 | ||
| 55 | +│ │ │ └── fusion_pass # 算子融合规则目录 | ||
| 56 | +│ │ ├── op_host # Host侧实现 | ||
| 57 | +│ │ │ ├── CMakeLists.txt # Host侧cmakelist文件 | ||
| 58 | +│ │ │ ├── config # 可选,二进制配置文件,如果没有配置则工程会自动生成 | ||
| 59 | +│ │ │ │ ├── ${soc_version} # 算子在对应NPU上配置的二进制信息,${soc_version}表示NPU型号 | ||
| 60 | +│ │ │ │ │ ├── ${op_name}_binary.json # 算子二进制配置文件 | ||
| 61 | +│ │ │ │ │ └── ${op_name}_simplified_key.ini # 算子simplified_key配置信息 | ||
| 62 | +│ │ │ │ └── ... | ||
| 63 | +│ │ │ ├── ${op_name}_def.cpp # 算子信息库,定义算子基本信息,如名称、输入输出、数据类型等 | ||
| 64 | +│ │ │ ├── ${op_name}_infershape.cpp # 可选,InferShape实现,实现算子形状推导输出shape,如没配置则输出shape与输入shape一样 | ||
| 65 | +│ │ │ ├── ${op_name}_tiling_${sub_case}.cpp # 可选,针对某些子场景下的tiling优化,${sub_case}表示子场景,如:${op_name}_tiling_arch35是针对arch35架构的优化,如没有该类文件则表明该算子没有对应子场景的特定tiling策略 | ||
| 66 | +│ │ │ ├── ${op_name}_tiling_${sub_case}.h # 可选,${sub_case}场景下Tiling实现用的头文件 | ||
| 67 | +│ │ │ ├── ${op_name}_tiling.cpp # 可选,如不使用该文件表明对应场景下无tiling优化,Tiling实现,将张量划分为多个小块,区分数据类型进行并行计算 | ||
| 68 | +│ │ │ ├── ${op_name}_tiling.h # 可选,Tiling实现用的头文件 | ||
| 69 | +│ │ │ └── op_api # 可选,算子aclnn接口实现目录,如未提供则表示此算子的aclnn接口会让工程自动生成 | ||
| 70 | +│ │ │ ├── aclnn_${op_name}.cpp # 算子aclnn接口实现文件 | ||
| 71 | +│ │ │ ├── aclnn_${op_name}.h # 算子aclnn接口实现头文件 | ||
| 72 | +│ │ │ ├── ${op_name}.cpp # 算子l0接口实现文件 | ||
| 73 | +│ │ │ ├── ${op_name}.h # 算子l0接口实现头文件 | ||
| 74 | +│ │ │ └── CMakeLists.txt | ||
| 75 | +│ │ │── op_kernel # Device侧Kernel实现 | ||
| 76 | +│ │ │ ├── ${sub_case} # 可选,${sub_case}对应的子场景使用的目录,无相应的场景不需要配本目录 | ||
| 77 | +│ │ │ │ ├── ${op_name}_${model}.h # 算子kernel实现文件,${model}表示用户自定义文件名后缀,通常为tiling模板名 | ||
| 78 | +│ │ │ │ └── ... | ||
| 79 | +│ │ │ ├── ${op_name}_tiling_key.h # 可选,Tilingkey文件,定义Tiling策略的Key,标识不同的划分方式,如没配置则表明该算子无相应的tiling策略 | ||
| 80 | +│ │ │ ├── ${op_name}_tiling_data.h # 可选,Tilingdata文件,存储Tiling策略相关的配置数据,如块大小、并行度,如没配置则表明该算子无相应的tiling策略 | ||
| 81 | +│ │ │ ├── ${op_name}.cpp # Kernel入口文件,包含主函数和调度逻辑 | ||
| 82 | +│ │ │ └── ${op_name}.h # Kernel实现文件,定义Kernel头文件,包含函数声明、结构定义、逻辑实现 | ||
| 83 | +│ │ └── tests # 算子测试用例 | ||
| 84 | +│ │ ├── CMakeLists.txt | ||
| 85 | +│ │ └── ut # 可选,ut测试用例目录,根据实际情况开发相应的用例 | ||
| 86 | +│ │ ├── CMakeLists.txt # ut用例cmakelist文件 | ||
| 87 | +│ │ ├── graph_plugin # grap_plugin测试用例目录 | ||
| 88 | +│ │ │ ├── CMakeLists.txt | ||
| 89 | +│ │ │ └── fusion_pass # 融合规则测试用例目录 | ||
| 90 | +│ │ │ └── CMakeLists.txt | ||
| 91 | +│ │ ├── op_host # op_host测试用例目录 | ||
| 92 | +│ │ │ ├── CMakeLists.txt | ||
| 93 | +│ │ │ ├── ${op_name}_regbase_tiling.h | ||
| 94 | +│ │ │ ├── op_api # op_api测试用例目录 | ||
| 95 | +│ │ │ │ ├── CMakeLists.txt | ||
| 96 | +│ │ │ │ └── test_aclnn_${op_name}.cpp # 算子op_api测试用例文件 | ||
| 97 | +│ │ │ ├── test_${op_name}_${sub_case}.cpp # ${sub_case}场景下的op_host测试用例 | ||
| 98 | +│ │ │ ├── test_${op_name}.cpp # op_host测试用例 | ||
| 99 | +│ │ │ ├── test_${op_name}_infershape.cpp # 算子infershape测试用例文件 | ||
| 100 | +│ │ │ └── test_${op_name}_tiling.cpp # 算子tiling测试用例文件 | ||
| 101 | +│ │ └── op_kernel # op_kernel测试用例目录 | ||
| 102 | +│ │ ├── CMakeLists.txt | ||
| 103 | +│ │ │── test_${op_name}.cpp # 算子kernel测试用例 | ||
| 104 | +│ │ └── ${op_name}_data # 可选,op_kernel测试用例中使用的数据生成及对比脚本,如没配置则需要在对应的用例中实现相应的功能 | ||
| 105 | +│ │ ├── compare_data.py # 数据比较脚本 | ||
| 106 | +│ │ └── gen_data.py # 数据生成脚本 | ||
| 107 | +│ └── ... | ||
| 108 | +├── OAT.xml # 配置脚本,代码仓工具使用,用于检查license是否规范 | ||
| 109 | +├── random # random类算子 | ||
| 110 | +├── README.md # 项目工程资料文档 | ||
| 111 | +├── LICENSE # 开源声明信息 | ||
| 112 | +├── requirements.txt # 项目需要的第三方依赖包 | ||
| 113 | +├── scripts # 脚本目录,包含自定义算子、kernel构建相关配置文件 | ||
| 114 | +├── SECURITY.md # 项目安全声明文档 | ||
| 115 | +├── tests # 测试工程目录 | ||
| 116 | +│ ├── requirements.txt # 测试用例依赖的第三方组件 | ||
| 117 | +│ └── ut # UT用例工程 | ||
| 118 | +│ ├── CMakeLists.txt # ut工程的cmakelist脚本 | ||
| 119 | +│ ├── common # ut工程中使用的公共代码 | ||
| 120 | +│ ├── op_api # op_api测试工程 | ||
| 121 | +│ ├── op_host # op_host测试工程 | ||
| 122 | +│ └── op_kernel # op_kernel测试工程 | ||
| 123 | +└── version.info # 版本信息 | ||
| 124 | +``` | ||
| 125 | + | ||