开发环境搭建Note

由于MLIR API经常变化,而且与LLVM项目深度绑定,进行MLIR开发的电脑存储容量应当能存储LLVM仓库,并且CPU性能能编译完整的MLIR。

如果不具备以上条件

也可以使用debian-sid的Docker镜像,从apt源下载MLIR的二进制分发

最好先学习LLVM,LLVM和MLIR有很多相似之处,但MLIR的样例很多都要比LLVM要抽象,我觉得没有LLVM好理解

官方资源

官网:Multi-Level Intermediate Representation Overview

Github仓库(属于LLVM的子项目):https://github.com/llvm/llvm-project/tree/main/mlir

Youtube频道:https://www.youtube.com/@MLIRCompiler

Tutorial

j2kun的Tutorial我认为是讲的比较好的,但该环境是基于Babel的,建议单开环境

j2kun/mlir-tutorial

MLIR官方的Tutorial,展示了MLIR的基本特性,建议J2kun的看完后再看

Toy

Startup

为了简化MLIR环境配置,我把官网的Tutorial独立出来放了个仓库

mocusez/CMake_MLIR_Toy

MLIR Hello展示了一个非常小的MLIR实现,对于MLIR的理解会有所启发

https://github.com/Lewuathe/mlir-hello

第三方资料

北大:周可行

这个资料可以总览MLIR项目的整体架构与思想

https://github.com/KEKE046/mlir-tutorial

中科院软件所:张洪滨

知乎ID法斯特豪斯

MLIR 文章视频汇总

20211025-MLIR的简介-实践-思考-zhanghongbin.pdf

先进编译实验室

人工智能编译器MLIR-官方入门

Lei.Chat()

从Google和AMD离职的大佬,他的几篇文章还不错

MLIR Linalg Dialect and Patterns

MLIR Vector Dialect and Patterns

MLIR CodeGen Dialects for Machine Learning Compilers

Compilers and IRs: LLVM IR, SPIR-V, and MLIR

MocusEZ

我自己踩过的坑😂

对于如何端到端运行MLIR程序的记录:如何愉快的运行一个MLIR程序

对于Toy Tutorial的一些个人见解:MLIR Toy Tutorial实践记录

拓展内容

LingoDB

LingoDB是TUM基于MLIR的列存数据库,项目仓库:https://github.com/lingo-db/lingo-db

可以参考我的资料进行配置:LingoDB源码编译与分析

TPU-MLIR

除了谷歌外,国内一家名为算能的公司在做:sophgo/tpu-mlir

Triton

OpenAI的Triton是目前MLIR应用的典型:triton-lang/triton

B站先进编译实验室对Triton源码的解析也有利于MLIR的OpenAI triton分享:triton源码结构

GEMM类

通用矩阵乘法运算(General Matrix Multiplication)

Numba也有基于MLIR的实现,目前还在Demo阶段:numba/numba-mlir

另外就是Polygeist,将C转为MLIR进行GEMM运算:https://polygeist.llvm.org/

HEIR

j2kun开发的项目,Google的基于MLIR的同态加密项目:https://heir.dev/

ClangIR

ClangIR也是基于MLIR上开发的,我在GSOC上面看到的,目前还在开发阶段:https://llvm.github.io/clangir/

Rust Binding

基于MLIR的C API,经常受到MLIR API变动而受到影响

https://github.com/raviqqe/melior