首页 > 其他分享 >我真的想知道,AI编译器中的IR是什么?

我真的想知道,AI编译器中的IR是什么?

时间:2023-07-24 19:44:18浏览次数:42  
标签:LLVM 语言 AI 代码 IR 编译器 优化

随着深度学习的不断发展,AI 模型结构在快速演化,底层计算硬件技术更是层出不穷,对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来,还要应对 AI 框架的持续迭代。

AI 编译器就成了应对以上问题广受关注的技术方向,让用户仅需专注于上层模型开发,降低手工优化性能的人力开发成本,进一步压榨硬件性能空间。IR对于AI编译器来说是非常重要的一种数据结构鸭!!!


IR 中间表达

什么是IR

IR(Intermediate Representation)中间表示,是编译器中很重要的一种数据结构。编译器在完成前端工作以后,首先生成其自定义的 IR,并在此基础上执行各种优化算法,最后再生成目标代码。

从广义上看,编译器的运行过程中,中间节点的表示,都可以统称为 IR。从狭义上讲编译器的 IR,是指该编译器明确定义的一种具体的数据结构,这个数据结构通常还伴随着一种语言来表达程序,这个语言程序用来实现这个明确定义的 IR。大部分时间,不太严格区分这个明确定义的 IR 以及其伴随的语言程序,将其统称为 IR。

如图所示,在编译原理中,通常将编译器分为前端和后端。其中,前端会对所输入的程序进行词法分析、语法分析、语义分析,然后生成中间表达形式 IR。后端会对 IR 进行优化,然后生成目标代码。

例如:LLVM 把前端和后端给拆分出来,在中间层明确定义一种抽象的语言,这个语言就叫做 IR。定义了 IR 以后,前端的任务就是负责最终生成 IR,优化器则是负责优化生成的IR,而后端的任务就是把 IR 给转化成目标平台的语言。LLVM 的 IR 使用 LLVM assembly language 或称为 LLVM language 来实现 LLVM IR的类型系统,就指的是 LLVM assembly language 中的类型系统。

因此,编译器的前端,优化器,后端之间,唯一交换的数据结构类型就是 IR,通过 IR 来实现不同模块的解耦。有些IR还会为其专门起一个名字,比如:Open64的IR通常叫做WHIRL IR,方舟编译器的IR叫做MAPLE IR,LLVM则通常就称为LLVM IR。

IR的定义

IR 在通常情况下有两种用途,1)一种是用来做分析和变换,2)一种是直接用于解释执行。

编译器中,基于 IR 的分析和处理工作,前期阶段可以基于一些抽象层次比较高的语义,此时所需的 IR 更接近源代码。而在编译器后期阶段,则会使用低层次的、更加接近目标代码的语义。基于上述从高到低的层次抽象,IR 可以归结为三层:高层 HIR、中间层 MIR 和 底层 LIR。

  1. HIR

HIR(High IR)高层 IR,其主要负责基于源程序语言执行代码的分析和变换。假设要开发一款 IDE,主要功能包括:发现语法错误、分析符号之间的依赖关系(以便进行跳转、判断方法的重载等)、根据需要自动生成或修改一些代码(提供重构能力)。此时对 IR 的需求是能够准确表达源程序语言的语义即可。

其实,AST 和符号表就可以满足上述需求。也就是说,AST 也可以算作一种特殊的 IR。如果要开发 IDE、代码翻译工具(从一门语言翻译到另一门语言)、代码生成工具、代码统计工具等,使用 AST(加上符号表)即可。基于 HIR,可以执行高层次的代码优化,比如常数折叠、内联关联等。在 Java 和 Go 的编译器中,有不少基于 AST 执行的优化工作。

  1. MIR

MIR(Middle IR),独立于源程序语言和硬件架构执行代码分析和具体优化。大量的优化算法是通用的,没有必要依赖源程序语言的语法和语义,也没有必要依赖具体的硬件架构。这些优化包括部分算术优化、常量和变量传播、死代码删除等,实现分析和优化功能。

因为 MIR 跟源程序代码和目标程序代码都无关,所以在编译优化算法(Pass)过程中,通常是基于 MIR,比如三地址代码(Three Address Code,TAC)。

三地址代码 TAC 的特点:最多有三个地址(也就是变量),其中赋值符号的左边是用来写入,右边最多可以有两个地址和一个操作符,用于读取数据并计算。
  1. LIR

LIR(Low IR),依赖于底层具体硬件架构做优化和代码生成。其指令通常可以与机器指令一一对应,比较容易翻译成机器指令或汇编代码。因为 LIR 体现了具体硬件(如 CPU)架构的底层特征,因此可以执行与具体 CPU 架构相关的优化。

多层 IR 和单层 IR 比较起来,具有较为明显的优点:

  1. 可以提供更多的源程序语言的信息
  2. IR表达上更加地灵活,更加方便优化
  3. 使得优化算法和优化Pass执行更加高效

如在 LLVM 编译器里,会根据抽象层次从高到低,采用了前后端分离的三段结构,这样在为编译器添加新的语言支持或者新的目标平台支持的时候,就十分方便,大大减小了工程开销。而 LLVM IR 在这种前后端分离的三段结构之中,主要分开了三层 IR,IR 在整个编译器中则起着重要的承上启下作用。从便于开发者编写程序代码的理解到便于硬件机器的理解。

 

标签:LLVM,语言,AI,代码,IR,编译器,优化
From: https://www.cnblogs.com/ZOMI/p/17578148.html

相关文章

  • virtualbox "UEFI Interactive Shell... " 错误 virtualbox machine boots to efi she
    ItturnsoutthatasIwasmessingaroundwithgettingthemachinetoload(duetoVirtualizationtechnologiesbeingdisabled),Iclickedonetoomanyitemsontheimagesettingspage. Tofixthis,gotothe"Settings"pageforthevirtualmachi......
  • Summer Training 2023 Mini Comp 1 (Experts)
    SummerTraining2023MiniComp1(Experts)2338Carnival-PCOIOnlineJudge(pcoij8.ddns.net)题目大意交互题,n个人穿着衣服,共有c种颜色,每一次可以询问一些人穿的衣服有多少种不同的颜色,最多可以询问3500次,请确定每个人穿的衣服是什么颜色做法第一眼可以看出来答案的上......
  • ubuntu “vt-x/amd-v hardware acceleration virtualbox" 错误
    BeforechangingBIOSsettingswemaywanttoseeifhardwarevirtualization(VT-xforIntel,AMD-VforAMDprocessors)wasalreadyenabled. Fromaterminalissuegrep--colorvmx/proc/cpuinfo##foranIntelprocessorgrep--colorsvm/proc/cpuinfo##f......
  • 3ds Max动力学插件RayFire图文教程:如何使用RayFire 实现酷炫逼真的爆炸碎裂效果第 2部
     在本教程的第二部分中,我将向您展示如何使用3dsMax中的RayFire将柱子逼真地拆除成数千个不同大小的块。推荐:NSDT场景编辑器助你快速搭建可二次开发的3D应用场景1.场景设置步骤1打开 3dsMax。打开3dsMax步骤2转到>平面创建>标准基元并创建一个透视视口上的......
  • 3ds Max动力学插件RayFire图文教程:如何使用RayFire 实现酷炫逼真的爆炸碎裂效果第 3部
     推荐:NSDT场景编辑器助你快速搭建可二次开发的3D应用场景1.场景设置步骤1打开 3dsMax。打开3dsMax步骤2转到>平面创建>标准基元并创建一个透视视口上的地平面如下图所示。>平面创建>标准基元步骤3转到创建>标准基元>框并创建墙地平面上的结构。>框中创建>......
  • 3ds Max动力学插件RayFire图文教程:如何使用RayFire 实现酷炫逼真的爆炸碎裂效果第 1
     这是一个关于使用行业标准插件RayFire在3dsMax中破坏元素的新系列。在本教程的第一部分中,我将向您展示如何在RayFire中使用在3dsMax中拆除元素的最基本操作和方法。 推荐:NSDT场景编辑器助你快速搭建可二次开发的3D应用场景1.准备场景步骤1打开 3dsMax。......
  • 和鲸 ModelWhale 与麒麟系统适配认证,打造自主安全、性能可靠的信创 AI 基础软件
    发展信创,解决核心技术的自主可控问题,是我国产业升级和数字经济发展过程中的重要命题。信创产业链主要由基础硬件、基础软件、应用软件、信息安全及云计算平台等几部分组成,拥抱信创国产化需要各厂商聚力共创生态,增强自身产品的兼容性,实现上下游有效连接。而和鲸科技作为国内领先的数......
  • HDFS High Availability
    HDFSHighAvailabilityHDFSHighAvailabilityPurposeNote:UsingtheQuorumJournalManagerorConventionalSharedStorageBackgroundArchitectureHardwareresourcesDeploymentConfigurationoverviewConfigurationdetailsDeploymentdetailsAdministrativecommandsA......
  • HDFS High Availability Using the Quorum Journal Manager
    HDFSHighAvailabilityUsingtheQuorumJournalManagerHDFSHighAvailabilityUsingtheQuorumJournalManagerPurposeNote:UsingtheQuorumJournalManagerorConventionalSharedStorageBackgroundArchitectureHardwareresourcesDeploymentConfigurationoverv......
  • AI绘图电脑主机需要什么配置
    AI绘图的出现给设计界带来了很多的便利性,利用stablediffusion这种工具一秒将2D转化成为3D、1分钟做出10张海报图片等。虽然AI绘图工具效率非常高,但是如果经常玩AI绘图的朋友,基本上都经历过这种情况。为了训练一张不错的AI图片,有时候我们需要打开stablediffusion挂机一个多小时......