已合并
[PR2/3] migrate transdata aicpu kernel: format_transfer core formats + UT #4114
[PR2/3] migrate transdata aicpu kernel: format_transfer core formats + UT #4114
已合并
pantong创建于 7月16日
pantong
7月16日

描述

将canndev仓TransData算子的AICPU kernel迁移到ops-math仓,PR2/3:format_transfer core formats + UT。

关联的Issue

#2231

测试

PR2 of 3: format_transfer for FRACTAL_Z/NZ/C1HWC0/WINO + 15 UT.

  • format_transfer_c1hwc0.{cpp,h}: NCHW/HWCN -> C1HWC0
  • format_transfer_fractal_nz.{cpp,h}: ND/NCHW/NHWC <-> FRACTAL_NZ
  • format_transfer_fractal_z.{cpp,h}: NCHW/HWCN/NHWC <-> FRACTAL_Z
  • format_transfer_fractal_z_wino.{cpp,h}: HWCN/NCHW -> FRACTAL_Z_WINO
  • test_trans_data.cpp: 15 UT cases (3 error + 12 success)

修复检视意见:

  • P2: BiggerMemSet 返回值检查 (format_transfer_c1hwc0.cpp)

Still no _aicpu_def.cpp (canndev active). Depends on PR1.

类型标签

  • Bug修复
  • 新特性
  • 性能优化
  • 文档更新
  • 其他,请描述:算子迁仓
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 pantong 的贡献)
Ppantong
7月16日 创建了 pull request,commit 2557ba6f
Ppantong
7月16日 关联了issue:[Requirement|需求建议] 将canndev仓TransData算子的AICPU kernel迁移到ops-math仓
atomgit-bot
atomgit-bot
7月16日 评论:

变更摘要

此 PR 是 transdata aicpu kernel 迁移系列的第 2 部分,主要引入 format_transfer 核心格式转换模块,覆盖 FRACTAL_Z、FRACTAL_NZ、C1HWC0、FRACTAL_Z_WINO 四种格式与标准 4D 格式(NCHW/HWCN/NHWC/ND)之间的双向转换,并建立了格式转换的注册框架和通用工具函数。同时实现了 TransDataCpuKernel 主入口,整合新旧计算路径,并附带 15 个单元测试用例验证关键转换链路的正确性。

主要改动

  • 新增 FormatTransfer 注册框架:通过 register_format_transfer.h/.cpp 定义了 FormatTransfer 抽象基类、TransArgs 参数结构体和 REGISTER_FORMAT_TRANSFER 宏,基于 src → dst 格式对建立 Builder 注册表,使各格式转换实现类可独立注册并被 BuildFormatTransfer 统一查找调度。

  • 新增核心格式转换实现format_transfer_fractal_z.cpp 实现 NCHW/HWCN/NHWC 与 FRACTAL_Z(含 C0 编码变体)之间的 TransFormat/TransShape;format_transfer_fractal_nz.cpp 实现 ND/NCHW/NHWC 与 FRACTAL_NZ 之间的大 N 小 Z 排列转换,并支持 OpenMP 并行加速;format_transfer_c1hwc0.cpp 实现 NCHW/HWCN 到 C1HWC0 的布局映射;format_transfer_fractal_z_wino.cpp 实现 FRACTAL_Z_WINO 格式与 NCHW/HWCN/FRACTAL_Z 的转换,包括 Winograd 特有的 N0_2/N0_8 维度拆分。

  • 新增通用工具模块format_transfer_utils.h/.cpp 提供跨格式转换复用的辅助函数,包括形状合法性校验(IsShapeValid/CheckShapeValid)、C0 值获取(GetC0ValueForTransShape/GetC0ValueForTransFormat)、最大公约/最小公倍数计算(Measure/Lcm)、维度提取(GetFormatDim)、分组循环骨架模板(RunGroupedFormatTransfer)等;formats_definitions.h 统一定义了各格式的维度索引枚举常量。

  • 新增 TransDataCpuKernel 主入口trans_data_aicpu.cpp/.h 实现 Compute 方法,按输入/输出格式分支分发到新 NewCompute(走注册框架的 RunFormatTransfer)或旧路径 HandleHwcnToFzC04/DealData,同时提供张量信息提取、形状 Padding、转置、数据分发等辅助函数,并通过 REGISTER_CPU_KERNEL 注册为 aicpu kernel。

  • CMake 构建与单元测试cmake/symbol.cmakegen_aicpu_kernel_symbol 的 ARM 链接命令中新增 COMMAND_EXPAND_LISTS 以支持列表展开。test_trans_data.cpp 添加 15 个测试用例,覆盖 NCHW/HWCN/NHWC→FRACTAL_Z、ND→FRACTAL_NZ、NCHW/HWCN→C1HWC0、HWCN→FRACTAL_Z_C04 等转换场景,以及不支持的格式/dims/group=0 的错误路径验证,支持 float/half/int8 多种数据类型。

likedislike
atomgit-bot
atomgit-bot
7月16日 评论:

代码审查

Now I have completed my review of all 18 files. Let me write the closing summary.


审查总结

审查覆盖的文件(共 18 个)

文件 审查结论
cmake/symbol.cmake 无问题(仅为尾随空格清理 + 必要的 COMMAND_EXPAND_LISTS 修复)
conversion/trans_data/CMakeLists.txt 1 个 P3 问题(file(GLOB) 使用)
format_transfer_c1hwc0.cpp 1 个 P2 问题(BiggerMemSet 返回值忽略)
format_transfer_c1hwc0.h 无问题
format_transfer_fractal_nz.cpp 无问题
format_transfer_fractal_nz.h 无问题
format_transfer_fractal_z.cpp 无问题
format_transfer_fractal_z.h 无问题
format_transfer_fractal_z_wino.cpp 无问题
format_transfer_fractal_z_wino.h 无问题
format_transfer_utils.cpp 2 个 P3 问题(死代码 + Measure 函数 bug)
format_transfer_utils.h 无问题
formats_definitions.h 无问题
register_format_transfer.cpp 无问题
register_format_transfer.h 无问题
trans_data_aicpu.cpp 无问题
trans_data_aicpu.h 无问题
test_trans_data.cpp 无问题

各优先级问题数量

  • P0: 0
  • P1: 0
  • P2: 1 — BiggerMemSet 返回值被忽略,可能导致脏数据
  • P3: 3 — 死代码、Measure 函数数学错误、CMake file(GLOB) 使用

整体风险评估

低风险。核心格式转换逻辑(FRACTAL_Z/NZ/C1HWC0/WINO)在代码结构上完整且一致,参数校验链路清晰。发现的 4 个问题均为边缘情况:1 个错误处理遗漏(P2,可能影响 C1HWC0 格式转换的健壮性)、1 个代码冗余(P3 死代码)、1 个公开 API 的数学缺陷(P3,当前不可触发)、1 个 CMake 最佳实践偏离(P3)。以上问题均不影响正常业务流程的正确性。

类型 数量
🔴 阻塞 1
🟡 建议 1

⛔ 需要修改

likedislike
CANN-robotCANN-robot成员
7月16日 添加了label:stat/needs-squash
此处折叠了61条消息 查看更多
CANN-robot
CANN-robot成员
28 天前 评论:

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
刘伟

likedislike
FelixTang7成员
28 天前 评论:

/lgtm
/approve

likedislike
CANN-robot
CANN-robot成员
28 天前 评论:

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
刘伟

likedislike
CANN-robotCANN-robot成员
28 天前 添加了label:lgtmapproved
CANN-robotCANN-robot成员
28 天前 合入了pull request