合并受阻
变更摘要
本 PR 的主题是移除算子中未实际使用的向量系统 workspace 预留。此前多个算子通过 ascendcPlatform.GetLibApiWorkSpaceSize() 或固定常量(如 16777216、32)向 tiling context 申请 workspace,但实际并未使用。改动将相关 tiling 中的 workspace 大小统一置为 0,并同步移除了 kernel 侧 Init 接口中不再需要的 GM_ADDR workspace 参数,同时更新了大量 UT 的期望值并新增了非连续调度下的校验用例。此外,cmake/third_party/opbase.cmake 中增加了对本地 opbase 源码目录的支持。
主要改动
- tiling 中 workspace 统一置 0: 在
muls_tiling_arch35.cpp、pow_tiling_arch35.cpp中移除platform_ascendc::PlatformAscendC与GetLibApiWorkSpaceSize()调用,直接设置currentWorkspace[0] = 0;lerp_tiling_arch35.cpp、select_simt_tiling.cpp、tanh_grad_tiling_arch35.cpp删除WORKSPACE_SIZE常量并将workspaceSize_设为 0。 - kernel
Init接口移除 workspace 参数:lerp_apt.cpp、pow_apt.cpp、tanh_grad_apt.cpp及其 arch35 下各 NDDMA 实现头文件中的Init(...)签名去掉GM_ADDR workspace,调用点同步调整,收敛了内核入口参数。 powkernel 删除系统 workspace 获取逻辑:pow_apt.cpp中移除SetSysWorkspace、GetUserWorkspace调用以及workspace == nullptr/userWS == nullptr的提前返回分支。- UT 期望值更新与新增校验用例: 大量算子的
expectWorkspaces/expectedWorkspaces由{16777216}或{32}改为{0};test_add_tiling.cpp新增shared_broadcast_noncontiguous_workspace用例,校验注册入口在三种非连续调度模式下GetWorkspaceSizes(1)[0]为 0 且GetTilingKey()与模式匹配。 - opbase 本地源码目录支持:
opbase.cmake新增OPBASE_LOCAL_SOURCE_DIR缓存变量用于指定本地 opbase 源码路径并做有效性校验,同时在缓存 include 目录与实际源目录不一致时清空OPBASE_INC_DIR。
🧩 本次 Review 已使用自定义 Skill:




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
⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 2 person(s) per module)、approve (requires ≥ 1 person(s) per module)
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| conversion/clip_by_value_v2 | ❌ (0/2)(You can also ask: 周奇龙, 冯彤, 王瑞, 顾宝成, yue-ma) | ❌ (0/1)(You can also ask: 王瑞, zhangzijie, 王林木, zhangyuxiang0119, zhanw_coding) |
| math/add | ❌ (0/2)(You can also ask: andong_hw, 唐燕峰, yue-ma, 张磊, 顾宝成) | ❌ (0/1)(You can also ask: xuejinghui, 顾宝成, 徐鲁威, zhangzijie, 汤平川) |
| math/addcdiv | ❌ (0/2)(You can also ask: yue-ma, clinglai0517, zhanw_coding, 顾宝成, onanfield) | ❌ (0/1)(You can also ask: 周奇龙, yue-ma, 王瑞, 宋恺, zhangzijie) |
| math/addcmul | ❌ (0/2)(You can also ask: 宋恺, yue-ma, 冯彤, 周奇龙, 王瑞) | ❌ (0/1)(You can also ask: 张磊, 顾宝成, 徐鲁威, xuejinghui, clinglai0517) |
| math/axpy | ❌ (0/2)(You can also ask: onanfield, 宋恺, yue-ma, andong_hw, zhangzijie) | ❌ (0/1)(You can also ask: andong_hw, xuejinghui, zhangyuxiang0119, 顾宝成, zhanw_coding) |
| math/axpy_v2 | ❌ (0/2)(You can also ask: zhanw_coding, 冯彤, clinglai0517, 陈兴宇, onanfield) | ❌ (0/1)(You can also ask: 顾宝成, onanfield, yue-ma, zhangyuxiang0119, 王瑞) |
| math/div | ❌ (0/2)(You can also ask: 冯彤, 周奇龙, zhangyuxiang0119, 张磊, andong_hw) | ❌ (0/1)(You can also ask: 陈兴宇, 徐鲁威, xuejinghui, andong_hw, onanfield) |
| math/equal | ❌ (0/2)(You can also ask: onanfield, 陈兴宇, 冯彤, yue-ma, xuejinghui) | ❌ (0/1)(You can also ask: 陈兴宇, 王林木, zhangyuxiang0119, 顾宝成, 宋恺) |
| math/floor_div | ❌ (0/2)(You can also ask: 徐鲁威, xuejinghui, 周奇龙, 唐燕峰, 王林木) | ❌ (0/1)(You can also ask: 张磊, zhanw_coding, 徐鲁威, 汤平川, xuejinghui) |
| math/floor_mod | ❌ (0/2)(You can also ask: 唐燕峰, yue-ma, 徐鲁威, 张磊, 宋恺) | ❌ (0/1)(You can also ask: 宋恺, 汤平川, zhanw_coding, 张磊, xuejinghui) |
| math/greater | ❌ (0/2)(You can also ask: andong_hw, 宋恺, onanfield, 王林木, jia0liang) | ❌ (0/1)(You can also ask: 宋恺, xuejinghui, 张磊, 陈兴宇, zhangyuxiang0119) |
| math/greater_equal | ❌ (0/2)(You can also ask: 冯彤, clinglai0517, 唐燕峰, 张磊, 周奇龙) | ❌ (0/1)(You can also ask: zhangyuxiang0119, 陈兴宇, 王林木, 宋恺, 汤平川) |
| math/lerp | ❌ (0/2)(You can also ask: jia0liang, 陈兴宇, 顾宝成, zhangzijie, 冯彤) | ❌ (0/1)(You can also ask: 唐燕峰, 宋恺, 徐鲁威, 王林木, zhanw_coding) |
| math/less | ❌ (0/2)(You can also ask: 王瑞, 周奇龙, clinglai0517, zhangzijie, zhanw_coding) | ❌ (0/1)(You can also ask: zhangzijie, 唐燕峰, 张磊, 王林木, 汤平川) |
| math/less_equal | ❌ (0/2)(You can also ask: xuejinghui, zhanw_coding, 周奇龙, yue-ma, onanfield) | ❌ (0/1)(You can also ask: 顾宝成, 王林木, zhanw_coding, xuejinghui, 汤平川) |
| math/logical_and | ❌ (0/2)(You can also ask: 徐鲁威, zhangyuxiang0119, 王瑞, jia0liang, 张磊) | ❌ (0/1)(You can also ask: onanfield, 王林木, 唐燕峰, 张磊, 徐鲁威) |
| math/logical_or | ❌ (0/2)(You can also ask: jia0liang, zhanw_coding, 宋恺, yue-ma, 王林木) | ❌ (0/1)(You can also ask: 陈兴宇, 唐燕峰, zhanw_coding, 周奇龙, clinglai0517) |
| math/maximum | ❌ (0/2)(You can also ask: 张磊, onanfield, 宋恺, zhangyuxiang0119, 陈兴宇) | ❌ (0/1)(You can also ask: 顾宝成, 王瑞, onanfield, 陈兴宇, andong_hw) |
| math/minimum | ❌ (0/2)(You can also ask: 顾宝成, andong_hw, 宋恺, jia0liang, xuejinghui) | ❌ (0/1)(You can also ask: xuejinghui, 唐燕峰, 陈兴宇, onanfield, 顾宝成) |
| math/mod | ❌ (0/2)(You can also ask: 冯彤, zhanw_coding, zhangzijie, 陈兴宇, 张磊) | ❌ (0/1)(You can also ask: yue-ma, 陈兴宇, 王林木, zhangzijie, 徐鲁威) |
| math/mul | ❌ (0/2)(You can also ask: zhanw_coding, 张磊, clinglai0517, 徐鲁威, 王瑞) | ❌ (0/1)(You can also ask: 徐鲁威, 王瑞, zhangzijie, xuejinghui, 陈兴宇) |
| math/muls | ❌ (0/2)(You can also ask: 宋恺, zhangzijie, andong_hw, 汤平川, jia0liang) | ❌ (0/1)(You can also ask: 陈兴宇, 冯彤, 唐燕峰, onanfield, yue-ma) |
| math/not_equal | ❌ (0/2)(You can also ask: clinglai0517, 张磊, 王瑞, zhangzijie, 王林木) | ❌ (0/1)(You can also ask: 宋恺, 王林木, 徐鲁威, 陈兴宇, zhangyuxiang0119) |
| math/pow | ❌ (0/2)(You can also ask: 宋恺, 冯彤, 陈兴宇, 唐燕峰, xuejinghui) | ❌ (0/1)(You can also ask: yue-ma, 唐燕峰, 徐鲁威, zhangzijie, 王瑞) |
| math/real_div | ❌ (0/2)(You can also ask: yue-ma, 王林木, 汤平川, clinglai0517, 周奇龙) | ❌ (0/1)(You can also ask: clinglai0517, onanfield, 宋恺, 汤平川, zhanw_coding) |
| math/select | ❌ (0/2)(You can also ask: zhangzijie, 唐燕峰, 周奇龙, clinglai0517, 宋恺) | ❌ (0/1)(You can also ask: 徐鲁威, 王瑞, yue-ma, clinglai0517, 顾宝成) |
| math/sub | ❌ (0/2)(You can also ask: zhanw_coding, yue-ma, zhangzijie, 陈兴宇, 顾宝成) | ❌ (0/1)(You can also ask: onanfield, yue-ma, 周奇龙, xuejinghui, 徐鲁威) |
| math/tanh_grad | ❌ (0/2)(You can also ask: zhangzijie, onanfield, 王瑞, 唐燕峰, 宋恺) | ❌ (0/1)(You can also ask: yue-ma, 冯彤, 王林木, 宋恺, 张磊) |
| repo-cann/ops-math | ❌ (0/2)(You can also ask: zhanw_coding, zhangzijie, yue-ma, clinglai0517, xuejinghui) | ❌ (0/1)(You can also ask: 顾宝成, 冯彤, zhanw_coding, yue-ma, onanfield) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
zhang-song-rui, thanks for your pull request. All authors of the commits have signed the CLA. 👍


描述
减少 Math Vector 路径未使用的 workspace 申请,保留计算逻辑和内部 kernel 接口。
整改策略:原来额外申请了 userworkspace 的分支,保留系统预留和用户空间;没有额外 userworkspace 且不依赖 KFC 的分支,将系统空间申请量清零,并在 kernel 入口适配零 workspace。保留内部 kernel 参数和调用形式;无需用户空间的路径不调用 GetUserWorkspace,需要用户空间的路径保留正确的地址转换。
验证
2026-10-17 Host 构建及 UT:334/334 通过,使用固定 opbase 依赖叠加 PR 1007 的 Broadcast 补丁联调;不代表未包含补丁的默认远程依赖已通过。完成入口调用参数及源码差异检查。本次入口调整未重新进行设备验证,下方设备数据仅为历史版本结果。
依赖及构建
生产 CMake 无改动。opbase PR 1007 合入后,再将远程依赖固定到包含补丁的上游 commit。测试 CMake 仅补充注册入口测试所需的 SDK pkg_inc 头文件搜索路径。
关联
未关联独立 Issue。依赖 opbase PR 1007;相关 NN PR 11789、Transformer PR 13661。
历史版本验证记录(不作为当前提交的设备验证结论)
分类验证结果(2026-10-13)
验证环境:Ascend950PR_9579,CANN 9.2.0(20260909)。这里的“二进制一致”指相同输入下输出张量的原始字节一致,不是编译产物文件一致。基线输入固定回放,独立检查输出元数据和原始字节。
范围限制:全量结果来自变基前联调版本(原依赖对照、opbase 6dc960b 加公共补丁);不能替代 opbase PR 1007 合入、更新远程固定 commit 后的默认构建复测。当前该依赖接入仍待完成。
【输出】二进制一致
固定输入 kernel 回放:430/430 项输出逐字节一致。新增大规模候选:78/78 项直接与最初基线输出一致,实际基线 ≥20 μs 的用例 74 项。
固定输入逐用例结果(展开)
【精度标准】与修改前一致
上述用例输出逐字节一致,因此在已测输入范围内精度与修改前一致;不将此结论推广为穷尽所有输入或其他设备。
【性能标准】与修改前一致
按约定判定:基线 <20 μs 的小 shape 允许 1 μs 波动;大 shape 允许 <5% 波动。性能改善单列为改善,不算退化。计时来自 CANN 硬件任务记录,不使用主机墙钟。下表保留原始首轮数据;超阈值项目以明确列出的复测结论评估。
原始性能对照:39 项
新增大规模候选:78 项(含少量实际 <20 μs 的候选)
首轮超阈值复测:AxpyV2 广播首轮 +5.39%。采用 修改前 → 修改后 → 修改后 → 修改前 顺序,每轮 100 次,两轮中位数合并结果如下,复测满足 <5% 阈值。
验证边界与待办
历史联调已覆盖大小 shape;当前变基后的全量设备回归和最终远程依赖版本默认构建未完成。Ascend350 仅有配置/源码审查,未做硬件验证。此附件发布已有结果,不代表专项已完成最终交付。
性能复测方法:按“修改前 → 修改后 → 修改后 → 修改前”的顺序执行四轮,每轮启动 100 次。每轮使用硬件任务耗时,丢弃首次样本后取中位数;分别对两轮修改前、两轮修改后的中位数取平均,作为最终对照耗时。变化率 =(修改后耗时 − 修改前耗时)÷ 修改前耗时 × 100%。该顺序用于减轻温度、频率等随时间变化带来的测量偏差,不能完全消除干扰。
算子 UT 及本地验证
Add 沿用既有 ExecuteTestCase 注册调用路径,两条原有用例检查 workspace 为 0。公共 tests/ut/common 测试框架文件与 PR 基线完全一致;本 PR 的 UT 改动均位于各算子 tests/ut 目录。
本地重新编译最终 Add 测试对象,重建静态归档并确认归档包含新对象,随后完成 math_op_host_ut 最终链接。当前本地 Host UT 333/333 通过,39 个 PR 改动文件 pre-commit 通过。环境为 CANN 9.2.0、已接入 Broadcast workspace 补丁的既有联调依赖;不替代 CANN 9.3.0 CI 的新流水线结果。