【编译器工程与 MLIR】MLIR 全景图与设计哲学
从 Module-Operation-Region-Block 四层结构出发,系统讲解 MLIR 的三条核心设计原则:渐进降阶、方言可组合性、基础设施复用,配合 IREE、CIRCT、Torch-MLIR 等实际案例建立心智模型。
发布来自土法炼钢兴趣小组的知识、笔记、进展和应用。主题包括数据结构和算法、编程语言、网络安全、密码学等。
共 19 篇文章 · 返回首页
从 Module-Operation-Region-Block 四层结构出发,系统讲解 MLIR 的三条核心设计原则:渐进降阶、方言可组合性、基础设施复用,配合 IREE、CIRCT、Torch-MLIR 等实际案例建立心智模型。
从零构建 LLVM/MLIR 工程,用 mlir-opt 理解 .mlir 文本表示,运行规范化 Pass 并逐行解读转换结果,建立从命令行到 IR 变换的直觉。
深入 Operation、Op、Value、Block、Region 的 C++ 内存布局与继承体系:CRTP 模板包装、SSA 值的两种来源、Use 链表的遍历方法。这是后续所有 Pass 写作的基础。
解析 MLIR 的类型体系:内建类型(Integer、Float、Tensor、MemRef)与自定义方言类型的注册机制;区分 Type 与 Attribute 的设计意图;通过 OpBuilder 理解类型和属性在 IR 构造中的实际角色。
深入 MLIR 的 Operation Definition Specification (ODS) 和 TableGen 工具链:从 .td 定义到自动生成的构建器、验证器、解析/打印器代码,理解声明式 IR 定义如何减少 80% 样板代码。
解析 MLIR 的嵌套区域控制流表示:Block 参数替代 phi 节点的设计动机、Region 的 SSACFG 与 Graph 两种类型、结构化控制流的表示能力,以及与 LLVM 经典 SSA 形式的对比。
详解 MLIR 的 Pass 基础设施:OperationPass 与 ModulePass 的分类与适用场景、Pass 依赖管理与流水线构建、Pass 选项系统、多线程执行模型,以及 mlir-opt 的调试命令。
深入 MLIR 的模式重写引擎:RewritePattern 的驱动模型、matchAndRewrite 的匹配与替换协议、规范化(Canonicalization)规则的编写、折叠与代数简化的最佳实践,以及 GreedyPatternRewriteDriver 的工作机制。
系统讲解 MLIR 的方言转换框架:TypeConverter 的类型映射、ConversionTarget 的合法性检查、完整转换与部分转换的适用边界、以 linalg bufferization 为例展示渐进降阶的实现模式。
解析 AI 编译的核心抽象层:Tensor 方言的不可变语义与操作、Linalg 方言的结构化操作(逐元素、归约、收缩)及其通用表示 linalg.generic,以矩阵乘法为例展示从高层表示到底层循环的完整降阶路径。
深入 MLIR 的循环层表示:Affine 方言的仿射约束与依赖分析、与多面体(Polyhedral)模型的联系、SCF 方言的结构化控制流,以及从 affine.for 到 scf.for 的降阶过程。
解析 MLIR 的 GPU 代码生成框架:GPU 方言的层次化并行模型(Block/Thread/Memory)、gpu.launch 的语义、SPIR-V 出口路径、内存层次抽象与 tiling 策略,以及与 Triton、IREE 的协作关系。
系统比较 PyTorch(Torch-MLIR)、TensorFlow(MHLO)、JAX(StableHLO)、ONNX(ONNX-MLIR)四种 AI 框架到 MLIR 的桥接方案:各自的 IR 翻译路径、方言映射方式和复用关系,分析 StableHLO 作为跨框架统一 IR 的地位与局限。
手把手构建一个领域专用的微型 Tensor DSL:自定义方言、用 ODS 定义操作、写模式重写和方言转换 Pass、生成 LLVM IR 并 JIT 执行。在一个项目中走完 MLIR 编译链的完整闭环。
MLIR 编译开发的实用工具箱:mlir-opt 的流水线诊断、IR dump 与 Pass 前后对比、mlir-tblgen 的使用方法、Pass 崩溃定位与 reproducer 生成、性能剖析与 IR 可视化工具的完整操作指南。
以 IREE 为实例,展示 MLIR 在实际 AI 编译器项目中的集成方式:编译流程剖析、HAL 运行时设计、设备驱动抽象、部署到移动端或边缘设备的完整链路。
全系列收官:回顾 MLIR 的设计哲学如何重塑编译器工程的边界,审视 MLIR 2.0 的社区规划、AI 生成编译器的可能性与陷阱、以及编译器基础设施的开放问题——从方言生态到 DSCO 愿景。
从经典三阶段编译器的局限出发,串联 Halide 的调度分离、XLA 的张量级 IR、TVM 的多级抽象,分析为什么领域专用架构和 AI 编译器的需求正在撕裂传统中间表示,论证 MLIR "元 IR"方案的必然性。
从传统三阶段编译器局限出发,系统讲解 MLIR 的方言设计、渐进降阶与编译器工程方法如何统一 AI 编译器、异构计算与领域专用架构的编译链,覆盖 Operation/Type/Pass/RewritePattern 核心机制到 Tensor/Linalg/Affine/GPU 方言实战。