Merged
feat(random): stateless_random_normal_v2/v3、stateless_uniform 支持 ascend960dt/ascend960pr 平台 #6175
吴成文Add on Oct 9
feat(random): stateless_random_normal_v2/v3、stateless_uniform 支持 ascend960dt/ascend960pr 平台 #6175
Merged
Pull Request has been successfully merged by CANN-robot.
(Thank you for 吴成文's contribution.)atomgit-bot
Oct 9 Comments:
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_v2tiling 架构隔离: 新增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)。


Incorrect?
atomgit-bot
Oct 9 Comments:
Oct 9 Comments:
Oct 9 Added label: stat/needs-squash
Oct 9 Added label: cann-cla/yes
72 messages are collapsed here。 See more
22 days ago Added label: approved
22 days ago Added label: lgtm
22 days ago Closed associated issue
22 days ago Merged pull request
描述
将
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)。ascendc_config.json为三个算子注册ascend960dt/ascend960pr的compute_units与compile_options(-mllvm -cce-aicore-dcci-before-kernel-end=false),与主线既有 960dt 算子(MirrorPad/Pad/SplitV 等)一致;否则 960 编译将缺失该 DCCI 选项。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 完全一致,无需隔离。stateless_random_normal_v3kernel 入口用#if defined(__DAV_VEC__)包裹(AIV_ONLY 且依赖仅 Vector 核提供的 RegBase VF 接口),避免 AIC 编译通道实例化。aclnn_normal_out.cpp抽取IsNormalV3SupportedArch(),Normal V3 兼容通路由仅DAV_3510扩展为DAV_3510/DAV_9201/DAV_9202。stateless_uniform_tiling.hhost shim(stateless_uniformkernel 引用 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
测试
__DAV_VEC__宏经 A/B 对比生成的.o与加宏前 MD5 完全一致(对 950 零影响)53876069761280与 A6 自身提交的 UT 期望值一致;arch35 仍为54563264528640,与主线一致libophost_math.so全量编译通过;修改文件全部通过仓库 pre-commit(clang-format/end-of-file/codespell/OAT 合规)文档更新
无
类型标签