3. 什么是计算机的性能?

“原来的电脑性能跟不上了”、“这个程序性能需要优化一下”。那什么是计算机的性能呢?学习和研究计算机组成原理,就是在理解计算机是怎么运作的,以及为什么要这么运作。“为什么”所要解决的事情,很多时候就是提升“性能”。

1. 什么是性能?

两个指标用来衡量计算机的标准

  1. 响应时间(Response Time),也称执行时间(Execution Time)
    响应时间是指执行一个程序需要花费的时间。响应时间越小也就意味着花的时间越少,计算机的性能自然性能就越好。
  2. 吞吐率(Throughput),也称带宽(Bandwidth)
    吞吐率是在一定的时间范围内,能够处理的数据或者执行的程序指令数量。吞吐率越大,计算机的性能也越好。这也就解释了为什么要用8核、16核的CPU了。

2. 如何提升性能?

  1. 提升吞吐率的方法 --> 初步认为:较容易, “大力出奇迹”,多堆硬件。(略)
  2. 降低响应时间的方法 --> 难!10年前就处于“挤牙膏”模式了。
    如果 性 能 = 1 响 应 时 间 性能=\frac{1}{响应时间} =1
    同样一个程序,在 Intel 最新的 CPU Coffee Lake 上,需要 30s 就能运行完成。而在 5 年前 CPU Sandy Bridge 上,需要 1min 才能完成。那么Coffee Lake 的性能是 1/30,Sandy Bridge 的性能是 1/60,两个的性能比为 2。于是,就说Coffee Lake 的性能是 Sandy Bridge 的 2 倍。
    世界各大CPU和服务器都组织了一个叫作 SPEC(Standard Performance Evaluation Corporation)的第三方机构,专门用来指定各种“跑分”的规则。
    在这里插入图片描述
    SPEC 提供的 CPU 基准测试程序,就好像 每届CPU 的“高考”。通过数十个不同的计算程序,对于 CPU 的性能给出一个最终评分。这些程序丰富多彩,有编译器、解释器、视频压缩、人工智能国际象棋等等,涵盖了方方面面的应用场景。这是SPEC跑分连接

3. 计算机的计时单位:CPU时钟

用时间来衡量计算机性能是显而易见的,但存在两个问题:
a) 时间不准
实例:自行编写的同一个程序,每一次运行的时间会是不一样的,有时45ms,有时53ms。为什么呢?
答:运行时间的计算用Wall Clock Time或Elapsed Time,是程序运行结束时间减去程序开始运行的时间。但是,
1)计算机会同时运行许多程序,CPU不停地在各个程序之间进行切换。在这些走掉的时间中,很可能CPU切换运行其他程序了。
2)有些程序在运行时需要从网络、硬盘读取数据,再给内存和CPU,需要花费时间。
因此,准确统计程序运行时间,比较不同计算机的性能,需要减去上述2种时间。

应用:Linux操作系统中运行如下命令,可以统计Wall Clock Time

$ time seq 1000000 | wc -l
1000000


real  0m0.101s
user  0m0.031s
sys   0m0.016s

说明:
real time:即Wall Clock Time(墙上时间),指进程从开始到结束所花费的时间,包括其他进程使用的时间片和进程阻塞的时间(比如等待I/O完成)。
user time:即用户CPU时间,进程执行用户态代码(核心之外)所使用的时间。执行此进程所消耗的实际CPU时间,其他进程和此进程阻塞的时间并不包括在内。
sys time:即系统CPU时间,进程在内核态消耗的CPU时间,是在内核执行系统调用所使用的CPU时间。
CPU执行时间(即CPU Time) = user time + sys time
CPU Time=user time+sys time=0.031+0.016=0.047s,可见运行程序的时间中只有不到一半的时间用在了CPU计算上。
在这里插入图片描述
同样的程序换一台Linux计算机结果如下:

[root@ecs-ffe4 ~]# time seq 1000000 | wc -l
1000000

real	0m0.011s
user	0m0.016s
sys	    0m0.004s

发现CPU Time=user time+sys time=0.016+0.004=0.020s > real time。这是为什么呢?
答:这是一台多核CPU或多CPU计算机,它将seq和wc两条命令分别给两个CPU进行运行。user time和sys time是两个CPU运行时间的相加的结果。而real time是运行过程中实际的时间花销,极端情况user time+sys time会是real time的2倍。
b)即使确定了CPU时间,也不一定能比较出两个程序的性能
例如,CPU的满载运行 VS. CPU的降频运行 VS. CPU的超频运行。此外,程序运行还会受主板、内存等硬件的影响。
因此,需要把程序的CPU时间拆解为CPU时钟周期数(CPU Cycles)时钟周期时间(Clock Cycle)
程 序 的 C P U 执 行 时 间 = C P U 时 钟 周 期 数 × 时 钟 周 期 时 间 程序的 CPU 执行时间 =CPU 时钟周期数×时钟周期时间 CPU=CPU×

4. 再看如何提升计算机性能?

  1. 时钟周期(即时钟周期时间,Clock Cycle)
    实例:某计算机使用的CPU是Intel Core-i7-7700HQ 2.8GHz。这里的2.8GHz被称为计算机的主频(Frequency/Clock Rate)。
    理解:CPU可以在1s时间内执行2.8G条简单指令。是CPU的“钟表”,是CPU能够识别的最小时间间隔,就像墙上的挂钟能够识别的最小时间单位为秒。
    时钟周期的产生部件是晶体振荡器(Oscillator Crystal),简称晶振。计算机中有晶体振荡器,电子石英表中也有晶振。晶振是计算机CPU使用的电子表。晶振的一个“滴答”就是时钟周期。2.8GHz CPU的时钟周期为1/2.8G=0.36ns。
    结论:主频越高,CPU的计算性能越快。
    有时候说的“超频”其实就是把CPU的时钟周期调快,加速CPU的计算。当然这个快是由散热、使用寿命代价的。
    根据 程 序 的 C P U 执 行 时 间 = C P U 时 钟 周 期 数 × 时 钟 周 期 时 间 程序的 CPU 执行时间 =CPU 时钟周期数×时钟周期时间 CPU=CPU×
  2. 方法:
    方法一. 缩短时钟周期时间 --> 提升主频,即换性能更好的CPU,工程上很难改变。
    方法二. 减少CPU时钟周期数。将CPU时钟周期数分解为:CPU时钟周期数 = 指令数×每条指令的平均时钟周期数(Cycles Per Instruction,简称 CPI)。
    因此, 程 序 的 C P U 执 行 时 间 = 指 令 数 × C P I × 时 钟 周 期 时 间 程序的 CPU 执行时间 =指令数×CPI×时钟周期时间 CPU=×CPI×
    提升计算机性能归结为:
    1) 时钟周期时间,即计算机主频。例如80386 CPU主频为33MHz,而现在的Core-i7 CPU主频为2.8GHz,提升了将近100倍。
    2)CPI,每条指令的平均时钟周期数。例如流水线技术(Pipeline)可以减少CPI,对CPI进行优化是计算机组成的重要内容之一。
    3)指令数,指执行特定程序需要多少条指令,用哪些指令。这主要依靠编译器解决。
    把自己想象成CPU,自己编写程序时如何提高速度呢?主频好像打字速度、CPI好像熟悉快捷键的程度,指令数好像程序设计的合理性。

5. 计算机性能指标实例

例题1. 某计算机主频为1GHz,运行的目标代码有2x105条指令,分为4类,各类指令所占比例和各自CPI如下表所示。

指令类型CPI指令混合占比
算术和逻辑160%
Load/Store218%
转移412%
Cache缺失访存810%

求:
1. CPI
2. MIPS
3. 该程序的CPU时间
解:
CPI=1x60%+2x18%+4x12%+8x10%=2.24
MIPS=f/CPI=1GHz/2.24=1000MHz/.2.24=446
CPU时间=2x105xCPI/f = 2x105x2.24/(1x109)=4.48x10-4

CPU时间=指令数量/(MIPSx106)
例题2. 假定基准程序A 在某计算机上的运行时间为100s、其中90s为CPU时间、 其余为I/O时间。若CPU速度提高50%, I/O速度不变, 则运行基准程序A所耗费的时间是多少?
解:运行时间=CPU时间+I/O
100s = 90s+10s
T=90/(1+50%) + 10 = 70s
例题3. 程序P在机器M上的执行时间是 20s, 编译优化后、 P 执行的指令数减少到原来的70%、 而CPI增加到原来的1.2倍,则P在M上的执行时间是多少?
解: 设CPU时钟频率为f(主频),原来程序P有x条指令
则原来CPI=20f/x
精简指令后,程序P有0.7x条指令,CPI=1.2CPI=24f/x
因此,P在M上的执行时间为:(指令数xCPI)/f=(0.7x CPI)/f = 16.8 s
例题4. 假定计算机M1和M2具有相同的指令集体系结构(ISA), 主频分别为1.5GHz和1.2GHz。在M1和M2上运行某基准程序P、平均CPI分别为2和1, 则程序P在Ml和M2 上运行时间的比值是多少?
解: 运行时间=(指令数xCPI)/主频
tM1=指令数x2/1.5,tM2=指令数x1/1.2
所以, tM1:tM2=1.6
例题5. 主存储器容量为64Kx32,可以得知: 216=64K,即地址总线(AB)宽度为16 bits。32表示数据总线(DB)宽度为32。进一步可知MAR为16位,PC为16位,MDR为32位。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶老师讲大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值