首页 > 其他分享 >从零开始教你写一个MLIR Pass

从零开始教你写一个MLIR Pass

时间:2024-07-06 10:09:18浏览次数:12  
标签:教程 LLVM IR MLIR 从零开始 Pass DLLVM

笔者在去年写了一篇LLVM Pass的教程,现在从事MLIR的开发近1年了,写点教程回馈下社区。

MLIR(Multi-Level Intermediate Representation,多层中间表示)是LLVM之父(博士期间开发的LLVM)的Chris Lattner带领团队开发的编译器基础设施,其增强了 LLVM IR表达能力,而且其是关注Polyhedral(多面体模型)的设计,可以更好地做优化。入门这个dsl最好还是看其官方文档官方教程,我在此记录下我的理解。

本教程采用 LLVM 18.1.0版本,commit id是461274b,下载不了可以用这个链接

一、什么是MLIR

之前LLVM Pass的大多数输入都是LLVM IR,其抽象结构如下图所示,其最小粒度为ISD,这个中间表示粒度为指令,各个后端针对特殊节点会有lower。

MLIR包含了更多的信息,抽象层级更高,而且也有不同的dialect(方言),代表不同的抽象层级,不断得lower也可以到LLVM IR,下图来源 [RFC] Updated MLIR Dialect Overview Diagram

二、书写MLIR Pass

编译MLIR,
下载好源码可以使用如下源码编译

mkdir build; cd build
cmake -G Ninja ../llvm \
   -DLLVM_ENABLE_PROJECTS=mlir \
   -DLLVM_BUILD_EXAMPLES=ON \
   -DLLVM_TARGETS_TO_BUILD="Native;NVPTX;AMDGPU" \
   -DCMAKE_BUILD_TYPE=Release \
   -DLLVM_ENABLE_ASSERTIONS=ON

三、MLIR独立工程参考

四、总结

参考

周可行的中文教程
官方文档
BBuf的学习笔记

标签:教程,LLVM,IR,MLIR,从零开始,Pass,DLLVM
From: https://www.cnblogs.com/BobHuang/p/18249482

相关文章

  • 动手学深度学习(Pytorch版)代码实践 -循环神经网络-54~55循环神经网络的从零开始实现和
    54循环神经网络的从零开始实现importmathimporttorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2limportmatplotlib.pyplotaspltimportliliPytorchaslp#读取H.G.Wells的时光机器数据集batch_size,num_steps......
  • 从零开始学习嵌入式----C语言“\“字符
    C语言\01932\01\12\09的意思是什么?应该这样看:    所有的ASCII码都可以用"\"加数字(一般是八进制)来表示。而C语言中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符。     1)"\"后面如果跟了三位八进制数字就将\ddd作为......
  • 从零开始使用WordPress搭建个人网站并一键发布公网详细教程
    文章目录前言1.搭建网站:安装WordPress2.搭建网站:创建WordPress数据库3.搭建网站:安装相对URL插件4.搭建网站:内网穿透发布网站4.1命令行方式:4.2.配置wordpress公网地址5.固定WordPress公网地址5.1.固定地址访问WordPress前言本文主要介绍如何在LinuxUbuntu......
  • 从零开始学数据结构系列之第四章《 广度优先遍历BFS》
    文章目录广度优先遍历(BFS)概念广度优先遍历算法步骤总代码往期回顾广度优先遍历(BFS)概念​  广度优先遍历(BreadthFirstSearch),又称为广度优先搜索,简称BFS。​  如果说图的深度优先遍历类似树的前序遍历,那么图的广度优先遍历就类似于树的层序遍历了。​ ......
  • 从零开始学习嵌入式——C语言数值传递(值传递和地址传递)
        C语言实现主函数与被调用子函数变量之间数值交换的方法。 1、值传递:主函数中的数值并未实现交换。2、地址传递:交换的是指针指向,a,b并未实现交换 3、传递地址,交换地址实现值的交换 4、传入地址,定义的子函数 知道了主函数传递的地址参数才能对主函数当中......
  • 从零开始学习数据结构--2.1线性表之顺序表
    到这一章线性表,我们要掌握的就多了。1.线性表的定义线性表是n个具有相同特性的数据元素的有限序列。我们可以理解为幼儿园排队,在幼儿园里面,每个小朋友都是有一定的序号的,小朋友可以领到他们的专属号码,比如说小明是一号,小花是二号......那么,我们就可以说幼儿园小朋友排队属于......
  • 从零开始的Django+vue项目实战(1)
    Introduction这个系列的blog是为哈工大(威海)的企业与服务智能计算研究中心(ICES)的纳新培训任务准备的,但是也适合想学习django并快速上手项目的友友。我们培训的目的要使新人学会web前后端开发。培训PPT里给出了用springboot和vue3来实现,但是如今django也愈发流行,为了弥补P......
  • 【攻防世界】ezbypass-cat
    ezbypass-cat题目来源攻防世界NO.GFSJ1183题目描述只有一个登录界面,没有注册界面,扫目录也扫不出有用的文件。sql注入也无果,有些难以下手。题解一该题解可能是一个非预期解,能快速获得flag不在文本框输入任何数据,直接在URL后面拼接/../flag.html,即可得到flag。该题解......
  • 教你从零开始制作一个Web蜜罐扫描器
    01想法的来源在渗透的过程中,会遇到很多蜜罐,一旦不小心踩了蜜罐,就会被溯源,所以很可怕。为了规避上面的现象,就需要把蜜罐筛出来。使用场景是在前期资产收集的过程中,搞到了一堆子域名,先筛掉一批蜜罐,留下可以攻击的纯净资产。同上得到的一份资产如下:如上图所示,大量的域名如......
  • 从零开始带你上手体验Sermant自定义插件开发
    本文分享自华为云社区《Sermant自定义插件开发上手体验》,作者:华为云开源。一、研究缘由由于目前我们所处的行业是汽车行业,项目上进行云服务的迁移时使用到了Sermant中的相关插件,为了加深对Sermant开发和运行机制的了解,我们从零开始体验Sermant自定义插件的开发。下面我们就Se......