Merged
feat: add asc_uintdiv SIMT API #6009
feat: add asc_uintdiv SIMT API #6009
Merged
zhangshunwei2Add on Sep 14
zhangshunwei2Collaborators
Sep 14

描述

新增 C 风格 SIMT 快速整数除法接口,共两个,均支持 uint32/uint64:

  • asc_get_uintdiv_magic_and_shift:在核函数标量计算逻辑中根据除数预计算乘法因子 magic 和移位量 shift(该接口由 #6008 原 scalar 侧实现迁移至 simt_api/math_functions.h,与 asc_uintdiv 归置一处)。
  • asc_uintdiv:在 SIMT VF 计算逻辑中根据被除数与预计算参数,通过无符号高位乘法、加法和右移计算整数商,适用于同一除数被大量数据复用的场景。

接口用于 Ascend 950(dav-3510)的 SIMD+SIMT 混合编程,不支持纯 SIMT 编程。两种位宽的被除数及对应除数最大值分别为 INT32_MAX、INT64_MAX。两个接口在同一头文件 simt_api/math_functions.h 中提供,调用示例为完整闭环(标量预计算 + asc_vf_call + VF 内快除),可独立编译。

关联的Issue

关联 Issue #1592。

测试

  • git diff --check upstream/master 通过。
  • CANN 9.2.0 weekly 20260902、dav-3510 环境,使用本分支的公开头文件及实现编译独立 ASC 验证程序,并核对编译依赖路径。
  • NPU 实测 uint32/uint64 各 8,241 组输入,均与 CPU 整数除法一致(0 mismatch)。每种位宽包含 49 组边界排列组合与 8,192 组固定种子的随机数据,覆盖 d=1、2、3、7、半域附近、INT*_MAX-1 和 INT*_MAX。
  • 迁移后回归:ascendc_ut_simt_api_ascend950pr_9599 UT 265/265 通过(含 ASCENDC_CPU_DEBUG host 编译路径);bisheng 设备编译、纯 SIMT(--enable-simt)宏排除、混合编程 NPU 全量样例(uint32/uint64 各 8388608 元素,普通/快速除法双场景)实测通过;cycle 级性能测量确认 uint32/uint64 快除相对普通除法的收益保持。

文档更新

新增 asc_uintdiv、asc_get_uintdiv_magic_and_shift API 文档,给出高位乘法取整与预计算公式、约束及闭环调用示例;更新整数数学函数索引、混合编程 API 列表和 API 总目录。

类型标签

likedislike
Pull Request has been successfully merged by CANN-robot.
(Thank you for zhangshunwei2's contribution.)
Zzhangshunwei2Collaborators
Sep 14 Created pull request, commit e6f0d5c1
Zzhangshunwei2Collaborators
Sep 14 Associated issue: [Requirement|需求建议]: 新增C风格接口支持uintdiv
atomgit-bot
atomgit-bot
Sep 14 Comments:

抱歉,我无法回答这个问题。

likedislike
Incorrect?
atomgit-bot
atomgit-bot
Sep 14 Comments:

代码审查

✅ 未发现问题

likedislike
Incorrect?
CANN-robotCANN-robotCollaborators
Sep 14 Added label: stat/needs-squash
178 messages are collapsed here。 See more
CANN-robotCANN-robotCollaborators
Sep 20 Added label: lgtm
zhanghao_0689
zhanghao_0689Collaborators
Sep 21 Comments:

/lgtm
/approve

likedislike
ai_xinCollaborators
Sep 21 Comments:

/approve

likedislike
CANN-robotCANN-robotCollaborators
Sep 21 Added label: approved
CANN-robotCANN-robotCollaborators
Sep 21 Merged pull request