| [CANNBot]新增AvgPoolUpdate算子 Co-authored-by: wuchengwen_oh<wuchengwen4@huawei.com> # message auto-generated for no-merge-commit merge: !9206 merge add_avg_pool_update_v2 into master [CANNBot]新增AvgPoolUpdate算子 Created-by: wuchengwen_oh Commit-by: wuchengwen_oh Merged-by: cann-robot Description: ## 描述 新增AvgPoolUpdate算子,支持Ascend950 SIMT实现。 AvgPoolUpdate是AvgPool的融合辅助算子,在exclusive模式下精确计算池化窗口实际覆盖的有效元素个数(mean_matrix),将求和池化结果除以该值得到精确平均值。 **算子公式**: - y = x1 / mean_matrix - mean_matrix[h,w] = mean_h * mean_w - mean_h = max(min(min(h*stride_h - pad_t + k_h, (H_out-1-h)*stride_h - pad_b + k_h), min(k_h, H_in)), 1) - mean_w = max(min(min(w*stride_w - pad_l + k_w, (W_out-1-w)*stride_w - pad_r + k_w), min(k_w, W_in)), 1) 其中x1为求和池化输出,x2为原始输入feature map(仅用于获取输入空间尺寸,不参与数值计算)。 **技术要点**: - SIMT Grid-Stride模式,每线程按步长迭代输出元素 - dtype支持:x1/y ∈ {FP16, FP32},x2 ∈ {INT4, INT8, FP16, FP32}(8组笛卡尔积) - 支持NCHW和NHWC两种data_format - 支持CALCULATED/VALID/SAME三种padding_mode - UB传参方案:标量参数通过UB传递到VF kernel - UintDiv快速除法替代硬件%和/,IDX_T模板按totalNum范围选择32/64位路径 - __builtin_*_overflow溢出保护,空shape和除零边界保护 - 输入校验与TBE对齐:data_format/padding_mode合法值、ksize/strides N/C==1、空shape拒绝 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5152 ## 测试 - 单算子编译验证通过(bash build.sh --pkg --soc=ascend950 --ops=avg_pool_update -j16) - host UT全部通过(tiling UT 9个 + infershape UT 3个 = 12个用例) - TTK上板测试通过(黑盒220条 + 白盒270条 + 网络6条 + stdesign L0 93条 + L1 515条) - run_example 32/32 passed ## 文档更新 - 新增 pooling/avg_pool_update/README.md - 更新 docs/zh/op_list.md 新增pooling/avg_pool_update条目 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 - [x] AI完全生成 人工审查:已完成 测试验证:已通过 合规检查:已完成 See merge request: cann/ops-nn!9206 | 12 天前 |
| [CANNBot]新增AvgPoolUpdate算子 Co-authored-by: wuchengwen_oh<wuchengwen4@huawei.com> # message auto-generated for no-merge-commit merge: !9206 merge add_avg_pool_update_v2 into master [CANNBot]新增AvgPoolUpdate算子 Created-by: wuchengwen_oh Commit-by: wuchengwen_oh Merged-by: cann-robot Description: ## 描述 新增AvgPoolUpdate算子,支持Ascend950 SIMT实现。 AvgPoolUpdate是AvgPool的融合辅助算子,在exclusive模式下精确计算池化窗口实际覆盖的有效元素个数(mean_matrix),将求和池化结果除以该值得到精确平均值。 **算子公式**: - y = x1 / mean_matrix - mean_matrix[h,w] = mean_h * mean_w - mean_h = max(min(min(h*stride_h - pad_t + k_h, (H_out-1-h)*stride_h - pad_b + k_h), min(k_h, H_in)), 1) - mean_w = max(min(min(w*stride_w - pad_l + k_w, (W_out-1-w)*stride_w - pad_r + k_w), min(k_w, W_in)), 1) 其中x1为求和池化输出,x2为原始输入feature map(仅用于获取输入空间尺寸,不参与数值计算)。 **技术要点**: - SIMT Grid-Stride模式,每线程按步长迭代输出元素 - dtype支持:x1/y ∈ {FP16, FP32},x2 ∈ {INT4, INT8, FP16, FP32}(8组笛卡尔积) - 支持NCHW和NHWC两种data_format - 支持CALCULATED/VALID/SAME三种padding_mode - UB传参方案:标量参数通过UB传递到VF kernel - UintDiv快速除法替代硬件%和/,IDX_T模板按totalNum范围选择32/64位路径 - __builtin_*_overflow溢出保护,空shape和除零边界保护 - 输入校验与TBE对齐:data_format/padding_mode合法值、ksize/strides N/C==1、空shape拒绝 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5152 ## 测试 - 单算子编译验证通过(bash build.sh --pkg --soc=ascend950 --ops=avg_pool_update -j16) - host UT全部通过(tiling UT 9个 + infershape UT 3个 = 12个用例) - TTK上板测试通过(黑盒220条 + 白盒270条 + 网络6条 + stdesign L0 93条 + L1 515条) - run_example 32/32 passed ## 文档更新 - 新增 pooling/avg_pool_update/README.md - 更新 docs/zh/op_list.md 新增pooling/avg_pool_update条目 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 - [x] AI完全生成 人工审查:已完成 测试验证:已通过 合规检查:已完成 See merge request: cann/ops-nn!9206 | 12 天前 |
| [CANNBot]新增AvgPoolUpdate算子 Co-authored-by: wuchengwen_oh<wuchengwen4@huawei.com> # message auto-generated for no-merge-commit merge: !9206 merge add_avg_pool_update_v2 into master [CANNBot]新增AvgPoolUpdate算子 Created-by: wuchengwen_oh Commit-by: wuchengwen_oh Merged-by: cann-robot Description: ## 描述 新增AvgPoolUpdate算子,支持Ascend950 SIMT实现。 AvgPoolUpdate是AvgPool的融合辅助算子,在exclusive模式下精确计算池化窗口实际覆盖的有效元素个数(mean_matrix),将求和池化结果除以该值得到精确平均值。 **算子公式**: - y = x1 / mean_matrix - mean_matrix[h,w] = mean_h * mean_w - mean_h = max(min(min(h*stride_h - pad_t + k_h, (H_out-1-h)*stride_h - pad_b + k_h), min(k_h, H_in)), 1) - mean_w = max(min(min(w*stride_w - pad_l + k_w, (W_out-1-w)*stride_w - pad_r + k_w), min(k_w, W_in)), 1) 其中x1为求和池化输出,x2为原始输入feature map(仅用于获取输入空间尺寸,不参与数值计算)。 **技术要点**: - SIMT Grid-Stride模式,每线程按步长迭代输出元素 - dtype支持:x1/y ∈ {FP16, FP32},x2 ∈ {INT4, INT8, FP16, FP32}(8组笛卡尔积) - 支持NCHW和NHWC两种data_format - 支持CALCULATED/VALID/SAME三种padding_mode - UB传参方案:标量参数通过UB传递到VF kernel - UintDiv快速除法替代硬件%和/,IDX_T模板按totalNum范围选择32/64位路径 - __builtin_*_overflow溢出保护,空shape和除零边界保护 - 输入校验与TBE对齐:data_format/padding_mode合法值、ksize/strides N/C==1、空shape拒绝 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5152 ## 测试 - 单算子编译验证通过(bash build.sh --pkg --soc=ascend950 --ops=avg_pool_update -j16) - host UT全部通过(tiling UT 9个 + infershape UT 3个 = 12个用例) - TTK上板测试通过(黑盒220条 + 白盒270条 + 网络6条 + stdesign L0 93条 + L1 515条) - run_example 32/32 passed ## 文档更新 - 新增 pooling/avg_pool_update/README.md - 更新 docs/zh/op_list.md 新增pooling/avg_pool_update条目 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 - [x] AI完全生成 人工审查:已完成 测试验证:已通过 合规检查:已完成 See merge request: cann/ops-nn!9206 | 12 天前 |
| [CANNBot]新增AvgPoolUpdate算子 Co-authored-by: wuchengwen_oh<wuchengwen4@huawei.com> # message auto-generated for no-merge-commit merge: !9206 merge add_avg_pool_update_v2 into master [CANNBot]新增AvgPoolUpdate算子 Created-by: wuchengwen_oh Commit-by: wuchengwen_oh Merged-by: cann-robot Description: ## 描述 新增AvgPoolUpdate算子,支持Ascend950 SIMT实现。 AvgPoolUpdate是AvgPool的融合辅助算子,在exclusive模式下精确计算池化窗口实际覆盖的有效元素个数(mean_matrix),将求和池化结果除以该值得到精确平均值。 **算子公式**: - y = x1 / mean_matrix - mean_matrix[h,w] = mean_h * mean_w - mean_h = max(min(min(h*stride_h - pad_t + k_h, (H_out-1-h)*stride_h - pad_b + k_h), min(k_h, H_in)), 1) - mean_w = max(min(min(w*stride_w - pad_l + k_w, (W_out-1-w)*stride_w - pad_r + k_w), min(k_w, W_in)), 1) 其中x1为求和池化输出,x2为原始输入feature map(仅用于获取输入空间尺寸,不参与数值计算)。 **技术要点**: - SIMT Grid-Stride模式,每线程按步长迭代输出元素 - dtype支持:x1/y ∈ {FP16, FP32},x2 ∈ {INT4, INT8, FP16, FP32}(8组笛卡尔积) - 支持NCHW和NHWC两种data_format - 支持CALCULATED/VALID/SAME三种padding_mode - UB传参方案:标量参数通过UB传递到VF kernel - UintDiv快速除法替代硬件%和/,IDX_T模板按totalNum范围选择32/64位路径 - __builtin_*_overflow溢出保护,空shape和除零边界保护 - 输入校验与TBE对齐:data_format/padding_mode合法值、ksize/strides N/C==1、空shape拒绝 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5152 ## 测试 - 单算子编译验证通过(bash build.sh --pkg --soc=ascend950 --ops=avg_pool_update -j16) - host UT全部通过(tiling UT 9个 + infershape UT 3个 = 12个用例) - TTK上板测试通过(黑盒220条 + 白盒270条 + 网络6条 + stdesign L0 93条 + L1 515条) - run_example 32/32 passed ## 文档更新 - 新增 pooling/avg_pool_update/README.md - 更新 docs/zh/op_list.md 新增pooling/avg_pool_update条目 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 - [x] AI完全生成 人工审查:已完成 测试验证:已通过 合规检查:已完成 See merge request: cann/ops-nn!9206 | 12 天前 |
| fix asan test Co-authored-by: chenqi317<chenqi317@huawei.com> # message auto-generated for no-merge-commit merge: !9033 merge master into master fix asan test Created-by: chenqi317 Commit-by: chenqi317 Merged-by: cann-robot Description: ## 描述 修复 ASan(AddressSanitizer)测试中暴露的问题,主要包括:类型不匹配、越界访问、字段缺失及命名不一致。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 详细变更 ### 1. 类型修正(uint32_t/int32_t → int64_t/uint64_t) 使测试中的 CompileInfo 结构体字段类型与实际算子侧定义保持一致,消除 ASan 因类型宽度不匹配报告的问题。 | 文件 | 字段 | 旧类型 | 新类型 | |------|------|--------|--------| | test_add_layer_norm_tiling.cpp | aivCoreNum_, sysWorkspaceSize_, vecRegSize_, blockSize_ | uint32_t | int64_t | | test_embedding_dense_grad_v2_tiling.cpp | totalCoreNum | int32_t | uint64_t | | test_add_rms_norm_cast_tiling.cpp | totalCoreNum | uint32_t | uint64_t | | test_add_rms_norm_quant_tiling.cpp | totalCoreNum | uint32_t | uint64_t | ### 2. 命名规范化:isRegbase → isRegBase 修正大小写不一致,统一为驼峰命名 isRegBase。 - test_embedding_dense_grad_v2_tiling.cpp ### 3. 补充缺失字段 isRegBase 为以下测试的 CompileInfo 结构体补充 isRegBase 字段(默认 false),避免因结构体字段缺失导致的内存读取越界: - test_modulate_tiling.cpp(4 处) - test_multi_scale_deformable_attention_grad_tiling.cpp(1 处) - test_multi_scale_deformable_attn_function_tiling.cpp(9 处) ### 4. 补充缺失字段 blockSize / vlFp32 - test_layer_norm_grad_tiling.cpp: 为 LayerNormGradCompileInfo 补充 blockSize 和 vlFp32(均为 int64_t)字段。 ### 5. 移除硬编码值 - test_add_rms_norm_cast_tiling.cpp: 将 totalCoreNum = 40、totalUbSize = 196608 改为 0,避免与实际平台信息不一致。 - test_add_rms_norm_quant_tiling.cpp: 同上,并调整字段顺序与命名(socVersion → curSocVersion,totalUbSize → maxUbSize)。 ### 6. 越界访问修复 - tests/ut/common/tiling_context_faker.cpp:309: 添加 idx < inputInstanceNumPacked_.size() 边界检查,防止 inputInstanceNumPacked_ 越界访问。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9033 | 6 天前 |
| [CANNBot]新增AvgPoolUpdate算子 Co-authored-by: wuchengwen_oh<wuchengwen4@huawei.com> # message auto-generated for no-merge-commit merge: !9206 merge add_avg_pool_update_v2 into master [CANNBot]新增AvgPoolUpdate算子 Created-by: wuchengwen_oh Commit-by: wuchengwen_oh Merged-by: cann-robot Description: ## 描述 新增AvgPoolUpdate算子,支持Ascend950 SIMT实现。 AvgPoolUpdate是AvgPool的融合辅助算子,在exclusive模式下精确计算池化窗口实际覆盖的有效元素个数(mean_matrix),将求和池化结果除以该值得到精确平均值。 **算子公式**: - y = x1 / mean_matrix - mean_matrix[h,w] = mean_h * mean_w - mean_h = max(min(min(h*stride_h - pad_t + k_h, (H_out-1-h)*stride_h - pad_b + k_h), min(k_h, H_in)), 1) - mean_w = max(min(min(w*stride_w - pad_l + k_w, (W_out-1-w)*stride_w - pad_r + k_w), min(k_w, W_in)), 1) 其中x1为求和池化输出,x2为原始输入feature map(仅用于获取输入空间尺寸,不参与数值计算)。 **技术要点**: - SIMT Grid-Stride模式,每线程按步长迭代输出元素 - dtype支持:x1/y ∈ {FP16, FP32},x2 ∈ {INT4, INT8, FP16, FP32}(8组笛卡尔积) - 支持NCHW和NHWC两种data_format - 支持CALCULATED/VALID/SAME三种padding_mode - UB传参方案:标量参数通过UB传递到VF kernel - UintDiv快速除法替代硬件%和/,IDX_T模板按totalNum范围选择32/64位路径 - __builtin_*_overflow溢出保护,空shape和除零边界保护 - 输入校验与TBE对齐:data_format/padding_mode合法值、ksize/strides N/C==1、空shape拒绝 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5152 ## 测试 - 单算子编译验证通过(bash build.sh --pkg --soc=ascend950 --ops=avg_pool_update -j16) - host UT全部通过(tiling UT 9个 + infershape UT 3个 = 12个用例) - TTK上板测试通过(黑盒220条 + 白盒270条 + 网络6条 + stdesign L0 93条 + L1 515条) - run_example 32/32 passed ## 文档更新 - 新增 pooling/avg_pool_update/README.md - 更新 docs/zh/op_list.md 新增pooling/avg_pool_update条目 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 - [x] AI完全生成 人工审查:已完成 测试验证:已通过 合规检查:已完成 See merge request: cann/ops-nn!9206 | 12 天前 |
| [CANNBot]新增AvgPoolUpdate算子 Co-authored-by: wuchengwen_oh<wuchengwen4@huawei.com> # message auto-generated for no-merge-commit merge: !9206 merge add_avg_pool_update_v2 into master [CANNBot]新增AvgPoolUpdate算子 Created-by: wuchengwen_oh Commit-by: wuchengwen_oh Merged-by: cann-robot Description: ## 描述 新增AvgPoolUpdate算子,支持Ascend950 SIMT实现。 AvgPoolUpdate是AvgPool的融合辅助算子,在exclusive模式下精确计算池化窗口实际覆盖的有效元素个数(mean_matrix),将求和池化结果除以该值得到精确平均值。 **算子公式**: - y = x1 / mean_matrix - mean_matrix[h,w] = mean_h * mean_w - mean_h = max(min(min(h*stride_h - pad_t + k_h, (H_out-1-h)*stride_h - pad_b + k_h), min(k_h, H_in)), 1) - mean_w = max(min(min(w*stride_w - pad_l + k_w, (W_out-1-w)*stride_w - pad_r + k_w), min(k_w, W_in)), 1) 其中x1为求和池化输出,x2为原始输入feature map(仅用于获取输入空间尺寸,不参与数值计算)。 **技术要点**: - SIMT Grid-Stride模式,每线程按步长迭代输出元素 - dtype支持:x1/y ∈ {FP16, FP32},x2 ∈ {INT4, INT8, FP16, FP32}(8组笛卡尔积) - 支持NCHW和NHWC两种data_format - 支持CALCULATED/VALID/SAME三种padding_mode - UB传参方案:标量参数通过UB传递到VF kernel - UintDiv快速除法替代硬件%和/,IDX_T模板按totalNum范围选择32/64位路径 - __builtin_*_overflow溢出保护,空shape和除零边界保护 - 输入校验与TBE对齐:data_format/padding_mode合法值、ksize/strides N/C==1、空shape拒绝 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5152 ## 测试 - 单算子编译验证通过(bash build.sh --pkg --soc=ascend950 --ops=avg_pool_update -j16) - host UT全部通过(tiling UT 9个 + infershape UT 3个 = 12个用例) - TTK上板测试通过(黑盒220条 + 白盒270条 + 网络6条 + stdesign L0 93条 + L1 515条) - run_example 32/32 passed ## 文档更新 - 新增 pooling/avg_pool_update/README.md - 更新 docs/zh/op_list.md 新增pooling/avg_pool_update条目 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 - [x] AI完全生成 人工审查:已完成 测试验证:已通过 合规检查:已完成 See merge request: cann/ops-nn!9206 | 12 天前 |