概述
为了区分不同的硬件和软件目标,MLIR 具有“方言”,包括
- TensorFlow IR,它表示 TensorFlow 图表中所有可能的内容。
- XLA HLO IR,它旨在利用 XLA 的编译能力(输出到 TPU 等内容)。
- 一种实验性仿射方言,它专注于 多面体表示 和优化。
- LLVM IR,它与 LLVM 自身的表示之间存在 1:1 映射,允许 MLIR 通过 LLVM 发射 GPU 和 CPU 代码。
- TensorFlow Lite,它将转换为在移动平台上运行的代码。
每种方言都包含一组已定义的操作,这些操作具有不变性,例如:“这是一个二元运算符,输入和输出具有相同的类型。”
添加到 MLIR
MLIR 没有固定的/内置的全局已知操作列表(没有“内在函数”)。方言可以定义完全自定义的类型,这就是 MLIR 如何对诸如 LLVM IR 类型系统(它具有首要聚合)、对于 ML 优化加速器(例如量化类型)很重要的域抽象,甚至未来的 Swift 或 Clang 类型系统(它们围绕 Swift/Clang 声明节点构建)等内容进行建模的方式。
如果您想连接一个新的低级编译器,您将创建一个新方言以及 TensorFlow 图方言和您的方言之间的降低。这为硬件和编译器制造商铺平了道路。您甚至可以在同一模型中针对不同级别的方言;高级优化器将尊重 IR 中不熟悉的部件,并等待较低级别来处理它。