在深入了解AI编译器之前,我们首先需要了解编译器的基本概念。编译器是一种软件,它将高级编程语言(如Python、C++等)编写的源代码转换成低级语言(如机器码)的目标代码。这个过程通常包括几个阶段,如词法分析、语法分析、语义分析、中间代码生成、优化和代码生成等,而我们习惯把这几个阶段分为前端和后端,如下图所示:
在上图中我们可以看到 “中间代码”这个东西,通常我们也叫“中间表示(Intermediate Representation)”,即 IR。在一些主流的传统编译器(LLVM)中,LLVM前端将高级语言转化为IR,后端将IR转换成目标硬件上的机器指令,IR作为桥梁在前后端之间进行基于IR的各种优化。这样无论是新增硬件的支持,还是新增前端的支持,都可以尽可能地复用IR相关的部分。IR可以是单层的,也可以是多层的, LLVM IR是典型的单层IR,其前后端优化都基于相同的LLVM IR进行。
AI编译器就是基于这种思想,采用了多层级IR的设计,比如下图展示了基于TensorFlow的多层IR表示: