首页 > 编程语言 >《深入理解计算机系统》第五章学习笔记 优化程序性能

《深入理解计算机系统》第五章学习笔记 优化程序性能

时间:2023-04-26 11:46:02浏览次数:34  
标签:计算机系统 代码 程序 笔记 编译器 第五章 指令 执行 优化

编写高效程序需要做到以下几点:第一,我们必须选择一组适当的算法和结构。第二,我们必须编写出编译器能够有效优化以转换成高效可执行代码的源代码。C语言的有些特性,例如执行指针运算和强制类型转换的能力,使得编译器很难对它进行优化。第三,针对处理运算量特别大的计算,将一个任务分成多个部分,这些部分可以在多核和多处理器的某种组合上并行地计算。我们会把这种性能改进的方法推迟到第12章中去讲。

我们描述许多提高代码性能的技术。理想的情况是,编译器能够接受我们编写的任何代码,并产生尽可能高效的、具有指定行为的机器级程序。现代编译器采用了复杂的分析和优化形式,而且变得越来越好。然而,即使是最好的编译器也受到妨碍优化的因素的阻碍,妨碍优化的因素就是程序行为中那些严重依赖于执行环境的方面。程序员必须编写容易优化的代码,以帮助编译器。

程序优化的第一步就是消除不必要的工作,让代码尽可能高效地执行所期望的任务。这包括消除不必要的函数调用、条件测试和内存引用。这些优化不依赖于目标机器的任何具体属性。

为了使程序性能最大化,程序员和编译器都需要一个目标机器的模型,指明如何处理指令,以及各个操作的时序特性。例如,编译器必须知道时序信息,才能够确定是用一条乘法指令,还是用移位和加法的某种组合。现代计算机用复杂的技术来处理机器级程序,并行地执行许多指令,执行顺序还可能不同于它们在程序中出现的顺序。程序员必须理解这些处理器是如何工作的,从而调整他们的程序以获得最大的速度。基于Intel和AMD处理器最近的设计,我们提出了这种机器的一个高级模型。我们还设计了一种图形数据流表示法,可以使处理器对指令的执行形象化,我们还可以利用它预测程序的性能。

了解了处理器的运作,我们就可以进行程序优化的第二步,利用处理器提供的指令级并行能力,同时执行多条指令。我们会讲述几个对程序的变化,降低一个计算的不同部分之间的数据相关,增加并行度,这样就可以同时执行这些部分了。

我们以对优化大型程序的问题的讨论来结束这一章。我们描述了代码剖析程序的使用,代码剖析程序是测量程序各个部分性能的工具。这种分析能够帮助找到代码中低效率的地方,并确定程序中我们应该着重优化的部分。

标签:计算机系统,代码,程序,笔记,编译器,第五章,指令,执行,优化
From: https://www.cnblogs.com/jixuxiangqian/p/17355166.html

相关文章

  • 精神网络学习笔记
    本篇接上篇深度学习笔记喵~1.精神网络模型考虑到在之前的模型中,我们训练的模型的决策界限都可以轻易找到其表达式,相对来说较为简单,我们下面来看一个复杂的模型,精神网络。精神网络模型是通过模仿人的神经元的出的模型,即大脑中一般会分为多层神经元,第一层神经元负责接受一个输......
  • 动态规划笔记
    动态规划的原理从做题来看我认为动态规划就是将递归的过程反向,以此来避免反复使用递归的函数进行反复的压栈,弹栈同时避免访问很多已经计算过的分支。就比如f(a)=f(a-1)+f(a-2)这个递推式,假设我们最终想要知道f(n)的值,那么我们可以使用一个递归函数f参数是i,进行递归调用。这样当......
  • Unity性能优化课程学习笔记(Metaverse大衍神君)
    课程来源于:https://space.bilibili.com/1311706157 性能优化之道:      等待函数:  SSAO:  AA方案:  后处理: 渲染提前期优化culling,simplization,batchingCulling     Simplization:      Ba......
  • 英语笔记:入门介绍
    短期快速掌握语法基础,不同时做几件事同时学语法和词汇,用造句的方法来学语法,再结合阅读巩固积累词汇,进而掌握造句和理解句子的能力,有了这个基础,再学发音,口语和听力,就容易多了。语法知识练习复习虽然能截取视频画面,但是最多一百张,字多了确实累,那还不如直接抄下来,在加上对自己......
  • 01-计算机系统简介
    01-计算机系统简介计算机系统分为两大类软件和硬件软件分为系统软件和应用软件系统软件:用来管理整个计算机系统语言处理程序;所有的高级语言都要编译成可以在计算机上执行的语言操作系统;服务型程序;像MPI,管理并行程序,管理进程间通信等;数据库管理系统;网络软件应用软件:按......
  • 00系统分析员 笔记3
    1,商业应用系统开发经历了三个阶段一个阶段以计算为中心,分析设计围绕程序的运行效率,算法优劣,存贮优化来进行。90年代的大学课程讲的都是这些。第二阶段以数据为中心,分析设计围绕数据流进行,以数据流程来模拟业务流程。这也就是所谓的面向过程的分析模式。第三阶段以人为中心,分析......
  • 软件工程日报——《用户故事与迅捷方法》读书笔记二
    今天,我又读了一会儿《用户故事与迅捷方法》,有了新的心得体会:用户故事是敏捷开发中的一种技术,用于描述系统的功能需求。迅捷方法是一种敏捷开发方法,旨在通过快速迭代和反馈来提高软件开发的效率和质量。这点在实际开放上很重要,在开发过程上要重点关注用户故事,了解用户的需求和各......
  • python实验笔记1
    1.python如何在一行里面输入两个数呢如果直接这样子写会报错n=int(input())m=int(input())要按照下面的写法才可以实现n,m=map(int,input().split())2.python实现排列组合在itertools库中提供了两个函数permutations和combinations可以实现全排列和组......
  • 人月神话阅读笔记2
    第七章对其他软件工程师提出的反驳进行回应。作者认为,虽然软件工程领域在过去几十年中发展迅猛,但是由于软件项目本身的特殊性以及人类本质的复杂性,软件开发仍然存在很多挑战和困难。因此,要想使软件开发过程更加高效和有序,需要深入研究软件开发的本质和规律,并制定相应的开发方法论......
  • Java学习笔记(五)
    一、面向对象程序设计思想找一个对象帮助我们做事情(万物皆为对象),用虚拟思想去模拟现实生活。二、类和对象的概念是事物相关属性和行为的集合,可以看成是一类事物的模板,使用事物的属性特征来描述该类事物。是一类事物的具体体现,对象就是类的一个具体实例,对象具备该类事物的......