Halide-based IR和 Polyhedral-based IR

背景

编译器后端的第一步是生成低级IR。低级IR可以理解为实现单个算子的算法的抽象表达形式。
编译器后端的第二步是后端优化。针对不同的硬件架构,不同的算法实现方式有不同的性能。后端优化的目的就是希望能找到算子的最优实现方式,达到最优的性能。编译器后端优化是AI编译器的核心内容。编译器后端的第三步是代码生成。代码生成即把优化后的低级IR转化成机器指令,这一步通常会借助其他成熟的编译工具来实现,不是AI编译器的核心内容。常用的编译工具包括跨平台的LLVM、Nvidia GPU的编译工具NVCC等等。AI编译器会将低级IR转化成这些成熟编译工具的输入形式,再调用它们生成机器指令。

针对不同的ir,目前现存的方式分为两种:

Halide-based IR

Halide-based IR的基本原理是Compute和Schedule的分离。 与其直接给出具体方案,在各种的shcedule中的方案找到最优解。 手写schedule的模板:例如Halide和TVM,他们的思想是将每个算子(conv2d)的计算分为compute和schedule。compute不需要考虑底层硬件架构来写计算规则,schedule是优化底层的tensor计算,包括如何访存,如何并行。缺点是描述优化的空间有限,也就是可以应用的原语有限。

Polyhedral-based IR

基于halide描述的IR,然后抽象出多项式的ir,描述一个计算是通过domain(所有数据的范围),Sequence(计算的映射以及规则),Band(计算的范围),Context(约束关系)。基于这个ir然后生成调度树,在树通过搜索算法中可以找到最优解。
Halide-based IR和 Polyhedral-based IR_第1张图片
一般情况下,多数的框架都是走dsl->halide IR->poly IR的。例如Tensor comprehension的技术路线。
Halide-based IR和 Polyhedral-based IR_第2张图片

同系列文章参考

图层面的技术

神经网络编译器图层面IR
神经网络编译器-常量折叠
神经网络编译器优化-死代码消除

算子层面的技术

Halide-based IR和 Polyhedral-based IR简介
后端优化技术loop transformation
神经网络编译器的Tensor优化:auto tune和auto schedule

神经网络的加速

神经网络的加速技术
神经网络稀疏性调研
神经网络中矩阵稀疏性的编码方式

多面体模型

多面体模型系列一

你可能感兴趣的:(神经网络编译器优化,神经网络的软硬件协同加速,mindspore代码)