Fusion算子融合特性【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime1. 特性概述特性介绍Fusion 是Ascend 950及以后代际芯片支持的特性支持多个不同类别算子任务AI Core、AI CPU、HCOM CPU、CCU的融合下发和执行通过将多个算子任务组合为一个完整的融合算子任务提交到 Stream减少任务调度开销提升执行效率。问题背景在传统执行模式下每个算子或任务都需要单独提交到 Stream 并等待调度执行存在较大的 Host 侧调度开销。对于一些固定的算子组合或计算模式逐个单独提交下发会导致性能瓶颈同时期望提供一种融合场景的算子间相互配合的能力让算子能够在资源充沛的情况下同时调度执行。设计目标支持多种子任务类型的融合执行减少 Host 侧任务提交开销提升整体计算性能提供灵活的融合组合模式2. 使用场景与对外接口2.1 使用场景场景一计算or通信 计算 算子融合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);场景二通信 计算 算子融合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职责预处理子任务该函数内涉及各个子任务的处理函数逻辑包含AI Cpu、AI Core和CCU等子任务的处理模块具体处理逻辑根据传参中的子任务搭配类型和子任务携带信息进行必要字段的获取和预处理调用FusionKernelTaskPreProc使用流上资源分配 TaskInfo处理融合算子任务在各类子任务的必要字段信息处理完毕后进行Fusion总体任务的字段初始化和赋值调用FusionKernelTaskProc加载参数具体为将rtFusionLaunch接口入参传入的args数据加载到device侧便于算子执行时的访问调用LoadArgsInfo发送任务将taskInfo转换为硬件可识别的SQE后通过驱动管道发送给硬件任务调度器调用DavidSendTaskConstructDavidSqeForFusionKernelTask构建 SQE位置feature/fusion/fusion_sqe.cc:169职责根据子任务类型构建对应的 SQEAI Core调用ConstructAicAivSubSqe根据 mixType 判断是 AIC、AIV 还是 MixAI CPU/HCOM CPU调用ConstructAicpuSubSqeCCU调用ConstructCcuSubSqe4.2 支持的子任务类型子任务类型枚举值说明SQE构建函数AI CPURT_FUSION_HCOM_CPU 0orRT_FUSION_AICPU 1AI CPU (通信or计算)算子执行ConstructAicpuSubSqeAI CoreRT_FUSION_AICORE 2AI Core/Vector 算子执行ConstructAicAivSubSqeCCURT_FUSION_CCU 3集合通信任务ConstructCcuSubSqe4.3 融合组合模式fusion sub tasks 的组合模式如下aicpu aicAI CPU AI Core 融合此处的AI CPU 算子通常为计算类算子任务或者通信类算子任务ccu aicCCU 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;FusionTaskInfoAicPartAI 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、AixKernelTaskInitForFusionFusion 任务处理src/runtime/feature/fusion/fusion_task_david.ccBuildFusionKernelTaskName、DoCompleteSuccessForFusionKernelTask、FusionKernelTaskUnInitFusion SQE 构建src/runtime/feature/fusion/fusion_sqe.ccConstructDavidSqeForFusionKernelTask、ConstructAicAivSubSqe、ConstructCcuSubSqeTask 数据结构src/runtime/core/inc/task/task_info.hppTaskInfo结构定义包含FusionTaskInfoTask 基础结构src/runtime/core/inc/task/task_info_base.hppFusionTaskInfo、FusionTaskInfoAicPart详细定义【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考