已合并
批量算子使用elewise16B接口 #4390
ligen75创建于 23 天前
批量算子使用elewise16B接口 #4390
已合并
ligen75创建于 23 天前
已删除 :master合入到cann/ops-mathmaster
ligen75
23 天前

描述

elewise算子使用elewise16B接口

关联的Issue

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

测试

自验通过

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 ligen75 的贡献)
Lligen75
23 天前 创建了 pull request,commit ef776cde
atomgit-bot
atomgit-bot
23 天前 评论:

变更摘要

此 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_STRUCTSetTilingData 签名统一增加 const ElewiseBaseTiling& 参数以获取 block dim 和 scheme mode;同时清理了各算子独立的命名空间和冗余的 tiling 结构体头文件引用。

主要改动

  • 统一 Tiling 数据结构为 EleBaseTilingData16B:所有算子(abs、ceil、cos、log1p、logical_not、neg、rsqrt、sign、sin、square)的 tiling data 类型从各自的 AbsTilingDataCeilTilingDataCosTilingData 等独立结构体统一改为 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;scheModetiling->baseTiling.scheMode 硬编码为 1

  • Tiling 数据获取方式变更:kernel 端从 GET_TILING_DATA_WITH_STRUCT 改为 GET_TILING_DATA_PTR_WITH_STRUCT,host 端 GetTilingData<T>() 调用结果从成员指针变量改为局部 auto 变量并通过解引用传递给 DoTiling

  • 清理算子独立命名空间和冗余头文件:移除了 using namespace AbsNsusing namespace CeilNsusing namespace SquareNsusing namespace SignNsusing namespace SinNs 等算子专属命名空间引用,以及对应的独立 tiling 结构体头文件(如 abs_struct.hceil_tiling_struct.hneg_tiling_struct.h 等)的 include。

likedislike
atomgit-bot
atomgit-bot
23 天前 评论:

代码审查

审查总结

已审查全部 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_KEYscheMode 的硬编码,这可能是有意为之,也可能是疏忽,需由算子作者确认。

类型 数量
🔴 阻塞 3
🟡 建议 1

⛔ 需要修改

likedislike
CANN-robotCANN-robot成员
23 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
23 天前 评论:

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 /approve or /lgtm
  • Commenting /approve implies 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. 👍

likedislike
ligen75
23 天前 评论:

compile

likedislike
Lligen75
23 天前 update merge request[project id: 7649531, iid: 4390, commit_id: 59ef676e9d17b7c404cc31dbecdc8abd059130df] virtual merging success
CANN-robotCANN-robot成员
23 天前 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
23 天前 评论:

流水线任务触发成功
任务链接 [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
likedislike
CANN-robot
CANN-robot成员
23 天前 评论:

流水线任务触发成功
任务链接 [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执行结束

likedislike
atomgit-bot
atomgit-bot23 天前进行代码检视1
math/cos/op_host/arch35/cos_tiling_arch35.cpp
@@ -121,3 +121,2 @@
121121 
122- tiling = tilingContext->GetTilingData<CosTilingData>();
123- OP_CHECK_NULL_WITH_CONTEXT(tilingContext, tiling);
122+ auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>();
atomgit-bot
atomgit-bot23 天前评论:

🟠 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);
应用建议
likedislike
atomgit-bot
atomgit-bot23 天前进行代码检视1
math/abs/op_host/arch35/abs_tiling_arch35.cpp
@@ -89,1 +89,4 @@
89+ OP_CHECK_IF(CalcOutputDtype() == ge::GRAPH_FAILED, OP_LOGE(tilingContext, "get output dtype failed"),
90+ return ge::GRAPH_FAILED);
8991 
92+ auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>();
atomgit-bot
atomgit-bot23 天前评论:

🟡 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);
应用建议
likedislike
atomgit-bot
atomgit-bot23 天前进行代码检视1
math/sin/op_host/arch35/sin_tiling_arch35.cpp
@@ -116,3 +116,3 @@
116116 OP_LOGD(tilingContext->GetNodeName(), "SinTiling RunTiling enter.");
117117 Ops::Base::ElewiseBaseTiling elewiseBaseTiling(tilingContext);
118- tiling = tilingContext->GetTilingData<SinNs::SinTilingData>();
118+ auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>();
atomgit-bot
atomgit-bot23 天前评论:

🟠 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);
应用建议
likedislike
atomgit-bot
atomgit-bot23 天前进行代码检视1
math/log1p/op_host/arch35/log1p_tiling_arch35.cpp
@@ -101,3 +103,2 @@
101103 return ge::GRAPH_FAILED);
102- tiling = tilingContext->GetTilingData<Log1pNs::Log1pTilingData>();
103- OP_CHECK_NULL_WITH_CONTEXT(tilingContext, tiling);
104+ auto tiling = tilingContext->GetTilingData<EleBaseTilingData16B>();
atomgit-bot
atomgit-bot23 天前评论:

🟠 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);
应用建议
likedislike
CANN-robotCANN-robot成员
23 天前 添加了label:api-check-pass
CANN-robotCANN-robot成员
23 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
23 天前 添加了label:ci-pipeline-failed
ligen75
23 天前 评论:

compile

likedislike
Lligen75
23 天前 update merge request[project id: 7649531, iid: 4390, commit_id: 1eb1ed045333cedd652f3c1095d7df87d243ad6e] virtual merging success
CANN-robotCANN-robot成员
23 天前 删除了label:ci-pipeline-failedapi-check-pass
CANN-robotCANN-robot成员
23 天前 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
23 天前 评论:

流水线任务触发成功
任务链接 [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执行结束

likedislike
CANN-robot
CANN-robot成员
23 天前 评论:

流水线任务触发成功
任务链接 [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执行结束

likedislike
CANN-robotCANN-robot成员
23 天前 添加了label:api-check-pass
CANN-robotCANN-robot成员
23 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
23 天前 添加了label:ci-pipeline-passed
Lligen75
22 天前 修改了pull request 的描述
RuiWang_成员
22 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
22 天前 添加了label:approved
songkai111成员
21 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
21 天前 添加了label:lgtm
CANN-robotCANN-robot成员
21 天前 解决了最后一个问题
CANN-robotCANN-robot成员
21 天前 关闭了关联的issue
CANN-robotCANN-robot成员
21 天前 合入了pull request