MLIR:新建一个Dialect(一)

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 7 期,在对 MLIR 有了基本认识后,总览所有的重要概念。编辑自MLIR:Glossary.

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。

本文开始介绍如何新建一个 Dialect。 更多 DefiningDialects

Read more

MLIR:LLVM总览

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 6 期,在对 MLIR 有了基本认识后,总览所有的重要概念。编辑自MLIR:Glossary.

转载请注明出处!

本文介绍 MLIR 项目的父项目—— LLVM 项目。

由来

LLVM 的名字最初由 Low Level Virtual Machine (底层虚拟机)而来,但现在已然成为一个模块化、可重用的编译工具集合。(所以它现在完全是独立出道,不再作为缩写被解释。)

LLVM 项目最初由伊利诺伊大学的 Chris Lattner 主持,该作者也是 MLIR 项目的主导者。它最初的目标是提供一种现代的、基于SSA的编译策略,它能够支持任意编程语言的静态和动态编译。

Read more

MLIR:重要术语、概念

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 5 期,在对 MLIR 有了基本认识后,总览所有的重要概念。编辑自MLIR:Glossary.

本文是 MLIR 相关术语、概念的总览。按首字母序。

转载请注明出处!

Read more

MLIR:Getting-started-2

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 5 期,接上期,使用 Polygeist 完成一个 C 代码的 MLIR 编译执行流程。

接上周文,现在我们已经有了几个重要的 MLIR 工具:

  • mlir-opt
    • MLIR 机器无关优化
  • mlir-translate
    • 不同 MLIR 间转换
  • llc
    • LLVM 编译器
  • clang/clang++
    • LLVM C/C++前端
  • cgeist
    • MLIR C/C++前端
Read more

MLIR:Getting_started

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 4 期,介绍 MLIR 的安装。

MLIR 目前已经是 LLVM 项目的一部分,所以编译安装过程类似于 LLVM 其他项目的过程。

Read more

MLIR:EBNF,扩展巴科斯范式

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 3 期,介绍编译器基础概念 EBNF。

参考 Wiki:Extended Backus–Naur form

Read more

MLIR:静态单赋值,SSA

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为 MLIR 系列第 2 期,介绍基础概念 SSA。

Read more

MLIR:概览

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。

本文起,将结合工作经验对 MLIR 进行讲解。本文为开篇,内容来自Chris Lattner’s Homepage

Read more

C++:CRTP,传入继承

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

由于名称 CRTP 没啥内涵也不好记,我这里就称其为“传入继承”吧。“传入”可以助记 CR TP,也指代需要把自身传进父类。

MLIR 中使用 C++ 定义新的 Op 时,就避不开 CRTP (Curiously Recurring Template Pattern) 这么个神奇的 C++ 设计模式。

比如下面这段代码

1
2
3
4
5
6
7
class ConstantOp : 
public mlir::Op<
ConstantOp,
mlir::OpTrait::ZeroOperands,
mlir::OpTrait::OneResult,
mlir::OpTraits::OneTypedResult<TensorType>::Impl> {
...

可以看到,我们需要定义的 ConstantOp 出现在了右侧父类的模板参数列表中。果然 curiously enough (神奇)。

这里借用 cppreference 的例子一起学习一下这个需要把自身交代给父类的继承方式,由于原始名称 CRTP (奇异递归模板模式)没啥内涵也不好记,我这里就称其为“传入继承”吧。“传入”可以助记 CR TP,也指代需要把自身传进父类。

Read more