贡献指南
感谢参与 elec-ops-inspection 共建。为了让仓库在持续接收算子、示例和文档时保持清晰,新增内容请先遵循本指南约定的目录边界。
仓库目录约定
根目录仅放置仓库级文件,例如 README.md、LICENSE、OAT.xml、贡献规范和全局配置。新增算子、示例、数据说明和工程辅助文件不应直接暴露在根目录。
推荐目录如下:
.
├── operators/ # 算子实现统一入口
│ └── <operator_name>/ # 单个算子目录,使用小写字母、数字和下划线命名
├── examples/ # 跨算子的完整场景示例或端到端样例
├── docs/ # 仓库级设计、流程和背景文档
├── tools/ # 仓库级脚本和辅助工具
└── tests/ # 仓库级测试、冒烟脚本或验证入口
当前已有的根目录算子保留历史路径,后续新增算子请统一放入 operators/<operator_name>/。如果需要迁移历史算子,建议单独提交迁移 PR,避免与功能变更混在一起。
算子目录规范
每个算子应独立放在 operators/<operator_name>/ 下,目录内根据实际内容保留必要子目录。建议结构如下:
operators/<operator_name>/
├── README.md # 算子说明、适用场景、构建运行方式
├── op_host/ # host 侧注册、tiling 和 shape 推导代码
├── op_kernel/ # device 侧 kernel 实现
├── examples/ # 该算子的最小运行样例
├── tests/ # 该算子的验证脚本或测试数据说明
├── docs/ # 该算子的补充文档
└── scripts/ # 该算子的构建、安装或转换脚本
如果某个算子暂时没有对应内容,可以省略相关子目录。不要为每个小文件在根目录创建独立文件夹,也不要把多个算子的 host/kernel/example 混放在同一目录中。
新增算子提交检查
提交新增算子 PR 前,请确认:
- 算子位于
operators/<operator_name>/,命名可读且稳定。 - 算子
README.md说明了功能、输入输出、支持芯片或 CANN 版本、构建方式和最小运行命令。 - 示例、测试、脚本只放在该算子目录内;只有跨算子的公共内容才放到仓库级
examples/、tests/或tools/。 - 生成文件、构建产物、缓存文件不随 PR 提交。
- 如果新增目录约定之外的顶层目录,请在 PR 描述中说明原因。
PR 说明建议
PR 描述建议包含:
- 变更目的和适用场景。
- 新增或调整的目录。
- 已执行的构建、测试或文档检查命令。
- 未覆盖的风险或需要维护者确认的问题。