Merged
feat(random): stateless_random_normal_v2/v3、stateless_uniform 支持 ascend960dt/ascend960pr 平台 #6175
feat(random): stateless_random_normal_v2/v3、stateless_uniform 支持 ascend960dt/ascend960pr 平台 #6175
Merged
吴成文Add on Oct 9
吴成文
Oct 9

描述

将 stateless_random_normal_v2、stateless_random_normal_v3、stateless_uniform 三个随机数算子的 Ascend 960 平台支持从 A6(ops-math-dev) 迁移到主线,支持 ascend960dt / ascend960pr 两颗芯片。

迁移策略(少量修改→架构隔离,复用 arch35 目录):逐文件归一化比对(MicroAPI→Reg 改名、忽略换行缩进)后确认三者 kernel 逻辑与主线 arch35 版本完全等价,tiling 仅切分对齐粒度存在架构差异,故不新建 arch92 目录、不引入重复代码,差异按 NpuArch 精确等值判断隔离(SocVersion 枚举中 960 追加在末尾,不能用区间比较)。

改动内容:

  • 算子注册:三个算子 def.cpp 增加 AddConfig("ascend960dt") / AddConfig("ascend960pr");CMakeLists.txt 的 SUPPORT_COMPUTE_UNIT 与 SUPPORT_TILING_DIR 一一对应新增两颗芯片(tiling 复用 arch35)。
  • kernel 编译配置:ascendc_config.json 为三个算子注册 ascend960dt/ascend960pr 的 compute_units 与 compile_options(-mllvm -cce-aicore-dcci-before-kernel-end=false),与主线既有 960dt 算子(MirrorPad/Pad/SplitV 等)一致;否则 960 编译将缺失该 DCCI 选项。
  • tiling 架构隔离:
    • stateless_random_normal_v2:IsArch92() 按 NpuArch::DAV_9201/9202 判断,arch92 核间按 32 元素对齐、UB 按 256 元素向下对齐;arch35 保持原 512 字节核间对齐、32 字节 UB 向上对齐。CompileInfo 增加 isArch92 标记,覆盖 platformInfo 不可用时回退 CompileInfo 通路的判定。
    • stateless_random_normal_v3:新增 BeforeProcess() 覆写,arch92 下将 coreAlignSize 由 512 改为 32;platformInfo 为空时保持默认值。
    • stateless_uniform:tiling/kernel 与主线 arch35 完全一致,无需隔离。
  • kernel 架构宏隔离:stateless_random_normal_v3 kernel 入口用 #if defined(__DAV_VEC__) 包裹(AIV_ONLY 且依赖仅 Vector 核提供的 RegBase VF 接口),避免 AIC 编译通道实例化。
  • op_api:aclnn_normal_out.cpp 抽取 IsNormalV3SupportedArch(),Normal V3 兼容通路由仅 DAV_3510 扩展为 DAV_3510/DAV_9201/DAV_9202。
  • UT:新增 stateless_uniform_tiling.h host shim(stateless_uniform kernel 引用 device SIMT builtin __mul_i32toi64,host 侧编译缺失导致其 op_kernel UT 链接失败;cmake 检测到 <op>_tiling.h 后 -include 注入全部 TU 提供等价实现,stateless_normal 等 5 个既有算子早已采用此写法)。

关联的Issue

https://gitcode.com/cann/ops-math/issues/3657

测试

  • op_host UT:30/30 通过(三个算子 tiling + infershape)
  • op_api UT:47/47 通过(Normal L2 四接口 + StatelessUniform L0)
  • 三个算子 ascend950 kernel 二进制构建通过;v3 的 __DAV_VEC__ 宏经 A/B 对比生成的 .o 与加宏前 MD5 完全一致(对 950 零影响)
  • arch92 tiling 算式对账:按 A6 公式算得编码 53876069761280 与 A6 自身提交的 UT 期望值一致;arch35 仍为 54563264528640,与主线一致
  • libophost_math.so 全量编译通过;修改文件全部通过仓库 pre-commit(clang-format/end-of-file/codespell/OAT 合规)
  • 注:本地 CANN 包仅支持 ascend950,ascend960dt/ascend960pr 的 kernel 编译需在支持 960 的 CANN 版本上验证

文档更新

无

类型标签

likedislike
Pull Request has been successfully merged by CANN-robot.
(Thank you for 吴成文's contribution.)
吴成文吴成文
Oct 9 Created pull request, commit 55fa0c57
atomgit-bot
atomgit-bot
Oct 9 Comments:

变更摘要

本 PR 将 stateless_random_normal_v2、stateless_random_normal_v3、stateless_uniform 三个随机数算子的 Ascend 960 平台支持迁移至主线,新增 ascend960dt / ascend960pr 两颗芯片的直接支持。由于三者 kernel 逻辑与主线 arch35 版本等价,本次不新建 arch92 目录,而是复用 arch35 目录并按 NpuArch(DAV_9201/DAV_9202)精确等值判断来隔离 tiling 差异,同时补充算子注册、kernel 编译配置与 UT host shim。

主要改动

  • 三算子新增 960 芯片算子注册: stateless_random_normal_v2_def.cpp、stateless_random_normal_v3_def.cpp、stateless_uniform_def.cpp 均新增 AddConfig("ascend960dt") 与 AddConfig("ascend960pr"),使算子在两颗新芯片上可被注册与调度。
  • stateless_random_normal_v2 tiling 架构隔离: 新增 IsArch92() 按 NpuArch::DAV_9201/DAV_9202 判定,BlockTiling() 中核间对齐由 CORE_ALIGN_SIZE / dtypeSize 改为 arch92 的 CORE_ALIGN_ELEMENTS_ARCH92(32 元素),UbTiling() 改为按 UB_ALIGN_ELEMENTS_ARCH92(256 元素)向下对齐;StatelessRandomNormalV2CompileInfo 增加 isArch92 字段,用于 platformInfo 不可用回退 CompileInfo 通路时的判定。
  • stateless_random_normal_v3 增加 BeforeProcess() 覆写: 在该钩子中按 NpuArch 判断,arch92 时把 config_.coreAlignSize 由 CORE_ALIGN_SIZE(512)改为新增的 CORE_ALIGN_SIZE_ARCH92(32),platformInfo 为空时保持默认值。
  • op_api Normal V3 兼容通路扩展: aclnn_normal_out.cpp 抽取 IsNormalV3SupportedArch(),将 Normal V3 兼容通路的架构判断由仅 DAV_3510 扩展为 DAV_3510/DAV_9201/DAV_9202,并替换 CommonLogicGeneralNormal 中的两处判断。
  • kernel 宏隔离与 960 编译配置: stateless_random_normal_v3.cpp 的 kernel 入口用 #if defined(__DAV_VEC__) 包裹,避免 AIC 编译通道实例化;ascendc_config.json 为三算子新增 ascend960dt/ascend960pr 的 compute_units 与 compile_options(-mllvm -cce-aicore-dcci-before-kernel-end=false)。
likedislike
Incorrect?
atomgit-bot
atomgit-bot
Oct 9 Comments:

代码审查

✅ 未发现问题

likedislike
Incorrect?
CANN-robotCANN-robotCollaborators
Oct 9 Added label: stat/needs-squash
CANN-robotCANN-robotCollaborators
Oct 9 Added label: cann-cla/yes
72 messages are collapsed here。 See more
CANN-robotCANN-robotCollaborators
22 days ago Added label: approved
yue-maCollaborators
22 days ago Comments:

/lgtm
/approve

likedislike
CANN-robotCANN-robotCollaborators
22 days ago Added label: lgtm
CANN-robotCANN-robotCollaborators
22 days ago Closed associated issue
CANN-robotCANN-robotCollaborators
22 days ago Merged pull request