计算机概要和技术
引言
计算机的发展史:参考链接
现代计算机,按照应用来分,有如下的类型:
- 个人计算机
- 服务器
- 超级计算机
- 嵌入式计算机
后PC时代的概念:
- 个人移动设备
- 云计算
哪些因素会影响程序的性能?
- 算法:决定了源码级语句的数量和I/O操作的数量
- 编程语言、编译器和体系结构:决定了每条源码级语句对应的计算机指令数量
- 处理器和存储系统:决定了指令的执行速度
- I/O系统:决定了I/O 操作的执行速度
计算机系统结构中的8个伟大思想
- 面向摩尔定律的设计
- 使用抽象简化设计:如通过指令集体系结构实现底层硬件和软件之间的交互
- 加速大概率事件:如动态分支预测、Cache缓存的设计、TLB的设计
- 通过并行提高性能:如处理机流水线实现了指令间并行
- 通过流水线提高性能
- 通过预测提高性能
- 存储器层次
- 通过冗余提高可靠性
程序概念入门
程序根据层次的不同,可分为:
- 应用软件
- 系统软件(compiler,OS,etc)
- 硬件
程序代码的级别: - 高级语言
- 汇编语言
- 机器语言
硬件概念入门
硬件要细说有很多,主要包括下面一些设备硬件:
- 用户接口设备:显示器,键鼠
- 存储设备:总体上可分为易失性存储器(内存,Cache)和非易失性存储器(硬盘,闪存,光盘)
- 网络适配器
处理器和存储器制造技术
- 容量和性能不断增加
- 成本不断降低
-
性能
注:不能简单以MIPS(Million Instructions Per Second)作为性能的度量指标。因为,并不是执行的指令数越多,就代表性能越高。
要定义性能,首先我们得先定义几个概念:
- 响应时间(执行时间):计算机完成某任务所需的总时间
- 吞吐率(带宽):单位时间内完成的任务数
有了上面的定义,我们就可以定义性能:
性能 = 1 / 执行时间 (在某种程度上,这相当于是吞吐率,即单位时间内执行的事务数)
所谓“计算机X比计算机Y快n倍”,指的是:
那么,执行时间是怎么度量的?答案是采用时钟周期(时钟频率)。
从上面这个式子,我们就可以看出,要先提高性能,要么就是减小CPU的时钟周期数,要么就是增大时钟频率。
结合指令而言,我们就还需要引入CPI这个重要概念,所谓CPI,全名是:clock cycle per instruction,表示执行每条指令所需要的时钟周期数的平均值。
我们回到最开始讲的影响程序性能的因素上来:
- 算法:影响程序的指令数,可能影响CPI
- 编程语言:影响程序的指令数和CPI
- 编译程序:影响程序的指令数和CPI
- 指令集体系结构:影响指令数、CPI和时钟频率
功耗墙
基于CMOS集成电路技术,每个晶体管的功耗可以按如下的公式进行计算:
而所谓功耗墙,可以理解为处理器消耗的最大功耗,当处理器功耗超过功耗墙设置时,处理器会自动降频。
从单处理器向多处理器转变
单处理器顶多就是实现程序并发执行,而真正的并行执行,则还需要依赖多处理器架构。现代计算机大多数都是多核的了,并行编程也成为了一项技术。
SPEC CPU 基准测试程序
这个程序是用于比较和测量计算机性能(主要指的是CPU,IO影响因素可以忽略)的程序
Amdahl定律
Amdahl定律阐述了一个事实:即使我们可以通过并行来提升程序的性能,但这种提升是有上限的,这意味着无论我们如何增大处理器数目,加速比是无法高于某个阈值。之所以会有这样的效果,就是因为程序并不是每一个部分都会受益于并行,有些东西是并行也无法加速的。但是这也启示我们,如果一个程序中可以并行执行的部分越大,那么该程序可以通过并行提升的空间就越大,反映了加速大概率事件的伟大设计思想。