Pull Request已成功合入, 合并人@CANN-robot
(感谢 ligen75 的贡献)变更摘要
此 PR 将多个批量逐元素数学算子(abs、ceil、cos、log1p、logical_not、neg、round、rsqrt、sign、sin、square)统一迁移到 elewise16B 接口。核心变动包括:将各算子自定义的 Tiling 数据结构替换为统一的 EleBaseTilingData16B(round 算子使用 EleBaseTilingData32B);kernel 端调度器从 ElementwiseSch 迁移到 ElementwiseSch16B(或 ElementwiseSchWithScalar);tiling 数据获取方式从 GET_TILING_DATA_WITH_STRUCT 改为 GET_TILING_DATA_PTR_WITH_STRUCT;SetTilingData 签名统一增加 const ElewiseBaseTiling& 参数以获取 block dim 和 scheme mode;同时清理了各算子独立的命名空间和冗余的 tiling 结构体头文件引用。
主要改动
-
统一 Tiling 数据结构为
EleBaseTilingData16B:所有算子(abs、ceil、cos、log1p、logical_not、neg、rsqrt、sign、sin、square)的 tiling data 类型从各自的AbsTilingData、CeilTilingData、CosTilingData等独立结构体统一改为EleBaseTilingData16B;round 算子因需要额外标量参数而使用EleBaseTilingData32B。 -
Kernel 调度器从
ElementwiseSch迁移到ElementwiseSch16B:所有算子的 kernel 实现中,原先通过ElementwiseSch(&(tilingData.baseTiling), &pipe)构造调度器的模式改为直接使用ElementwiseSch16B(tilingData)(round 使用ElementwiseSchWithScalar),同时移除了局部TPipe pipe变量的声明。 -
SetTilingData接口重构:所有算子的SetTilingData方法签名从无参改为接收const ElewiseBaseTiling& elewiseBaseTiling参数,内部通过elewiseBaseTiling.GetBlockDim()替代原先的tiling->baseTiling.blockNum来设置 block dimension;scheMode由tiling->baseTiling.scheMode硬编码为1。 -
Tiling 数据获取方式变更:kernel 端从
GET_TILING_DATA_WITH_STRUCT改为GET_TILING_DATA_PTR_WITH_STRUCT,host 端GetTilingData<T>()调用结果从成员指针变量改为局部auto变量并通过解引用传递给DoTiling。 -
清理算子独立命名空间和冗余头文件:移除了
using namespace AbsNs、using namespace CeilNs、using namespace SquareNs、using namespace SignNs、using namespace SinNs等算子专属命名空间引用,以及对应的独立 tiling 结构体头文件(如abs_struct.h、ceil_tiling_struct.h、neg_tiling_struct.h等)的 include。


代码审查
审查总结
已审查全部 33 个变更文件,每文件逐一核实。结果汇总如下:
| 优先级 | 数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 0 |
| P3 | 1 |
按文件审查结果:
| 文件 | 结果 |
|---|---|
math/abs/op_host/arch35/abs_tiling_arch35.cpp |
无问题 |
math/abs/op_host/arch35/abs_tiling_arch35.h |
无问题 |
math/abs/op_kernel/abs_apt.cpp |
无问题 |
math/abs/tests/ut/op_host/arch35/test_abs_tiling_arch35.cpp |
无问题 |
math/ceil/op_host/arch35/ceil_tiling_arch35.cpp |
P3(scheMode 硬编码) |
math/ceil/op_host/arch35/ceil_tiling_arch35.h |
无问题 |
math/ceil/op_kernel/ceil_apt.cpp |
无问题 |
math/cos/op_host/arch35/cos_tiling_arch35.cpp |
无问题(同一 P3 模式) |
math/cos/op_host/arch35/cos_tiling_arch35.h |
无问题 |
math/cos/op_kernel/cos_apt.cpp |
无问题 |
math/log1p/op_host/arch35/log1p_tiling_arch35.cpp |
无问题 |
math/log1p/op_host/arch35/log1p_tiling_arch35.h |
无问题 |
math/log1p/op_kernel/log1p_apt.cpp |
无问题 |
math/logical_not/op_host/arch35/logical_not_tiling_arch35.cpp |
无问题 |
math/logical_not/op_kernel/logical_not_apt.cpp |
无问题 |
math/neg/op_host/arch35/neg_tiling_arch35.cpp |
无问题 |
math/neg/op_kernel/neg_apt.cpp |
无问题 |
math/neg/tests/ut/op_host/arch35/test_neg_tiling_arch35.cpp |
无问题 |
math/round/op_host/arch35/round_tiling_arch35.cpp |
无问题 |
math/round/op_host/arch35/round_tiling_arch35.h |
无问题 |
math/round/op_kernel/round_apt.cpp |
无问题 |
math/rsqrt/op_host/arch35/rsqrt_tiling_arch35.cpp |
无问题 |
math/rsqrt/op_host/arch35/rsqrt_tiling_arch35.h |
无问题 |
math/rsqrt/op_kernel/rsqrt_apt.cpp |
无问题 |
math/sign/op_host/arch35/sign_tiling_arch35.cpp |
无问题 |
math/sign/op_host/arch35/sign_tiling_arch35.h |
无问题 |
math/sign/op_kernel/sign_apt.cpp |
无问题 |
math/sin/op_host/arch35/sin_tiling_arch35.cpp |
无问题 |
math/sin/op_host/arch35/sin_tiling_arch35.h |
无问题 |
math/sin/op_kernel/sin_apt.cpp |
无问题 |
math/square/op_host/arch35/square_tiling_arch35.cpp |
无问题 |
math/square/op_host/arch35/square_tiling_arch35.h |
无问题 |
math/square/op_kernel/square_apt.cpp |
无问题 |
整体风险判断:低。 此次 diff 是一个机械性的、高度一致的重构,将 11 个数学算子从各自的 tiling 数据结构统一迁移到 EleBaseTilingData16B/EleBaseTilingData32B 接口。所有 host-kernel 契约、调用顺序和类型映射均保持一致。唯一的 P3 发现是 GET_TPL_TILING_KEY 中 scheMode 的硬编码,这可能是有意为之,也可能是疏忽,需由算子作者确认。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 3 |
| 🟡 建议 | 1 |
⛔ 需要修改


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
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| math/abs | ✅ 宋恺, wangrui_ (2/2) | ✅ wangrui_, 宋恺 (2/1) |
| math/ceil | ✅ 宋恺, wangrui_ (2/2) | ✅ 宋恺, wangrui_ (2/1) |
| math/cos | ✅ wangrui_, 宋恺 (2/2) | ✅ wangrui_, 宋恺 (2/1) |
| math/logical_not | ✅ wangrui_, 宋恺 (2/2) | ✅ wangrui_, 宋恺 (2/1) |
| math/neg | ✅ wangrui_, 宋恺 (2/2) | ✅ wangrui_, 宋恺 (2/1) |
| math/round | ✅ wangrui_, 宋恺 (2/2) | ✅ wangrui_, 宋恺 (2/1) |
| math/rsqrt | ✅ 宋恺, wangrui_ (2/2) | ✅ 宋恺, wangrui_ (2/1) |
| math/sign | ✅ wangrui_, 宋恺 (2/2) | ✅ 宋恺, wangrui_ (2/1) |
| math/sin | ✅ wangrui_, 宋恺 (2/2) | ✅ wangrui_, 宋恺 (2/1) |
| math/square | ✅ wangrui_, 宋恺 (2/2) | ✅ wangrui_, 宋恺 (2/1) |
| repo-cann/ops-math | ✅ wangrui_, 宋恺 (2/2) | ✅ wangrui_, 宋恺 (2/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
ligen75, thanks for your pull request. All authors of the commits have signed the CLA. 👍


流水线任务触发成功
任务链接 [f8fde0398bde41c1ad6e0a10b29375df][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| pre_comment | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_experimental_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_harmony-infer | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_experimental_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_910b | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_910c | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_950 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_A5_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_A5_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station_9030_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test | ✅ SUCCESS | ||
| UT_Test_experimental | ✅ SUCCESS | ||
| UT_Test_kernel | ✅ SUCCESS | ||
| PreSmoke_A900 | ✅ SUCCESS | >>>>> | |
| API_Check | ✅ SUCCESS | >>>>> | |
| PreSmoke_ATK_Test_A2 | ✅ SUCCESS | >>>>> | |
| UT_Test_harmony-infer-chs-math | ✅ SUCCESS | ||
| UT_Test_harmony-infer-cpro-math | ❌ FAILED |


流水线任务触发成功
任务链接 [14ec08e2b52943cbbe6d42f112bf09d9][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| SCA | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| codecheck_Pr | ✅ SUCCESS | ||
| StaticCheck_codespell | ✅ SUCCESS | ||
| StaticCheck_link_validity | ✅ SUCCESS | ||
| StaticCheck_resource_existence | ✅ SUCCESS | ||
| StaticCheck_tag_closed | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS | ||
| codecheck_precommit | ✅ SUCCESS | >>>>> |
[2026-08-03 11:39:57] CI执行结束


🟠 High Priority
变更前,CosTiling::RunTiling() 在调用 GetTilingData 后通过 OP_CHECK_NULL_WITH_CONTEXT(tilingContext, tiling) 检查返回值。变更后该检查被完全移除,紧接着第 127 行直接对 tiling 解引用(*tiling)传给 DoTiling。若 GetTilingData 返回 nullptr,将触发空指针解引用崩溃。触发条件:GetTilingData 返回 nullptr;失败模式:空指针解引用导致进程崩溃。
| 122
| - auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>(); |
|
122 | + auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>(); |
|
123 | + OP_CHECK_NULL_WITH_CONTEXT(tilingContext, tiling); |


🟡 Medium Priority
在 RunTiling() 中,tilingContext->GetTilingData<EleBaseTilingData16B>() 的返回值 tiling 在没有任何空指针检查的情况下,立即在下一行通过 *tiling 解引用传给 DoTiling(第 95 行 res = elewiseBaseTiling.DoTiling<AbsOp::AbsDag<half, half>::OpDag>(*tiling);)。
对比同批次改造的其他两个算子:
如果 GetTilingData 返回 nullptr(例如框架内部分配失败),abs 算子会直接在 *tiling 处触发空指针解引用崩溃(段错误 / AIC Error),而另外两个算子会以 GRAPH_FAILED 正常终止。这是一个可靠性缺陷。
| 92
| - auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>(); |
|
92 | + auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>(); |
|
93 | + OP_CHECK_NULL_WITH_CONTEXT(tilingContext, tiling); |


🟠 High Priority
变更前,SinTiling::RunTiling() 在调用 GetTilingData 后通过 OP_CHECK_IF(tiling == nullptr, ...) 显式检查返回值是否为空,空则提前返回 GRAPH_FAILED。变更后该检查被完全移除,紧接着第 131 行直接对 tiling 解引用(*tiling)传给 DoTiling。若 GetTilingData 返回 nullptr(例如 tiling 内存分配失败、类型转换失败等边界情况),将触发空指针解引用崩溃。触发条件:GetTilingData 返回 nullptr;失败模式:空指针解引用导致进程崩溃。
| 118
| - auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>(); |
|
118 | + auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>(); |
|
119 | + OP_CHECK_IF(tiling == nullptr, |
|
120 | + OP_LOGE_FOR_INVALID_VALUE(tilingContext->GetNodeName(), "tiling_data", "nullptr", "not nullptr"), |
|
121 | + return ge::GRAPH_FAILED); |


🟠 High Priority
变更前,Log1pTiling::RunTiling() 在调用 GetTilingData 后通过 OP_CHECK_NULL_WITH_CONTEXT(tilingContext, tiling) 检查返回值。变更后该检查被完全移除,紧接着第 109 行直接对 tiling 解引用(*tiling)传给 DoTiling。若 GetTilingData 返回 nullptr,将触发空指针解引用崩溃。触发条件:GetTilingData 返回 nullptr;失败模式:空指针解引用导致进程崩溃。
| 104
| - auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>(); |
|
104 | + auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>(); |
|
105 | + OP_CHECK_NULL_WITH_CONTEXT(tilingContext, tiling); |


流水线任务触发成功
任务链接 [bf99ff449f944ce9b773a1b3cb45673e][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| pre_comment | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_experimental_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_harmony-infer | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_experimental_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_910b | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_910c | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_950 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_A5_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_A5_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station_9030_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test | ✅ SUCCESS | ||
| UT_Test_experimental | ✅ SUCCESS | ||
| UT_Test_kernel | ✅ SUCCESS | ||
| PreSmoke_A900 | ✅ SUCCESS | >>>>> | |
| API_Check | ✅ SUCCESS | >>>>> | |
| PreSmoke_ATK_Test_A2 | ✅ SUCCESS | >>>>> | |
| UT_Test_harmony-infer-chs-math | ✅ SUCCESS | ||
| UT_Test_harmony-infer-cpro-math | ✅ SUCCESS |
[2026-08-03 14:28:37] CI执行结束


流水线任务触发成功
任务链接 [c5e7a3f99d734af3a3a70d3be907ab75][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| SCA | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| codecheck_Pr | ✅ SUCCESS | ||
| StaticCheck_codespell | ✅ SUCCESS | ||
| StaticCheck_link_validity | ✅ SUCCESS | ||
| StaticCheck_resource_existence | ✅ SUCCESS | ||
| StaticCheck_tag_closed | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS | ||
| codecheck_precommit | ✅ SUCCESS | >>>>> |
[2026-08-03 14:17:14] CI执行结束


/approve


描述
elewise算子使用elewise16B接口
关联的Issue
https://gitcode.com/cann/ops-math/issues/2493
测试
自验通过
文档更新
类型标签