MLIR:新建一个Dialect(二)

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

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 8 期,继续介绍一个简单的 MLIR Dialect.

转载请注明出处!

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

接上回,本文继续新建一个 Dialect的内容。

准备

首先,将示例项目 clone 下来,

1
git clone https://github.com/Lewuathe/mlir-hello

根据前文MLIR:Getting_started内容,将 MLIR 相关工具链编译好。注意,要保留 build 目录(注意不是安装目录)内容,这里记为${LLVM_BUILD}

构建

准备好环境后,进入 mlir-hello,开始构建这个项目,

1
2
mkdir build && cd build
cmake -G Ninja .. -DLLVM_DIR=${LLVM_BUILD}/lib/cmake/llvm -DMLIR_DIR=${LLVM_BUILD}/lib/cmake/mlir -DCMAKE_C_COMPILER=${LLVM_BIN}/clang -DCMAKE_CXX_COMPILER=${LLVM_BIN}/clang++

我使用了之前编译好的 LLVM/Clang (${LLVM_BUILD}) 作为编译器。

下一步编译之前,先删掉 mlir-hello/include/Hello/HelloOps.td 中的 NoSideEffect 字样。不然会报错。该参数本意是指示删除生成时的无效代码残留。

有三个目标可以生成,

1
2
3
4
5
6
# 主要目标程序
cmake --build . --target hello-opt
# 测试。我通过了 5 个,失败了 2 个,不清除哪里有问题
cmake --build . --target check-hello
# 文档
cmake --build . --target mlir-doc

第一个尝试

使用生成的 hello-opt 进行一次 lower 操作,保存输出的 .ll 文件保存。这个文件是 LLVM 字节码的文本形式,可以被 lli 直接解释执行。

1
2
# 还是在 build 目录下
./bin/hello-opt ../test/Hello/print.mlir >> print.ll

使用之前编译好的 lli 执行,

1
2
3
${LLVM_BIN}/lli print.ll
1.000000 2.000000 3.000000
4.000000 5.000000 6.000000

本期结语

可以看到,mlir 文件同样可以作为编译器的输入,完成一个端到端的 lowering 和执行。我们下期继续。

都看到这儿了,不如关注每日推送的“科文路”、互动起来~

至少点个赞再走吧~

MLIR:新建一个Dialect(二)

https://xlindo.com/kewenlu2022/posts/2e26ab98/

Author

xlindo

Posted on

2022-10-27

Updated on

2023-05-10

Licensed under

Comments