Skip to content

19. Operator Fusion Introduction | Operator Fusion Introduction

难度: Medium | 标签: Operator Fusion, Compiler, Performance | 目标人群: 准备进入 Chapter 3 的学习者

这一页先讲清楚:为什么要把多个算子合在一起做。核心是减少中间结果读写,提高整体吞吐。

前置关系

  • Chapter 3 会直接进入融合算子和编译优化
  • 先建立“减少搬运比单点提速更重要”的思维

你应该先建立的直觉

1. 算子之间的中间结果很贵

一个算子做完以后,结果通常要:

  • 写回内存
  • 再被下一个算子读出来

这种来回读写在 GPU 上很容易成为隐性成本。
所以融合的第一价值,就是少做一次中间结果落地。

2. 融合的核心不是“把代码写得更长”,而是减少中间结果的读写成本

算子融合真正想做的是:

  • 减少内存往返
  • 提高数据局部性
  • 让多个步骤在一次执行里完成

所以它关注的是“组织方式”,不是“把代码堆在一起”。

3. 不是所有算子都适合融合

融合也有边界:

  • 依赖关系太复杂时不适合硬融
  • 数据形状差异太大时不一定划算
  • 有些算子融合后会增加实现复杂度

所以判断“能不能融、值不值得融”本身就是工程能力。

一个最常见的理解路径

text
算子 A -> 写中间结果 -> 算子 B 读取 -> 再继续计算

如果能改成:

text
算子 A 和 B 在一次执行中连续完成 -> 少一次中间读写 -> 更高吞吐

你就已经抓住了算子融合的核心意义。

常见误区

  • 以为融合就是“把功能写到一起”
  • 只看算子数量,不看中间结果成本
  • 以为所有算子都应该尽量融合
  • 忽略可维护性和实现复杂度

这一页学完后,你应该能回答

  • 为什么算子融合能提升性能
  • 为什么中间结果读写是隐性成本
  • 为什么融合不是越多越好
  • 为什么 Chapter 3 的编译优化要关心算子边界

和后续章节的联系

  • Chapter 3: 融合算子实现
    你会看到哪些算子适合融合,怎么融合

  • Chapter 3: 编译器优化
    你会看到编译器如何自动做部分融合和重排

  • Chapter 3: Triton / CUDA
    你会看到内核级实现如何支撑融合

小结

这一页的作用很简单:

  • 先让你知道为什么中间结果贵
  • 再让你知道融合为什么有用
  • 最后让你知道为什么 Chapter 3 要谈算子融合

如果你已经能把“减少中间读写”看成优化目标,这一页的目标基本达成。

Released under the MIT License.