编译器核心架构为传统三段式模型
- FrontEnd:负责源码解析->语法树生成;涉及到词法分析(Lex),语法分析,语义分析
- Optimizer:负责中间代码优化;涉及到常量传播,死代码消除,循环优化等
- BackEnd:负责目标机器码生成;涉及到指令选择,寄存器分配,指令调度
在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。
在这之中,中间代码被称为IR(Intermediate Representation)
主流编译器技术
GCC(GNU Compiler Collection)
前后端耦合度高,支持多语言
...
LLVM(Low Level Virtual Machine)
模块化SDK架构,将编译器拆分成可重用库(like libLLVMCore),定义通用中间表示LLVM IR
典型的工具链有,opt:IR优化器;llc:IR->汇编代码生成器;llvm-mc:汇编器/反汇编器
...
Clang(LLVM前端)
...
TorchInductor
在pytorch2.0之后,引入了torchinductor,从“即时执行”向“编译模式”变化,TorchInductor把pytorch模型变成triton代码(gpu上)
。。。