Pull Request has been successfully merged by CANN-robot.
(Thank you for chenqi_814540's contribution.)变更摘要
本 PR 为 experimental/activation/silu_mul 算子新增 ascend950(Atlas A5)芯片适配,使其在 950 平台上支持 tiling 计算、kernel 执行与 aclnn 调用,同时保持 ascend910b / ascend910_93 原有路径不变。适配采用按平台编译 kernel 源与 tiling 入口分流的方式:op_host/silu_mul_def.cpp 新增独立的 ascend950 OpAICoreConfig(支持动态 Shape/Rank),op_host/silu_mul_tiling.cpp 通过 Ops::NN::OpTiling::IsRegbaseSocVersion 将 950 分流到新增的 Tiling4SiluMulArch35,950 专用 tiling 与 kernel 实现落在 op_kernel/arch35/ 下,并使用独立的 POD tiling 结构 SiluMulArch35TilingData。
主要改动
- 950 平台算子定义与 tiling 分流:
silu_mul_def.cpp新增ascend950的OpAICoreConfig(x/y/z支持 FP16/FP32/BF16、FORMAT_ND,开启DynamicCompileStaticFlag/DynamicRankSupportFlag/DynamicShapeSupportFlag);silu_mul_tiling.cpp在TilingSiluMulTiling入口按IsRegbaseSocVersion(context)分流到Tiling4SiluMulArch35。 - 新增 arch35 专用 tiling: 新增
silu_mul_tiling_arch35.cpp,通过GetCoreMemSize(CoreMemType::UB)动态查询 UB 并以ARCH35_UB_RESERVE(8KB)预留 headroom,PPMaxCalNum与下发的maxUbSize由同一可用值推导;核数估算GetNeedCoreNum改用完整lastDimSize与PPMaxCalNum比较,与 kernel 侧d > PPMaxCalNum判据一致。 - 新增 arch35 独立 tiling 结构与 kernel 实现: 新增
op_kernel/arch35/silu_mul_tiling_struct.h定义 POD 结构SiluMulArch35TilingData(含新增maxUbSize字段),与 910b 的SiluMulTilingData解耦;新增op_kernel/arch35/silu_mul.cpp与silu_mul.h,计算逻辑与 910b 保持一致(Silu×y 融合、FP32 域计算、大/小尾轴双路径、Ping-Pong 双缓冲),UB 布局尺寸改由 tiling 下发的maxUbSize决定;kernel 入口在__CCE_UT_TEST__/KERNELUT下以memcpy读取 tiling 结构以支持 CPU 模拟 UT。 - 新增 950 binary 配置: 新增
op_host/config/ascend950/silu_mul_binary.json,为float32/bfloat16/float16三种 dtype 提供SiluMul的 binary 选择配置(输入x/y、输出z,FormatAgnostic)。 - UT 与构建适配: 新增
tests/ut/op_kernel/arch35/test_silu_mul_apt.cpp(通过 extern 链接silu_mul入口,CPU 模拟执行 arch35 kernel 并比对精度);tests/ut/op_kernel/test_silu_mul.cpp增加UT_SOC_VERSION守卫,非 910b 构建时GTEST_SKIP,避免 opFile 同名导致误执行。


Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| experimental | ✅ 陈昊文, 唐玮玮 (2/2) | ✅ 陈昊文 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
boes129, thanks for your pull request. All authors of the commits have signed the CLA. 👍


compile


| 🚀 CI 流水线已启动 |
|---|
| 📋 执行详情: 点击查看流水线 |


您好,pr合入已准备就绪,请尽快联系committer进行检视,谢谢!


/lgtm


/approve


描述
experimental/activation/silu_mul 算子(z = Silu(x) × y,其中 Silu(x) = x·sigmoid(x))原有实现仅支持 ascend910b(Atlas A2)与 ascend910_93(Atlas A3)。本 PR 为该算子新增 ascend950(Atlas A5)芯片适配,使其在 950 平台上完整支持 tiling 计算、kernel 执行与 aclnn 调用;ascend910b / ascend910_93 原有代码路径保持不变,无回归风险。
适配方式(定级 L1,参照仓库内 clipped_swiglu 的双平台适配范式,核心计算保留内存式 API,不重写 MicroAPI)。kernel 源按平台编译:新增
op_kernel/CMakeLists.txt,通过add_kernel_sources按 compute unit 分发——ascend910b / ascend910_93 编译默认源op_kernel/silu_mul.cpp,ascend950 编译op_kernel/arch35/silu_mul.cpp(写入生成算子信息的kernelSrc.value供 asc_opc 取源),不采用独立 apt 入口文件:Ops::NN::OpTiling::IsRegbaseSocVersion(context)分流——ascend950 走新增的 arch35 tiling 路径,910b / 910_93 走原逻辑。GetCoreMemSize(CoreMemType::UB)动态查询替代硬编码 184KB,并预留 8KB headroom 供框架栈空间使用;PPMaxCalNum 与下发 kernel 的 maxUbSize 由预留后的同一可用 UB 推导,保证 host/kernel 自洽。d > PPMaxCalNum的路径选择判据不一致),使 host 核数估算与 kernel 实际执行路径一致。add_kernel_sources按 compute unit 分发 kernel 源(910b/910_93 → silu_mul.cpp,ascend950 → arch35/silu_mul.cpp)。关联的Issue
新增silu_mul算子950芯片适配: https://gitcode.com/cann/ops-nn/issues/5315
测试
在 ascend950(Atlas A5)Linux + CANN 9.2.0-beta.2 环境完成如下验证:
bash build.sh --pkg --experimental --ops=silu_mul --soc=ascend950 -j8编译通过并生成 run 包,host tiling 分发、arch35 tiling、950 kernel binary(三种 dtype,由 op_kernel/CMakeLists.txt 按平台分发编译)与自动生成的 aclnn 接口均正常构建。nm -D可见 aclnnSiluMul 与 aclnnSiluMulGetWorkspaceSize 符号。bash build.sh -u --ophost --experimental --ops=silu_mul --soc=ascend950,infershape 与 tiling 共 2 个用例全部 PASSED,验证 910b 原路径无回归。bash build.sh -u --opkernel --experimental --ops=silu_mul --soc=ascend950执行 arch35/test_silu_mul_apt.cpp(ascend950pr_9599 用例)全部 PASSED,验证 arch35 kernel 的 CPU 模拟执行与精度比对;--soc=ascend910b执行 910b 用例全部 PASSED,验证 UT_SOC_VERSION 守卫与既有路径无回归。文档更新
类型标签
AI/Agent生成声明