已合并
support tensor api reg vector compute select/fill/deinterleave api #5510
li-xingyue-lxy创建于 6 天前
support tensor api reg vector compute select/fill/deinterleave api #5510
已合并
li-xingyue-lxy创建于 6 天前
li-xingyue-lxy成员
6 天前

描述

1.新增tensor api reg矢量计算select/fill/deinterleave接口
2.新增tensor api reg矢量计算select/fill/deinterleave的样例和资料

关联的Issue

https://gitcode.com/cann/asc-devkit/issues/1316

测试

自验

文档更新

tensor api矢量接口资料更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 li-xingyue-lxy 的贡献)
Lli-xingyue-lxy成员
6 天前 创建了 pull request,commit 325ef328
atomgit-bot
atomgit-bot
6 天前 评论:

变更摘要

本 PR 为 Tensor API 的 experimental 寄存器向量计算新增 selectfillinterleave/deinterleave 三组接口:新增公共头文件 compare_and_select.hdata_padding.hdata_reorder.h 声明接口,并在 impl/tensor_api/experimental/arch/vector/ 下新增对应实现(通过 asc_selectasc_duplicate_scalar/asc_duplicateasc_intlv/asc_deintlv 等内置指令实现),同时更新 vector_compute.h 统一聚合这些头文件。此外还补充了 filldata_reorder 两个使用示例以及针对 __NPU_ARCH__ == 3510 的单元测试。

主要改动

  • 新增 select 接口: 新增 compare_and_select.h 声明及 compare_and_select_impl.h 实现,按条件掩码从两个 reg_tensor<T> 中逐元素选择,并通过 is_select_support_type 限制支持类型(bool、整型、fp8、halfbfloat16_tfloat 等)。
  • 新增 fill 接口: 新增 data_padding.hdata_padding_impl.h,提供以标量值或寄存器张量按掩码填充的两种重载,返回带有掩码的 reg_tensor<T>,支持类型由 is_fill_support_type 约束。
  • 新增 interleave/deinterleave 接口: 新增 data_reorder.hdata_reorder_impl.h,对两个寄存器张量执行交错/解交错并返回 reg_pair<T>(结果使用全量掩码),支持类型由 is_data_reorder_support_type 约束。
  • 聚合头文件更新: include/tensor_api/experimental/vector_compute.h 增加对 data_reorder.hdata_padding.hcompare_and_select.h 的引用,使新接口通过统一的 vector_compute.h 对外暴露。
  • 示例与测试: 新增 reg_vector_compute/fillreg_vector_compute/data_reorder 示例(含 data_utils.hscripts/gen_data.py 数据生成脚本),并新增 test_tensor_api_data_padding.cpptest_tensor_api_data_reorder.cpptest_tensor_api_compare_and_select.cpp 覆盖各支持类型的编译与掩码行为断言。
likedislike
atomgit-bot
atomgit-bot
6 天前 评论:

代码审查

关闭总结

发现统计

  • P0(2 个):阻断性编译错误 —— data_padding_impl.h 第二个 fill 重载使用未声明标识符 val(应为 src);fill.asc 使用未声明标识符 layer_out(应为 layout)。
  • P1(1 个)test_tensor_api_compare_and_select.cpp 引用全仓库未定义的宏 COMPARE_AND_SELECT_TEST,测试文件无法编译。
  • P3(7 个):data_reorder 测试期望掩码用 all_mask<uint8_t> 与 T 不一致;data_reorder.asc 死代码(count/data_type 未使用);两个示例 main 未检查 aclrt*/ReadFile/WriteFile 返回值(含失败路径泄漏 goldenData);两个 gen_data.py 未使用的 argparse 导入;两个 impl 头文件 #warning 路径写错(reg/arch/vector/);select/interleave 单测缺少数据语义验证。

各文件审查结论

  • examples/01_simd_cpp_api/07_tensor_api/experimental/reg_vector_compute/data_reorder/CMakeLists.txt —— no issues(与 fill 的 CMakeLists 一致,无实质问题)
  • examples/01_simd_cpp_api/07_tensor_api/experimental/reg_vector_compute/data_reorder/data_reorder.asc —— P3 ×2(死代码、未检查返回值);golden 数据与 deinterleave 语义核对一致
  • examples/01_simd_cpp_api/07_tensor_api/experimental/reg_vector_compute/data_reorder/data_utils.h —— no issues(ReadFile 有 size 上限检查,无溢出风险)
  • examples/01_simd_cpp_api/07_tensor_api/experimental/reg_vector_compute/data_reorder/scripts/gen_data.py —— P3(未使用的 argparse)
  • examples/01_simd_cpp_api/07_tensor_api/experimental/reg_vector_compute/fill/CMakeLists.txt —— no issues
  • examples/01_simd_cpp_api/07_tensor_api/experimental/reg_vector_compute/fill/data_utils.h —— no issues(与 data_reorder 版一致)
  • examples/01_simd_cpp_api/07_tensor_api/experimental/reg_vector_compute/fill/fill.asc —— P0layer_out 未声明)+ P3(未检查返回值/泄漏)
  • examples/01_simd_cpp_api/07_tensor_api/experimental/reg_vector_compute/fill/scripts/gen_data.py —— P3(未使用的 argparse)
  • impl/tensor_api/experimental/arch/vector/compare_and_select_impl.h —— P3(#warning 路径错误);Std:: 未限定用法与仓库既有代码一致
  • impl/tensor_api/experimental/arch/vector/data_padding_impl.h —— P0val 未声明)+ P3(#warning 路径错误)
  • impl/tensor_api/experimental/arch/vector/data_reorder_impl.h —— no issues(AscendC::Std 限定、intrinsic 调用与 mask_reg_compute_impl 模式一致)
  • include/tensor_api/experimental/arch/vector/compare_and_select.h —— no issues
  • include/tensor_api/experimental/arch/vector/data_padding.h —— no issues(默认实参 all_mask<T>() 与实现签名匹配)
  • include/tensor_api/experimental/arch/vector/data_reorder.h —— no issues
  • include/tensor_api/experimental/vector_compute.h —— no issues(新增 3 个 include)
  • tests/api/tensor_api/npu_arch_3510/aiv/test_tensor_api_compare_and_select.cpp —— P1(未定义宏)+ P3(缺数据语义测试)
  • tests/api/tensor_api/npu_arch_3510/aiv/test_tensor_api_data_padding.cpp —— no issues(自身宏完整;但会因 impl 的 P0 问题连带编译失败)
  • tests/api/tensor_api/npu_arch_3510/aiv/test_tensor_api_data_reorder.cpp —— P3(期望掩码类型不一致)

总体风险判断

本 PR 新增 API 头文件与实现、示例和单测存在 3 个会直接导致构建失败的缺陷(其中 data_padding_impl.hval 未声明会波及所有面向 3510 包含 vector_compute.h 的翻译单元),属阻断性问题,必须修复后才能合入。其余为示例健壮性、测试质量与告警文案层面的低危问题。deinterleave/fill 的金标准数据与内核语义经核对一致,API 头/实现的核心逻辑未见其他正确性缺陷。

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

⛔ 需要修改

likedislike
CANN-robotCANN-robot成员
6 天前 添加了label:cann-cla/yes
li-xingyue-lxy成员
6 天前 评论:

compile

likedislike
此处折叠了237条消息 查看更多
hyolee成员
6 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
6 天前 添加了label:approved
CANN-robot
CANN-robot成员
6 天前 评论:

The MR can not be merged, because of CodeReview discussion not resolved

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
Lli-xingyue-lxy成员
6 天前 解决了最后一个问题
CANN-robotCANN-robot成员
6 天前 合入了pull request