first meet ot MLIR
first meet ot MLIR
- definition
- what question does it solve?
- XLA HLO
- tensorflow xla hlo 基本概念:
初见MLIR
definition
MLIR 是Multi-Level Intermediate Representation
what question does it solve?
用TensorFlow这个框架来举例
整个编译流程先将TensorFlow的图转化为XLA HLO,即一种类似高级语言的图的中间表达形式,可以基于此进行一些High-Level的优化。接着将XLA HLO翻译为LLVM IR,使用LLVM编译到各种硬件的汇编语言,从而运行在硬件上进行数值计算。
XLA HLO
(1)XLA(加速线性代数)是用于优化TensorFlow计算的线性代数的域特定编译器。
(2)XLA与TensorFlow合作有几个目标:
1、提高执行速度。编译子图以减少短暂Ops的执行时间,以消除TensorFlow运行时间的开销,融合流水线操作以减少内存开销,并专用于已知张量形状以允许更积极的恒定传播。
2、改善内存使用。分析和计划内存使用情况,原则上消除许多中间存储缓冲区。
3、减少对自定义操作的依赖。通过改进自动融合低级Ops的性能来消除对许多自定义Ops的需求,以匹配手工融合的自定义Ops的性能。
4、减少移动足迹。通过提前编译子图并发出可以直接链接到另一个应用程序的对象/头文件对来消除TensorFlow运行时。结果可以将移动推断的占用空间减少几个数量级。
5、提高可移植性。为新颖的硬件编写新的后端程序相对容易,此时大部分TensorFlow程序将在该硬件上未修改地运行。这与专门针对新硬件的个体单片Ops的方法形成对比,这需要重写TensorFlow程序以利用这些Ops。
(3)XLA的输入语言称为“HLO IR”,或称为HLO(高级优化程序)。操作语义页面描述了HLO的语义。将HLO视为编译器IR是最方便的。
XLA将HLO中定义的图形(“计算”)编译成各种体系结构的机器指令。XLA是模块化的,因为它很容易插入替代后端,以便定位一些新颖的硬件架构。用于x64和ARM64的CPU后端以及NVIDIA GPU后端均位于TensorFlow源代码树中。
XLA带有多个与目标无关的优化和分析,如CSE,独立于目标的操作融合以及为计算分配运行时内存的缓冲区分析。
在独立于目标的步骤之后,XLA将HLO计算发送到后端。后端可以执行进一步的HLO级别分析和优化,这次是针对具体目标信息和需求。例如,XLA GPU后端可以执行专用于GPU编程模型的操作融合,并确定如何将计算划分为流。在这个阶段,后端也可以模式匹配某些操作或其组合来优化库调用。
下一步是目标特定的代码生成。XLA附带的CPU和GPU后端使用LLVM进行低级IR,优化和代码生成。这些后端以有效的方式发出代表XLA HLO计算所需的LLVM IR,然后调用LLVM从此LLVM IR发出本机代码。
GPU后端当前通过LLVM NVPTX后端支持NVIDIA GPU; CPU后端支持多个CPU ISA。
tensorflow xla hlo 基本概念:
经过tf2xla后,得到的是一个hlo的图,这个图就和编程语言非常像了。
其中涉及到3个概念,hlo module, computation, instruction。
hlo module是一个编译单元,相当于是一个完整可运行的程序。
graph compile -> hlo graph build -> hlo pass pipelime -> hlo dataflow analysis -> codegen
DSL(Domain Specified Language)领域专用语言
first meet ot MLIR相关推荐
- ONNX MLIR应用示例(含源码链接)
ONNX MLIR应用示例(含源码链接) 开放式神经网络交换在MLIR中的实现 (http://onnx.ai/onnx-mlir/). Prebuilt Containers 开始使用ONNX-ML ...
- MLIR与Code Generation
MLIR与Code Generation MLIR多级中间表示 MLIR 项目是一种构建可重用和可扩展编译器基础架构的新方法.MLIR 旨在解决软件碎片问题,改进异构硬件的编译,显着降低构建特定领域编 ...
- MLIR中间表示与编译
MLIR中间表示与编译 概述 目前深度模型的推理引擎按照实现方式大体分为两类: 解释型推理引擎: 一般包含模型解析器,模型解释器,模型优化器. 模型解析器负责读取和解析模型文件,转换为适用于解 ...
- MLIR: 编译器基础架构重定义
MLIR: 编译器基础架构重定义 MLIR(多级中间表示)是语言(如 C)或库(如 TensorFlow)与编译器后端(如 LLVM)之间的中间表示 (IR) 系统.允许不同语言的不同编译器堆栈之间的 ...
- ONNX MLIR方法
ONNX MLIR方法 MLIR中的开放式神经网络交换实现. Prerequisites gcc >= 6.4 libprotoc >= 3.11.0 cmake >= 3.15.4 ...
- MLIR中间表示和编译器框架
MLIR中间表示和编译器框架 TensorFlow生态系统包含许多在软件和硬件堆栈的多个级别上运行的编译器和优化器.作为TensorFlow的日常用户,使用不同类型的硬件(GPU,TPU,移动设备)时 ...
- MLIR: Infrastructure架构
MLIR: Infrastructure
- MLIR(Multi-Level Intermediate Representation Compiler)架构 Infrastructure
MLIR(Multi-Level Intermediate Representation Compiler)架构 Infrastructure Overview • Context • About M ...
- MLIR Python绑定
MLIR Python绑定 当前状态:正在开发中,默认情况下未启用 build 前提条件 • 相对较新的Python3安装 • pybind11 必须已安装,可被CMake定位(如果通过进行安装,则会 ...
最新文章
- ubuntu for nvidia-drivers for AI
- double java 坑,Java中四则运算的那些坑
- 通用类别目录Global Catalog[为企业维护windows server 2008系列五]
- 引用另一个Android工程的方法详解
- 数据结构之线性查找和折半查找
- bom .dom_MicroProfile 2.2 BOM导入支持
- 在死循环中使用Scanner获得键盘输入
- [转]正则表达式中re.match、re.search、re.findall的用法和区别
- Spark修炼之道(高级篇)——Spark源码阅读:第九节 Task执行成功时的结果处理...
- 临时和永久关闭Selinux
- 无名小站超雅虎奇摩成台湾第一大网站
- 在Vue中如何缓存页面
- ArcGIS重装之旧软件卸不干净的问题
- 并查集专题(亲戚,格子游戏,银河英雄传说)
- 运维知识体系-V3.0
- phpfetion.php,php 飞信2012最新可用api 接口免费分享phpfetion_PHP教程
- 【讨论】读博最多收入的高校是哪个?中国高校硕博补贴大盘点!
- pythonista检测内容自动点击_Pythonista中文教程:100行代码实现一款远程键盘
- 武金龙老师的教导(第9小组)
- CSS3学习笔记(九)——UI元素状态伪类选择器 :checked