CANN FastGelu 算子实现
📅 2026/7/11 12:57:07
👁️ 次浏览
FastGelu 算子实现【免费下载链接】cann-launch-camp用户可借助此项目规范管理 CANN 开源社区启航营高校活动的课程作业、课设、毕设等实践作品其核心功能是统一标准化目录层级与提交规范保障作品提交规整、可追溯、可评审。项目地址: https://gitcode.com/cann/cann-launch-camp作者姓名zengyancheng账号hi497925191平台CANN ascend910b (Da Vinci 架构)实现概述基于 Ascend C 语法实现 FastGelu 激活函数算子核心公式$$FastGelu(x) \frac{x}{1 e^{-1.702 \times x}}$$该公式与原始定义x × exp(0.851×(x-|x|)) / (1exp(-1.702×|x|))在数学上完全等价但运算次数减少56%9步→4步。数学证明x ≥ 0|x| xx-|x| 0exp(0)1原式 x/(1exp(-1.702x)) 简化式 ✓x 0令 a|x|-x原式 x·exp(-1.702a)/(1exp(-1.702a)) x/(exp(1.702a)1) x/(1exp(-1.702x)) 简化式 ✓核心优化1. 公式化简9步→4步-56%Muls(yLocal, xLocal, (DT_X)(-1.702), length); // y -1.702*x Exp(yLocal, yLocal, length); // y exp(-1.702*x) Adds(yLocal, yLocal, (DT_X)1.0, length); // y 1exp(-1.702*x) Div(yLocal, xLocal, yLocal, length); // y x/(1exp(-1.702*x))2.constexpr编译期硬编码TILE_LENGTH 在编译期确定消除运行时除法/mod运算带来的 Scalar 开销// f16: 4*TILE_LEN*2 TILE_LEN*4 TILE_LEN*4 16*TILE_LEN → 192KB/16 12288 // f32: 4*TILE_LEN*4 16*TILE_LEN → 192KB/16 12288 static constexpr uint32_t TILE_LEN 12288;3. f16 混合精度计算f16 输入先 Cast 到 f32 完成 Exp/Div 运算再 Cast 回 f16相比直接在 f16 上算4步精度更高if constexpr (IsSameTypeT, half::value) { Cast(xf, xLocal, RoundMode::CAST_NONE, len); Muls(tmp, xf, -1.702f, len); Exp(tmp, tmp, len); Adds(tmp, tmp, 1.0f, len); Div(xf, xf, tmp, len); Cast(yLocal, xf, RoundMode::CAST_RINT, len); }4. f32 零临时缓冲区计算f32 路径直接在 yLocal 上复合计算无需单独的 tmp_ 缓冲区省 48KB UBMuls(yLocal, xLocal, -1.702f, len); // 直接在 yLocal 中算 Exp(yLocal, yLocal, len); Adds(yLocal, yLocal, 1.0f, len); Div(yLocal, xLocal, yLocal, len);5. CopyIn/CopyOut Full/Pad 拆分中间 tile占绝大多数走纯 DataCopy 路径无分支仅尾 tile 走 DataCopyPad 处理非对齐数据if (nextLen TILE_LEN) CopyInFull(nextOff); else CopyInPad(nextOff, nextLen);6. 双缓冲流水线多 tile 场景下 CopyIn(N1) 与 Compute(N) 并行执行DMA 与向量计算重叠。7. 非对齐数据处理DataCopyExtParams cp{1, static_castuint32_t(len * sizeof(T)), 0, 0, 0}; DataCopyPadExtParamsT pp{true, 0, static_castuint8_t(AlignUp(len, ALIGN_NUM) - len), 0}; DataCopyPad(xLocal, xGm_[offset], cp, pp);文件说明src/ ├── CMakeLists.txt # 顶层构建脚本 ├── op_host/ │ ├── CMakeLists.txt # Host侧构建 │ └── fast_gelu.cpp # Host侧Tiling实现均分MIN_ELEM64 └── op_kernel/ ├── CMakeLists.txt # Kernel侧构建 ├── fast_gelu.cpp # Kernel侧核函数 ├── fast_gelu_tiling.h # Tiling结构体3字段 └── tiling_key_fast_gelu.h # TilingKey模板数据结构FastGeluTilingData字段含义totalLength总数据元素数blockLength每核处理的元素数32字节对齐blockDim使用的核数运行方式编译cd custom_op bash build.sh ./build_out/custom_opp*.run --install-path${HOME}/调用#include aclnn_fast_gelu.h uint64_t workspaceSize 0; aclOpExecutor *executor; aclnnFastGeluGetWorkspaceSize(x, out, workspaceSize, executor); aclnnFastGelu(workspace, workspaceSize, executor, stream);性能测试source ${HOME}/vendors/customize/bin/set_env.bash msprof op --output./prof ./execute_op性能数据测试点耗时最优状态1 (小数据)2.68μs2.20μs—22.30μs2.12μs—36.66μs5.82μs—46.46μs5.66μs—5 (大数据)8.40μs7.26μs—总分待 CI 评测msprof 分析结论Vector 计算仅占 12% 耗时4条向量指令瓶颈在 Scalar 队列管理和 DMA 延迟。通过 constexpr 硬编码 Full/Pad 拆分 f32 零 tmpBuf 双缓冲流水线在算子代码层面已做到极限。【免费下载链接】cann-launch-camp用户可借助此项目规范管理 CANN 开源社区启航营高校活动的课程作业、课设、毕设等实践作品其核心功能是统一标准化目录层级与提交规范保障作品提交规整、可追溯、可评审。项目地址: https://gitcode.com/cann/cann-launch-camp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能一、基础交互功能二、核心检测预警功能三、双模式运行辅助功能技术路线项目演示关于我们项目案例源码获取博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢…
📅 2026/7/11 12:57:07
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
📅 2026/7/11 12:57:07
demo-ai-app相关推荐:向量相似度计算的实践应用 【免费下载链接】demo-ai-app Sample AI movies app built with ❍ Ion 项目地址: https://gitcode.com/gh_mirrors/de/demo-ai-app
在当今AI驱动的应用开发中,向量相似度计算技术正成为提升用户体…
📅 2026/7/11 12:56:07
Diva Mod Manager终极指南:3分钟掌握初音未来MOD管理神器 【免费下载链接】DivaModManager 项目地址: https://gitcode.com/gh_mirrors/di/DivaModManager
Diva Mod Manager是一款专为《初音未来:Project Diva Mega Mix》玩家设计的图形化MOD管理…
📅 2026/7/11 14:53:01
掌握AMD Ryzen性能调优:SMUDebugTool免费开源调试工具完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…
📅 2026/7/11 14:53:01
终极指南:如何用MidiEditor实现专业级MIDI音乐制作与编辑 【免费下载链接】midieditor Provides an interface to edit, record, and play Midi data 项目地址: https://gitcode.com/gh_mirrors/mi/midieditor
MidiEditor是一款基于Qt框架开发的跨平台开源MI…
📅 2026/7/11 14:53:01
1999年PMP进入中国,2026年迎来近十年最大改革。目前新版考纲、《PMBOK第8版》教材已正式发布,12月中国大陆考试全面换新体系,考情、考点、备考逻辑全面迭代。本文整理2026年PMP最新考情、改版变化、备考方案,帮你精准备考、避坑提…
📅 2026/7/11 14:53:01
Legacy Update:如何让老旧Windows系统重新获得安全更新支持? 【免费下载链接】LegacyUpdate Get back online, activate, and install updates on your legacy Windows PC 项目地址: https://gitcode.com/gh_mirrors/le/LegacyUpdate
还在为Windo…
📅 2026/7/11 14:53:01
1. 认识A3910与PIC18F2525这对黄金搭档在嵌入式控制领域,电机驱动与微控制器的组合就像咖啡与牛奶的完美融合。A3910作为一款高性能全桥电机驱动芯片,能够提供高达2A的持续输出电流,而PIC18F2525则是Microchip旗下经典的8位微控制器ÿ…
📅 2026/7/11 14:52:01
摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计…
📅 2026/7/11 0:00:31
1. 命令简介gpm 是 Linux 系统下运行于虚拟控制台(文字终端模式)的鼠标服务器。它的主要功能是在没有图形界面的纯文本环境中,为虚拟控制台提供鼠标支持,允许用户使用鼠标进行文本的选择、复制和粘贴操作,极大地提升了…
📅 2026/7/11 0:00:31
导语
先澄清一个常被混用的概念:BI试点"上线",并不等于试点"验收通过"。很多企业把仪表板做出来、账号发下去、培训开完场,就默认试点已经跑通,随后进入推广阶段——结果推广到第二个部门、第三个业务线时&am…
📅 2026/7/11 0:00:31
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/10 22:46:54
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/10 22:46:54
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/10 22:46:54
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/10 22:46:54
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/10 22:46:54
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/10 22:46:54