Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >看懂编译原理:优化范围 & 原理

看懂编译原理:优化范围 & 原理

原创
作者头像
北洋
修改于 2023-12-07 08:13:00
修改于 2023-12-07 08:13:00
1.7K0
举报
文章被收录于专栏:北洋csdn北洋csdn

优化范围分为哪几类?优化目标原理分别是什么?

可以分为本地优化,全局优化,过程间优化

  1. 本地优化是_**针对基本快进行的(针对顺序的执行顺序)优化。
  2. 全局优化基于控制流图cfg

全局优化因为可以拿到多个基本快中的信息,因此会进行*函数整体上的优化,不仅限于顺序执行。 *比如寄存器的图染色算法就用到了这个cfg

  1. 过程间优化过程间优化基于的是 多个函数间进行优化的关系。

可以看到这三个范围越来越大:一个函数里面的一个基本快,一个函数里的多个基本快,多个函数

常见的本地优化场景有哪些,原理和做法是什么?

常见的本地优化场景

  1. 代数优化:将不必要的代数计算去除
  2. 常数折叠:如果结果是一个常亮常数,那么会将他的计算过程删除转换为常数
  3. 删除不可达无用基本快:有些基本快分支一直不会运行,删除
  4. 公共子表达式删除:对于同一个表达式的变量,可以直接使用结果删除不必要的重复计算
  5. 删除无用变量和无用表达式(这里的无用表达式指的和上面不一样,这里特殊指代无用变量的表达式)

原理和做法是什么

基本概念解释: 见上面:专业术语概念解释

  • 可用表达式分析:基于控制流图cfg和数据流图。

删除不可达基本快和子表达式还有常熟折叠,代数优化的原理 是顺序遍历程序指令

之前计算过得表达式在后面分析是否还有重复的

不可达基本快也是根据前面的指令分析永远走不到这个基本快中(比如一直true或者false);

常熟折叠也是分析同样的表达式如果前面计算过就用前面的值

做法就是顺序遍历指令(如一图的子表达式删除和拷贝传播技术)

  • 活跃性分析删除无用变量和无用变量的计算表达式的原理是利用变量的活跃度分析进行检测。

如果一个变量在之后的表达式中没有用到那么就是没用的死变量死代码,这种代码存在没有意义因为没有人用它。

因此做法就是倒序遍历如果这个变量在之前的表达式中出现过那么就意味着用到了这个变量就是活的,反之如果没有出现就是死的需要删除。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
编译器优化、词法分析、语法分析和中间表示
在计算机科学领域,编译器是将高级编程语言转换为机器语言的桥梁。本文将深入探讨编译过程中的四个关键阶段:编译器优化(Compiler Optimization)、词法分析(Lexical Analysis)、语法分析(Syntax Analysis)和中间表示(Intermediate Representation,IR)。通过理解这些概念,您可以更好地掌握编译器的工作原理及其在提升程序性能方面的作用。
七条猫
2025/07/26
1140
看懂编译原理:活跃度分析
如果一个基本快中的指令跳转到另外一个基本快之中(那么这两个基本快就形成了一条边)就形成了控制流图。
北洋
2023/12/05
3840
编译原理:第十章 代码优化
基本块的定义:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句。
Here_SDUT
2022/08/09
1.4K0
编译原理:第十章 代码优化
看懂编译原理:目标代码指令生成和优化
首先开发者编写的代码是给人看的,有些时候会为了可读性牺牲一些性能;其次如果只是将代码机械的进行翻译则会出现很多无用的机器指令,就如同ir中的优化(无用ir删除)。因此我们需要对指令进行一些删除操作,将无用的指令删除。
北洋
2023/12/06
5310
JIT即时编译器(C1和C2)
上一篇文章我们已经讲述了JIT编译器的基本原理,今天我们看一下HotSpot虚拟机中具体的编译器。
shysh95
2021/03/16
1.1K0
JIT即时编译器(C1和C2)
图优化技术
常见的图优化技术包括常量折叠、公共子表达式消除、代数化简、算子融合等技术,接下来将分别简单介绍其原理。
码之有理
2022/08/23
1.1K0
图优化技术
编译原理笔记(七)之代码优化「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说编译原理笔记(七)之代码优化「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/09/27
1K0
是时候该深入解析java虚拟机:编译概述,编译理论基础了
中间表示(Intermediate Representation,IR)是编译器内部用到的表示源码的数据结构。根据它的表达能力,又可以分为高级中间表示(HIR),中级中间表示(MIR)和低级中间表示(LIR)。正如之前提到的,控制流图也是一种相对高级的中间表示,对它的分析和优化无须考虑机器架构的细节,只需要关注控制流本身的意义。
愿天堂没有BUG
2022/10/31
4180
是时候该深入解析java虚拟机:编译概述,编译理论基础了
一篇文章理解编译全过程
https://www.cnblogs.com/fisherss/p/13905395.html
zz_jesse
2020/11/06
1.2K0
一篇文章理解编译全过程
CS143 编译器笔记
编译器前端的最后一关,可捕获前面两关无法捕获到的错误,因为有些语言不是上下文无关的,例如,(e1: int ^ e2: int) => e1 + e2: int
谛听
2023/03/12
6810
JVM C1 编译优化:合并相同的表达式-Global Value Numbering 之实现
C1在初始的时候内部会构建图结构的HIR,它由基本块BB构成一个控制流图,每个基本块里面是SSA形式的指令。
王知无-import_bigdata
2020/11/06
1.1K0
JVM C1 编译优化:合并相同的表达式-Global Value Numbering 之实现
【AI系统】公共表达式消除原理
公共子表达式消除(Common Subexpression Elimination,CSE)也成为冗余表达式消除,是普遍应用于各种编译器的经典优化技术。旨在消除程序中重复计算的公共表达式,从而减少计算量和提高执行效率。
用户11307734
2024/11/29
1850
JVM性能优化系列-(6) 晚期编译优化
在部分的商用虚拟机中,java程序最初是通过解释器(Interpreter) 进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个过程的编译器称为即时编译器(Just In Time Compiler)
码老思
2023/10/19
3320
【AI系统】AI编译器前瞻
本文首先会基于 The Deep Learning Compiler: A Comprehensive Survey 中的调研做一个热门 AI 编译器的横向对比,并简要介绍几个当前常用的 AI 编译器。随后会分析当前 AI 编译器面临的诸多挑战,并展望 AI 编译器的未来。
用户11307734
2024/11/28
4760
【AI系统】自动微分的挑战&未来
在前面的文章里面,分别介绍了什么是自动微分、如何实现自动微分,以及更加深入的自动微分的基本数学原理,并贯以具体的代码实现例子来说明业界主流的 AI 框架在自动微分实现方法,希望让你更加好地掌握自动微分端到端能力。
用户11307734
2024/12/06
1390
深入理解jvm - 编译优化(下)
提前编译器的历史其实已经很久了,但是在java领域知道andirod的崛起才被java关注,在讲解关于提前编译器的关注之前,我们来看下提前编译器的优劣
阿东
2021/09/10
7270
【AI系统】常量折叠原理
常量折叠(Constant Folding)是编译器的一种优化技术,它通过在编译期间对常量表达式进行计算,将其结果替换为常量值,从而减少程序运行时的计算和开销。
用户11307734
2024/11/29
2080
浅谈JVM运行期的几种优化手段
在之前的文章中我们谈到过,相比 C/C++ 语言,Java 语言在运行效率方面要稍逊一些,因为 Java 应用程序是在虚拟机上运行,而 C/C++ 程序是直接编译成平台相应的机器码来运行程序。
Java极客技术
2024/03/14
2570
浅谈JVM运行期的几种优化手段
【连载】如何掌握openGauss数据库核心技术?秘诀二:拿捏执行器技术(1)
执行器在数据库整个体系结构中起到承上(优化器)启下(存储)的作用,本章首先介绍执行器的基本框架,然后引申介绍执行引擎中一些关键技术。通过本章的学习,读者应该对于执行器有基本的认识。
数据和云
2021/12/06
9910
【连载】如何掌握openGauss数据库核心技术?秘诀二:拿捏执行器技术(1)
N - DAG优化【编译原理】
 通过构造DAG图,进行代码优化,只需要保留AB,删除无用变量,删除变量时,尽量保留最早出现的变量。
Lokinli
2023/03/09
4880
相关推荐
编译器优化、词法分析、语法分析和中间表示
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档