MLIR Multi-Level Intermediate Representation Overview (多级中间表示概述)

2023-11-15

多级中间表示概述

MLIR项目是一种构建可重用和可扩展的编译器基础结构的新颖方法。MLIR旨在解决软件碎片问题,改善异构硬件的编译,显着降低构建特定于域的编译器的成本,并有助于将现有的编译器连接在一起。

要引用MLIR,请使用 此Arxiv出版物 。

更多资源

有关MLIR的更多信息,请参见:

另请参阅TensorFlow MLIR SIG,该组织每周组织一次有关MLIR的公开“开放设计会议”。 如果您想讨论特定主题或有疑问,请将其添加到议程文档中。 有关如何加入会议的详细信息,请参阅议程文档。

MLIR是做什么用的?

MLIR旨在成为一种混合IR,它可以在统一的基础架构中支持多种不同的需求。例如,这包括

  • 表示数据流图的能力(例如在TensorFlow中),包括动态形状,用户可扩展的op生态系统,TensorFlow变量等
  • 通常在此类图表上进行优化和转换(例如在Grappler中)
  • 适合于优化的形式表示ML操作的内核
  • 能够托管跨内核的高性能计算风格的循环优化(融合,循环交换,平铺等),并能够转换数据的内存布局
  • 代码生成的“降低”转换,例如DMA插入,显式缓存管理,内存平铺以及针对1D和2D寄存器体系结构的矢量化
  • 够表示特定于目标的操作,例如加速器特定的高级操作。
  • 在深度学习图上进行量化和其他图转换。

MLIR是一种常见的IR,也支持特定于硬件的操作。 因此,对MLIR周围基础架构的任何投资(例如,编译器对其进行的工作都应通过)应产生良好的回报; 许多目标可以使用该基础架构并将从中受益

MLIR是强大的表示形式,但也有非目标。 我们不尝试支持底层机器代码生成算法(例如寄存器分配和指令调度)。 它们更适合较低级别的优化器(例如LLVM)。 而且,我们不希望MLIR成为最终用户自己将内核编写为源语言的源语言(类似于CUDA C ++)。 另一方面,MLIR提供了代表任何此类DSL并将其集成到生态系统中的骨干。

编译器基础架构

在构建MLIR时,我们从构建其他IR(LLVM IR,XLA HLO和Swift SIL)获得的经验中受益。 MLIR框架鼓励现有的最佳做法,例如 编写和维护IR规范,构建IR验证程序,提供将MLIR文件转储和解析为文本的功能,使用FileCheck工具编写广泛的单元测试以及将基础结构构建为一组可以以新方式组合的模块化库。

其他课程已经以微妙的方式整合到设计中。 例如,LLVM具有非显而易见的设计错误,这些错误会阻止多线程编译器同时处理LLVM模块中的多个功能。 MLIR通过限制SSA范围以减少use-def链并用显式符号引用替换跨功能引用来解决这些问题。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MLIR Multi-Level Intermediate Representation Overview (多级中间表示概述) 的相关文章

  • 使用 clang-llvm 编译器在 CUDA 中添加对类似于 __shared__ 的内存类型的支持

    我正在努力添加类似于的新内存类型 shared 在 CUDA 中称为 noc 需要使用 clang llvm 进行编译 以下是实现对新内存类型的解析的步骤 引用来自answer https stackoverflow com questio
  • clang 如何引导 C/C++ 代码优化?

    有人告诉我 clang 是一个像 gcc 一样工作的驱动程序 可以进行预处理 编译和链接工作 在编译和链接过程中 据我所知 实际上是llvm进行了优化 O1 O2 O3 Os flto 但我就是无法理解howllvm参与其中 看来编译源代码
  • 如何调用未知类型的 JITed LLVM 函数?

    我正在使用 LLVM 实现 JIT 编译器的前端 我首先遵循 LLVM 教程中的 Kaleidscope 示例 我知道如何使用 LLVM C API 生成和 JIT LLVM IR 我还知道如何使用 llvm ExecutionEngine
  • pip 未在 conda 环境中正确安装 numba/llvmlite

    我创建了一个新的 conda 环境 user machine project conda create n test env c numba python 3 5 2 llvmdev 3 8 Fetching package metadat
  • MacOS 上使用 clang-15 时 FindTerminfo 中的 CMake 错误

    我在我的项目中使用 llvm 并使用 cmake 找到它find package LLVM REQUIRED CONFIG 配置失败并显示消息 cmake CMake Error at Applications CMake app Cont
  • 错误:未定义模板 'llvm::yaml::MissingTrait 的隐式实例化

    我正在开发一个使用 LLVM YAML I O 库的项目 这是我正在遵循的文档 教程 https www llvm org docs YamlIO html https www llvm org docs YamlIO html 我正在尝试
  • LLVM IR 指令和源代码行之间的映射

    如果使用 llvm gcc 或 Dragonegg 我如何存储 LLVM IR 指令和源代码行之间的映射 内部 LLVM IR 调试信息应用于此目的 看http llvm org docs SourceLevelDebugging html
  • 对于使用块的 clang 程序,您需要链接哪些库

    我发现 如下 在编译使用块的代码时需要使用 fblocks 我需要链接哪个库才能让链接器解析 NSConcreteStackBlock 在 Ubuntu 9 10 AMD64 上 chris chris desktop clang ctes
  • 通过修改LLVM Backend来Clobber X86寄存器

    我正在尝试稍微改变 X86 目标的 LLVM 后端 以产生一些所需的行为 更具体地说 我想模拟一个像 gcc 的 fcall used 这样的标志reg option https gcc gnu org onlinedocs gcc Cod
  • LLVM 和编译器术语

    我正在研究 LLVM 系统并且我已经阅读了入门文档 http llvm org docs GettingStarted html 然而 一些术语 以及 clang 示例中的措辞 仍然有点令人困惑 以下术语和命令都是编译过程的一部分 我想知道
  • 从 Haskell 代码生成 LLVM IR

    我的目标是获取不同语言 主要是 C C Obj C 和 Haskell 的源代码 并提供有关它们的各种统计信息 例如变量 函数 内存分配 复杂性等的数量 LLVM 似乎是一个完美的工具 因为我可以为这些语言生成位码 并且通过 LLVM 的可
  • LLVM环境变量在哪里或者LLVM环境是如何配置的?

    作为上下文 我有一台 Mac 我在工作中使用它使用各种自定义构建脚本进行开发 我现在尝试使用同一台机器来玩一些个人 Xcode 项目 第一步 我在 Xcode 11 3 1 中创建一个新的 Single View App 项目 并尝试在我连
  • 如何在 CMake 项目中使用 LLVM 的 libcxx 和 libcxxabi?

    目前我正在跑步Debian 9 https en wikipedia org wiki Debian version history Debian 9 Stretch 拉伸 用系统默认的编译器GCC 6 3 0 但我有一个使用 CMake
  • MSYS2环境的使用

    我想彻底了解MSYS2平台环境的使用情况 部分描述可在以下位置找到 https www msys2 org docs environments https www msys2 org docs environments 我理解的事情 MSY
  • 使用 LLVM 为整个源代码生成 CFG

    LLVM 社区的任何人都知道是否有一种方法可以使用以下方法为整个输入源代码生成 CFG opt dot cfg foo ll bc 由于此函数为每个函数生成 CFG 因此函数之间的连接将被忽略 看来旧的分析工具已经贬值了 我想知道你是否找到
  • C++11 的 LLVM&Clang 支持

    我有一些为 MS VC 10 编写的代码 我使用 C 11 特别是像这样的表达式 std function
  • Fedora 21 带 clang,不带 gcc

    你能 合理地 让 Fedora 21 变得只有 llvm clang libc libc abi 吗 我发现有些东西暗示不可以 但它们都已经有 3 岁了 从那时起 llvm clang 已经取得了长足的进步 通过全新安装 我尝试了 yum
  • XCode 4.2 编译器错误

    当我使用 XCode 4 2 创建新项目 例如 单视图 iOS 应用程序 时 支持文件 文件夹中的 main m 文件如下所示 import
  • 通过 cmake 链接 libc++ 时 libc++abi 的链接问题

    我正在尝试构建一个简单的 hello world C 使用 LLVM Clang 3 7 0 的程序 根据工具链的源代码构建libc 使用命令行 clang std c 14 stdlib libc fno exceptions hello
  • gcc 与 clang:符号剥离

    gcc 和 AMD Open64 opencc 都有一个 s选项 剥离符号表和重定位信息 到目前为止我还没能在 Clang LLVM 中找到相同的选项 它存在吗 您可以使用stripbinutils 中的实用程序 实际上 llvm ld 有

随机推荐

  • Unity3D 画线函数(实现和虚线)

    1 若只需要在调试场景Scene里查看 不需要在Game运行场景看到 可以使用 Debug Draw 这个函数一般在Update Fixed Update LateUpdate里调用 并且不能设置材质 不过可以指定颜色 例子如下 void
  • 蓝牙之十八- bluetooth pair

    蓝牙之十八 bluetooth pair 在蓝牙核心规范2 1之后 蓝牙配对除了传统的PIN Code Pairing方式外 新增了Secure Simple Pairing配对方式 根据核心规范4 2 简单配对主要有两种目的 蓝牙配对过程
  • BDTC2014中国大数据技术大会

    2014中国大数据技术大会32位核心专家演讲PDF下载汇总 重磅资料 下载地址 http download csdn net detail zhongwen7710 8295907 2014中国大数据技术大会32位核心专家演讲PDF目录题目
  • 学习笔记 JavaScript ES6 声明方式const(一)

    今天学习ES6当中定义常量 先来复习下ES5当中是如何定义常量的 通过如下方法在一个对象上定义新的属性来定义一个常量 见如下代码 这个方法有3个参数 第1个参数是在哪个对象上定义属性 第2个参数是属性名称 第3个参数是对象 Object d
  • 孩子学习机器人法则

    现在社会学习机器人的好处有很多 由于小孩子正处于增长知识 发挥自身应有能力的年纪 格物斯坦表示让小孩子学习一门理论前沿性和实用性都较高的机器人编程教育对小孩子未来发展是非常有益的 首先机器人教育不是孤立存在的 机器人技术是多种学科综合的学科
  • Vue 使用 axios post请求后台数据时 404

    今天遇到Vue 使用 axios post请求后台数据时 404 使用postman 就能获取到 网上找了大半天 终于找到了解决方法 传送门 https www jianshu com p b10454ed38ba 转载于 https ww
  • C语言的一个正则表达式pcre

    1 简介 在C C 中 一个比较好的正则表达式是pcre 被很多工具 包括一些商用工具 使用 2 源码下载 安装 2 1 下载 可以从官网http www pcre org 下载 为方便学习 已放在这里http download csdn
  • ctf.show web入门(信息搜集) 1~20

    目录 web1 源码 web2 源码 web3 抓包 web4 robots web5 index phps web6 解压源码泄露 web7 git泄露 web8 svn泄露 web9 vim缓存 web10 cookie web11 域
  • 快速排序全部算法

    快速排序 cpp 定义控制台应用程序的入口点 include stdafx h include stdlib h include stdio h define MAXSIZE 10 typedef struct int keyWord in
  • 代码随想录算法训练营第13天

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 算法训练营第13天 栈与队列总结 347 前 K 个高频元素 使用堆 基本思路 堆 使用大顶堆还是小顶堆 python 中的heapq 347 前 K 个高频元素 这道题的代
  • 用户级线程和系统级线程

    在多线程操作系统中 各个系统的实现方式并不相同 在有的系统中实现了用户级线程 有的系统中实现了内核级线程 1 内核级线程 1 线程的创建 撤销和切换等 都需要内核直接实现 即内核了解每一个作为可调度实体的线程 2 这些线程可以在全系统内进行
  • 于仕琪C/C++ 学习笔记

    C 函数指针有哪几类 函数指针 lambda 仿函数对象分别是什么 如何利用谓词对给定容器进行自定义排序 传递引用和传递值的区别 传递常引用和传递引用之间的区别 传递右值引用和传递引用之 间的区别 函数对象应该通过什么传递 什么是万能引用
  • 【华为OD机试真题 JAVA】服务器广播

    JS版 华为OD机试真题 JS 服务器广播 标题 服务器广播 时间限制 1秒 内存限制 262144K 语言限制 不限 服务器连接方式包括直接相连 间接连接 A和B直接连接 B和C直接连接 则A和C间接连接 直接连接和间接连接都可以发送广播
  • Java 设计模式之责任链模式

    责任链模式 Chain of Responsibliity 缩写COR 该模式属于对象的行为模式 多个对象连成一条链 请求沿着这条链进行传递 直到有一个对象处理它为止 这样使得多个对象都有机会处理请求 从而避免了请求的发送者和接收者之间的耦
  • 性能测试及相关概念(一)

    目录 一 什么是性能测试 1 1 性能测试概念 1 2 功能测试和性能测试的区别 1 3 影响一个软件性能的因素有哪些 二 一个项目为什么要做性能测试 三 性能测试常见术语以及衡量指标 3 1 专业术语 四 性能测试分类 4 1 基准测试
  • 特征工程之特征选择

    特征工程是数据分析中最耗时间和精力的一部分工作 它不像算法和模型那样是确定的步骤 更多是工程上的经验和权衡 因此没有统一的方法 这里只是对一些常用的方法做一个总结 本文关注于特征选择部分 后面还有两篇会关注于特征表达和特征预处理 1 特征的
  • 单片机学习 6-矩阵按键实验

    矩阵按键实验 矩阵按键介绍 独立按键与单片机连接时 每一个按键都需要单片机的一个 I O 口 若某单片机系统需较多按键 如果用独立按键便会占用过多的 I O 口资源 单片机系统中 I O 口资源往往比较宝贵 当用到多个按键时为了减少 I O
  • vector<int> v 与 vector<int> v(n) 的区别

    使用vector的注意事项 切记 使用 vector
  • ESP32连接阿里云MQTT

    ESP32连接阿里云的github链接 ESP32官网文档 可下载开发文档 文章目录 一 ESP32介绍 二 搭建ESP32开发环境 一 调出终端 二 代码补全 三 ESP32接入阿里云 一 编译项目 二 配置项目 三 烧录程序 四 配置四
  • MLIR Multi-Level Intermediate Representation Overview (多级中间表示概述)

    多级中间表示概述 MLIR项目是一种构建可重用和可扩展的编译器基础结构的新颖方法 MLIR旨在解决软件碎片问题 改善异构硬件的编译 显着降低构建特定于域的编译器的成本 并有助于将现有的编译器连接在一起 要引用MLIR 请使用 此Arxiv出