1 量化设计与分析基础
- 计算机的分类类别
- 计算机系统结构定义和计算机的设计任务:指令集结构概念及要素
- 实现技术的趋势:技术发展的趋势
- 集成电路功耗的趋势:功耗的概念
- 可靠性:提高可靠性的方法
- 测量、报告和总结计算机性能:计算机主要性能指标
- 计算机设计的量化原则:Amdahl定律
1.1 引言
CPU的制造过程
简单地说,处理器的制造过程可以大致分为沙子原料(石英)、硅晶棒、晶圆、光刻(平版印刷)、蚀刻、离子注入、金属沉积、金属层、互连、晶圆测试与切割、核心封装、等级测试、包装上市等诸多步骤,而且每一步里边又包含更多细致的过程。
1.2 计算机的分类★
Flynn’s 分类
基于指令流和数据流数量的计算机结构分类:
- SISD (Single Instruction single Data) 单指令流 单数据流
- Uniprocessors 单处理器
- MISD (Multiple Instruction Single Data) 多指令流 单数据流
- 不存在
- SIMD (Single Instruction Multiple Data) 单指令流 多数据流
- Examples: llliac-lV, CM-2
- Simple programming model
- Low overhead
- Flexibility
- All custom
- Examples: llliac-lV, CM-2
- MIMD (Multiple Instruction Multiple Data) 多指令流 多数据流
- Examples: SPARCCenter, T3D
- Flexible
- Use off-the-shelf micros
- Examples: SPARCCenter, T3D
计算机的分类
| 特征 | 个人移动设备 | 桌面计算机 | 服务器 | 集群/仓库级计算机 | 嵌入式计算机 |
|---|---|---|---|---|---|
| 系统的价格 | $100-$1000 | $300-$25000 | $5000-$10,000,000 | $100,000-$200,000,000 | $10-$100,000 |
| 微处理器的价格 | $10-$100 per proc. | $50-$500 per proc. | $200 -$2,000 per proc. | $50-$250 per proc. | $0.01-$100 per proc. |
| 关键的系统设计问题 | 成本,功耗,媒体性能,响应率 | 性价比,图形性能,能耗 | 可靠性,吞吐量,可扩展性 | 性价比,吞吐量,能耗,均衡性 | 价格,功耗,专门应用的性能 |
1.3 计算机系统结构定义和计算机的设计任务
计算机系统结构的原始慨念
由程序员(机器语言)看见的(计算)系统属性,即概念性结构和功能行为,以区分数据流动和控制逻辑设计的组成及物理实现。
指令集架构ISA在计算机系统层次中的位置
指令集架构 (Instruction Set Architecture, ISA):软硬件之间的的接口
指令集结构ISA设计
一个好的接口:
- 允许有多种实现 (portability, compatability)
- 用在很多不同的方面 (generality)
- 为更高层提供方便的功能
- 允许更低层能有效实现
★指令集结构ISA的7个重要要素
ISA的类型:(现代)通用寄存器结构,(早期)累加器结构
存储器访问:如,按字节访问
寻址方式
操作数类型和大小:8位字符,32位整型数
操作类型:数据传输,算术/逻辑
控制流指令:转移,子程序调用/返回
ISA编码:固定长度,可变长度
指令集:RISC vs CISC
ARM:使用精简指令集(RISC),大幅简化架构,仅保留所需要的指令,可以让整个处理器更为简化,拥有小体积、高效能的特性。ARMv8架构支持64位操作,指令32位,寄存器64位,寻址能力64位。指令集使用NEON扩展结构。
x86:使用复杂指令集(CISC),以增加处理器本身复杂度为代价,换取更高的性能。X86指令集从MMX,发展到了SSE,AVX。
| RISC简单指令集(ARM) | CISC复杂指令集(X86) | |
|---|---|---|
| 吃饭的例子 | 指令:拿勺子->舀起一勺饭->送到嘴里->咽下去 | 指令: 吃饭 |
| 优劣势 | 指令多,需要好几个指令实现一个复杂功能 针对常用指令优化,处理效率高 不常用指令则需要指令组合方式,可以通过流水 技术和超标量技术弥补。指令执行周期<=1cycles |
指令简单,不需要下达太多指令 指令动作复杂,速度慢;设计复杂,且流水中很多操作浪费 指令执行周期大都在5~8 cycles |
计算机系统结构定义
计算机系统结构(现代定义):是在满足功能、性能和价格目标的条件下,设计、选择和互连硬件部件构成计算机。
系统结构覆盖:
- 指令系统(集)设计
- 组成(Organization):计算机设计方面的高层次
CPU内部结构、存储器、I/O系统、多处理器、网络 - 硬件实现: 计算机的具体实现技术
详细逻辑设计、封装、冷却系统、板级设计,功耗等
影响计算机系统结构的因素
- 实现技术
- 编程语言
- 编译器
- 应用程序
- 操作系统
- 历史
计算机系统结构已经是这些技术发展的核心,而且将来也仍然是。
系统结构的演变趋势
重点问题(Emerging issues)
- 高性能
- 多CPU 核 / 多核
- 仓库级计算机
出现的应用(Emerging applications)
- 云计算
- 物联网
- 智能应用
1.4 实现技术的趋势
摩尔定律(Moore Law)
1965年,他预测工业界集成在一个计算机芯片上的元件数量每年翻一番。 1975年,他更新预测为每两年翻一番。
这已经成为半导体工业界在降低电子器件成本的同时提供更强大芯片的指导原则。
★实现技术的趋势
集成电路逻辑技术
- 晶体管密度: 增加 35% per year
- Die size(芯片尺寸): 10%-20% per year
- 每个芯片晶体管数量:40-55% per year
半导体DRAM
- 容量:40% per year
- 访问速度: about 10% per year
磁盘技术
- 密度: 30% p.y. Before 1990; 60% p.y. 1990-1996; 100 p.y. 1996-2004 ; 30% p.y. after 2004
- 容量:about 60% per year
网络
- 带宽: 10Mb →(10 years) →100Mb →(5 years) →1Gb
经验法则(A rule of thumb)
- 成本减少速度与密度增加速度成比例
技术阈值(Technology thresholds)
对设计有重大影响
- 实现技术在持续改进到阈值,就会使设计发生飞跃
- 例如:1980年代末,单芯片可集成百万只晶体管,使得一级Cache可以与CPU集成在一个芯片上。
性能趋势: 带宽改进优于时延
带宽/吞吐量 : 在给定时间完成的工作总量
时延/响应时间: 一个事件从开始到完成的时间
经验法则(Rule of thumb)
带宽增加速度与时延平方改进速度成比例
1.5 集成电路功耗的趋势
动态功率
开关晶体管产生的功耗
Powerdynamic=1/2∗Capacitive load∗Voltage2∗Frequency switchedPower_{dynamic} = 1/2 *Capacitive\ load * Voltage^2 * Frequency\ switched
Energydynamic=Capacitive load∗Voltage2Energy_{dynamic} = Capacitive\ load * Voltage^2
静态功率
晶体管在关闭时漏电产生的功耗
Powerstatic=current static∗VoltagePower_{static} = current\ static * Voltage
经验法则
电压减少10%
-
频率减少10%
-
功率减少30%
-
性能减少< 10%
单核与双核功耗/性能比较
| Frequency Reduction | Power Reduction | Performance Reduction | |
|---|---|---|---|
| A 15% Reduction In Voltage Yields | 15% | 45% | 10% |
SINGLE CORE 单核
- Area = 1
- Voltage = 1
- Freq = 1
- Power = 1
- Perf = 1
DUAL CORE 双核
- Area = 2
- Voltage = 0.85
- Freq = 0.85
- Power = 1
- Perf = ~1.8
对于多核,每瓦提供更多性能
功耗与面积成正比
单线程性能与面积增加倍数的一半成正比
多核有更高的功率利用率
1.6 成本的趋势
元器件成本是设计者需要考虑的一个方面
影响成本的主要因素
- Time:元器件价格随着时间而下降(实现技术没有实质性改进)。因为随着时间推移产出率不断增高。
- Volume (产量):提高意味着制造效率提高
- Commodification(商品):元器件供应商之间的竞争会降低成本
每个集成电路成本的计算
α是取决于制造工艺复杂性的一个参数,与掩膜的层数成正比。对于目前复杂的CMOS工艺来说,合适的估计是α=4。
单位面积缺陷数是衡量材料与工艺的一个指标,典型值为0.5~1/cm2。
2010年,设30cm晶圆成本是5500美元,
1个1.00cm2的芯片成本:13美元
1个2.25cm2的芯片成本:51美元
结论:芯片面积直接影响芯片成本。
推论:芯片面积增加到2倍,则成本增加到约4倍。
成本与价格
- 器件成本
- 直接成本:直接影响产品的成本
人力成本, 废料 (the leftover from yield), 和保修期内的保修费等
直接成本在器件成本上增加20%~40% - 毛利润(间接成本)
企业一般管理费直接分摊到一个产品中
研发(R&D),制造设备,市场销售 ,维护, 租场地, 经济成本, 税收等
研发费用一般占收入的4%~12%
1.7 可靠性
可靠性定义
可靠性:广义上包括可靠性、安全性和可用性
(Dependability is a deliberately broad term to encompass many facets including reliability, security and availability.)
计算机系统的可靠性:用于表示系统提供给用户服务的质量,这里“可靠性( Dependability )”可用“信任(reliance)”代替。例如:一个笔记本电脑能用多久才出现故障?
可靠性计算
模块可靠性:从模块可用到出现故障的持续服务度量
- MTTF(mean time to failure): 平均无故障时间
- MTTR(mean time to repair): 平均修复时间
- FIT (故障率):1/MTTF
- MTBF:平均故障间隔时间 = MTTF + MTTR
模块可用性
模块可用性=MTTFMTTF+MTTR=MTTFMTBF模块可用性=\frac{MTTF}{MTTF + MTTR}=\frac{MTTF}{MTBF}
★提高可靠性的方法
冗余(Redundancy):
- 时间冗余: 重复操作直到无错
- 资源冗余: 配置另外的相同部件,有错时用于替代出错部件
1.8 测量、报告和总结计算机性能
★计算机性能的定义
吞吐率和响应时间
- 响应时间 - Response time
从提出请求到被执行的时间
针对单任务 - 吞吐率 - Throughput
单位时间内所做的工作
针对数据中心
提高响应时间和吞吐率的方法
- 用更快的处理器
- 用更多的处理器
MIPS 每秒指令数
另一个工业性能指标:MIPS - Millions of Instructions per Second
用相同的指令集比较两台机器 (A, B), MIPS一般是公平的;
MIPS可能是一个“无意义的性能指标”:
例子:
机器A有一条计算平方根的特殊指令,它执行需要100个时钟周期(设每个时钟周期1us)
机器B 没有这种指令 ---它计算平方根用软件方式即用加、乘、移位简单指令(一般执行需要1个时钟周期,设时钟周期1us)编程实现
机器 A: 1/100*106条指令/s = 0.01 MIPS
机器 B: 1*106条指令/s = 1 MIPS
CPU时间
CPU时间(CPU time):执行某一任务在CPU的花费的时间
时钟周期(Clock cycle)
CPU时间的计算
CPU时间 = CPU时钟周期数 × 时钟周期 = CPU时钟周期数 / 时钟频率
改进性能的方法
- 减少时钟周期数;
- 增加时钟频率。
指令性能 CPI
CPI(Clock cycle per instruction):表示执行每条指令所需的平均时钟周期数,是一个程序全部指令所用时钟周期数的平均值。
CPU时钟周期数 = 程序指令数×CPI
CPU时间 = 程序指令数×CPI×时钟周期=(程序指令数×CPI)/时钟频率
比较计算机性能
比较2台计算机性能时应考虑三个因素:
- 指令数:使用仿真器软件工具可测量出。
- CPI:与计算机各种设计细节密切相关,以及应用程序中不同类型指令所占的比例。
- 时钟频率 (硬件手册通常直接给出)
记住:
- 只用一种因素(如指令数)去评价性能是危险的。当比较两台计算机时,必须考虑全部三个因素。
- 唯一能被完全可靠测量的计算机性能指标是时间。
- 对指令集减少指令数的改进可能降低时钟周期或提高CPI,抵消了改进的效果。
- 指令数最少的代码其执行速度未必是最快的。
理解程序性能
程序:
- 算法:影响指令数、CPI
- 编程语言:影响指令数、CPI
- 编译程序:影响指令数、CPI
- ISA:影响指令数、CPI、时钟频率
基准测试程序(benchmarks)
基准测试程序可以针对一个系统的某些方面:floating point & integer 运算, memory system, I/O, OS。
不同类型的基准测试程序(benchmarks):
- 核心测试程序:从实际的程序中抽取少量较短的关键程序框架代码构成,这些代码的执行直接影响程序总的执行时间。如Livermore Loops和Linpack。
- 小测试程序:代码在10~100行,具有特定目的测试程序。如Sieve of Erastosthenes, Puzzle和Quieksort。
- 综合测试程序:对一大套应用程序中的操作和操作数的执行频率进行统计,得到平均执行频率,再按这个频率编制的模拟测试程序。如Whetstone和Dhrystone。
- 基准测试程序集:选择一组有代表性的不同类型应用程序,集中起来构成基准测试程序集,以有效评测计算机处理各种应用的性能。这种测试程序集合也称为测试程序组件(benchmark suites)。如SPEC,TPC。
通用基准测试程序可能是一个误导,因为硬件和编译器的供应商或许会只针对这些基准测试程序优化他们的设计。
最好的基准测试程序就是实际应用程序,因为它们反应了终端用户的需要。
系统结构可能对某些应用性能好,而对其他应用性能差。
编译通过利用结构的特点可以提高性能。应用程序特定的编译器优化已越来越流行。
SPEC
SPEC - The System Performance Evaluation Cooperative 一个开放性的非赢利组织,已成为最成功的性能测试标准化组织。
SPECratio
为了简化测试结果,SPEC使用了一个单一数字来归纳所有基准程序的测试结果,具体方法是:将被测计算机的执行时间标准化,即将被测计算机的执行时间除以一个参考处理器的执行时间,结果成为SPECratio。该值越大,表示性能越快,然后再取这些SPECratio的几何平均值。
总结计算机性能
计算机性能通常用峰值性能(Peak performance)和持续性能(Sustained performance)来评价。
- 峰值性能是指在理想情况下计算机系统可获得的最高理论性能,它不能反映出系统的实际性能。
- 实际性能又称持续性能,其值只有峰值性能的5%~35%,这是因为实际程序运行时会受到硬件结构、操作系统、算法设计和编程等因素的影响。
1.9 计算机设计的量化原则
利用并行性(Parallelism)
改善计算机性能最重要的方法
并行性的层次:
- 线程级或任务级:使用多个处理器,GPU
- 指令级:流水线、超标量、OOO等
- 操作级:并行加法器、组相联cache、功能部件流水线
局部性原理(Principle of Locality)
程序特性:趋向于重用最近用过的数据和指令。
经验法则:一个程序90% 的执行时间仅仅执行 其10% 的代码。
两种局部性原理:
- 时间局部性(Temporal locality) :最近访问过的项很可能近期将被访问。
- 空间局部性(Spatial locality) :地址相近单元的内容趋向于在一定时间内被相近访问。
注重经常性事件(The Common Case)
计算机设计最重要和普遍原则:
- 功耗、资源分配、性能、可靠性
- 经验法则:simple is fast.
- 简化常用事件,速度能够更快
例如:CPU中两个数相加,结果可能产生溢出,溢出情况较少,不溢出才是常见情况。因此,可以通过简化不溢出相加的操作来提高机器的性能。
例如:处理器中的取指和译码单元要比乘法单元使用得更加频繁,因此,应注重这两个单元的性能设计。
量化这个原则的基本定律:Amdahl’s Law
采用更快的执行方式后所获得的系统性能提高,与这种执行方式的使用频率或占总执行时间的比例有关。
★Amdahl 定律
定律
Amdahl 定律可以阐述为:系统中某一部件由于采用某种更快的执行方式后所获得系统性能的提高,与这种执行方式的使用频率或占总执行时间的比例有关。
加速比
Amdahl定律定义了一台计算机系统采用某种改进措施所取得的加速比。
加速比与两个因素有关
Amdahl定律中,加速比与两个因素有关:
a.在原有的计算机上,能被改进的部分在总执行时间中所占的比例,即
这个值称为改进比例,记为Fe,它总小于等于1。
例如,如果一个任务在原来机器上的执行时间为60s,其中20s的执行时间可以使用改进措施,那么Fe就是20/60=1/3。
b. 改进部分采用改进措施后,相比没有采用改进措施前性能提高的倍数,即
这个值称为改进加速比,记为Se,它总大于1。
例如,在原来的条件下程序的某一部分执行时间为5s,而改进后这一部分只需要2s,那么Se是5/2。
结论
我们可以得出如下结论:
1)改进后整个任务的执行时间Tn为:Tn=T0(1−Fe+FeSe)T_n=T_0\left(1-F_e+\frac{F_e}{S_e}\right),其中T0为改进前的整个任务的执行时间。
2)改进后整个系统的加速比Sn为:Sn=T0Tn=11−Fe+FeSeS_n=\frac{T_0}{T_n}=\frac{1}{1-F_e+\frac{F_e}{S_e}}。
分析
上面式子中(1-Fe)表示不可改进部分,我们做以下分析:
- 当Fe为0,即没有可改进部分时,Sn为1;
- 当Fe为1,即全可改进部分时,Sn=Se,所以性能的提高幅度等于改进后性能提高的倍数。若假设改进前是单核,改进后是4核,且Fe=1,则Sn=4.
问题是,上面是理想情况,考虑Fe=3/4. 即源程序的3/4的部分都可以并行,只有1/4的程序必须串行。那么在这种情况Sn最多为多少?
Sn=11/4+3/4Se<4S_n=\frac{1}{1/4+\frac{3/4}{S_e}}<4
可以看出无论采用几核处理器,加速比不会超过4。
- 当Se→∞S_e\rightarrow\infty时,则Sn=11−FeS_n = \frac{1} {1-F_e},因此,可获取性能改善极限值受Fe值的约束。
CPU 性能公式
处理器性能的“铁律”:要直接测量使用新改进措施的改进时间是困难的。
CPU 性能公式
CPU时间 = CPU时钟周期数 × 时钟周期 = CPU时钟周期数 / 时钟频率
计算CPU 时间
CPU time = Instruction count * CPI * Clock cycle time
相关因素
CPU 性能取决于3个特征:
- clock cycle (or rate) ( CCT )
- clock cycles per instruction ( CPI )
- instruction count ( IC )
一个困难:只改变一个特征而不影响其他特征是很困难的
1.10 综合:性能和性价比
桌面系统的性能和性价比
价格差异大的因素
- 不同级别的可扩展性
- 更便宜的磁盘和存储器
- 不同CPU的价格
- 软件差异
- 低端系统在风扇、电源、支持芯片套件方面,使用PC商品化的配件
- 商品化
谬误与陷阱
陷阱:在改进计算机的某个方面时期望总性能的提高与改进大小成正比
Amdahl定律:系统中对某一部件采用更快执行方式所能获得的系统性能改进程度,取决于这种执行方式被使用的频率,或所占总执行时间的比例。
推论:加速最常见的事件。
谬误:利用率低的计算机功耗低
陷阱:用性能公式的一个子集去度量性能。简单地只使用时钟频率、每秒钟执行的指令数或CPI之一去评价性能。
易犯的错误(Pitfall):
- 忽视Amdahl’s Law.
- 单点故障
- 故障检测会降低可用性
谬误:多处理器是万能钥匙
- ILP实现到达极限,2005生产一芯多核
- 多核简化并行编程,生产简单
- 硬件提升程序运行速度的时代结束了,需要程序员提高自己程序的并行度。
谬误(Fallacy)
- Benchmarks 会一直有效
- 磁盘的额定平均故障实际是1 200 000小时约140年,磁盘使用时永不失效 。
- 峰值性能可以体现实际性能
本章小结
硬件/软件的接口:指令集体系结构。
执行时间是唯一有效的计算机性能度量方法。
计算机组成中的2个重要思想:
- 程序的并行执行,典型方法是采用多处理器
- 开发利用程序执行的局部性特征(Cache)