一、引言
1.1 计算机技术的发展
世界上第一台现代电子计算机**“ENIAC”(LJC32)**,诞生于1946年2月14日的美国宾夕法尼亚大学,并于次日正式对外公布。ENIAC长30.48米,宽1米,占地面积约170平方米,30个操作台,约相当于10间普通房间的大小,重达30吨,耗电量150千瓦,造价 48 万美元。它包含了17,468真空管7,200 水晶二极管,1,500 中转,70,000电阻器,10,000电容器,1500继电器,6000多个开关,每秒执行5000次加法或400次乘法,是继电器计算机的1000倍、手工计算的20万倍,ENIAC 于1955 年退役。
自从第一台通用电子计算机问世以来,计算机技术在大约 65年间取得了令人难以置信的发展。这种快速发展既得益于两个方面:
- 半导体技术的发展
- 计算机体系结构的发展
Ⅰ.计算机体系结构和组织方式的发展一起促成了计算及性能以超过 50% 的年增长率持续增长17年(1986-2003)。
这一飞速发展带来四重效果:
- 增强可供计算机用户使用的功能;
- 导致新型计算机的出现;
- 半导体制造业的持续发展使得基于微处理器的计算机在整个计算机设计领域中占主导地位;
- 对软件开发的影响。绝大多数编程是使用诸如 Java 和 C# 之类的托管编程语言来完成的,代替了以高性能为目的C语言和C++语言;
Ⅱ.硬件复兴结束(2004-)
原因:
- 风冷芯片的最大功耗
- 无法有效地开发更多指令级并行
Intel 在2004年取消了自己的高性能单核处理器项目,转而和其他公司一起宣布:为了获得更高性能的处理器,应当提高一个芯片上集成的核心数目,而不是加快单核处理器的速度。
这是一个标志着历史性转折的里程碑信号,处理器性能的提高从单纯依赖指令级并行(IP)转向数据级并行(DLP)和线程级并行(TLP)。
1.2 并行度和并行体系结构
20 世纪 60 年代,Michael Flynn 在研究并行计算工作量时,提出一种简单的分类方式——Flynn分类法,至今我们仍在使用:
- 单指令流、单数据流,Single Instruction Stream,Single Data Stream,SISD.
- 单指令流、多数据流,Single Instruction Stream,Multiple Data Stream,SlMD。
- 多指令流、单数据流,Multiple Instruction Stream,Single Data Stream,MISD
- 多指令流、多数据流,Multiple Instruction Stream,,Multiple Data Stream,MlMD
4类计算机的基本结构:
IS:指令流,DS:数据流,CS:控制流,
CU:控制部件,PU:处理部件,MM和SM:存储器
单指令流单数据流,SISD
- 单处理器
- 可以使用指令级并行,如流水线、动态调度、超标量
单指令流多数据流,SIMD
- 同一指令操纵多条数据流,由不同处理器,对多个数据项进行并行数据处理
- 每个数据处理器可有自己的数据存储器,但是只有一个指令存储器和控制器
- 向量体系结构, GPU
多指令流多数据流,MIMD
- 每个处理器都自己取指令,并对自己的数据进行处理
- 任务级并行
- 紧密耦合的 MIMD 结构——线程级并行
- 松散耦合 MIMD 结构——集群
多指令流单数据流, MISD
- 目前为止,没有此种类型的商用机,但是包含了此分类能使得分类更加完整。
- 脉动阵列机。
二、计算机体系结构
- 狭义定义:
- 指令集的设计
- 需要考虑:寄存器、内存地址、访存方式、指令集的设计;
- 经典定义:机器语言程序员所见到的计算机的属性,即概念性结构和功能特性。
- 广义定义:包括计算机设计所有三个方面
- 指令集结构(ISA)
- 分类
- 现在几乎所有的 ISA 都划分为通用寄存器体系结构中
- 两种主流版本:寄存器-存储器ISA,如 80x86,可以在许多指令中访问存储器;载入 - 存储,如 ARM 和 MIPS 。只能用载入或存储指令来访问存储器。
- 存储器寻址
- 字节寻址
- 访问对齐
- 寻址方式:立即数寻址,寄存器寻址,偏移量寻址
- 操作数类型和大小
- 指令类型:数据传输、算逻运算、控制指令、浮点指令 等
- 指令格式:固定、可变
- 分类
- 组成
- 计算机的逻辑实现,包括存储系统、存储器链接、CPU内部设计
- 硬件
- 计算机的具体实现,包括详尽的逻辑设计和封装技术。
- 指令集结构(ISA)
真正的计算机体系结构:设计满足目标和功能需求的组织和硬件。
三、发展趋势
3.1 技术趋势
3.1.1 不可或缺的实现技术
要为计算机的发展作长远计划,设计人员必须了解实现技术的快速变化。以下5种实现技术是现代计算机实现不可或缺的,它们都在发生急剧的变化。
- 集成电路技术
- 晶体管密度大概每年增加 35%, 差不多每四年翻两番。晶片大小的增长速度要慢一点。两者综合起来,一个芯片上的晶体管数目每年大约增长 40%-55%,这就是摩尔定律,单位面积上的晶体管数目,每 18 个月翻一翻。
- DRAM(动态随机访问存储器)
- 最近大约十年,单个 DRAM 芯片容量每年大约增加 25% - 40%,大约每2 - 3年翻一翻,但是增长速度在下降。 DRAM 技术是主存储器的基础。
- 闪存(电可擦编程只读存储器)
- 个人移动设备中存储器件。近十年来,个人移动设备迅速普及,这种趋势刺激了半导体闪存容量的迅速提升。
- 磁盘技术
- 磁盘技术是服务器和数据存储的核心技术。在 1990年之前,磁盘密度每年提高大约30%,3年翻一翻。之后每年增长60%,1996 年的增速为 100%。从2004年开始,每年增长 40% 左右。
- 网络技术
- 网络的性能取决于交换机的性能和传输系统的性能
3.1.2 性能趋势:带宽和延迟
- 带宽或吞吐量
- 单位时间的工作量
- 处理器的带宽增长:32,000 - 40,000 倍
- 内存和磁盘的增长:300 - 1200 倍
- 延迟 或 响应时间
- 一个事件从开始到完成所经历的时间
- 处理器响应时间改进 50 - 90倍
- 内存和磁盘的响应时间改进 6 - 8 倍
显然,在这些技术的发展过程中,带宽的改进要明显优于延迟。一个简单的经验法则是:带宽的增长速度至少是延迟改进速度的平方
3.1.3 晶体管(Transistors)性能与连线(wire )的发展
- 集成电路的制造工艺是以特征尺寸来衡量的
- 特征尺寸 就是一个晶体管或者一条连线在 x 方向或者 y 方向的最小尺寸。
- 特征尺寸:1971为 10 微米,2011 年 0.032微米 ( 32 纳米技术),2017年 0.016 微米(16 纳米技术)
- 特征尺寸下降时,晶体管性能以线性提升,晶体管的密度将以平方曲线上升。
借助这种增长,微处理器从 4 位迅速发展到 64 位,并从单核发展到多核。 - 随着特征尺寸缩小,连线会变短,但是单位长度的电阻和电容都会变差。和晶体管性能相比连线延迟方面的改进少的可怜。
3.2 功率和能耗趋势
对于几乎所有类型的计算机来说,功率都是计算机设计人员面对的挑战。
- 第一,必须将功率引入芯片,并进行分配;
- 第二,功率以热的形式耗散,必须消除。
3.2.1 功率和能耗:系统观点
-
处理器需要的最大功率是多少?
如果处理器需要的最大功率超过电源系统能提供的功率,就会导致电压下降,而电压下降会导致期间无法正常工作;
-
持续功耗——热设计功耗(Thermal Design Power,TDP)
决定了冷却需求,当温度接近节点温度上限时,电路降低时钟频率,从而减小功率如果不成功,启动热过载启动装置,以降低芯片的功率。
-
能耗和能耗效率
所谓的功率,就是单位时间的能耗。 用能耗更适合作为对比处理器的参数。因为能耗这个参数同时包含了执行任务的时间。 也就是,如果对比两个处理器对于某一给定任务,那个更高效,那么应该对比的是执行该项任务的能耗,而非功率。
3.2.2 微处理器内部的能耗和功率
- 主要能耗源:开关晶体管(动态能耗)
- 时钟频率和电源电压保持不变的情况下,提高能耗效率
- 关闭非活动模块,以节省能耗和动态功率
- 动态电压 - 频率调整。微处理器可以提供不同工作频率
- 针对典型情景的设计,PMD、笔记本等的省电模式
- 超频。 Intel在 2008 年开始提供 Turbo 模式,在这种模式下,芯片可以判定在少数几个核心上以较高的时钟频率短时间运行
3.3 成本趋势
- 时间、产量和大众化影响
- 集成电路成本
- 成本与价格
- 制造成本与运行成本
这部分看书了解即可。
四、性能测试
4.1 性能指标
如何评测一台计算机的性能,与测试者看问题的角度有关。
用户关心的:响应时间 / 执行时间
仓库级计算机的操作人员关心的:吞吐量
4.2 加速比
假设两台计算机为X和Y,X比Y快的意思是:对于给定任务,X的执行时间比Y的执行时间少。
X的性能是Y的n倍:
执行时间
Y
执行时间
X
=
n
\frac{执行时间Y}{执行时间X} = n
执行时间X执行时间Y=n
执行时间与性能成反比:
n
=
执行时间
Y
执行时间
X
=
1
性能
Y
1
性能
X
=
性能
X
性能
Y
n = \frac{执行时间Y}{执行时间X} = \frac{\frac{1}{性能Y}}{\frac{1}{性能X}} = \frac{性能X}{性能Y}
n=执行时间X执行时间Y=性能X1性能Y1=性能Y性能X
4.3 执行时间
单个用户:访问内存所需要的时间,访问磁盘所需要的时间,输入输出操作所需要的时间,操作系统开销,CPU 执行时间……
多道程序——操作系统调度……太难了。
——墙上时间:包括所有的系统开销
CPU时间:only computation time
4.4 基准测试
用于测试和比较性能的基准测试程序的最佳选择是真实应用程序。(例如编译器)
以前有些测试方法不是采用真实的应用程序,而是采用简化了的程序,例如:
- **核心测试程序:**从真实程序中选出的关键代码段构成的小程序。
- **小测试程序:**简单的只有几一行的小程序。
- **合成的测试程序:**人工合成出来的程序。
从测试性能的角度来看,上述测试程序不可信了。这些程序比较小,具有片面性;系统结构设计者和编译器的设计者可以“合谋”把他们的机器面问这些测试程序进行优化设计,使得该机器显得性能更高。
**基准测试程序套件:**由各种不同的真实应用程序构成。能比较全面地反映计算机在各个方面的处理性能。
SPEC系列:最成功和最常见的测试程序套件(美国的标准性能测试公司创建)
**SPEC(System Performance Evaluation Cooperative )**是由许多计算机销售商联合出资赞助并支持的组织,目的是为现代计算机系统建立基准评测程序集,该组织成立于1988年。1989年,SPEC建立了重点面向处理器性能的基准程序集,即 SPEC89。历经五代发展,应用时间最长和最广泛的是SPEC CPU 2006 。它是由 SPECint和 SPECfp 组成,前者包括了12个整数基准评测程序,后者包括 19 个基准评测程序。随着 SPEC CPU 2017 的发布, CPU 2006 已经于2018年1月正式退休。
五、计算机设计的量化原理
1.5.1 充分利用并行
并行性的含义:计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。即只要在时间上相互重叠,就存在并行性。
- **同时性:**两个或两个以上的事件在同一时刻发生。
- **并发性:**两个或两个以上的事件在同一时间间内发生。
提高并行性的三种途径:
- 时间重叠: 引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。
- **资源重复:**引入空间因素,以数量取胜。通过重复设置硬件资源,大幅度地提高计算机系统的性能。
- **资源共享:**这是一种软件方法,它使多个任务按一定时间顺序轮流使用同一套硬件设备。如,多道程序。
时间重叠
单处理机中 —— 部件功能专用化
- 把一件工作按功能分割为若干相互联系的部分;
- 把每一部分指定给专门的部件完成
- 按时间重叠原理把各部分的执行过程在时间上重叠起来,使所有部件依次分工完成一组同样的工作。
多处理机中 —— 处理机专用化
-
专用外围处理机
例如,输入/输出功能的分离。 -
专用处理机,
如数组运算、高级语言翻译、数据库管理等,分离出来。 -
异构型多处理机系统
由多个不同类型、至少担负不同功能的处理机组成,它们按照作业要求的顺序,利用时间重叠原理,依次对它们的多个任务进行加工,各自完成规定的功能动作。
资源重复
单处理机中 —— 重复设置功能部件
- 多存储体并行
- 数据/指令独立存储体
- 重复设置运算部件
多处理机中 —— 重复设置处理机
- 容错系统
- 同构型多处理机系统
- 由多个同类型或至少担负同等功能的处理机组成,它们同时处理同一作业中能并行执行的多个任务
资源共享
单处理机中
- 分时系统、多道程序
多处理机中
- 分布式系统
1.5.2 局部性原理
程序执行时所访问的存储器地址分布不是随机的,而是相对地簇聚。
- 常用的一个经验规则
程序执行时间的 90% 都是在执行程序中 10% 的代码。 - 程序的时间局部性
程序即将用到的信息很可能就是目前正在使用的信息。 - 程序的空间局部性
程序即将用到的信息很可能与目前正在使用的信息在空间上相邻或者临近。
1.5.3 以经常性事件为重点
- 对经常发生的情况采用优化方法的原则进行选择,以得到更多的总体上的改进。
- 优化是指分配更多的资源、达到更高的性能或者分配更多的电能等
- 相对溢出,不溢出是经常性事件。针对不溢出的情况进行性能设计,无需花过多的时间和精力在解决溢出上。
- 处理器的取值、译码比乘法器用的更加频繁,优先优化取指令和译码部件。
1.5.4 Amdahl 定律
加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统中总执行时间的百分比。
系统性能加速比:
加速比
=
系统性
能
改进后
系统性
能
改进前
=
总执行时
间
改进前
总执行时
间
改进后
加速比 = \frac{系统性能_{改进后}}{系统性能_{改进前}} = \frac{总执行时间_{改进前}}{总执行时间_{改进后}}
加速比=系统性能改进前系统性能改进后=总执行时间改进后总执行时间改进前
加速比依赖于两个因素:
- 可改进比例: 在改进前的系统中,可改进部分的执行时间在总的执行时间中所占的比例。
- 部件加速比: 可改进部分改进以后性能提高的倍数。它是改进前所需的执行时间与改进后执行时间的比。
加速比 = 总执行时 间 改进前 总执行时 间 改进后 = 总执行时 间 改进前 总执行时 间 改进前 × 可改进比例 部件加速比 + 总执行时 间 改进前 × ( 1 − 可改进比例 ) = 1 可改进比例 部件加速比 + ( 1 − 可改进比例 ) \begin{align} 加速比 &= \frac{总执行时间_{改进前}}{总执行时间_{改进后}} \\ &= \frac{总执行时间_{改进前}}{\frac{总执行时间_{改进前}\times 可改进比例}{部件加速比} + 总执行时间_{改进前}\times (1 - 可改进比例)} \\ &= \frac{1}{\frac{可改进比例}{部件加速比}+(1-可改进比例)} \end{align} 加速比=总执行时间改进后总执行时间改进前=部件加速比总执行时间改进前×可改进比例+总执行时间改进前×(1−可改进比例)总执行时间改进前=部件加速比可改进比例+(1−可改进比例)1
Amdahl定律是一个很悲观的定律, 在问题的可并行部分不大时,增加处理机的数量并不能显著地加快解决问题的时间。
例: 将计算机系统中某一功能的处理速度提高到原来的 20 倍,但该功能的处理时间仅占整个系统运行时间的 40%,则采用此提高性能的方法后,能使整个系统的性能提高多少?
答: 1 / (0.6 + 0.4 / 20) = 1.613
Amdahl定律: 一种性能改进的递减规则
-
如果仅仅对计算任务中的一部分做性能改进,则改进得越多,所得到的总体性能的提升就越有限。
-
重要推论: 如果只针对整个任务的一部分进行改进和优化,那么所获得的加速比不超过
1 1 − 可改进比例 \frac{1}{1-可改进比例} 1−可改进比例1
公式拓展
假设: Si
为第 i
种部件的加速比, Pi
为第 i
种部件执行时间占总执行时间中的比例.
加速比
=
1
1
−
可改进比例
+
可改进比例
部件加速比
=
1
1
−
∑
p
i
+
∑
p
i
s
i
\begin{align} 加速比 &= \frac{1}{1-可改进比例+\frac{可改进比例}{部件加速比}} \\ &= \frac{1}{1 - \sum p_{i} + \sum \frac{pi}{si}} \end{align}
加速比=1−可改进比例+部件加速比可改进比例1=1−∑pi+∑sipi1
1.5.5 CPU 性能公式
执行一个程序所需的 CPU 时间
CPU 时间 = 执行程序所需的时钟周期数 x 时钟周期时间
其中:
- 执行程序所需的时钟周期数 = 每条指令执行的平均时钟周期数 CPI x 所执行的指令条数 IC;
- 时钟周期时间是系统时钟频率的倒数。
CPU 时间公式也可以写为如下形式:
CPU 时间 = IC x CPI x 时钟周期时间 或:
CPU 时间 = IC x CPI x (1 / 时钟频率)
请思考: 如何降低 CPU 时间?
CPI时间公式拓展
假设: 计算机系统有 n
种指令
CPI1: 第i种指令的处理时间(周期数);
IC1: 在程序中第i种指令出现的次数;
C
P
U
T
i
m
e
=
执行程序所需的时钟周期数
×
时钟周期时间
=
∑
i
=
1
n
(
C
P
I
i
×
I
C
i
)
×
时钟周期时间
\begin{align} CPUTime &= 执行程序所需的时钟周期数 \times 时钟周期时间 \\ &= \sum_{i=1}^{n} (CPI_{i}\times IC_{i}) \times 时钟周期时间 \end{align}
CPUTime=执行程序所需的时钟周期数×时钟周期时间=i=1∑n(CPIi×ICi)×时钟周期时间
CPI公式拓展
C
P
I
=
时钟周期数
I
C
=
∑
i
=
1
n
(
C
P
I
i
×
I
C
i
)
I
C
=
∑
i
=
1
n
(
C
P
I
i
×
I
C
i
I
C
)
CPI = \frac{时钟周期数}{IC} = \frac{\sum_{i=1}^{n}(CPI_{i}\times IC_{i})}{IC} = \sum_{i=1}^{n}(CPI_{i}\times \frac{IC_{i}}{IC})
CPI=IC时钟周期数=IC∑i=1n(CPIi×ICi)=i=1∑n(CPIi×ICICi)
例:
答:
CPI1 = 0.3 * 2 + 0.7 = 1.3
CPU1时间 = IC1 * 1.3 * T1
T2 = 1.35 T1
CPU2 分支时不需要比较,因而指令数目为CPU1的70%
CPI2 = 0.3 / 0.7 * 2 + (1 - 0.3 / 0.7) = 1.428
IC2 = 0.7 * IC1
CPU2时间 = IC2 * CPI2 * T2 = 0.7 * IC1 * 1.428 * 1.35 * T1 = 1.349 * IC1 * T1
可见CPU1更快
1.5.6 摩尔定律
摩尔定律是由英特尔(lntel) 名誉董事长戈登·摩尔(Gordon moore) 经过长期观察总结的经验 。被称为计算机第一定律。摩尔定律是指单芯片上可容纳的晶体管数目,约每隔 18个月便会增加一倍,性能也将提升一倍。
1.5.7 Dennard 定律
晶体管面积的缩小使得其所消耗的电压以及电流会以差不多相同的比例缩小。也就是说,如果晶体管的大小减半,该晶体管的静态功耗将会降至四分之一(电压电流同时减半)。
六、复习题
1、请简述Flynn分类法将计算机系统结构分成哪四类。
SISD, SIMD, MISD, MIMD
2、请简述程序局部性原理
- 程序的时间局部性
程序即将用到的信息很可能就是目前正在使用的信息。 - 程序的空间局部性
程序即将用到的信息很可能与目前正在使用的信息在空间上相邻或者临近。
3、请简述Amdahl定律
加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统总执行时间的百分比。
4、影响CPU时间的因素包括什么?
- 时钟周期时间:取决于硬件实现技术和计算机组成
- CPI:取决于计算机组成和指令集结构
- IC:取决于指令集结构和编译技术。处理器性能优化的策略
5、请简述冯·诺依曼体系结构的特点
- 计算机由五大部件组成:存储器,运算器,控制器,输入设备,输出设备
- 指令和数据以同等地位存于存储器,可按地址顺序访问
- 指令和数据以二进制编码表示
- 指令由操作码和地址码组成
- 存储程序,程序在计算机中顺序存放
- 以运算器为中心
6、请简要说明提高计算机系统并行性的3种技术途径,并分别从单机和多机系统的角度举例
单机 | 多机 | |
---|---|---|
时间重叠 | 部件功能专用化,如流水线 | 处理机专用化,异构型多处理机 |
资源重复 | 设置多个运算部件 | 同构型多处理机 |
资源共享 | 分时系统、多道程序 | 分布式系统 |