贡献指南

感谢参与 elec-ops-inspection 共建。为了让仓库在持续接收算子、示例和文档时保持清晰,新增内容请先遵循本指南约定的目录边界。

仓库目录约定

根目录仅放置仓库级文件,例如 README.mdLICENSEOAT.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 描述建议包含:

  • 变更目的和适用场景。
  • 新增或调整的目录。
  • 已执行的构建、测试或文档检查命令。
  • 未覆盖的风险或需要维护者确认的问题。