[MLIR] CodeGen Pipeline总结

news2024/11/18 8:30:33

参考资料:

[MLIR] CodeGen Pipeline总结 - 知乎 (zhihu.com)

本文主要以 tensorflow 为例,介绍了其接入 MLIR 后的 CodeGen 过程,以及简要分析了一些现在常用的 CodeGen pipeline。本文是本人在结合博客(Codegen Dialect Overview - MLIR - LLVM Discussion Forums)以及相关资料而写成,主体内容来源于翻译。

现状

Classification

MLIR 中与代码生成相关的 dialects 大致可以沿着两个轴进行分解:tensor/buffer 和 payload/structure

简单来说,MLIR是一种编译器中间表示语言,它可以帮助我们更好地处理机器学习代码。在MLIR中,dialects是指不同的语言方言,可以分为tensor/buffer和payload/structure两个方面。tensor/buffer主要是指不同的数据类型和内存管理方式,payload/structure则是指不同的计算操作和执行方式。这些dialects之间存在相互依存的关系,它们共同构成了MLIR的多层次抽象结构。

Dialects of Interest

我们写机器学习代码时,我们通常会使用高级别的数据结构,比如tensor。但是,这些高级别的结构不能直接在硬件上执行,需要经过一些中间步骤将它们转换为低级别的表示形式,比如buffer。这些中间步骤通常涉及到dialects,也就是不同的语言方言。在转换的过程中,我们会使用最近引入的dialects,也就是最适合当前转换的语言方言。这些dialects的目的是将高级别的结构转换为低级别的表示形式,以便最终在硬件上执行。 

"Dialects" 是 MLIR 中的一个概念,它可以根据它所抽象的特征的级别来组织成一个堆栈,就像一个抽象的塔一样。在这个堆栈中,越高级别的抽象表示越抽象,越低级别的抽象表示越接近实际的底层实现。将较高级别的抽象表示向下转化成较低级别的抽象表示通常比较容易,因为较低级别的抽象已经包含了较高级别抽象的所有特征,相当于是将抽象的东西转化为更具体的东西。但是,反过来将较低级别的抽象表示提升到较高级别的抽象表示通常比较困难,因为较低级别的抽象不一定包含较高级别抽象的所有特征,需要通过一些复杂的技术和算法来推导和计算出来。

在编译器一系列转换程序的过程中,越来越多的高层次的简明信息被打散,转换为低层次的细碎指令,这个过程被称为代码表示递降lowerinng ,与之相反的过程被称为代码表示递升raising 。raising远比lowering困难,因为需要在庞杂的细节中找出宏观脉络。

在MLIR中,我们可以使用不同的“方言”(即不同的语言变体)来表示不同的操作和计算。

其中,Linalg方言是用于表示结构化计算的一种方言,它支持使用通用的表示形式来表示结构化数据上的结构化计算,并且支持在不改变操作本身的情况下将tensor转换为buffer。此外,Linalg方言还提供了一些特定的操作(如矩阵乘法和卷积),以及用于定义结构的通用操作。这些操作可以相互转换,并且可以通过迭代结构转换为向量操作或循环操作。这些特性使得Linalg方言非常适合于编译器的优化和代码生成。

Async Dialect 是一个用于编写异步代码的工具集合,可以帮助程序员在不同的层次上表示异步计算。它可以在高层次上组织大型计算块,例如跨多个设备的计算任务,同时在低层次上包装基本的指令序列。在异步编程中,我们经常需要协调多个任务之间的执行,因为这些任务的执行可能是不确定的或者受到其他任务的影响。Async Dialect 提供了一种基于异步计算块的方式来组织这些任务,并且可以在这些计算块之间建立依赖关系来协调它们的执行顺序。除此之外,Async Dialect 还提供了一些原语来处理异步计算的基本操作,例如异步等待、异步执行和取消异步任务等。这些原语可以在低层次上包装成指令序列,使得程序员可以直接使用它们来编写异步代码。

后面还有很多的dialect。

一些现存的 pipelines

TensorFlow Kernel Generator

IREE Compiler (LLVM Target)

IREE Compiler (SPIR-V Target)

Polyhedral Compiler

分析

1111111111111111111

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

隐私计算,联邦学习

隐私计算(“隐私保护计算” Privacy-Preserving Computation) 隐私计算是一类技术方案,在处理和分析计算数据的过程中能保持数据不透明、不泄露、无法被计算方法以及其他非授权方获取。 数据方是指为执行隐私保护计算过程提供数据的组织或个…

泰国五一游玩儿攻略

泰国五一游玩儿攻略 2023年4月27日1. 机场2. 酒店和夜市 2023年4月28日2023年4月29日2023年4月30日2023年5月1日2023年5月2日2023年5月3日 2023年4月27日 1. 机场 1.1 海关资料准备: 往返机票(去程返程都得有,每人单独打印自己的&#xff0…

多维时序 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元多变量时间序列预测

多维时序 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元多变量时间序列预测 目录 多维时序 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元多变量时间序列预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 基于贝叶斯(bayes)优化卷积神经网络-门控循环…

开放式耳机有什么好处,分享几款高畅销的开放式耳机

开放式耳机是一种声音传导方式,主要通过颅骨、骨骼把声波传递到内耳,属于非入耳式的佩戴方式。相比传统入耳式耳机,开放式耳机不会堵塞耳道,使用时可以开放双耳,不影响与他人的正常交流。开放式耳机不会对耳朵产生任何…

RocketMQ整合代码

RocketMQ整合代码 一 构建Java基础环境 在maven项⽬中构建出RocketMQ消息示例的基础环境&#xff0c;即创建⽣产者程序和消费者程序。通过⽣产者和消费者了解RocketMQ操作消息的原⽣API 引⼊依赖 <dependencies><dependency><groupId>org.apache.rocketmq&…

HCIP——交换(更新中)

园区网架构 交换机实现了以下功能 无限的传输距离——识别&#xff0c;重写电信号&#xff08;帧&#xff09;保证信息完整彻底解决了冲突二层单播——MAC地址表提高端口密度 MAC 单播地址&#xff1a;MAC地址第一个字节第8位为0 组播地址&#xff1a;MAC地址第一个字节第8位…

我完全手写的Resnet50网络,终于把猫识别出来了

大家好啊&#xff0c;我是董董灿。 经常看我文章的同学&#xff0c;可能知道最近我在做一个小项目——《从零手写Resnet50实战》。 从零开始&#xff0c;用最简单的程序语言&#xff0c;不借用任何第三方库&#xff0c;完成Resnet50的所有算法实现和网络结构搭建&#xff0c;…

SOS大规模敏捷开发项目管理完整版(Scrum of Scrums)

Scrum of Scrums是轻量化的规模化敏捷管理模式&#xff0c;Leangoo领歌可以完美支持Scrum of Scrums多团队敏捷管理。 Scrum of Scrums的场景 Scrum of Scrums是指多个敏捷团队共同开发一个大型产品、项目或解决方案。Leangoo提供了多团队场景下的产品路线图规划、需求管理、…

2023首场亚马逊云科技行业峰会,医疗与生命科学年度盛会精彩先行

从实验室扩展到真实世界&#xff0c;从前沿技术探索到医疗生命科学行业的快速创新实践&#xff0c;亚马逊云科技不断地通过数字化助力医疗和生命科学的行业创新。由上海徐汇区科委指导&#xff0c;上海枫林集团作为支持单位&#xff0c;亚马逊云科技主办的2023亚马逊云科技医疗…

如何评估小程序开发费用:从项目规模到技术需求

作为一种越来越受欢迎的移动应用&#xff0c;小程序的开发费用是许多企业和个人考虑的重要因素之一。但是&#xff0c;要确定小程序开发费用并不是一件容易的事情&#xff0c;因为它涉及到多个因素&#xff0c;从项目规模到技术需求。 项目规模 小程序开发的费用通常与项目规…

docker-Dockerfile文件使用配置、自定义构建镜像、docker build

Dockerfile使用 docker build构建新的镜像参数解释 Dockerfile格式基础格式FROMCOPYADDRUNCMDENTRYPOINTENVARGVOLUMEEXPOSEWORKDIRUSERHEALTHCHECKONBUILDLABEL 命令摘要 docker build构建新的镜像 命令&#xff1a;docker build -t some-content-nginx . 参数解释 docker …

2023团体程序设计天梯赛--正式赛

L1-1 最好的文档 有一位软件工程师说过一句很有道理的话&#xff1a;“Good code is its own best documentation.”&#xff08;好代码本身就是最好的文档&#xff09;。本题就请你直接在屏幕上输出这句话。 输入格式&#xff1a; 本题没有输入。 输出格式&#xff1a; 在…

Pytorch的几种常用优化器

文章目录 AdagradSGDRMSpropAdamAdamW Adagrad Adagrad是一种可以自动调节每个参数更新的梯度的优化器&#xff0c;也可以做到在梯度平缓时走的步长大&#xff0c;在梯度小时走的步长小&#xff0c;从而防止loss出现剧烈震荡的情况。这里默认你已知道了他的原理了&#xff0c;…

SpringBoot自动配置原理详解

1 前言 之前也写过一篇类似的文章&#xff0c;但是当时理解的并不是很深入&#xff0c;所以一直想重新写&#xff0c;但是一直没有时间&#xff0c;就拖到了现在。这篇文章可能会很长&#xff0c;因为在讲解自动配置的过程中还会衍生出其他一些重要的知识点&#xff0c;我也会…

2023文本定位模型选型调研

背景 时间点&#xff1a;2023年03月 场景&#xff1a;做一个通用型的多种证件解析服务 需求&#xff1a;调研一种又新又快的定位模型。要求&#xff1a;1&#xff09;支持倾斜的文字&#xff0c;可以是4点定位或分割法后获取box&#xff0c;但不能是2点的定位&#xff1b;2&…

2023.4.23第五十次周报

目录 前言 文献阅读&#xff1a;基于ARIMA-WOA-LSTM模型的空气污染物预测 背景 ARIMA-WOA-LSTM模型 思路 主要贡献 积分移动平均自回归 &#xff08;ARIMA&#xff09; 鲸鱼优化算法 搜索超参数 CEEMDAN 结论 LSTM-Kriging 主要目标 理论猜想 问1&#xff1a…

如何申请百度地图开发者AK和基本使用,并解决Uncaught ReferenceError: BMapGL is not defined的错误

文章目录 1. 文章引言2. 申请AK3. 使用AK4. 解决BMapGL is not defined的错误5. 文末总结 1. 文章引言 今天在学习amis框架中的地理位置(LocationPicker)的组件&#xff0c;如下图所示&#xff1a; 关于amis的更多了解&#xff0c;可以参考博文&#xff1a;百度低代码amis框架的…

适合学生的平价蓝牙耳机有哪些?学生平价蓝牙耳机推荐

随着蓝牙耳机的使用越来越频繁&#xff0c;近几年也出现了很多优质的蓝牙耳机&#xff0c;不仅有着超高的性价比&#xff0c;而且使用体验也有了很大的突破。接下来&#xff0c;我来给大家推荐几款适合学生使用的平价蓝牙耳机&#xff0c;可以当个参考。 一、南卡小音舱Lite2蓝…

Java基础--->基础部分(1)

文章目录 Java语言特点JVM、JRE和JDK的关系什么是字节码&#xff1f;采用字节码的好处是什么&#xff1f;面向对象面向对象的三大特征&#xff1a;封装&#xff0c;继承&#xff0c;多态关键字抽象类和接口特点和区别和equals的区别String、StringBuffer、StringBuilder异常 Ja…

中医脉诊仪:结合传统与现代技术的诊断工具

一、引言 随着科技的不断发展&#xff0c;医学领域也取得了举世瞩目的进步。中医作为一种古老的医学体系&#xff0c;始终保持着其独特的魅力。脉诊作为中医诊断的重要方法之一&#xff0c;历经千年的发展和传承&#xff0c;如今在现代科技的助力下&#xff0c;诞生了中医脉诊…