开发者
资源

简介

功能介绍

SuperKernel是一种基于二进制层面的算子融合技术,区别于传统的源码级融合,其核心在于对已编译的二进制内核函数(Kernel)进行深度优化。通过智能调度与组合,将多个独立的内核函数(子Kernel)整合为一个高效的“超级内核”(SuperKernel),以调用子函数的形式统一调用多个其他内核函数。相比单个算子下发,SuperKernel 技术显著降低了任务调度的等待时间与调度开销,并能有效利用子任务间的空闲资源,进一步优化整体算子的执行效率和头开销。

为提升SuperKernel融合的灵活性,引入了一种基于Scope标记的SuperKernel标定机制:用户可手动指定需要融合到同一SuperKernel中的算子,同时支持手动标记不参与融合的算子,且“不融合”标记具有最高优先级。

该特性目前仅支持Atlas A3 训练系列产品/Atlas A3 推理系列产品

实现原理

当检测到用户进行了手动标定时,系统将按照用户标定的范围进行SuperKernel融合。在SuperKernel生成策略上,系统将根据其标记集合进行分组。具有完全相同标记集合的算子将被归为一组,进入后续的Super Kernel融合流程。工作流程为:

  • 记录标定信息

    系统遍历所有算子,记录每个算子被用户标定的“标记集合”(即哪些算子属于同一标定区域)。

  • 按标记集合分组

    将所有算子按照其“标记集合”完全一致的原则进行分组。只有标记集合完全相同的算子才会被归入同一组。

  • 触发融合流程

    每组内算子进入SuperKernel的融合逻辑(如图1中的sk1, sk2等)。

如下两个图展示了SuperKernel融合范围的标定示例:

  • 标定SuperKernel融合范围
    图1 标记SuperKernel融合范围的示意图
    • 使用“sk1”将op3、op4、op5标定到一个融合范围。
    • 使用“sk2”将op7、op8、op9标定到一个融合范围。
    • op1、op2、op6由于未被纳入任何标定组,不参与融合。
  • 标定SuperKernel不融合的算子
    图2 标记算子不融合的示意图

    使用None标定的算子:op3、op4、op5不参与SuperKernel的融合。

使用约束

标定范围内若存在不可融合的算子,会生成第一段SuperKernel,同时自动跳过该算子进行第二段的SuperKernel融合,因此标定范围不代表最终的融合结果。