MLIR Introduction
简介
MLIR 项目是一个构建可重用和可扩展编译器基础设施创新项目,旨在解决软件碎片化问题,显著降低构建特定领域编译器的成本。
基于MLIR,可以实现:
- 数据流图表达(如TensorFlow),包含dynamic shape,用户扩展op等;
- 数据流图的优化和变换,如Grappler;
- 跨Kernel实现HPC风格的循环优化(如fusion,interchange,tiling等),数据在内存中的layout变换;
- 针对1D(如CPU)和2D(如GPU)寄存器架构的代码生成“lowering”转换,如DMA指令插入,显式cache管理,内存Tiling,矢量化;
- 表达特定硬件后端的的op,如加速器的高级操作;
- 深度学习图变换,如量化等;
- 多面体原语;
- 硬件综合工具。
常用术语
Block(Basic Block):一个没有控制流的顺序operation列表。
Conversion:将代码从一种Dialect表示转换为语义等价的同一种(intra-dialect)或另一种Dialect(inter-dialect)表示。在MLIR的上下文中,conversion表示MLIR内的转换,既不转换到MLIR Dialect以外的表示(如LLVM IR)。
CSE (Constant Subexpression Elimination):公共子表达式消除。
TODO
参考资料:
MLIR
Glossary - MLIR