尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CANN/runtime Fusion算子融合特性

CANN/runtime Fusion算子融合特性
📅 发布时间:2026/7/11 13:10:54

Fusion(算子融合)特性

【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime

1. 特性概述

  • 特性介绍:Fusion 是Ascend 950及以后代际芯片支持的特性,支持多个不同类别算子任务(AI Core、AI CPU、HCOM CPU、CCU)的融合下发和执行,通过将多个算子任务组合为一个完整的融合算子任务提交到 Stream,减少任务调度开销,提升执行效率。
  • 问题背景:在传统执行模式下,每个算子或任务都需要单独提交到 Stream 并等待调度执行,存在较大的 Host 侧调度开销。对于一些固定的算子组合或计算模式,逐个单独提交下发会导致性能瓶颈,同时期望提供一种融合场景的算子间相互配合的能力,让算子能够在资源充沛的情况下同时调度执行。
  • 设计目标:
    • 支持多种子任务类型的融合执行
    • 减少 Host 侧任务提交开销
    • 提升整体计算性能
    • 提供灵活的融合组合模式

2. 使用场景与对外接口

2.1 使用场景

  • 场景一:计算(or通信) & 计算 算子融合
  1. AI CPU + AI Core 融合
// 创建融合算子任务信息 rtFunsionTaskInfo_t fusionInfo; fusionInfo.subTaskNum = 2; // 配置 AI CPU 子任务 fusionInfo.subTask[0].type = RT_FUSION_AICPU; fusionInfo.subTask[0].task.aicpuInfo.kernelType = ...; fusionInfo.subTask[0].task.aicpuInfo.blockDim = 1; // 配置 AI Core 子任务 fusionInfo.subTask[1].type = RT_FUSION_AICORE; fusionInfo.subTask[1].task.aicoreInfo.stubFunc = stubFunc; fusionInfo.subTask[1].task.aicoreInfo.config = launchConfig; // 提交融合算子任务 rtFusionLaunch(&fusionInfo, stream, &argsInfo);
  • 场景二:通信 & 计算 算子融合
  1. CCU + AI Core 融合
// 创建融合算子任务信息 rtFunsionTaskInfo_t fusionInfo; fusionInfo.subTaskNum = 2; // 配置 CCU 子任务 fusionInfo.subTask[0].type = RT_FUSION_CCU; fusionInfo.subTask[0].task.ccuInfo.taskNum = 1; fusionInfo.subTask[0].task.ccuInfo.ccuTaskInfo[0].dieId = 0; fusionInfo.subTask[0].task.ccuInfo.ccuTaskInfo[0].missionId = 0; // 配置 AI Core 子任务 fusionInfo.subTask[1].type = RT_FUSION_AICORE; fusionInfo.subTask[1].task.aicoreInfo.stubFunc = stubFunc; fusionInfo.subTask[1].task.aicoreInfo.config = launchConfig; // 提交融合算子任务 rtFusionLaunch(&fusionInfo, stream, &argsInfo);

2.2 对外接口

接口文件位置说明
rtFusionLaunchpkg_inc/runtime/runtime/kernel.h:1416提交下发融合算子任务

接口参数说明:

rtError_t rtFusionLaunch( void * const fusionInfo, // 融合算子任务信息(rtFunsionTaskInfo_t*) rtStream_t const stm, // 关联的 Stream rtFusionArgsEx_t *argsInfo // 参数信息 );

3. 架构总览

整体设计思路

Fusion 特性基于 Runtime 核心层的 Stream、Task、Kernel 等模块,提供给Fusion模块进行融合算子任务的入参信息预处理、任务初始化、SQE 构建、任务提交和完成后处理等API层级完整的端到端功能。

架构分层图

核心模块交互图

4. 详细设计

4.1 核心流程

LaunchFusionKernel(启动融合内核)

位置:feature/fusion/fusion_c.cc:418

职责:

  1. 预处理子任务,该函数内涉及各个子任务的处理函数逻辑,包含AI Cpu、AI Core和CCU等子任务的处理模块,具体处理逻辑根据传参中的子任务搭配类型和子任务携带信息进行必要字段的获取和预处理(调用FusionKernelTaskPreProc)
  2. 使用流上资源分配 TaskInfo
  3. 处理融合算子任务,在各类子任务的必要字段信息处理完毕后,进行Fusion总体任务的字段初始化和赋值(调用FusionKernelTaskProc)
  4. 加载参数,具体为将rtFusionLaunch接口入参传入的args数据加载到device侧,便于算子执行时的访问(调用LoadArgsInfo)
  5. 发送任务,将taskInfo转换为硬件可识别的SQE后,通过驱动管道发送给硬件任务调度器(调用DavidSendTask)
ConstructDavidSqeForFusionKernelTask(构建 SQE)

位置:feature/fusion/fusion_sqe.cc:169

职责:根据子任务类型构建对应的 SQE

  • AI Core:调用ConstructAicAivSubSqe,根据 mixType 判断是 AIC、AIV 还是 Mix
  • AI CPU/HCOM CPU:调用ConstructAicpuSubSqe
  • CCU:调用ConstructCcuSubSqe

4.2 支持的子任务类型

子任务类型枚举值说明SQE构建函数
AI CPURT_FUSION_HCOM_CPU = 0orRT_FUSION_AICPU = 1AI CPU (通信or计算)算子执行ConstructAicpuSubSqe
AI CoreRT_FUSION_AICORE = 2AI Core/Vector 算子执行ConstructAicAivSubSqe
CCURT_FUSION_CCU = 3集合通信任务ConstructCcuSubSqe

4.3 融合组合模式

fusion sub tasks 的组合模式如下:

  1. aicpu + aic:AI CPU + AI Core 融合,此处的AI CPU 算子通常为计算类算子任务或者通信类算子任务
  2. ccu + aic:CCU + AI Core 融合

4.4 核心数据结构

rtFunsionTaskInfo_t(融合算子任务的各子任务搭配信息)

◆ Fusion融合任务中各子任务信息汇总结构体。

#define FUSION_SUB_TASK_MAX_NUM (2U) typedef struct tagRtFunsionTaskInfo { uint32_t subTaskNum; // 子任务数量 rtFusionSubTaskInfo_t subTask[FUSION_SUB_TASK_MAX_NUM]; // 子任务数组(最大2个) } rtFunsionTaskInfo_t;
FusionTaskInfo(融合算子任务内部信息)

◆ 任务初始化和下发时存储融合算子信息相关必要字段信息,例如融合算子的子任务搭配类型、任务数量、是否包含CCU任务等等。

struct FusionTaskInfo;
FusionTaskInfoAicPart(AI Core 任务部分)

◆ 用于存储融合算子任务中AI Core子任务的必要字段信息,例如pc地址、args参数地址、分核计算所需维度、SIMT内存大小等等。

struct FusionTaskInfoAicPart;

5. 关键设计思想

5.1 减少调度开销

通过将多个子任务合并为一个融合算子任务,减少任务提交次数,从而降低 Host 侧的调度开销。

5.2 灵活的组合模式

支持多种子任务类型的组合,可以根据不同的计算模式或者场景选择最优的融合组合。

5.3 任务更新支持

融合算子任务支持在 ACL Graph 场景下更新已捕获任务的参数或任务本身。

6. 关键文件索引

模块文件路径核心内容
Fusion APIpkg_inc/runtime/runtime/kernel.hrtFusionLaunch接口定义,rtFunsionTaskInfo_t、rtFusionArgsEx_t等数据结构
Fusion 核心实现src/runtime/feature/fusion/fusion_c.ccLaunchFusionKernel、FusionKernelTaskPreProc、AixKernelTaskInitForFusion
Fusion 任务处理src/runtime/feature/fusion/fusion_task_david.ccBuildFusionKernelTaskName、DoCompleteSuccessForFusionKernelTask、FusionKernelTaskUnInit
Fusion SQE 构建src/runtime/feature/fusion/fusion_sqe.ccConstructDavidSqeForFusionKernelTask、ConstructAicAivSubSqe、ConstructCcuSubSqe
Task 数据结构src/runtime/core/inc/task/task_info.hppTaskInfo结构定义,包含FusionTaskInfo
Task 基础结构src/runtime/core/inc/task/task_info_base.hppFusionTaskInfo、FusionTaskInfoAicPart详细定义

【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime

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

相关新闻

  • 2026TEMU爆款服装爆品拆解方法:跨境卖家如何用海外探款精准拆解竞品?
  • 【独家首发】Cursor v0.42.2终端建议算法逆向实测报告:支持Bash/Zsh/Fish全壳体,但仅对TypeScript项目启用高级推断(限首批内测用户)
  • 如何微调mlx-community/gemma-4-26b-a4b-it-4bit:自定义视觉语言模型训练教程

最新新闻

  • 抖音下载器完整指南:高效批量下载去水印的终极解决方案
  • 网络工程师进阶
  • 从0到1:用ghost-on-heroku搭建赚钱博客的完整路径
  • SingleFile终极指南:一键保存完整网页的完美解决方案
  • ECharts 5 动态排序柱状图实战:3步实现数据实时排名动画
  • 终极风扇控制指南:用FanControl解决电脑散热与噪音的完整教程

日新闻

  • OpenClaw本地部署:一键直连微信的私有化AI Agent实战指南
  • Kubernetes 系列【10】控制器:ReplicaSet(副本集)
  • 怎么寄快递才能便宜呢?2026年7月寄快递省钱攻略 - 生活情报姬

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号