简介
功能介绍
SuperKernel是一种基于二进制层面的算子融合技术,区别于传统的源码级融合,其核心在于对已编译的二进制内核函数(Kernel)进行深度优化。通过智能调度与组合,将多个独立的内核函数(子Kernel)整合为一个高效的“超级内核”(SuperKernel),以调用子函数的形式统一调用多个其他内核函数。相比单个算子下发,SuperKernel 技术显著降低了任务调度的等待时间与调度开销,并能有效利用子任务间的空闲资源,进一步优化整体算子的执行效率和头开销。
为提升SuperKernel融合的灵活性,引入了一种基于Scope标记的SuperKernel标定机制:用户可手动指定需要融合到同一SuperKernel中的算子,同时支持手动标记不参与融合的算子,且“不融合”标记具有最高优先级。
该特性目前仅支持
实现原理
当检测到用户进行了手动标定时,系统将按照用户标定的范围进行SuperKernel融合。在SuperKernel生成策略上,系统将根据其标记集合进行分组。具有完全相同标记集合的算子将被归为一组,进入后续的Super Kernel融合流程。工作流程为:

- 触发融合流程
每组内算子进入SuperKernel的融合逻辑(如图1中的sk1, sk2等)。
如下两个图展示了SuperKernel融合范围的标定示例:
- 标定SuperKernel融合范围
- 使用“sk1”将op3、op4、op5标定到一个融合范围。
- 使用“sk2”将op7、op8、op9标定到一个融合范围。
- op1、op2、op6由于未被纳入任何标定组,不参与融合。
- 标定SuperKernel不融合的算子图2 标记算子不融合的示意图

使用None标定的算子:op3、op4、op5不参与SuperKernel的融合。
使用约束
标定范围内若存在不可融合的算子,会生成第一段SuperKernel,同时自动跳过该算子进行第二段的SuperKernel融合,因此标定范围不代表最终的融合结果。
父主题: SuperKernel融合范围标定
