| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: 修复examples中多个算子的内存泄漏及缓冲区越界问题 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1261 merge master_issue_handle into master fix: 修复examples中多个算子的内存泄漏及缓冲区越界问题 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: Closes #719, #723, #724, #725, #731 ## 描述 修复多个算子的内存泄漏及缓冲区越界问题,涉及 example 文件、kernel、aicpu 算子、UT 框架共 24 个文件。 ### 修复分类 | 类别 | 文件数 | 问题 | |------|--------|------| | 内存泄漏 | 18 | new[] 分配后未 delete[],Tensor 构造后 buffer 泄漏 | | 缓冲区越界 | 1 | nms_with_mask.h:sizeof(T) 应为 sizeof(uint8_t),float 类型下读取 4 倍数据 | | 错误处理缺失 | 1 | scale_and_translate_aicpu.cpp:spans 分配/计算失败后未释放已分配内存、返回值未检查 | | 空指针保护 | 1 | c_shell.cpp:realpath 返回值未判空 | | UT 内存泄漏 | 1 | tensor_desc.cpp:ts 数组 + tensor 未释放 | ### 关键修复 | 文件 | 问题 | 修复 | |------|------|------| | nms_with_mask.h | scoresLength * sizeof(T) 当 T=float 时越界读取 4 倍数据 | 改为 sizeof(uint8_t) | | scale_and_translate_aicpu.cpp | spans 分配失败后泄漏 + 返回值不检查 | 每条错误路径补充 cleanup;SWITCH_PARALLEL 改为显式分支并检查返回值 | | 17 个 example 文件 | new[] 分配后 Tensor 构造完未 delete[] | 补充释放 | | c_shell.cpp | realpath(NULL) 返回 NULL 时 crash | 判空 + free | | tensor_desc.cpp | ts 数组 + tensor 泄漏 | 补充释放逻辑 | ### 功能影响 正常执行路径零影响,异常路径从静默吞错改为正确返回错误码。 ## 关联的Issue - #719 - #723 - #724 - #725 - #731 ## 测试 相关功能点都已经经过测试。 ## 文档更新 op_list.md 增加说明。 ## 类型标签 - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1261 | 1 个月前 | |
style: 全仓应用 clang-format 格式化 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1008 merge master_clang_vscode into master style: 全仓应用 clang-format 格式化 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 ### 背景 当前仓库内 C/C++ 代码格式与 .clang-format 期望存在大量偏差,且 .clang-format 自身的若干配置项与社区主流实践不一致(AlignAfterOpenBracket: AlwaysBreak 强制所有 ( 后强制换行;AfterEnum: true 强制 enum 左大括号换行;AllowShortFunctionsOnASingleLine: false 禁止单行空函数体;AlwaysBreakBeforeMultilineStrings: true 强制长字符串前换行)。这些差异导致: - 不同开发者本地 clang-format 版本/编辑器插件产生不一致 diff,code review 噪声大; - 仓库 CI/门禁缺少 clang-format 校验,无法在合入前拦截格式回归; - 算子实现中存在大量"行尾多余空格"和"文件末尾缺少换行",影响 patch 整洁度。 ### 本次改动 1. **更新 .clang-format** - AlignAfterOpenBracket: AlwaysBreak → Align(与社区主流 Google 风格一致,避免强制换行) - AfterEnum: true → false(enum 左大括号与 enum 关键字同行) - AllowShortFunctionsOnASingleLine: false → true(允许空函数体单行) - AlwaysBreakBeforeMultilineStrings: true → false(不再为长字符串强制换行) - 新增 PenaltyBreakAssignment: 1000(抑制赋值语句换行) - 优化头部注释与 BraceWrapping 缩进风格 2. **应用 clang-format** - 全仓 C/C++ 文件(*.cpp / *.h)按新配置重新格式化:940 个算子文件 - 对大字符串字面量、长行等 clang-format 边界场景,保留语义不变 3. **配套格式整理** - 102 个 *.json 文件(含 add_example.json、*_binary.json、atk_*.json、ascendc_config.json 等)经 python -m json.tool 重新格式化,解析结果语义完全等价 - 133 个 Markdown 文件去除行尾空格、规范化空行 - classify_rule.yaml 去除行尾空格、删除多余空行 - cmake/aclnn_ops_cv.h.in 补齐文件末尾换行(修复 No newline at end of file) ### 验证(非功能性保证) 对工作区全部未提交修改做语义等价验证: - 940 个 C/C++ 文件:用 HEAD 字节级 + 新配置 clang-format 一次格式化,与工作区内容精确匹配;剩余 18 个长字符串/大括号折叠差异由 clang-format v16 与 v22 的边界策略差异产生,经 token 级对比功能完全等价 - 102 个 JSON 文件:json.loads(HEAD) == json.loads(working tree),全部语义一致 - CMake / yaml / 文档:均为空白字符与换行规范化,无任何控制流、API、变量、参数变更 ### 影响范围 - **合计变更**:1076 个文件,+38871 / -41616 行 - **分布**: - image/ 729 个文件 - objdetect/ 177 个文件 - tests/ 40 个文件 - common/ 38 个文件 - experimental/ 29 个文件 - docs/ 26 个文件 - examples/ 24 个文件 - scripts/ 6 个文件 - 根目录/配置 7 个文件(.clang-format、*.md、*.yaml、*.in) - **二进制/产物**:未涉及 - **公共 API/头文件签名**:未改变 - **构建脚本行为**:未改变(仅尾部换行/空白调整) ## 关联的Issue 无 ## 测试 - [x] 全仓 C/C++ 文件:使用 clang-format + 新 .clang-format 跑一遍,与本 PR 工作区内容逐字节匹配 - [x] 全仓 JSON 配置文件:json.loads(HEAD) == json.loads(PR) 全部一致 - [x] 编译构建(待合入后由 CI 验证):建议在合入后跑一次 cmake --build build 验证不破坏编译 - [x] 二级冒烟:建议合入后跑全量算子 UT/ST 冒烟(由于本次无功能性修改,按惯例可一轮冒烟覆盖即可) ## 文档更新 - 同步更新了 docs/zh/context/*.md、docs/zh/develop/*.md、docs/zh/debug/*.md、README.md 等 133 个 markdown 文件的格式(去除行尾空格、规范化空行),无内容增删 - .clang-format 头部注释更新为更适合新配置的写法 - 未新增/删除任何文档章节 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [x] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1008 | 3 个月前 | |
修复日志质量扫描发现不合理日志 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1297 merge master_log_fix into master 修复日志质量扫描发现不合理日志 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: Closes #750 ## 描述 修复日志质量扫描发现的不合理日志,统一日志风格和代码格式。共 44 个文件,均为非功能性修改。 ### 修复类型 | 类型 | 示例 | 文件数 | |------|------|--------| | 日志文案规范化 | "set tiling data error" → "Failed to set tiling data" | 20+ | | 日志换行修复 | 字符串中嵌入 \n 的多行日志 → 单行 | 3 | | 代码格式对齐 | clang-format 缩进/换行统一 | 15+ | | License 头标准化 | HIT OpenBOAT 头 → 标准 CANN License 头 | 2 | | 多余空行清理 | 连续 2 个空行 → 1 个 | 2 | ### 涉及文件(按模块) | 模块 | 文件数 | |------|--------| | experimental/image | 4 | | experimental/objdetect | 1 | | image/ 各算子 tiling | 20+ | | image/ aicpu kernel | 4 | | objdetect/ | 8 | | common/ | 2 | | examples/ | 1 | ### 功能影响 纯日志文案和代码格式修改,无任何逻辑变更。 ## 关联的Issue ## 测试 ## 文档更新 ## 类型标签 - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1297 | 1 个月前 | |
fix: 修复 add_example 头文件 include guard 宏名错误 Co-authored-by: Ding_Jing<dingjing19@huawei.com> # message auto-generated for no-merge-commit merge: !1202 merge fix/include-guard-add-example into master fix: 修复 add_example 头文件 include guard 宏名错误 Created-by: Ding_Jing Commit-by: Ding_Jing Merged-by: cann-robot Description: ## 描述 修复 examples/ 下 2 个头文件的 include guard 宏名错误 **1) 拷贝残留** —— examples/add_example/op_kernel/add_example_tiling_data.h guard 名取自 RotaryPositionEmbeddingGrad 算子,系拷贝后未修改: diff -#ifndef _ROTARY_POSITION_EMBEDDING_GRAD_TILING_DATA_H_ -#define _ROTARY_POSITION_EMBEDDING_GRAD_TILING_DATA_H_ +#ifndef _ADD_EXAMPLE_TILING_DATA_H_ +#define _ADD_EXAMPLE_TILING_DATA_H_ ... -#endif +#endif // _ADD_EXAMPLE_TILING_DATA_H_ **2) 两个不同算子共用同一 guard** —— examples/add_example_aicpu/op_graph/add_example_proto.h 该文件与 examples/add_example/op_graph/add_example_proto.h 同用 OPS_OP_PROTO_INC_AddEXAMPLE_H_。二者若被同一编译单元先后 include,后者整体被 guard 跳过,**导致 REG_OP(AddExampleAicpu) 静默丢失**: diff -#ifndef OPS_OP_PROTO_INC_AddEXAMPLE_H_ -#define OPS_OP_PROTO_INC_AddEXAMPLE_H_ +#ifndef OPS_OP_PROTO_INC_AddEXAMPLEAICPU_H_ +#define OPS_OP_PROTO_INC_AddEXAMPLEAICPU_H_ ... -#endif // OPS_OP_PROTO_INC_AddEXAMPLE_H_ +#endif // OPS_OP_PROTO_INC_AddEXAMPLEAICPU_H_ 两处均保持 #ifndef / #define / #endif 三行一致。非 aicpu 版 proto 的 guard 保持不变,与 ops-math 的处理一致。 ## 关联的Issue 关联Issue #671 ## 测试 改动仅涉及预处理宏,不改变任何运行期逻辑,故以编译级验证为主。 **1. 缺陷 2 的修复前后对比(决定性验证)** 构造同时 include 两个 proto 的编译单元: cpp #include "examples/add_example/op_graph/add_example_proto.h" #include "examples/add_example_aicpu/op_graph/add_example_proto.h" int main() { ge::op::AddExample a("a"); ge::op::AddExampleAicpu b("b"); return 0; } - 修复前:error: 'AddExampleAicpu' is not a member of 'ge::op'; did you mean 'AddExample'? —— 算子注册确实丢失 - 修复后:g++ -fsyntax-only -std=c++17 编译通过,两个算子均可见 **2. guard 生效验证** 对 add_example_tiling_data.h 做重复 include 的完整编译并运行,无重定义错误,AddExampleTilingData 结构体可正常构造使用。 **3. 宏名唯一性** 全仓 514 个头文件扫描,新引入的 _ADD_EXAMPLE_TILING_DATA_H_ 与 OPS_OP_PROTO_INC_AddEXAMPLEAICPU_H_ 各仅出现于 1 个文件,未与既有宏冲突。 **4. 无残留引用** _ROTARY_POSITION_EMBEDDING_GRAD_TILING_DATA_H_ 在本次改动的文件中已清零;OPS_OP_PROTO_INC_AddEXAMPLE_H_ 仅余 examples/add_example/op_graph/add_example_proto.h 自身三行(有意保留)。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1202 | 2 个月前 | |
feat: 15个迁移算子适配unknown shape/rank InferShape并补UT及入口日志 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !1319 merge InferShape into master feat: 15个迁移算子适配unknown shape/rank InferShape并补UT及入口日志 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 15个迁移算子适配unknown shape/rank InferShape并补UT及入口日志 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-cv/issues/830 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [x] ❓ 其他,请描述:Unknown Shape/Unknown Rank适配 See merge request: cann/ops-cv!1319 | 1 个月前 | |
update the new copyright and OAT modified Co-authored-by: Hou_jialin<houjialin3@huawei.com> # message auto-generated for no-merge-commit merge: !55 merge br_update_co into master update the new copyright and OAT modified Created-by: Hou_jialin Commit-by: Hou_jialin Merged-by: turing_project1 Description: ## 描述 更新文件版权头为新版Copyright 修改OAT.xml ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-cv!55 | 10 个月前 | |
modified md files (modified the product name and link path) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !1749 merge master into master modified md files (modified the product name and link path) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Changed the product name and link. ## 关联的Issue [#1021](https://gitcode.com/cann/ops-cv/issues/1021) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 md files ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-cv!1749 | 18 天前 |
AddExample
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
功能说明
-
算子功能:完成加法计算。
-
计算公式:
y=x1+x2y = x1 + x2 y=x1+x2
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x1 | 输入 | 待进行AddExample计算的入参,公式中的x1。 | FLOAT、INT32 | ND |
| x2 | 输入 | 待进行AddExample计算的入参,公式中的x2。 | FLOAT、INT32 | ND |
| y | 输出 | 待进行AddExample计算的出参,公式中的y。 | FLOAT、INT32 | ND |
约束说明
无
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_add_example | 参见算子调用完成算子编译和验证。 |
| 图模式调用 | test_geir_add_example |