读书笔记系列深入理解计算机系统之处理器体系结构

前言

现代计算机系统只限于机器语言程序级,处理器必须执行一系列指令,一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA),不同厂商都有不同的处理器家族。

编写高效的程序

编译器妨碍化的因素 程序行为中严重依赖于执行环境的方面 例如对于两个指针p和q的数据进行两次相加,计算值依赖于p和q是否指向内存中同一个位置,编译器不能确定时,就假设什么情况都有肯能,限制优化策略 同样的还有方法重复调用的时候等等

此处输入图片的描述

程序优化第一步,消除不必要的工作,让代码尽可能有效的执行所期望的任务。包括消除不必要的函数调用,条件测试和内存引用。 第二步,利用处理器提供指令级并行能力,

编译器会很小心的对程序只使用安全的优化,对于程序可能会遇到的所有可能情况,优化后程序和未优化版本有一样的行为。

此处输入图片的描述

优化后:

此处输入图片的描述

此处输入图片的描述

大量晶体管集成到一块芯片上,现代微处理器采用了复杂的硬件,程序性能得到最大化。在代码级上,似乎是一次执行一条指令,每条指令包括从寄存器或内存取值,执行操作,并把结果存回到一个寄存器和内存位置。实际处理器中,同时对多条指令求值,称为指令级并行

一些限制

内存性能

应用:性能提高

  1. 高级设计:为遇到的问题选择适当的算法和数据结构。
  2. 基本编码原则
    • 消除连续的函数调用。在可能时,将计算移到循环外。考虑有选择的妥协程序的模块性以获得更大的效率
    • 消除不必要的内存引用。映入临时变量来保存中间结果。只有在最后的值计算出来时,才将结果存放到数组或全局变量中。
  3. 低级优化
    • 展开循环,降低开销,使进一步优化称为可能。
    • 通过使用例如多个积累变量和重新结合技术,找到方法提高指令级并行
    • 用功能性风格重写条件操作,使得编译采用条件数据传送

!!!!避免为了提高效率重写程序时避免引入错误