简介

MLIR 项目是一个构建可重用和可扩展编译器基础设施创新项目,旨在解决软件碎片化问题,显著降低构建特定领域编译器的成本。

基于MLIR,可以实现:

  • 数据流图表达(如TensorFlow),包含dynamic shape,用户扩展op等;
  • 数据流图的优化和变换,如Grappler;
  • 跨Kernel实现HPC风格的循环优化(如fusion,interchange,tiling等),数据在内存中的layout变换;
  • 针对1D(如CPU)和2D(如GPU)寄存器架构的代码生成“lowering”转换,如DMA指令插入,显式cache管理,内存Tiling,矢量化;
  • 表达特定硬件后端的的op,如加速器的高级操作;
  • 深度学习图变换,如量化等;
  • 多面体原语;
  • 硬件综合工具。

常用术语

语言

Dialect

一组扩展MLIR系统的功能。Dialect创建了一个唯一的namespace,包含operations,attributes,types。可以把MLIR看作一种meta-IR,所有的Dialects都是MLIR的一部分。使用dialect而不是language是想强调Dialect不是一个独立的IR。

转换

Translation

将非MLIR的形式转换为MLIR的形式(Import),或者反之(Export)。

Export

将MLIR形式转换为语义等价的外部IR的形式(如LLVM IR)。

Import

将外部IR(如Torch IR)转换为语义等价的MLIR的形式。

Conversion

将代码从一种Dialect表示转换为语义等价的同一种(intra-dialect)或另一种Dialect(inter-dialect)表示。在MLIR的上下文中,conversion表示MLIR内的转换,既不转换到MLIR Dialect以外的表示(如LLVM IR),否则是Translation。

Round-trip

将源格式转换为目标格式,再转换回源格式的过程。

Lowering

将高级IR表达的operation转换为语义等价的低级IR表达。在MLIR中通常通过dialect conversion来实现。

Legalization

将operations转换为符合转换目标所设定要求的语义等价表示的过程。通常是Lowering中的一部分。

Transitive lowering

一种A->B->C的lowering方式,多个模式(patterns)需要按顺序应用,以将一个对target非法的操作完全转换为一组合法操作。

CSE (Constant Subexpression Elimination)

公共子表达式消除,消除不可达的代码和值未被使用的表达式。

DRR(Declarative Rewrite Rule)

声明式重写规则。在编译时,这些规则会被扩展成等价的mlir::RewritePattern子类。

结构

Operation (op)

MLIR代码单元。Operations是MLIR所有代码和计算的构建单元。高度支持扩展(没有固定的operation列表,可以灵活自定义),支持应用特定语义。

在MLIR中,有2个主要的Operation相关的类:Operation和Op。Operation是一个对用户透明的实例,表达了Operation实例的通用API。Op是派生Operation(如ConstantOp)的基类,派生类可以为每个具体的操作提供特定的方法和属性,同时,Op也是Operation的一个智能指针,两个类之间可以灵活的互相转换。

Module

一个Operation,包含一个Region,Region中包含一个Block,Block包含一个或多个Operations。提供了MLIR Operations的组织结构,是IR中的top-level Operation。

Function

一个有名的Operaiton,包含一个Region。Region可以隐式捕获function外的值,所有外部引用必须使用function arguments或者attributes的形式,建立一个符号链接。

Region

一个Blocks组成的CFG。

Block(Basic Block)

一个没有控制流的顺序Operation列表。

Terminator operation

终止1个Block的Operation,有2个作用:

  • 结束当前块的执行:终止操作明确地表示当前块的结束,防止代码继续执行到下一个操作。

  • 控制程序的下一步行为:终止操作通常会决定程序的下一步行为,例如:

  1. 跳转到另一个块:使用 br(分支)操作跳转到另一个块。
  2. 返回函数结果:使用 return 操作返回函数的结果。
  3. 抛出异常。

参考资料:

MLIR

Glossary - MLIR

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94314.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94314.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94314.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[找出字符串中第一个匹配项的下标]

代码思路分析: 1. 边界情况处理 代码中没有显式处理以下边界情况,但逻辑已隐含支持: needle 为空字符串:应返回 0(但题目通常保证 needle 非空)。haystack 比 needle 短:直接返回 -1&#xff08…

深入剖析RT-Thread串口驱动:基于STM32H750的FinSH Shell全链路Trace分析与实战解密(上)

0. 概述 这是cherryusb代码trace分析系列文章之七。 RT-Thread串口驱动框架与FinSH Shell运行机制深度解析:针对STM32H750 ART-PI平台,本文独辟蹊径采用创新的代码trace分析方法,破解庞大串口框架下的复杂运行逻辑。通过精确trace日志与drv_u…

Python与C++通信教程:C++打包dll,供Python调用(1)

目录 1,新建一个工程 math_functions.cpp内容: 先编译一下看是否可以正常运行: 2,编译成dll,并用Python调用 有两种方式: 命令 1(使用静态链接): 可移植性: 命令 2(动态链接): 可移植性: 这里我使用的是静态链接的方式: python调用实例 test_dll.py 1,…

编程与数学 03-002 计算机网络 19_网络新技术研究

编程与数学 03-002 计算机网络 19_网络新技术研究一、软件定义网络(SDN)(一)SDN的基本原理与架构(二)SDN的应用场景与优势二、网络功能虚拟化(NFV)(一)NFV的概…

uniapp 跨端开发

一、创建uniapp项目 1. 项目架构2. 初始化项目3. pages.json 和 tabBar 案例4. uni-app和原生小程序开发区别5. 用命令行创建uni-app项目 官网链接:https://uniapp.dcloud.net.cn/quickstart-cli.html#创建uni-app6. 用vscode开发uni-app在uni-app中只有manifest.js…

区块链支付技术的核心原理

区块链支付利用分布式账本技术(DLT)实现点对点的价值转移,无需传统银行或支付网关的中介。核心特点是去中心化、透明、可追溯。• 基本流程:1. 用户发起交易:通过加密货币钱包发送支付请求(例如用ETH支付&a…

linux中 多进程 导致cuda错误的问题解决

问题总结与解决方案 核心问题 在使用 Linux 系统时,多进程并行计算中加载模型到 GPU 时出现错误:_MODEL SentenceTransformer( model_path, device "cuda" if torch.cuda.is_available() else "cpu" )根本原因: CUDA 上…

智能感知的新入口:AIGC 与低延迟视频通路的深度融合

✳️ 引言:AIGC,正在重构视觉智能的“生成逻辑” AI生成内容(AIGC)正在从“内容创作工具”跃升为计算机视觉系统的新引擎。它不再只是“文生图”、“图生文”的演示技术,而是实实在在地改变着我们构建、处理和理解视觉…

Ubuntu 内网多台服务器时间同步方案(适用于临时能上外网的环境)

哎,最近项目是运行在内网环境下的,出现了由于时间不同步导致的bug。一般来讲,几台服务器的时间不一致,会带来很多问题,比如日志时间对不上、分布式服务出现异常,等等。项目上现在有三台服务器,其…

延长电池寿命的低Iq技术

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。一、概述随着电池供电型应用的激增,人们对质优价廉的电池和电池包的需求持续猛涨。电池制造商们不断采用新的化学物…

QT 如何实现enum与字符串的互转

将enum中定义的枚举值,以字符串的形式写入文件,同时也能从字符串转为枚举值。举例说明: ColorSelector中的Colors枚举,我们希望 kColorRed 这个写入到本地文件时,可以直接保存“kColorRed”,而非kColorRed对…

SLAM卷不动了,机器人还有哪些方向能做?

关注gongzhonghao【CVPR顶会精选】众所周知,机器人因复杂环境适应性差、硬件部署成本高,对高效泛化一直需求迫切。再加上多传感器协同难题、真实场景数据获取不易,当下对迁移学习 机器人智能融合的研究也就更热烈了。不过显然,这…

H.266 vs H.265/AV1/H.264:从工程落地看下一代视频系统的技术演进

一、背景:编解码标准演进背后的技术驱动 视频编码标准的更迭,从未只是一次简单的技术升级,而是对码率压缩效率、编码复杂度与画质质量三者之间平衡点的持续探索。在 H.264 成为全平台事实标准的十余年里,它成功支撑了 SD 至 1080…

Javascript面试题及详细答案150道之(031-045)

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

Git如何同步本地与远程仓库并解决冲突

在团队协作开发中,保持本地仓库与远程仓库同步是至关重要的。本文将详细介绍如何使用 Git 更新本地仓库至最新远程版本,并深入解析冲突的产生原因及解决方法。一、同步本地与远程仓库1. 检查远程仓库配置首先,确保本地仓库已正确关联远程仓库…

Hadoop MapReduce 3.3.4 讲解~

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

1、【数学】【硬币悖论】旋转硬币问题

问题描述: 两个相同的硬币,半径都是 rrr。一个硬币(称为“动硬币”)沿着另一个固定不动的硬币(“静硬币”)的外边缘无滑动地滚动一圈,回到起始位置。问:动硬币自身旋转了几圈&#x…

【盘古100Pro+开发板实验例程】FPGA学习 | PCIE 通信测试实验例程

本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 1. 实验简介 实验目的: 完成 PCIE 通信测试。 实验环境: Window11 PDS2022.2-SP6.4 硬件环…

基于高阶累积量的调制识别

基于高阶累积量的调制识别是一种利用信号的高阶统计特性来识别不同调制方式的方法。 1. 基本原理 高阶累积量(Higher-Order Cumulants)是信号处理中的一个重要工具,能够捕捉信号的非高斯特性。与高阶矩相比,高阶累积量对高斯噪声具…

Java常用数据结构入门

Java常用数据结构入门 前言 数据结构是程序设计中的基础,掌握常用数据结构能帮助你更高效地解决问题。本文面向Java初学者,介绍Java中常用的数据结构及其基本使用方法。 1. 数组 (Array) 数组是最基础的数据结构,可以存储固定大小的同类型…