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

前言

现代计算机系统只限于机器语言程序级,处理器必须执行一系列指令,一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA), 不同的CPU有不同的指令集,也就对应着不同的汇编语言和不同的机器码。 不同厂商都有不同的处理器家族。成千上万指令存放在存储器内,被称为存储程序型计算机;当然之前还有古老的插线板计算机。

编写高效的程序

计算机计时单位:CPU时钟 一个程序运行时间通常是掺入了网络,硬盘数据读取等时间的,想要准确统计某个程序运行时间,就需刨除

// 指令
time seq 1000000 | wc -l

// 运行结果

real  0m0.101s // 通常所说的Wall Clock Time,整个运行所需时间
user  0m0.031s // CPU运行程序,用户态执行指令时间
sys   0m0.016s // CPU运行程序,内核运行指令时间

CPU时间 = user + sys;

CPU时间受到主板,内存,频率的影响,所以也不准确,程序的CPU执行时间=CPU时钟周期数×时钟周期时间

程序的CPU执行时间=指令数 × CPI × Clock Cycle Time

CPU时钟周期时间优化:可以通过cpu主频的提高来达到提高响应时间,但是会有极限,奔腾4因为功耗的问题始终都没达到10GHZ。晶体管密度的增加也带来了散热和耗电的问题,即使用上水冷散热效果也是有限的

功耗 ~= 1/2 x 负载电容 x 电压的平方 x 开关频率 x 晶体管数量

所以,计算机工程师不断的降低电压,但是低电压也不是无限低下去的。intel工程师在奔腾4之后才用了增加吞吐量作为提高处理器性能

阿姆达尔定律:优化后的执行时间 = 受优化影响的执行时间/加速倍数+不受影响的执行时间

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

此处输入图片的描述

程序优化

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

此处输入图片的描述

优化后:

此处输入图片的描述

此处输入图片的描述

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

一些限制

内存性能

应用:性能提高

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

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