Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
增加 Dilation2D 支持 Ascend950 实现 SIMT
vector
算子定义与 Shape 推导: 新增 dilation2d_proto.h、dilation2d_def.cpp、dilation2d_graph_infer.cpp 和 dilation2d_infershape.cpp,完成 Dilation2d 算子的输入输出注册、属性声明(strides、rates、padding_mode、pads、ceil_mode、data_format)、数据类型推导(输出与输入一致)以及基于 padding 模式和膨胀率的输出 Shape 计算。
Host 端 Tiling 实现: 新增 dilation2d_tiling.cpp,在 Dilation2dTilingFunc 中完成平台信息获取、输入 dtype 校验(不支持 float64 时回退)、shape 合法性检查、零维 tensor 处理、属性解析以及 SAME/VALID/CALCULATED 三种模式下的输出尺寸与 padding 计算,并通过 FillTilingData 将分核结果写入 Dilation2dTilingData 结构体。
SIMT 设备端 Kernel: 新增 dilation2d_simt.h,采用 512 线程的统一 SIMT 架构,通过 if constexpr 编译期分发 NHWC/NCHW 路径。ComputeMaxVal 中使用 int64_t 索引避免大 tensor 溢出,整数类型加法提升中间精度并做饱和截断。Process 入口按 totalElements 是否超过 INT32_MAX 选择 32 位或 64 位索引的 Vector Function kernel,利用 Simt::UintDiv 进行快速坐标分解。
Tiling 数据结构与编译配置: 新增 dilation2d_tiling_data.h 定义 kernel-host 间传递的 tiling 参数结构体(含 needCoreNum、totalElements、isNCHW 等 16 个字段);新增 dilation2d_tiling_key.h 声明 DILATION2D_MODE_NHWC / DILATION2D_MODE_NCHW 两种场景模式;新增 dilation2d_simplified_key.ini 配置 Ascend950 的 simplified_key_mode=0。
Golden 参考实现与单元测试: 新增 golden.py,基于 TensorFlow tf.nn.dilation2d 手动计算 padding 和输出尺寸以对齐 SE 文档公式,处理 -inf 语义和整数饱和截断;新增 tiling 单元测试 test_dilation2d_tiling.cpp(覆盖 NHWC/NCHW/无效 dtype 场景)、Shape 推导测试 test_dilation2d_infershape.cpp 及 Kernel 单元测试 test_dilation2d.cpp。
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
增加 Dilation2D 支持 Ascend950 实现 SIMT
Origin(信息来源)
vector
Benefit / Necessity (价值/作用)
Design(设计方案)
算子定义与 Shape 推导: 新增 dilation2d_proto.h、dilation2d_def.cpp、dilation2d_graph_infer.cpp 和 dilation2d_infershape.cpp,完成 Dilation2d 算子的输入输出注册、属性声明(strides、rates、padding_mode、pads、ceil_mode、data_format)、数据类型推导(输出与输入一致)以及基于 padding 模式和膨胀率的输出 Shape 计算。
Host 端 Tiling 实现: 新增 dilation2d_tiling.cpp,在 Dilation2dTilingFunc 中完成平台信息获取、输入 dtype 校验(不支持 float64 时回退)、shape 合法性检查、零维 tensor 处理、属性解析以及 SAME/VALID/CALCULATED 三种模式下的输出尺寸与 padding 计算,并通过 FillTilingData 将分核结果写入 Dilation2dTilingData 结构体。
SIMT 设备端 Kernel: 新增 dilation2d_simt.h,采用 512 线程的统一 SIMT 架构,通过 if constexpr 编译期分发 NHWC/NCHW 路径。ComputeMaxVal 中使用 int64_t 索引避免大 tensor 溢出,整数类型加法提升中间精度并做饱和截断。Process 入口按 totalElements 是否超过 INT32_MAX 选择 32 位或 64 位索引的 Vector Function kernel,利用 Simt::UintDiv 进行快速坐标分解。
Tiling 数据结构与编译配置: 新增 dilation2d_tiling_data.h 定义 kernel-host 间传递的 tiling 参数结构体(含 needCoreNum、totalElements、isNCHW 等 16 个字段);新增 dilation2d_tiling_key.h 声明 DILATION2D_MODE_NHWC / DILATION2D_MODE_NCHW 两种场景模式;新增 dilation2d_simplified_key.ini 配置 Ascend950 的 simplified_key_mode=0。
Golden 参考实现与单元测试: 新增 golden.py,基于 TensorFlow tf.nn.dilation2d 手动计算 padding 和输出尺寸以对齐 SE 文档公式,处理 -inf 语义和整数饱和截断;新增 tiling 单元测试 test_dilation2d_tiling.cpp(覆盖 NHWC/NCHW/无效 dtype 场景)、Shape 推导测试 test_dilation2d_infershape.cpp 及 Kernel 单元测试 test_dilation2d.cpp。