Pull Request已成功合入, 合并人@CANN-robot
(感谢 pantong 的贡献)变更摘要
本PR是 TransData aicpu kernel 迁移三部分中的第一部分,主要引入了 format_transfer 基础框架(工具函数、格式定义、注册机制)以及 TransData aicpu kernel 的完整实现,同时添加了 3 个基础单元测试。核心思路是:在 format_transfer/ 目录下建立可扩展的格式转换注册与调度基础设施,TransDataCpuKernel::Compute 根据是否"原生支持"格式转换来分发到新路径(NewCompute → RunFormatTransfer → TransFormat)或保留的旧路径(如 HandleHwcnToFzC04、DealData)。具体的 format_transfer 转换实现尚未加入,将在后续 PR2/PR3 中补充。
主要改动
-
新增 format_transfer 基础框架:在
format_transfer/目录下新增formats_definitions.h(定义各类格式维度索引枚举)、format_transfer_utils.h/cpp(形状校验、Cube/C0 计算、维度提取、分组 FZ 形状构建、TransFormat入口等工具函数)、register_format_transfer.h/cpp(TransArgs结构体、FormatTransfer抽象基类、REGISTER_FORMAT_TRANSFER注册宏及BuildFormatTransfer/FormatTransferExists查找函数),为后续具体格式转换实现提供可插拔的注册与调度能力。 -
新增 TransData aicpu kernel 实现:在
trans_data_aicpu.h/cpp中实现TransDataCpuKernel类,Compute方法通过IsOriginSupportFormatTransfer判断是否走新路径NewCompute(调用RunFormatTransfer→TransFormat进行格式转换),否则回退到保留的旧路径(HandleHwcnToFzC04处理 HWCN→FZC04 转换,DealData/DispatchDealData处理其他情况),同时包含PaddingOne/PaddingTwo/Transpose等辅助方法。 -
cmake 构建调整:在
cmake/symbol.cmake的gen_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。


代码审查
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,大张量下索引可能溢出Lcm中a*b可能溢出int64_t
- P3:5 个
BuildFzWithGroupsShape死代码DealData中memset_s返回值丢弃Measure(x,0)返回 1 而非 x- CMake
file(GLOB)增量构建风险 GetSrcIndex按值传递std::map热路径性能
整体风险评估:低风险
PR1 仅包含 kernel 主框架、format_transfer 基础设施(注册/工具函数)和 3 个基础 UT。format_transfer 的具体实现在 PR2/PR3 中才会加入,因此当前代码中大部分逻辑路径(如 BuildFzWithGroupsShape、RunGroupedFormatTransfer、Lcm、Measure)尚未被实际调用触发。已发现的问题均为防御性改进(死代码清理、返回值检查、类型一致性),不会在当前状态下导致生产故障。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


描述
将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.
修复检视意见:
No _aicpu_def.cpp (canndev TransData still active).
类型标签