Pull Request已成功合入, 合并人@CANN-robot
(感谢 hemahema 的贡献)变更摘要
此 PR 主要为 autofuse 框架新增了 ExtendConv2D 系列算子的支持,包括 ExtendConv2D、ExtendConv2DBias、ExtendConv2DScale 和 ExtendConv2DBiasScale 四种 variant。同时重构了现有 Conv2D 的 codegen、tiling 和 Python 编译流程,引入了 optional 输入占位机制(nullptr_inputs_index)、scale0 输入支持、以及新的模板参数,以适配更灵活的卷积融合场景。
主要改动
-
新增四种 ExtendConv2D ASC IR 算子注册:在
ascir_builtin_ops_v1.cpp和ascir_builtin_ops_v2.cpp中分别注册ExtendConv2D、ExtendConv2DBias、ExtendConv2DScale、ExtendConv2DBiasScale,新增round_mode、enable_relu0、nullptr_inputs_index等属性,并支持DT_INT8/DT_UINT64/DT_INT32等低精度数据类型。 -
Conv2DAttr 结构体扩展与重构:在
common_utils.h中将Conv2DAttr的is_bias/is_offset_w重命名为has_bias/has_offset_w,新增has_scale0、is_extend_conv2d、nullptr_inputs_index、round_mode、fixed_shift_value、enable_relu0等字段,并新增GET_EXTEND_CONV2D_ATTRS宏用于解析扩展属性。 -
Codegen 内核调用槽位顺序固定与 scale0 支持:在
codegen_kernel.cpp中,GenCubeTilingSingleFuncCall新增is_scale0参数,Conv2D 系列调用槽位统一为x, filter, bias(可选), offset_w(可选), scale0(可选),缺失的 optional 输入自动填入nullptr;模板参数列表新增BatchOne、NoPad、SmallWeight、SmallKernel。 -
Conv2D 内核模板重构:
conv_pingpong_basic_atcos.h中ConvActKernel改为以Conv2DTilingData作为模板参数,移除ConvShape/ConvDim的运行期构造,新增SCALE_TYPE和scaleGM参数,并新增FmapTiling/WeightTiling/L1PingPong/L0PingPong/OutputOrder/IterOrder模板参数;同时移除CONV_A_FULL_LOAD_MODE和A_FULL_LOAD_MODE宏。 -
Python 编译流程适配 ExtendConv2D:
asc_codegen_compile.py中build_conv_args重写为基于nullptr_inputs_index的 optional 输入处理逻辑,ascbc_conv_kernel_tiling_pro新增round_mode、enable_relu0、dual_output、dtype0/dtype1等属性的提取与传递,dtype_map扩展支持 int8/16/32/64 及 uint 类型,tiling 数据生成中增加IS_ENABLE_SCALE0/DTYPE_SCALE0等宏定义。


代码审查
所有文件已审查完毕,现在给出总结。
审查总结
按优先级统计
- P0: 1 个 —
create_conv_tiling_data中硬编码的origin_inputs索引导致 Conv2DOffset / ExtendConv2DScale 等场景 IndexError 崩溃 - P1: 1 个 —
TilingSetShapeDim签名变更移除默认参数,破坏外部文件codegen_tiling_inductor_topn.cpp的编译 - P2: 2 个 — 局部变量用作引用类型非类型模板实参(标准合规风险);
GenAutofuseLaunchDeclare缺少未知输入类型 fallback(声明-调用参数不匹配风险) - P3: 1 个 — 生产代码中遗留
print()调试语句
各文件审查结果
| 文件 | 结果 |
|---|---|
autofuse/ascir/generator/ascir_builtin_ops_v1.cpp |
无问题(REG_ASC_IR 注册正确,属性变更一致) |
autofuse/codegen/codegen_kernel.cpp |
无问题(conv2d 调用槽位顺序和模板参数传递正确) |
autofuse/codegen/codegen_kernel.h |
无问题(签名变更与 .cpp 一致) |
autofuse/codegen/codegen_tiling.cpp |
含 P2 问题(GenAutofuseLaunchDeclare 无 fallback);新增函数逻辑其他部分正确 |
autofuse/codegen/codegen_tiling.h |
含 P1 问题(TilingSetShapeDim 签名破坏性变更) |
autofuse/common/ascgraph_info_complete.cpp |
无问题(kOpTypeToComputeType 映射添加正确) |
autofuse/common/common_utils.cpp |
无问题(新增 IsConv2DTypeWithScale0、ParseConv2DAttr 分支正确) |
autofuse/common/common_utils.h |
无问题(新常量/结构体字段/宏定义正确一致) |
autofuse/compiler/py_module/pyascir_types.cpp |
无问题(字段重命名 is→has、新属性透传一致) |
autofuse/compiler/python/asc_codegen_compile.py |
含 P0 问题(origin_inputs 索引越界)含 P3 问题(debug print) |
autofuse/compiler/python/ascendc_compile.py |
无问题(仅注释代码块添加,无害) |
autofuse/graph_metadef/graph/ascendc_ir/core/asc_graph_ge_bridge.cc |
无问题(MAKE_NODE 添加正确) |
autofuse/v35/ascendc/api_cube/conv2d.h |
含 P2 问题(局部变量引用模板实参) |
autofuse/v35/ascendc/api_cube/conv2d/conv2d_v2_tilingkey_cv.h |
无问题(新模板参数 BatchOne/NoPad/SmallWeight/SmallKernel 声明正确) |
autofuse/v35/ascendc/api_cube/conv2d/conv_pingpong_basic_atcos.h |
无问题(ConvActKernel 重构一致) |
autofuse/v35/ascir/generator/ascir_builtin_ops_v2.cpp |
无问题(与 v1 模式一致) |
autofuse/v35/ascir/generator/v2_ascir_att_impl.h |
无问题(REG_ASC_IR_ATT_V2_CLASS_DEFINE 添加正确) |
整体风险评估
高风险。P0 问题(origin_inputs 索引越界)会导致 Conv2DOffset 及 ExtendConv2DScale 等场景在运行 create_conv_tiling_data 时直接 IndexError 崩溃,属于功能性阻断缺陷。P1 的 TilingSetShapeDim 签名变更会破坏外部编译。建议在合入前修复 P0 和 P1 问题。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 2 |
| 🟡 建议 | 1 |
⛔ 需要修改


/approve


Pull Request
描述
autofuse原有支持Conv2DV2的自动融合,现新增对ExtendConv2D自动融合的支持。
主要变更:
变更类型
请选择本次引入的变更类型:
关联的Issue
如何测试
描述测试此变更的步骤和前提条件:
1.
2.
核对清单
其他信息
在此添加任何其他关于本次 PR 的说明。