已合并
【C API】feat: 新增asc_ld_dev并支持duplicate highest模式 #5039
guojianyang创建于 14 天前
【C API】feat: 新增asc_ld_dev并支持duplicate highest模式 #5039
已合并
guojianyang创建于 14 天前
guojianyang
guojianyang成员
14 天前

描述

新增asc_load_dev,提供不经过dcache的gm标量读功能,和duplicate的highest模式。

关联的Issue

NA

测试

自验证通过

文档更新

补充asc_load_dev.md和asc_duplicate_highest.md

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 guojianyang 的贡献)
guojianyangguojianyang成员
14 天前 创建了 pull request,commit 913aa30d
atomgit-bot
atomgit-bot
14 天前 评论:

变更摘要

此 PR 主要包含两项 C API 功能扩展:一是新增标量计算指令 asc_ld_dev,用于从设备全局内存(__gm__)中加载数据,支持 int8_t/uint8_tint64_t/uint64_t 共 8 种数据类型;二是为 asc_duplicateasc_duplicate_merge 向量指令新增 HIGHEST 位置模式重载,允许以向量中最高位元素进行复制操作,覆盖全部 12 种向量数据类型。同时,asc_position_mode 枚举新增 HIGHEST 成员及对应的 ASC_POSITION_HIGHEST 常量。

主要改动

  • 新增 asc_ld_dev 标量加载指令:在公开头文件 scalar_compute.h 中声明了 8 个重载,内部通过新增的 asc_ld_dev_impl.h 实现,统一委托底层 ld_dev 指令(偏移量为 0),有符号类型通过 static_cast 进行带符号扩展返回 int64_t,无符号类型返回 uint64_t

  • asc_duplicate 支持 HIGHEST 模式:在 reg_vector.h 声明、vector_compute_impl.h 转发、asc_duplicate_impl.h 实现三层分别新增接受 std::integral_constant<asc_position_mode, asc_position_mode::HIGHEST> 参数的重载,调用底层 vdup 时传入 POS_HIGHESTMODE_ZEROING

  • asc_duplicate_merge 支持 HIGHEST 模式:同样三层新增重载,调用 vdup 时传入 POS_HIGHESTMODE_MERGING,与普通 asc_duplicate 的归零模式形成互补。

  • asc_position_mode 枚举扩展:在 enum.h 中新增 HIGHEST 成员,并定义 ASC_POSITION_HIGHEST 编译期常量,供接口层使用 std::integral_constant 进行重载派发。

  • 新增对应单元测试test_asc_ld_dev.cpp 通过 mock ld_dev 验证各类型调用的偏移量和返回值符号扩展正确性;test_asc_duplicate.cpp 新增 TEST_VECTOR_COMPUTE_DUPLICATE_HIGHEST_INSTRTEST_VECTOR_COMPUTE_DUPLICATE_MERGE_HIGHEST_INSTR 两组宏测试,验证 POS_HIGHEST 位置和对应模式参数传递正确。

likedislike
atomgit-bot
atomgit-bot
14 天前 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
14 天前 添加了label:stat/needs-squash
CANN-robotCANN-robot成员
14 天前 添加了label:cann-cla/yes
此处折叠了158条消息 查看更多
吴洋成员
9 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
9 天前 添加了label:lgtm
吴洋成员
9 天前 评论:

/approve

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