| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[CANNBot] add_mat_mat_elements、asin_grad、asinh_grad、eltwise和atan_grad算子适配Ascend950 AscendC实现 Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !2940 merge dev0525 into master [CANNBot] add_mat_mat_elements、asin_grad、asinh_grad、eltwise和atan_grad算子适配Ascend950 AscendC实现 Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> [CANNBot] add_mat_mat_elements、asin_grad、asinh_grad、eltwise和atan_grad算子适配Ascend950 AscendC实现 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1656 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!2940 | 4 个月前 | |
[CANNBOT]: Eltwise 算子共性问题修改 Co-authored-by: ZJYzjy-shine<1275333808@qq.com> # message auto-generated for no-merge-commit merge: !4776 merge master into master [CANNBOT]: Eltwise 算子共性问题修改 Created-by: ZJYzjy-shine Commit-by: ZJYzjy-shine Merged-by: cann-robot Description: ## 描述 Eltwise 算子共性问题修改 ### 修改文件清单 | 文件 | 缺陷 | 改动内容 | |------|------|---------| | op_host/eltwise_def.cpp | 缺陷1 | 添加 this->Attr("N").AttrType(REQUIRED).Int(),使 autogen proto.h 包含 REQUIRED_ATTR(N, Int) | | op_graph/eltwise_graph_infer.cpp | 缺陷2 | 新增 InferDataType 实现(输出 dtype = 第一个输入 dtype) | | op_host/arch35/eltwise_tiling_arch35.cpp | 缺陷3+7 | GetModeAttr/FillCoeff 改用 GetAttrNum() 判断 attr 布局(3 attrs=[N,mode,coeff] / 2 attrs=[mode,coeff]),替代不可靠的 try-both-index;bytesPerElem = 4 * typeSize(不升精度);移除 ComputeUbFactor 的 unused parameter | | op_kernel/arch35/eltwise.h | 缺陷4 | 去掉 Cast 升精度分支,BF16 用 ReinterpretCast<uint16_t> + Duplicate(uint16_t) 处理零值和 coeff | | op_kernel/arch35/eltwise_tiling_key.h | 缺陷5 | 去掉 ASCENDC_TPL_DATATYPE_DECL,只保留 ASCENDC_TPL_UINT_DECL(MODE) | | op_kernel/eltwise.cpp | 缺陷6 | 模板从 <typename D_T, int MODE> 改为 <int MODE> + DTYPE_X 宏 | ### 各缺陷详情 **缺陷 1:def.cpp 缺 N 属性 → autogen proto.h 丢失 REQUIRED_ATTR(N, Int)** def.cpp 未声明 N 属性,编译系统生成 proto.h 时丢弃 N,导致 set_attr_N() 编译报错,每次安装需手动 sed patch。 **缺陷 2:缺少 InferDataType 实现** op_graph/ 下无 eltwise_graph_infer.cpp,InferDataType 未注册,GE 图输出 dtype 推导缺失。 **缺陷 3:tiling 属性 index 偏移(try-both-index 误判)** proto.h 中 N 在 attr index 0,tiling 用固定 index 0 读 mode 实际读到 N(输入个数),表现为 invalid mode 3。初版修复用 try-both-index + inputNum 消歧,但 GetAttrPointer<int64_t> 对 listFloat 类型的 coeff 属性返回不确定值,导致 mode=0(PRODUCT) 和 mode=2(MAX) 的多输入用例被误判为 mode=1(SUM)。 **缺陷 7:try-both-index 误判(缺陷 3 的回归修复)** 用 GetAttrNum() 判断 attr 列表是否包含 N 属性:3 个属性 → [N, mode, coeff],2 个属性 → [mode, coeff]。根据属性数量确定 mode 和 coeff 的正确 index,彻底消除类型不安全读取。 **缺陷 4:kernel 升精度导致精度不一致** FP16/BF16 输入 Cast 到 FP32 计算再 Cast 回,与 golden 原 dtype 链式计算策略不一致,5 条用例 FAIL。 **缺陷 5:tiling_key 冗余编码 dtype** DATATYPE_DECL 与 def 的 DataType 声明重复编码 dtype。 **缺陷 6:kernel 模板冗余 dtype 参数** <typename D_T, int MODE> 与 def 驱动 dtype 模式不一致,改为 <int MODE> + DTYPE_X 宏。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2627 ## 测试 1. **两方测试(211 条 GEIR 用例)**:使用 TTK GEIR 模式 const + dynamic 双路全量验证,正向用例 203 × 2 = 406 结果全部 PASS,负向异常用例 8 × 2 = 16 结果预期 FAIL/SKIP 2. **三方测试(100 条 GEIR 用例)**:使用三方 golden plugin 全量验证,98 PASS / 0 FAIL / 2 SKIP(超大 shape 10000001 编译失败,属旧 TBE 实现的环境问题,非算子侧缺陷) 3. 确定性验证:10 条用例双跑(同 seed=42)bit-exact 比对通过 ## 文档更新 无。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4776 | 1 个月前 | |
[CANNBOT]: Eltwise 算子共性问题修改 Co-authored-by: ZJYzjy-shine<1275333808@qq.com> # message auto-generated for no-merge-commit merge: !4776 merge master into master [CANNBOT]: Eltwise 算子共性问题修改 Created-by: ZJYzjy-shine Commit-by: ZJYzjy-shine Merged-by: cann-robot Description: ## 描述 Eltwise 算子共性问题修改 ### 修改文件清单 | 文件 | 缺陷 | 改动内容 | |------|------|---------| | op_host/eltwise_def.cpp | 缺陷1 | 添加 this->Attr("N").AttrType(REQUIRED).Int(),使 autogen proto.h 包含 REQUIRED_ATTR(N, Int) | | op_graph/eltwise_graph_infer.cpp | 缺陷2 | 新增 InferDataType 实现(输出 dtype = 第一个输入 dtype) | | op_host/arch35/eltwise_tiling_arch35.cpp | 缺陷3+7 | GetModeAttr/FillCoeff 改用 GetAttrNum() 判断 attr 布局(3 attrs=[N,mode,coeff] / 2 attrs=[mode,coeff]),替代不可靠的 try-both-index;bytesPerElem = 4 * typeSize(不升精度);移除 ComputeUbFactor 的 unused parameter | | op_kernel/arch35/eltwise.h | 缺陷4 | 去掉 Cast 升精度分支,BF16 用 ReinterpretCast<uint16_t> + Duplicate(uint16_t) 处理零值和 coeff | | op_kernel/arch35/eltwise_tiling_key.h | 缺陷5 | 去掉 ASCENDC_TPL_DATATYPE_DECL,只保留 ASCENDC_TPL_UINT_DECL(MODE) | | op_kernel/eltwise.cpp | 缺陷6 | 模板从 <typename D_T, int MODE> 改为 <int MODE> + DTYPE_X 宏 | ### 各缺陷详情 **缺陷 1:def.cpp 缺 N 属性 → autogen proto.h 丢失 REQUIRED_ATTR(N, Int)** def.cpp 未声明 N 属性,编译系统生成 proto.h 时丢弃 N,导致 set_attr_N() 编译报错,每次安装需手动 sed patch。 **缺陷 2:缺少 InferDataType 实现** op_graph/ 下无 eltwise_graph_infer.cpp,InferDataType 未注册,GE 图输出 dtype 推导缺失。 **缺陷 3:tiling 属性 index 偏移(try-both-index 误判)** proto.h 中 N 在 attr index 0,tiling 用固定 index 0 读 mode 实际读到 N(输入个数),表现为 invalid mode 3。初版修复用 try-both-index + inputNum 消歧,但 GetAttrPointer<int64_t> 对 listFloat 类型的 coeff 属性返回不确定值,导致 mode=0(PRODUCT) 和 mode=2(MAX) 的多输入用例被误判为 mode=1(SUM)。 **缺陷 7:try-both-index 误判(缺陷 3 的回归修复)** 用 GetAttrNum() 判断 attr 列表是否包含 N 属性:3 个属性 → [N, mode, coeff],2 个属性 → [mode, coeff]。根据属性数量确定 mode 和 coeff 的正确 index,彻底消除类型不安全读取。 **缺陷 4:kernel 升精度导致精度不一致** FP16/BF16 输入 Cast 到 FP32 计算再 Cast 回,与 golden 原 dtype 链式计算策略不一致,5 条用例 FAIL。 **缺陷 5:tiling_key 冗余编码 dtype** DATATYPE_DECL 与 def 的 DataType 声明重复编码 dtype。 **缺陷 6:kernel 模板冗余 dtype 参数** <typename D_T, int MODE> 与 def 驱动 dtype 模式不一致,改为 <int MODE> + DTYPE_X 宏。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2627 ## 测试 1. **两方测试(211 条 GEIR 用例)**:使用 TTK GEIR 模式 const + dynamic 双路全量验证,正向用例 203 × 2 = 406 结果全部 PASS,负向异常用例 8 × 2 = 16 结果预期 FAIL/SKIP 2. **三方测试(100 条 GEIR 用例)**:使用三方 golden plugin 全量验证,98 PASS / 0 FAIL / 2 SKIP(超大 shape 10000001 编译失败,属旧 TBE 实现的环境问题,非算子侧缺陷) 3. 确定性验证:10 条用例双跑(同 seed=42)bit-exact 比对通过 ## 文档更新 无。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4776 | 1 个月前 | |
[CANNBOT]: Eltwise 算子共性问题修改 Co-authored-by: ZJYzjy-shine<1275333808@qq.com> # message auto-generated for no-merge-commit merge: !4776 merge master into master [CANNBOT]: Eltwise 算子共性问题修改 Created-by: ZJYzjy-shine Commit-by: ZJYzjy-shine Merged-by: cann-robot Description: ## 描述 Eltwise 算子共性问题修改 ### 修改文件清单 | 文件 | 缺陷 | 改动内容 | |------|------|---------| | op_host/eltwise_def.cpp | 缺陷1 | 添加 this->Attr("N").AttrType(REQUIRED).Int(),使 autogen proto.h 包含 REQUIRED_ATTR(N, Int) | | op_graph/eltwise_graph_infer.cpp | 缺陷2 | 新增 InferDataType 实现(输出 dtype = 第一个输入 dtype) | | op_host/arch35/eltwise_tiling_arch35.cpp | 缺陷3+7 | GetModeAttr/FillCoeff 改用 GetAttrNum() 判断 attr 布局(3 attrs=[N,mode,coeff] / 2 attrs=[mode,coeff]),替代不可靠的 try-both-index;bytesPerElem = 4 * typeSize(不升精度);移除 ComputeUbFactor 的 unused parameter | | op_kernel/arch35/eltwise.h | 缺陷4 | 去掉 Cast 升精度分支,BF16 用 ReinterpretCast<uint16_t> + Duplicate(uint16_t) 处理零值和 coeff | | op_kernel/arch35/eltwise_tiling_key.h | 缺陷5 | 去掉 ASCENDC_TPL_DATATYPE_DECL,只保留 ASCENDC_TPL_UINT_DECL(MODE) | | op_kernel/eltwise.cpp | 缺陷6 | 模板从 <typename D_T, int MODE> 改为 <int MODE> + DTYPE_X 宏 | ### 各缺陷详情 **缺陷 1:def.cpp 缺 N 属性 → autogen proto.h 丢失 REQUIRED_ATTR(N, Int)** def.cpp 未声明 N 属性,编译系统生成 proto.h 时丢弃 N,导致 set_attr_N() 编译报错,每次安装需手动 sed patch。 **缺陷 2:缺少 InferDataType 实现** op_graph/ 下无 eltwise_graph_infer.cpp,InferDataType 未注册,GE 图输出 dtype 推导缺失。 **缺陷 3:tiling 属性 index 偏移(try-both-index 误判)** proto.h 中 N 在 attr index 0,tiling 用固定 index 0 读 mode 实际读到 N(输入个数),表现为 invalid mode 3。初版修复用 try-both-index + inputNum 消歧,但 GetAttrPointer<int64_t> 对 listFloat 类型的 coeff 属性返回不确定值,导致 mode=0(PRODUCT) 和 mode=2(MAX) 的多输入用例被误判为 mode=1(SUM)。 **缺陷 7:try-both-index 误判(缺陷 3 的回归修复)** 用 GetAttrNum() 判断 attr 列表是否包含 N 属性:3 个属性 → [N, mode, coeff],2 个属性 → [mode, coeff]。根据属性数量确定 mode 和 coeff 的正确 index,彻底消除类型不安全读取。 **缺陷 4:kernel 升精度导致精度不一致** FP16/BF16 输入 Cast 到 FP32 计算再 Cast 回,与 golden 原 dtype 链式计算策略不一致,5 条用例 FAIL。 **缺陷 5:tiling_key 冗余编码 dtype** DATATYPE_DECL 与 def 的 DataType 声明重复编码 dtype。 **缺陷 6:kernel 模板冗余 dtype 参数** <typename D_T, int MODE> 与 def 驱动 dtype 模式不一致,改为 <int MODE> + DTYPE_X 宏。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2627 ## 测试 1. **两方测试(211 条 GEIR 用例)**:使用 TTK GEIR 模式 const + dynamic 双路全量验证,正向用例 203 × 2 = 406 结果全部 PASS,负向异常用例 8 × 2 = 16 结果预期 FAIL/SKIP 2. **三方测试(100 条 GEIR 用例)**:使用三方 golden plugin 全量验证,98 PASS / 0 FAIL / 2 SKIP(超大 shape 10000001 编译失败,属旧 TBE 实现的环境问题,非算子侧缺陷) 3. 确定性验证:10 条用例双跑(同 seed=42)bit-exact 比对通过 ## 文档更新 无。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4776 | 1 个月前 | |
Update arch35 testcases with 5 testcases from v2 format (overwrite mode) Co-authored-by: yefeicoding<yefei25@huawei.com> # message auto-generated for no-merge-commit merge: !3303 merge cie into master Update arch35 testcases with 5 testcases from v2 format (overwrite mode) Created-by: yefeicoding Commit-by: yefeicoding Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1961 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3303 | 3 个月前 | |
修复 CMakeLists 中 aclnn_exclude 配置 Co-authored-by: ForestFrame<24011210883@stu.xidian.edu.cn> # message auto-generated for no-merge-commit merge: !3735 merge fix-aclnn-exclude-master into master 修复 CMakeLists 中 aclnn_exclude 配置 Created-by: ForestFrame Commit-by: ForestFrame Merged-by: cann-robot Description: ## 描述 修复 CMakeLists 中 aclnn_exclude 配置 ## 关联的Issue 关联 Issue:#2119 [Bug-Report|缺陷反馈]: 算子不应自动生成aclnn api ## 测试 已检查算子相关配置,确认修改后不会再自动生成 aclnn api。暂未执行完整二级冒烟测试。 ## 文档更新 无文档更新。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3735 | 3 个月前 | |
批量修改md文档冗余空格第2批 Co-authored-by: chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !3314 merge master into master 批量修改md文档冗余空格第2批 Created-by: gitcode-chenjiao Commit-by: chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 批量修改md中冗余空格 ## 关联的Issue [DOC_1962#冗余空格](https://gitcode.com/cann/ops-math/issues/1962) ## 测试 自验证 ## 文档更新 all md ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [X ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3314 | 3 个月前 |
Eltwise
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
功能说明
-
算子功能:Eltwise算子对1~32个同shape、同dtype的输入张量执行逐元素操作,支持三种计算模式。
-
计算公式:
-
mode=0 (PRODUCT):逐元素乘积
outi=xi(0)×xi(1)×⋯×xi(n−1)out_i = x^{(0)}_i \times x^{(1)}_i \times \cdots \times x^{(n-1)}_i outi=xi(0)×xi(1)×⋯×xi(n−1)
-
mode=1 (SUM):逐元素加权求和
outi=c0⋅xi(0)+c1⋅xi(1)+⋯+cn−1⋅xi(n−1)out_i = c_0 \cdot x^{(0)}_i + c_1 \cdot x^{(1)}_i + \cdots + c_{n-1} \cdot x^{(n-1)}_i outi=c0⋅xi(0)+c1⋅xi(1)+⋯+cn−1⋅xi(n−1)
其中 ckc_kck 为第 kkk 个输入的加权系数(coeff),默认值为1.0。
-
mode=2 (MAX):逐元素取最大值
outi=max(xi(0),xi(1),…,xi(n−1))out_i = \max(x^{(0)}_i, x^{(1)}_i, \ldots, x^{(n-1)}_i) outi=max(xi(0),xi(1),…,xi(n−1))
-
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| inputs | 输入 | 输入张量列表,包含1~32个张量。所有张量必须同shape、同dtype。支持空Tensor(0元素)。 | FLOAT、FLOAT16、BFLOAT16 | ND |
| mode | 属性 |
|
INT64 | - |
| coeff | 可选属性 |
|
FLOAT | - |
| out | 输出 | 输出张量。shape与输入张量相同,dtype与输入张量相同。不支持空Tensor。 | FLOAT、FLOAT16、BFLOAT16 | ND |
约束说明
- 所有输入张量必须同shape、同dtype,不支持广播。
- 输入张量个数范围为 [1, 32]。
- 输出dtype和shape必须与输入完全一致。
- 仅支持ND数据格式,shape维度范围:0~8。
- mode仅支持0(PRODUCT)、1(SUM)、2(MAX)三个取值。
- mode=1时,若提供coeff,其长度必须等于输入张量个数;若不提供(传空指针),默认系数为1.0。
- 空Tensor(0元素):正常接受,返回空out,不进行计算。
- 确定性计算:是(逐元素操作,不涉及Reduce,输出结果确定)。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| 图模式 | test_geir_eltwise.cpp | 通过图模式方式调用Eltwise算子。 |