转自:http://book.2cto.com/201301/12892.html
利用Amdahl定律,可以计算出通过改进计算机某一部分而能获得的性能增益。Amdahl定律表明,使用某种快速执行模式获得的性能改进受限于可使用此种快速执行方式的时间比例。
Amdahl定律定义了使用某一特定功能所获得的加速比(speedup)。加速比是什么?假定我们可以对某一计算机进行某种升级,在采用这一升级时可以提高计算机的性能。加速比的定义为:
加速比告诉我们,与原计算机相比,在经过升级的计算机上运行一个任务可以加快多少。
Amdahl定律为我们提供了一种快速方法,用来计算某一升级所得到的加速比,加速比取决于下面两个因素。
(1) 原计算机计算时间中可升级部分所占的比例。例如,一个程序的总执行时间为60秒,如果有20秒的执行时间可进行升级,那这个比例就是20/60。我们将这个值称为升级比例,它总是小于或等于1。
(2) 通过升级执行模式得到的改进,也就是说在为整个程序使用这一执行模式时,任务的运行速度会提高多少倍。这个值等于原模式的执行时间除以升级模式的执行时间。如果为程序的某一部分采用升级模式后需要2秒,而在原始模式中需要5秒,则提升值为5/2。我们将这个值称为升级加速比,它总是大于1。
原计算机采用升级模式后的执行时间等于该计算机未升级部分耗用的时间加上使用升级部分耗用的时间:
例题 | 假设我们希望升级一个用于提供Web服务的处理器。新处理器执行Web服务应用程序的计算速度是原处理器的10倍。假定原处理器有40%的时间忙于计算,60%的时间等待I/O,进行这一升级后,所得到的总加速比为多少? |
解答 | 升级比例=0.4、升级加速比=10、总加速比 ![]() |
Amdahl定律阐述了一个回报递减规律:如果仅改进一部分计算的性能,在增加改进时,所获得的加速比增量会逐渐减小。Amdahl定律有一个重要推论:若某一升级仅对一项任务的一部分适用,则该任务的总加速比不会超过一个数值,该数值即1减去未升级部分所占比例,再取其倒数。
在应用Amdahl定律时的一个常见错误是混淆“可升级部分在升级之前所占时间比例”和“升级部分在升级之后所占时间比例”。如果我们测量的不是计算中可以应用该升级的时间,而是测试应用升级之后的时间,结果就是错误的!
Amdahl定律可用来判断某项升级能使性能提高多少,以及如何分配资源来提高性价比。分配目标显然是:某一部分的升级资源应当与这一部分原来花费的时间成比例。Amdahl定律对于比较两种系统的整体系统性能尤其有用,不过也可用于比较两种处理器设计,如下面的例子所示。
例题 | 图形处理器中经常需要的一种转换是求平方根。浮点(FP)平方根的实现在性能方面有很大差异,特别是在为图形设计的处理器中,尤为明显。假设FP平方根(FPSQR)占用一项关键图形基准测试中20%的执行时间。有一项提议:升级FPSQR硬件,使这一运算速度提高到原来的10倍。另一项提议是让图形处理器中所有FP指令的运行速度提高到原来的1.6倍,FP指令占用该应用程序一半的执行时间。设计团队相信,他们使所有FP指令执行速度提高到1.6倍所需要的工作量与加快平方根运算的工作量相同。试比较这两种设计方案。 |
解答 | 可以通过计算加速比来对比两种方案: |
![]() | |
提高整体FP运算的性能要稍好一些,原因是它的使用频率较高。 |
例题 | 磁盘子系统故障率的计算为: |
![]() | |
因此,可改进的故障率比例就是5次/百万小时占整个系统23次/百万小时的比例, 即0.22。 | |
解答 | 可靠性的改进为: |
![]() | |
尽管一个模块的可靠性提高了4150倍之巨,但从系统的角度来看,这一改变所带来的好处虽然可测,但数值很小。 |
在上面的几个例子中,我们需要知道改进后的新版本所占比例;这些时间一般是很难直接测量的。在下一节,我们将看到另外一种比较方法:利用一个公式将CPU执行时间分解为三个独立分量。如果我们知道一种候选方案是如何影响这三个分量的,就可以判断它的整体性能。另外,通常可以构建一个模拟器,在实际设计硬件之前先测量这些分量。