本节部分内容摘自https://openmlsys.github.io/
深度学习编译器需要理解输入的源程序并将其映射到目标机。为了实现这两项任务,编译器的设计被分解为两个主要部分:前端和后端。前端是不感知具体后端硬件的,因此前端执行的全部都是与硬件无关的编译优化。
前端的主要功能:解决编译生成的中间表示的低效性,使得代码的长度变短,计算图更简洁,编译与运行的时间减少,执行期间处理器的能耗变低。前端流程可以用下图表示:
传统中间表示如LLVM IR,能够很好地满足通用编译器的基本功能需求,包括类型系统、控制流和数据流分析等。然而,它们偏向机器语言,难以满足机器学习框架编译器的中间表示的需求。因此出现了大量支持自动微分等深度学习特有功能的中间表示,如TorchScript IR、XLA HLO和MLIR等。
前端编译优化的方法有很多,机器学习框架也有很多不同于传统编译器的优化方式,包括无用与不可达代码消除、常量传播和常量折叠、公共子表达式消除。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!