本文主要是介绍深入理解计算机系统一--Amdahl定律 想正确算出你的系统提升了多少性能吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Amdahl定律
Gene Amdal,计算领域的早期先锋之一,对提升系统某一部分性能所带来的效果做出了简单却有见地的观察。
这个观察被称为Amdahl定律
。该定律的主要思想是,当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。
若系统执行某应用程序需要时间为T
old
。假设系统某部分执行所需时间与该时间的比例为a
,而该部分性能提升比例为k
。即该部分初始所需执行时间为aT
old
,现在所需时间为(aT
old
)/k
。因此,总的执行时间应为:
Tnew = (1 - a)Told + (aTold)/k = Told [(1 - a) + a/k]
由此,可以计算加速比 S = Told / Tnew 为
S = 1 / [(1 - a) + a/k]
例子
考虑这样一种情况,系统的某个部分初始耗时比例为60%(a = 0.6),其加速比例因子为3,也就是性能提升了300%。则我们可以获得的整体系统加速比为:
1 / [(1 - 0.6) + 0.6 / 3] = 1 / (0.4 + 0.2) = 1 / 0.6 = 1.66666666 约等于 1.67倍
可以看到虽然我们优化的部分提升了3倍性能,但是整体性能只提升了1.67倍。
虽然我们对系统的一个主要部分做了重大改进,但是获得的加速比却明显小于这部分的加速比。这就是Amdahl
定律的主要观点–要想显著加速整个系统,必须提升系统中相当大的部分的速度
。
练习题1.1
假设你要把土豆从爱达荷州送到明尼苏达州,全程2500公里。在限速范围内,你估计平均速度为100公里/小时,整个行程需要25个小时。
A:新闻说蒙大拿州取消了限速,这使得行程有1500公里速度可以达到150公里/小时,那么加速比是多少?
答:根据题目可知:
a = 1500 / 2500 = 0.6 k = 1.5 求S公式 S = 1 / [(1 - a) + a/k] 代入:S = 1 / (0.4 + 0.4)
S = 1 / 0.8
S = 1.25
加速比是 1.25倍
B:你可以购买道具,想让加速比达到1.67倍,那么你必须以多快的速度通过蒙大拿州?
答:根据题目可知:
S = 1.67 a = 0.6 求k1.67 = 1 / (0.4 + 0.6 / k)
1.67 * (0.4 + 0.6 / k) = 1
0.668 + 1.002 / k = 1
1.002 / k = 0.332
k = 1.002 / 0.332
k = 3.02
也就是蒙大拿州的速度必须达到 100 * 3.02 = 302公里/小时才行。
练习题1.2
公司说下个版本的软件性能将提升2倍。这个任务分配给你,你已经确认只有80%的系统可以进行改进,那么,这部分需要改进多少才可以达到要求?
根据题目可以知道:
a = 0.8, S = 2,求k公式 S = 1 / [(1 - a) + a/k] 代入:
2 = 1/ [(1 - 0.8) + 0.8/k]
2 = 1 / (0.2 + 0.8 / k)
2 (0.2 + 0.8 / k) = 1
0.4 + 1.6 / k = 1
1.6 / k = 0.6
1.6 = 0.6k
16 / 6 = k
k = 2.67
所以我们需要改进这部分至少2.67倍才能达到要求。
这篇关于深入理解计算机系统一--Amdahl定律 想正确算出你的系统提升了多少性能吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!