已合并
【代码侦探Challenge07】北京林业大学 - challenge07_sigmoidcustom Sigmoid算子实现 #3789
FineL1创建于 9月14日
【代码侦探Challenge07】北京林业大学 - challenge07_sigmoidcustom Sigmoid算子实现 #3789
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 FineL1 的贡献)atomgit-bot
9月14日 评论:
9月14日 评论:
变更摘要
本 PR 为「代码侦探(第七期)」竞赛提交,实现 Ascend C Sigmoid 激活算子(挑战 07),覆盖 Host 侧算子定义、形状推导与 Tiling,以及 Kernel 侧基于 TQue/LocalTensor 的 CopyIn → Compute → CopyOut 流水计算,支持 float16 / float32 数据类型,并配套构建脚本、ACLNN 调用示例和 Host/Kernel UT 测试。
主要改动
- 算子定义与形状推导:在
op_host/sigmoid_def.cpp中通过OP_ADD(Sigmoid)注册算子,声明输入x与输出y,数据类型限定为ge::DT_FLOAT/ge::DT_FLOAT16且均为FORMAT_ND,并添加ascend910bAICore 配置;op_host/sigmoid_infershape.cpp中的InferShapeSigmoid将输入形状直接拷贝为输出形状(逐元素算子输出形状与输入一致)。 - Tiling 逻辑:
op_host/sigmoid_tiling.cpp的SigmoidTilingFunc获取 UB 大小与 AIV Core 数,设置SetBlockDim(1)且 workspace 大小为 0,初始化SigmoidTilingData(totalNum=0、blockFactor=1、ubFactor=0),并按输入数据类型选择 TilingKey(DT_FLOAT16/DT_BF16走SIGMOID_TPL_SCH_MODE_0,其余走SIGMOID_TPL_SCH_MODE_1)。 - Kernel 实现:
op_kernel/sigmoid.cpp与sigmoid.h实现模板类NsSigmoid::Sigmoid<T>,通过TPipe和双缓冲(BUFFER_NUM=2)的VECIN/VECOUT队列以TILE_LENGTH=1024为粒度循环执行 CopyIn/Compute/CopyOut,Compute 阶段调用AscendC::Sigmoid<T, false>计算y = 1 / (1 + exp(-x));当前针对固定 shape(8, 2048)(TOTAL_LENGTH=8*2048)实现,未依赖 tiling 数据做动态切分。 - 构建与调用示例:新增
build.sh(支持-u/--ut、-e/--example、--make_clean、-jN等选项,默认ascend910b);examples/test_aclnn_sigmoid.cpp演示通过aclnnSigmoidGetWorkspaceSize与aclnnSigmoid两段式接口在(8, 2048)float32 输入上调用该算子。 - UT 测试框架:新增
tests/ut测试工程,BuildGoogleTest.cmake以旧 ABI(_GLIBCXX_USE_CXX11_ABI=0)从源码构建 gtest 1.14.0;提供InferShapeContextFaker/TilingContextFaker及对应 case executor 用于 Host 侧测试;test_sigmoid_tiling.cpp校验 TilingKey 与 TilingData(期望0 1 0),test_sigmoid.cpp通过ICPU_RUN_KF运行sigmoid<1>核函数并配合gen_data.py/compare_data.py按 MERE/MARE 阈值做精度比对。


不准确?
FineL1
9月14日 评论:
9月14日 评论:
/compile


atomgit-bot
9月14日 评论:
9月14日 评论:
9月14日 添加了label:cann-cla/yes
CANN-robot
9月14日 评论:
9月14日 评论:
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 |
|---|---|---|
| repo-cann/cann-outreach | ✅ shaoyf, 傅涛 (2/2) | ✅ shaoyf, 傅涛 (2/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
FineL1, thanks for your pull request. All authors of the commits have signed the CLA. 👍


9月14日 修改标题为 “【代码侦探Challenge07】北京林业大学 - challenge07_sigmoidcustom Sigmoid算子实现”,原标题为“[代码侦探(第七期)] 北京林业大学 - challenge07_sigmoidcustom”
9月14日 修改标题为 “【代码侦探Challenge07】北京林业大学 - challenge07_sigmoidcustom Sigmoid算子实现”,原标题为“[代码侦探(第七期)] 北京林业大学 - challenge07_sigmoidcustom”
9月14日 关联了issue:【代码侦探Challenge07】北京林业大学 - challenge07_sigmoidcustom Sigmoid算子实现
9月14日 修改了pull request 的描述
9月14日 修改了pull request 的描述
9月14日 修改了pull request 的描述
10 天前 添加了label:lgtmapproved
10 天前 关闭了关联的issue
10 天前 合入了pull request
北京林业大学
团队信息
成员
算子: SigmoidCustom
实现 Ascend C Sigmoid 激活算子,支持 float16 / float32 数据类型。完成输出形状推导、Tiling 数据配置以及 Kernel 侧的数据搬运与计算流程;Kernel 采用 CopyIn → Compute → CopyOut 的流水处理方式,通过 TQue 和 LocalTensor 管理 UB 数据,并使用双缓冲提高数据搬运与计算效率。计算阶段基于 Ascend C Sigmoid 接口实现 y = 1 / (1 + exp(-x)),最终将计算结果从 UB 搬回 GM,完成 Sigmoid 激活算子的开源仓规范化实现。
CANNJudge 测试已通过,验证结果为 PASS。