星川之下皆萤火尘埃
我独行在人潮你天真而待
相遇若是借丹青着色
青原上 绯樱如海
——银临《青原樱》
世界上第一台通用电子计算机“埃尼阿克”于1946年诞生于美国宾夕法尼亚大学。
计算机性能的发展源于
计算机技术发展的历史:
这个类别是单处理器;
可以使用指令级并行,如流水线、动态调度、超标量。
同一指令操纵多条数据流,由不同处理器,对多个数据项进行并行数据处理;
每个数据处理器可有自己的数据存储器,但是只有一个指令存储器和控制器;
例:向量体系结构,GPU。
每个处理器都自己取指令,并对自己的数据进行处理;
任务级并行;
紧密耦合的MIMD结构—线程级并行;
松散耦合MIMD结构—集群。
目前为止,没有此种类型的商用机;
脉动阵列。
MISD个人理解就类似于多路选择器。
狭义的定义(Amdahl的定义):
广义的定义 (《计算机体系结构-量化研究方法》中的定义):
包括计算机设计所有三个方面:
分类:
现在几乎所有的ISA都划分为通用寄存器体系结构中;
两种主流版本:
存储器寻址:
寻址模式:
操作数类型和大小
指令类型:
指令格式:
不可或缺的实现技术
性能趋势:带宽与延迟
带宽(吞吐量):
延迟(响应时间):
显然,在这些技术的发展过程中,带宽的改进要明显优于延迟。一个简单的经验法则是:带宽的增长速度至少是延迟改进速度的平方。
晶体管(Transistors)性能与连线(wire)的发展
集成电路的制造工艺是以特征尺寸来衡量的
功率和能耗:系统观点
微处理器内部的能耗和功率
性能指标
响应时间/执行时间 – 用户关心的
吞吐量 – 仓库级计算机的操作人员关心的
加速比
机器X比机器Y快, 是什么意思? – 执行时间是稳定、可靠的性能度量
执行时间
墙上时间: 包括所有的系统开销
CPU时间: only computation time
基准测试
程序内核 :实际应用程序中的短小、关键部分;
玩具程序:为了完成编程入门作业而编写的小程序,通常不超过100行,如快排程序;
合成基准测试程序:为了匹配实际应用程序的特征和行为编写的虚拟程序;
基准测试套件:衡量处理器处理各种应用程序的性能。优势在于任何一个基准测试的弱点都会因为其他基准测试的存在而变小。最常用的是SPEC。
并行性的含义:计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。即只要在时间上相互重叠,就存在并行性。
提高并行性的三种途径:
单处理机中 – 部件功能专用化(流水线)
多处理机中 – 处理机专用化
单处理机中 – 重复设置功能部件
多处理机中 – 重复设置处理机
程序执行时所访问的存储器地址分布不是随机的,而是相对地簇聚。
加速比 – 衡量系统的性能改进了多少(通常>1)
加速比 = 系统功 能 改进后 系统功 能 改进前 = 1 总执行时 间 改进后 1 总执行时 间 改进前 = 总执行时 间 改进前 总执行时 间 改进后 加速比=\frac{系统功能_{改进后}}{系统功能_{改进前}} =\frac{\frac{1}{总执行时间_{改进后}} }{\frac{1}{总执行时间_{改进前}} }=\frac{总执行时间_{改进前}}{总执行时间_{改进后}} 加速比=系统功能改进前系统功能改进后=总执行时间改进前1总执行时间改进后1=总执行时间改进后总执行时间改进前
换个方式来看,
总执行时 间 改进后 = 不可改进部分的执行时间 + 可改进部分改进后执行时间 = ( 1 − 可改进比例 ) × 总执行时 间 改进前 + 可改进比例 × 总执行时 间 执行前 部件加速比 = 总执行时 间 改进前 × [ ( 1 − 可改进比例 ) + 可改进比例 部件加速比 ] \begin{aligned} 总执行时间_{改进后} & = 不可改进部分的执行时间+可改进部分改进后执行时间\\ & = (1-可改进比例)\times 总执行时间_{改进前}+\frac{可改进比例\times 总执行时间_{执行前}}{部件加速比}\\ & = 总执行时间_{改进前}\times [(1-可改进比例)+\frac{可改进比例}{部件加速比} ] \end{aligned} 总执行时间改进后=不可改进部分的执行时间+可改进部分改进后执行时间=(1−可改进比例)×总执行时间改进前+部件加速比可改进比例×总执行时间执行前=总执行时间改进前×[(1−可改进比例)+部件加速比可改进比例]
因此,
加速比 = 1 ( 1 − 可改进比例 ) + 可改进比例 部件加速比 加速比 = \frac{1}{(1-可改进比例)+\frac{可改进比例}{部件加速比} } 加速比=(1−可改进比例)+部件加速比可改进比例1
Amdahl定律表明:加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统中总执行时间的百分比。
Amdahl定律:一种性能改进的递减规则
公式拓展:假设Si为第i种部件的加速比,Pi为第i种部件执行时间占总执行时间中的比例。
则
加速比 = 1 ( 1 − 可改进比例 ) + 可改进比例 部件加速比 = 1 ( 1 − ∑ P i ) + ∑ P i S i 加速比 = \frac{1}{(1-可改进比例)+\frac{可改进比例}{部件加速比} }=\frac{1}{(1-\sum P_i)+\sum \frac{P_i}{S_i} } 加速比=(1−可改进比例)+部件加速比可改进比例1=(1−∑Pi)+∑SiPi1
执行一个程序所需的CPU时间:
C P U 时间 = I C × C P I × 时钟周期时间 CPU时间=IC\times CPI\times 时钟周期时间 CPU时间=IC×CPI×时钟周期时间
IC为指令条数,CPI为每条指令执行的平均时钟周期数。
其中,IC由编译技术和指令集结构决定,CPI由指令集结构和计算机组成决定,时钟周期时间由计算机组成和硬件实现技术决定。
在指令集结构中,CISC→RISC:IC上升,CPI下降。
CPI时间公式拓展
假设:计算机系统有n种指令,
C P I i :第 i 种指令的处理时间(周期数) I C i :在程序中第 i 种指令出现的次数 \begin{array}{c} CPI_i :第i种指令的处理时间(周期数)\\ IC_i :在程序中第i种指令出现的次数 \end{array} CPIi:第i种指令的处理时间(周期数)ICi:在程序中第i种指令出现的次数
则
C P U 时间 = 执行指令所需的时钟周期数 × 时钟周期时间 = ∑ i = 1 n ( C P I i × I C i ) × 时钟周期时间 \begin{aligned} CPU时间 & = 执行指令所需的时钟周期数\times 时钟周期时间\\ & = \sum_{i = 1}^{n}(CPI_i\times IC_i)\times 时钟周期时间 \end{aligned} CPU时间=执行指令所需的时钟周期数×时钟周期时间=i=1∑n(CPIi×ICi)×时钟周期时间
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)
其中, I C i I C 反映了第 i 种指令在程序中所占的比例。 其中,\frac{IC_i}{IC}反映了第i种指令在程序中所占的比例。 其中,ICICi反映了第i种指令在程序中所占的比例。
单芯片上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。
晶体管面积的缩小使得其所消耗的电压以及电流会以差不多相同的比例缩小。也就是说,如果晶体管的大小减半,该晶体管的静态功耗将会降至四分之一(电压电流同时减半)。
1.世界第一台通用电子计算机诞生于()年。
2.计算机性能的发展源于()的发展和()的发展。
3.区分硬件和软件的界限的是()。
4.特征尺寸下降后,晶体管性能以()提升;晶体管密度将以()提升。
1.1946
2.半导体技术 计算机体系结构
3.指令集结构(ISA)
4.线性 平方曲线
1.硬件复兴结束的原因和新的发展方向?
原因:功耗,ILP开发受限。
发展方向:数据级并行(DLP),线程级并行(TLP)。
2.Flynn分类法,具体举例?
SISD,如流水线,动态调度,超标量。
SIMD,如向量体系结构,GPU。
MIMD,如线程级并行,集群。
MISD,如脉动阵列。
3.计算机体系结构的定义?
狭义的定义:机器语言程序员所见到的计算机的属性,即概念性结构和功能特性。
广义的定义:包括计算机设计的所有三个方面:指令集结构,组成,硬件。
4.并行性的含义?
计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。即只要在时间上相互重叠,就存在并行性。
- 同时性:两个或两个以上的事件在同一时刻发生。
- 并发性:两个或两个以上的事件在同一时间间隔内发生。
5.提高并行性的三种途径。
- 时间重叠: 引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。
- 资源重复:引入空间因素,以数量取胜。通过重复设置硬件资源,大幅度地提高计算机系统的性能。
- 资源共享:这是一种软件方法,它使多个任务按一定时间顺序轮流使用同一套硬件设备
6.以下部件属于哪种方式提高并行性?
(1)流水线(2)专用处理机(3)异构型多处理机(4)同构型多处理机
(5)分时系统(6)分布式系统(7)虚拟存储器(8)并行处理机
时间重叠:(1)(2)(3)
资源重复:(4)(8)
资源共享:(5)(6)(7)
7.量化原理中“重点关注常见情形”概念,举例。
对经常发生的情况采用优化方法的原则进行选择,以得到更多的总体上的改进。优化是指分配更多的资源、达到更高的性能或者分配更多的电能等。
例如:相对溢出,不溢出是经常性事件。针对不溢出的情况进行性能设计,无需花过多的时间和精力在解决溢出上;处理器的取值、译码比乘法器用的更加频繁,优先优化取指令和译码部件。
8.简述摩尔定律的内容。
单芯片上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。
9.简述Dennard定律的内容。
晶体管面积的缩小使得其所消耗的电压以及电流会以差不多相同的比例缩小。也就是说,如果晶体管的大小减半,该晶体管的静态功耗将会降至四分之一(电压电流同时减半)。
衡量系统的性能改进了多少使用加速比。
加速比 = 1 ( 1 − 可改进比例 ) + 可改进比例 部件加速比 = 1 ( 1 − 40 % ) + 40 % 20 = 1.613 加速比 = \frac{1}{(1-可改进比例)+\frac{可改进比例}{部件加速比} } =\frac{1}{(1-40\% )+\frac{40\%}{20} }=1.613 加速比=(1−可改进比例)+部件加速比可改进比例1=(1−40%)+2040%1=1.613
C P I A = 2 × 20 % + 1 × 80 % = 1.2 CPI_A = 2\times 20\%+1\times 80\% = 1.2 CPIA=2×20%+1×80%=1.2
C P U 时 间 A = I C × C P I A × 时钟周期时 间 A = 1.2 I C × 时钟周期时 间 A CPU时间_A=IC\times CPI_A\times 时钟周期时间_A=1.2IC\times 时钟周期时间_A CPU时间A=IC×CPIA×时钟周期时间A=1.2IC×时钟周期时间A
由于CPUB不包含比较指令,因此CPUB指令数的CPUA的80%,且CPUB中分支指令所占比例为20%/(1-20%)=25%.
C P I B = 2 × 25 % + 1 × 75 % = 1.25 CPI_B = 2\times 25\%+1\times 75\% = 1.25 CPIB=2×25%+1×75%=1.25
C P U 时 间 B = I C B × C P I B × 时钟周期时 间 B = ( I C × 0.8 ) × 1.25 × ( 1.1 × 时钟周期时 间 A ) = 1.1 I C × 时钟周期时 间 A \begin{align*} CPU时间_B & = IC_B\times CPI_B\times 时钟周期时间_B\\ & = (IC\times 0.8)\times 1.25\times (1.1\times 时钟周期时间_A)\\ & = 1.1IC\times 时钟周期时间_A \end{align*} CPU时间B=ICB×CPIB×时钟周期时间B=(IC×0.8)×1.25×(1.1×时钟周期时间A)=1.1IC×时钟周期时间A
综上所述,CPUB更快。
①升级FPSQR硬件
加速 比 1 = 1 ( 1 − 20 % ) × 20 % 10 = 1.22 加速比_1=\frac{1}{(1-20\%)\times \frac{20\%}{10} }=1.22 加速比1=(1−20%)×1020%1=1.22
②所有FP指令速度提高1.6倍
加速 比 2 = 1 ( 1 − 50 % ) × 50 % 1.6 = 1.23 加速比_2=\frac{1}{(1-50\%)\times \frac{50\%}{1.6} }=1.23 加速比2=(1−50%)×1.650%1=1.23
第二种方案稍好一些。
假定有两种设计方案,一种方案将FPSQR的CPI降至2,一种是把所有FP操作的平均CPI降至2.5。请对比这两种设计方案。
需要注意的是,FPSQR操作是在FP操作之中的,他们的CPI不是相互独立的。因此,求方案1的CPI不能直接使用性能公式,而是要从原CPI的基础上减去改进的部分。方案2则使用性能公式或者减去改进的部分均可。
未改进前: C P I 0 = 25 % × 4 + 75 % × 1.33 = 1.9975 方案 1 : C P I 1 = C P I 0 − 2 % × ( C P I 旧 F P S Q R − C P I 新 F P S Q R ) = 1.9975 − 2 % × ( 20 − 2 ) = 1.6375 方案 2 : C P I 2 = C P I 0 − 25 % × ( C P I 旧 F P − C P I 新 F P ) = 1.9975 − 25 % × ( 4 − 2.5 ) = 1.6225 \begin{array}{c} 未改进前:CPI_0 = 25\%\times 4+75\%\times 1.33 = 1.9975\\ 方案1:CPI_1 = CPI_0-2\%\times (CPI_{旧FPSQR}-CPI_{新FPSQR})\\ =1.9975-2\%\times (20-2)=1.6375\\ 方案2:CPI_2 = CPI_0-25\%\times (CPI_{旧FP}-CPI_{新FP})\\ =1.9975-25\%\times (4-2.5)=1.6225\\ \end{array} 未改进前:CPI0=25%×4+75%×1.33=1.9975方案1:CPI1=CPI0−2%×(CPI旧FPSQR−CPI新FPSQR)=1.9975−2%×(20−2)=1.6375方案2:CPI2=CPI0−25%×(CPI旧FP−CPI新FP)=1.9975−25%×(4−2.5)=1.6225
加速 比 1 = I C × C P I 0 × 时钟周期时间 I C × C P I 1 × 时钟周期时间 = C P I 0 C P I 1 = 1.22 加速比_1=\frac{IC\times CPI_0\times 时钟周期时间}{IC\times CPI_1\times 时钟周期时间} =\frac{CPI_0}{CPI_1}=1.22 加速比1=IC×CPI1×时钟周期时间IC×CPI0×时钟周期时间=CPI1CPI0=1.22
加速 比 2 = I C × C P I 0 × 时钟周期时间 I C × C P I 2 × 时钟周期时间 = C P I 0 C P I 2 = 1.23 加速比_2=\frac{IC\times CPI_0\times 时钟周期时间}{IC\times CPI_2\times 时钟周期时间} =\frac{CPI_0}{CPI_2}=1.23 加速比2=IC×CPI2×时钟周期时间IC×CPI0×时钟周期时间=CPI2CPI0=1.23
方案2稍好一些。
指令类型 | 指令执行数量 | 平均时钟周期数 |
---|---|---|
整数 | 45000 | 1 |
数据传送 | 75000 | 2 |
浮点 | 8000 | 4 |
分支 | 1500 | 2 |
求该计算机的有效CPI和程序执行时间。
MHz单位与之对应。
C P I = 45000 × 1 + 75000 × 2 + 8000 × 4 + 1500 × 2 129500 = 1.776 CPI=\frac{45000\times 1+75000\times 2+8000\times 4+1500\times 2}{129500}=1.776 CPI=12950045000×1+75000×2+8000×4+1500×2=1.776
程序执行时间 = I C × C P I × 1 时钟频率 = 129500 × 1.776 × 1 400 = 575 s 程序执行时间=IC\times CPI\times \frac{1}{时钟频率}=129500\times 1.776\times \frac{1}{400}=575s 程序执行时间=IC×CPI×时钟频率1=129500×1.776×4001=575s
(1)
系统加速比 = 1 ( 1 − 可改进比 例 1 − 可改进比 例 2 − 可改进比 例 3 ) + 可改进比 例 1 部件加速比 1 + 可改进比 例 2 部件加速 比 2 + 可改进比 例 3 部件加速 比 3 = 10 系统加速比=\frac{1}{(1-可改进比例_1-可改进比例_2-可改进比例_3)+\frac{可改进比例_1}{部件加速比1}+\frac{可改进比例_2}{部件加速比_2}+\frac{可改进比例_3}{部件加速比_3} }=10 系统加速比=(1−可改进比例1−可改进比例2−可改进比例3)+部件加速比1可改进比例1+部件加速比2可改进比例2+部件加速比3可改进比例31=10
设部件3的可改进比例为x,得方程
1 ( 0.4 − x ) + 0.01 + 0.015 + 0.1 x = 10 \frac{1}{(0.4-x)+0.01+0.015+0.1x}=10 (0.4−x)+0.01+0.015+0.1x1=10
解得x=36.1%,即部件3的可改进比例为36.1%.
(2)
设改进前的总执行时间为T,则不可加速部分的执行时间为0.3T.
系统加速比 = 1 ( 1 − 30 % − 30 % − 20 % ) + 30 % 30 + 30 % 20 + 20 % 10 = 4.08 系统加速比=\frac{1}{(1-30\%-30\%-20\%)+\frac{30\%}{30}+\frac{30\%}{20}+\frac{20\%}{10} } =4.08 系统加速比=(1−30%−30%−20%)+3030%+2030%+1020%1=4.08
总执行时 间 改进后 = T 4.08 = 0.245 T 总执行时间_{改进后}=\frac{T}{4.08}=0.245T 总执行时间改进后=4.08T=0.245T
因此
系统中不可加速部分的执行时间在总执行时间中占的比例 = 0.2 T 0.245 T = 81.6 % 系统中不可加速部分的执行时间在总执行时间中占的比例=\frac{0.2T}{0.245T}=81.6\% 系统中不可加速部分的执行时间在总执行时间中占的比例=0.245T0.2T=81.6%
操作类型 | 程序中的数量(百万条指令) | 改进前的执行时间(周期) | 改进后的执行时间(周期) |
---|---|---|---|
操作1 | 10 | 2 | 1 |
操作2 | 30 | 20 | 15 |
操作3 | 35 | 10 | 3 |
操作4 | 15 | 4 | 1 |
(1)改进后,各类操作的加速比分别是多少?
(2)4类操作均改进后,整个程序的加速比是多少?
(1)
部件加速 比 1 = 2 1 = 1 部件加速 比 2 = 20 15 = 1.33 部件加速 比 3 = 10 3 = 3.33 部件加速 比 4 = 4 1 = 4 \begin{aligned} 部件加速比_1 = \frac{2}{1} & = 1\\ 部件加速比_2 = \frac{20}{15} & = 1.33\\ 部件加速比_3 = \frac{10}{3} & = 3.33\\ 部件加速比_4 = \frac{4}{1} & = 4\\ \end{aligned} 部件加速比1=12部件加速比2=1520部件加速比3=310部件加速比4=14=1=1.33=3.33=4
(2)
注意有多个误区:
- 表格中程序的数量为“百万条指令”,误以为指令总数为100万条,从而便于计算指令所占比例。其实从题干“假设某应用程序中有4类操作”可知程序一共就只有这4种操作,总数90万条,不及100万。
- 正常会想到用Amdahl定律的部件加速比去做,但是可改进比例是可改进部分所占时间的比例,而不是指令条数所占的比例。
- 因此,使用表格原始数据计算前后的执行时间的比即可,这也是加速比公式的原始形式。
加速比 = 总执行时 间 改进前 总执行时 间 改进后 = 10 × 20 + 30 × 20 + 35 × 10 + 15 × 4 × 1 + 30 × 15 + 35 × 3 + 15 × 1 = 1.78 加速比=\frac{总执行时间_{改进前}}{总执行时间_{改进后}}=\frac{10\times 20+30\times 20+35\times 10+15\times 4}{\times 1+30\times 15+35\times 3+15\times 1}=1.78 加速比=总执行时间改进后总执行时间改进前=×1+30×15+35×3+15×110×20+30×20+35×10+15×4=1.78