已合并
[PR1/3] migrate transdata aicpu kernel: kernel impl + format_transfer base + basic UT #4113
[PR1/3] migrate transdata aicpu kernel: kernel impl + format_transfer base + basic UT #4113
已合并
pantong创建于 7月16日
pantong
7月16日

描述

将canndev仓TransData算子的AICPU kernel迁移到ops-math仓,PR1/3:kernel impl + format_transfer base + basic UT。

关联的Issue

#2231

测试

PR1 of 3: kernel + format_transfer base (utils/register) + 3 basic UT.

  • cmake/symbol.cmake: add COMMAND_EXPAND_LISTS
  • CMakeLists.txt: target_sources for format_transfer
  • trans_data_aicpu.{cpp,h}: main CpuKernel implementation
  • format_transfer/{formats_definitions,register_format_transfer,format_transfer_utils}.{h,cpp}: base infra
  • test_trans_data.cpp: 3 basic UT (PARAM_INVALID paths)

修复检视意见:

  • P2: memset_s 返回值检查
  • P3: Measure 函数 gcd(0) 修复
  • P3: 冗余除零检查删除

No _aicpu_def.cpp (canndev TransData still active).

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 pantong 的贡献)
Ppantong
7月16日 创建了 pull request,commit 44c5b66e
Ppantong
7月16日 关联了issue:[Requirement|需求建议] 将canndev仓TransData算子的AICPU kernel迁移到ops-math仓
atomgit-bot
atomgit-bot
7月16日 评论:

变更摘要

本PR是 TransData aicpu kernel 迁移三部分中的第一部分,主要引入了 format_transfer 基础框架(工具函数、格式定义、注册机制)以及 TransData aicpu kernel 的完整实现,同时添加了 3 个基础单元测试。核心思路是:在 format_transfer/ 目录下建立可扩展的格式转换注册与调度基础设施,TransDataCpuKernel::Compute 根据是否"原生支持"格式转换来分发到新路径(NewComputeRunFormatTransferTransFormat)或保留的旧路径(如 HandleHwcnToFzC04DealData)。具体的 format_transfer 转换实现尚未加入,将在后续 PR2/PR3 中补充。

主要改动

  • 新增 format_transfer 基础框架:在 format_transfer/ 目录下新增 formats_definitions.h(定义各类格式维度索引枚举)、format_transfer_utils.h/cpp(形状校验、Cube/C0 计算、维度提取、分组 FZ 形状构建、TransFormat 入口等工具函数)、register_format_transfer.h/cppTransArgs 结构体、FormatTransfer 抽象基类、REGISTER_FORMAT_TRANSFER 注册宏及 BuildFormatTransfer/FormatTransferExists 查找函数),为后续具体格式转换实现提供可插拔的注册与调度能力。

  • 新增 TransData aicpu kernel 实现:在 trans_data_aicpu.h/cpp 中实现 TransDataCpuKernel 类,Compute 方法通过 IsOriginSupportFormatTransfer 判断是否走新路径 NewCompute(调用 RunFormatTransferTransFormat 进行格式转换),否则回退到保留的旧路径(HandleHwcnToFzC04 处理 HWCN→FZC04 转换,DealData/DispatchDealData 处理其他情况),同时包含 PaddingOne/PaddingTwo/Transpose 等辅助方法。

  • cmake 构建调整:在 cmake/symbol.cmakegen_aicpu_kernel_symbol 函数中为 aicpu_kernels.so 的 ARM 链接命令添加 COMMAND_EXPAND_LISTS,以正确展开列表参数。

  • 新增 3 个基础单元测试:在 test_trans_data.cpp 中覆盖了不支持的输出格式(FORMAT_NHWC→FORMAT_NHWC)、输入维度不足(dim=2,期望≥4)、groups 参数为 0 三种参数校验场景,均期望返回 KERNEL_STATUS_PARAM_INVALID

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

代码审查

Now let me compile the closing summary. I've reviewed all 10 changed files thoroughly.


审查总结

已审查文件清单:

文件 审查结果
cmake/symbol.cmake 无问题(仅空白字符清理 + COMMAND_EXPAND_LISTS 构建修复)
conversion/trans_data/CMakeLists.txt 1 个 P3 建议file(GLOB) 增量构建风险
conversion/trans_data/op_kernel_aicpu/format_transfer/format_transfer_utils.cpp 1 个 P2 + 2 个 P3:死代码、LCM 溢出、Measure 语义
conversion/trans_data/op_kernel_aicpu/format_transfer/format_transfer_utils.h 无问题
conversion/trans_data/op_kernel_aicpu/format_transfer/formats_definitions.h 无问题
conversion/trans_data/op_kernel_aicpu/format_transfer/register_format_transfer.cpp 无问题
conversion/trans_data/op_kernel_aicpu/format_transfer/register_format_transfer.h 无问题
conversion/trans_data/op_kernel_aicpu/trans_data_aicpu.cpp 1 个 P2 + 2 个 P3:GetSrcIndex 返回类型、memset_s 返回值丢弃、map 按值传递
conversion/trans_data/op_kernel_aicpu/trans_data_aicpu.h 无问题
conversion/trans_data/tests/ut/op_kernel_aicpu/test_trans_data.cpp 无问题

按优先级统计:

  • P0:0 个
  • P1:0 个
  • P2:2 个
    • GetSrcIndex 返回 int32_t,大张量下索引可能溢出
    • Lcma*b 可能溢出 int64_t
  • P3:5 个
    • BuildFzWithGroupsShape 死代码
    • DealDatamemset_s 返回值丢弃
    • Measure(x,0) 返回 1 而非 x
    • CMake file(GLOB) 增量构建风险
    • GetSrcIndex 按值传递 std::map 热路径性能

整体风险评估:低风险

PR1 仅包含 kernel 主框架、format_transfer 基础设施(注册/工具函数)和 3 个基础 UT。format_transfer 的具体实现在 PR2/PR3 中才会加入,因此当前代码中大部分逻辑路径(如 BuildFzWithGroupsShapeRunGroupedFormatTransferLcmMeasure)尚未被实际调用触发。已发现的问题均为防御性改进(死代码清理、返回值检查、类型一致性),不会在当前状态下导致生产故障。

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

💬 仅评论

likedislike
CANN-robotCANN-robot成员
7月16日 添加了label:cann-cla/yes
此处折叠了55条消息 查看更多
liu-weiliu-wei成员
7月21日 解决了最后一个问题
loov成员
7月21日 评论:

/lgtm

likedislike
llimwang成员
7月21日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
7月21日 添加了label:lgtmapproved
CANN-robotCANN-robot成员
7月21日 合入了pull request