AI Compiler vs Traditional Compiler
https://www.zhihu.com/question/396105855
1 Answer 1¶
如果指的是针对神经网络的编译器,相对传统编译器最大的不同大概就是引入了multi-level IR吧。
我们都知道传统编译器里分为前端,优化和后端,其中前端和语言打交道,后端和机器打交道,现代编译器的的前端和后端分的很开,而他们之间的共同桥梁就是IR。IR可以说是一种胶水语言,注重逻辑而去掉了平台相关的各种特性,这样为了支持一种新语言或新硬件都会非常方便。
而由于神经网络结构领域的特殊性,这类编译器不光要解决跨平台,还有解决对神经网络本身的优化问题,这样原先一层的IR就显得远远不够,原因在于如果设计一个方便硬件优化的low level的语言,你几乎很难从中推理一些NN中高阶的概念进行优化。比如说LLVM很难把一连串的循环理解成卷积。一个完善的High level IR,至少需要包括对计算图的表示(DAG, let binding),同时满足对tensor和operator的支持。
Answer 2¶
本质上没差别。
主要在于神经网络编译器可以对应用做很多很强的假设,而且主要以嵌套循环的计算为主,所以可以针对性的进行优化。
另外传统编译器的前端也非常厚重,都是以编程语言为输入来生成IR的。而神经网络编译器的主要问题还是性能优化和适配,所以基本都懒得做前端,直接用代码手动构造IR。
当然这个方向也就最近两年才开始起来的,还有很多地方需要改善。
Answer 3¶
不知道这个针对神经网络的编译器是不是指TVM这类东西,如果是指用神经网络编译代码那就是骗人的东西了
至于TVM,现在有很多框架(TF,Pytorch),然后会部署到不同平台(CPU、GPU、TPU),神经网络编译器呢就是把不同框架里写的东西编译成一样的格式再生成到某一平台的代码
再来看传统编译器(更偏向于LLVM),现在有许多语言(C、ObjC、C++),也有许多平台(x86、arm),编译器做的就是把不同语言编译到同样的中间代码再生成某一平台的代码
从上面两个工作流程应该看得出来,这两个就是把前端的表示进行统一再生成硬件相关的程序,只不过一个前端表示的是神经网络,一个是大家都熟悉的代码,结构类似但实际内部工作大相径庭