news 2026/5/10 1:47:29

CANN/Graph-autofusion超级内核

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/Graph-autofusion超级内核

SuperKernel

【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾(Ascend)芯片的轻量级、解耦式组件集合,旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件,未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion

原理介绍

SuperKernel 是一种面向网络图模型的调度优化技术。其核心思想是:基于网络图模型中算子的先验信息(如算子类型、前后序依赖关系等),结合即时编译(JIT)能力,将整个网络模型重新编译为单一算子,从而显著降低算子调度开销,并借助 ICache 预取、Early-Start、同步优化、子 Kernel 拆分等优化手段进一步提升性能。


SuperKernel 的设计初衷是将多个子算子融合成一个 SuperKernel,以节省 N-1 次算子调度开销。然而,为维持子算子间的执行顺序,通常需插入全核同步操作,这在一定程度上削弱了调度优化的收益。得益于编译阶段即可获取全部子算子的先验信息,SuperKernel 可在此基础上实施更多深层优化。

​​1.ICache Preload 优化​

SuperKernel 融合全部算子后,其二进制体积较大。系统在加载算子时通常仅预取入口处指令,导致 SuperKernel 内部大量指令未被预加载至指令缓存(ICache),从而引发较高的 ICache Miss。为此,我们引入 ICache Preload 机制:在当前子算子开始执行前,预加载其后续子算子的代码段,从而有效减少后续算子执行时的 ICache Miss。

​​2.Early-Start 优化​​

在常规调度中,必须等待前序算子全部执行完成后,才能启动后续算子。然而,多数前序算子的末尾指令为 MTE 数据搬运指令,而后续算子的起始指令通常为与输入数据无关的初始化标量指令。由于这两类指令分属不同计算单元,具备并发执行的条件。Early-Start 技术在前序算子的搬运指令前插入 Set 同步点,在后续算子的初始化指令后插入 Wait 同步点,从而实现两个子算子的部分指令并发执行,提升整体执行效率。

​3.同步优化​​

为保障执行顺序正确,SuperKernel 在各子算子调度之间会插入全核同步操作。对于 Kernel Type 为 Mix 1:2 的混合类型算子,完整的全核同步需等待所有 Aicore 的 Vector 核与 Cube 核均完成同步。SuperKernel 在编译时能够识别每个子算子的类型,因此可针对前后子算子的 Kernel Type 定制同步范围。例如,对于连续的 Vector 算子,仅需执行全 Vector 核同步即可。通过细粒度控制同步范围,可有效降低子算子间的同步开销。

​​4.子 Kernel 拆分​​

在多核系统中,当多个计算核心执行同一段代码时,会并发访问内存中的同一指令地址。这种对同一地址的并发访问会在共享的 L2 Cache 层面形成串行化访问队列,引发资源争用,削弱多核并行带来的性能增益。为解决该问题,SuperKernel 将子 Kernel 代码复制为多份副本,使不同核心能根据核 ID 映射到不同的物理地址执行。这一方法有效缓解了多核对同一指令地址的争用,显著提升算子执行效率。 ​

此外,SuperKernel 还支持基于内存语义的 Notify 与 Wait 事件,以适配 Tiling 下沉与 Weight 预取等场景。Tiling 下沉算子指的是 Tiling 计算依赖前序算子的输出结果,为避免主机与设备间的频繁交互,将 Tiling 计算部署于 AICpu 执行的算子。若 SuperKernel 融合了该 Tiling 算子的前序算子,则需在前序算子执行完成后通过 Notify 事件通知 AICpu 启动 Tiling 计算;若融合了 Tiling 下沉算子本身,则需通过 Wait 事件等待 AICpu 完成 Tiling 计算后再执行 Device 侧计算。Weight 预取则借助 CMO 任务调用专用硬件单元 SDMA,将数据提前加载至 L2 Cache,以提升计算效率。SDMA 与 Aicore 之间的协作正是通过内存语义的 Notify/Wait 事件实现的。


目录结构

super_kernel/ ├── docs # 文档介绍 ├── examples # 示例脚本或 Notebook,演示典型用法 ├── scripts # 脚本路径 ├── src # 业务代码入口,后续根据功能划分模块 │ └── superkernel # SuperKernel 业务代码 ├── tests # 测试工程目录 │ ├── st # System Test │ ├── ut # Unit Test │ └── utils # 通用校验与工具函数 ├── CMakeLists.txt # CMake 配置文件 ├── pyproject.toml # 项目元信息与打包配置 ├── README.md └── requirements-dev.txt # python 依赖配置文件

构建与安装

参考执行构建。

开发者

开发者请查阅《Developer Guide》,了解代码实现、测试方法等信息。

【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾(Ascend)芯片的轻量级、解耦式组件集合,旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件,未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 1:43:31

AI编程助手如何对抗能力错觉?agentic-learning技能包实战指南

1. 项目概述:一个能让你真正学会编程的AI伙伴 如果你用过Cursor、Claude Code或者GitHub Copilot这类AI编程助手,大概率有过这样的体验:你抛出一个问题,它瞬间给你一段完美的代码。你复制粘贴,程序跑起来了&#xff0…

作者头像 李华
网站建设 2026/5/10 1:40:48

城市更新×智慧治理:老旧小区改造中的数字化创新实践

城市更新,是当前新型城镇化建设的重要议题。而在城市更新的众多项目中,老旧小区改造是最贴近民生、影响最广泛的工程之一。然而,老旧小区改造面临着"改什么、怎么改、谁来管"的灵魂三问——居民需求分散、资金来源有限、改造后缺乏…

作者头像 李华
网站建设 2026/5/10 1:40:43

CANN学习中心AReaL昇腾实践

AReaL 昇腾实践手册 【免费下载链接】cann-learning-hub CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。 项目地址: https://gitcode.com/cann/cann-learning-hub 本实践将呈现…

作者头像 李华
网站建设 2026/5/10 1:37:02

Python 爬虫高级实战:Playwright 动态渲染爬虫开发

前言 现代互联网站点大量采用 Vue、React、Angular 等前端框架前后端分离开发,页面数据通过 Ajax 异步接口动态加载,传统 Requests、Scrapy 静态爬虫只能获取空白骨架 HTML,无法抓取真实渲染后的页面内容。常规 Selenium 虽能实现浏览器渲染,但存在启动慢、资源占用高、自…

作者头像 李华
网站建设 2026/5/10 1:35:45

基于Next.js与Supabase构建个人财务追踪应用Expense.fyi全栈实践

1. 项目概述与核心价值如果你和我一样,对个人财务的混乱状态感到头疼,总想找个趁手的工具来理清收支、投资和订阅,但又对市面上的应用要么功能臃肿、要么隐私堪忧感到不满,那么今天聊的这个开源项目Expense.fyi,很可能…

作者头像 李华
网站建设 2026/5/10 1:35:42

量子计算中的谐振控制技术:原理与应用

1. 量子信息处理中的谐振控制技术解析在量子计算和量子存储领域,如何实现对量子态的精确控制一直是核心挑战。传统方法通常工作在色散区(dispersive regime),这种模式下量子比特与谐振腔的耦合较弱,导致操作速度受限且…

作者头像 李华