MLIR多级中间表示概述

MLIR多级中间表示概述             

MLIR项目是构建可重用和可扩展的编译器基础设施的一种新方法。MLIR旨在解决软件碎片化问题,改进异构硬件的编译,显著降低构建特定领域编译器的成本,并帮助将现有编译器连接在一起。             

More resources

有关MLIR的更多信息,请参见:             

l  LLVM论坛的MLIR部分有任何问题。             

l  LLVM不一致服务器MLIR通道的实时讨论。             

l  之前的会谈。             

另请参阅TensorFlow MLIR SIG,它每周组织一次关于MLIR的公众“公开设计会议”。

What is MLIR for?

MLIR旨在成为一个混合IR,它可以在一个统一的基础设施中支持多种不同的需求。例如,这包括:             

l  表示数据流图的能力(例如在TensorFlow中),包括动态形状、用户可扩展的算子生态系统、TensorFlow变量等。             

l  通常在这种图上进行的优化和转换(例如在Grappler中)。             

l  以适合优化的形式表示ML算子的内核。              

l  能够跨内核托管high-performance-computing-style高性能计算风格的循环优化(融合、循环交换、并行tiling等),并转换数据的内存布局。             

l  代码生成“降低”转换,如DMA插入、显式缓存管理、内存平铺和一维和二维寄存器架构的矢量化。             

l  能够代表target-specific目标的算子,例如accelerator-specific high-level加速器特定的高级算子。             

l  在深度学习图上进行的量化和其他图形转换。

MLIR是一种通用的IR,它还支持特定于硬件的操作。因此,对围绕MLIR的基础结构的任何投资(例如,在其上工作的编译器通行证)都应该产生良好的回报;许多目标可以使用该基础结构并从中受益。               

MLIR是一个强大的代表,但它也有非目标。不支持低级机器代码生成算法(如寄存器分配和指令调度)。它们更适合于较低级别的优化器(如LLVM)。而且,不希望MIIR是最终用户自己编写内核(类似于CUDA C++)的源语言。另一方面,MLIR为表示任何此类DSL并将其集成到生态系统中提供了主干。             

编译器基础结构             

在建立MLIR时,受益于从构建其他IRs(LLVM IR、XLA HLO和Swift SIL)中获得的经验。MLIR框架鼓励现有的最佳实践,例如编写和维护IR规范,构建IR验证器,提供将MLIR文件转储并解析为文本的能力,使用FileCheck工具编写大量的单元测试,以及将基础结构构建为一组可以以新方式组合的模块化库。             

其它的优点也被巧妙地融入到设计中。例如,LLVM存在一些不明显的设计错误,这些错误会阻止多线程编译器同时处理LLVM模块中的多个函数。MLIR通过限制SSA作用域来减少使用def链,并用显式符号引用替换跨函数引用来解决这些问题。

 

posted @ 2020-12-12 12:52  吴建明wujianming  阅读(771)  评论(0编辑  收藏  举报