当前位置: 首页 > news >正文

深度学习AI编译器-LLVM简介

1、什么是LLVM

LLVM的命名最早来源于底层语言虚拟机(Low Level Virtual Machine)的缩写。它是一个用于建立编译器的基础框架,以C++编写。创建此工程的目的是对于任意的编程语言,利用该基础框架,构建一个包括编译时、链接时、执行时等的语言执行器。目前官方的LLVM只支持处理C/C++,Objective-C三种语言,当然也有一些非官方的扩展,使其支持ActionScript、Ada、D语言、Fortran、GLSL、Haskell、Java bytecode、Objective-C、Python、Ruby、Rust、Scala以及C#。

LLVM是一个编译器框架。LLVM作为编译器框架,是需要各种功能模块支撑起来的,你可以将clang和lld都看做是LLVM的组成部分,框架的意思是,你可以基于LLVM提供的功能开发自己的模块,并集成在LLVM系统上,增加它的功能,或者就单纯自己开发软件工具,而利用LLVM来支撑底层实现。LLVM由一些库和工具组成,正因为它的这种设计思想,使它可以很容易和IDE集成(因为IDE软件可以直接调用库来实现一些如静态检查这些功能),也很容易构建生成各种功能的工具(因为新的工具只需要调用需要的库就行)。在这里插入图片描述
常见的结构如下图
在这里插入图片描述

主要由三个部分组成。

前端:将高级语言例如C或者其他语言转换成LLVM定义的中间表达方式 LLVM IR。例如非常有名的clang, 就是一个转换C/C++的前端。

中端:中端主要是对LLVM IR本身进行一下优化,输入是LLVM, 输出还是LLVM, 主要是消除无用代码等工作,一般来讲这个部分是不需要动的,可以不管他。

后端:后端输入是LLVM IR, 输出是我们的机器码。我们通常说的编译器应该主要是指这个部分。大部分优化都从这个地方实现。

至此,LLVM架构的模块化应该说的比较清楚了。很大的一个特点是隔离了前后端。

如果你想支持一个新语言,就重新实现一个前端,例如华为“仓颉”就有自己的前端来替换clang。

如果你想支持一个新硬件,那你就重行实现一个后端,让它可以正确的把LLVM IR映射到自己的芯片。

前端

在这里插入图片描述

经过词法分析、语法分析、语义分析、LLV

http://www.xdnf.cn/news/848503.html

相关文章:

  • 枚举概念与特性
  • 【Java开发环境配置】7-Apache Tomcat安装教程环境变量配置IDEA配置(27)
  • base64编码简介
  • 频率与补偿(下)
  • 一文带你了解MindSpore的知识及安装入手
  • 我收集的搜索引擎
  • 带你深入了解Android Handler的用法
  • Java HashMap 详解
  • 2024热门专业详细解读:信息安全专业及其就业前景(1)
  • UE4动态修改物体材质
  • B 站疯传,堪称最强,10 大免费的白嫖网站
  • 浏览器输入127.0.0.1显示拒绝访问
  • 网络安全入门,渗透测试详细介绍和流程方法
  • Linux---cp和mv命令选项
  • 23种模式——策略模式
  • JavaScript(JS)的indexOf和lastIndexOf函数全解析
  • mydisktest测试软件,MyDiskTest
  • 尤雨溪-基本介绍
  • 你想要的系列:网络请求框架OkHttp3全解系列 - (一)OkHttp的基本使用
  • Ubuntu操作系统
  • 三十分钟学会SCALA
  • http状态码301和302详解及区别
  • 量化交易是什么?
  • 《MFC 学习笔记》 1 —— 窗口
  • 史上最详细sqlmap入门教程
  • 【Git】git常用命令大全(初学者必看!!最强详解!!)
  • CSRF攻击原理介绍和利用
  • Simulink 环境基础知识(九)--指定模块属性
  • 获取传感器温度-cpu 温度篇
  • yml 简介(springboot 必备基础,小白入门)