Amdahl 定律是计算机系统中的一个重要定律,核心思想是:我们对计算机系统的某一部分加速的时候,该加速部分对系统整体性能的影响取决于该部分的重要性和加速程度。也就是说,比如一个应用程序A,当系统执行他的时候所需要的时间是T,那么系统执行的时候可能是好几部分在执行他,假设系统某一部分执行所需要的时间为t,t与T的比值是a(t / T = a,也就是说 t = aT), 而该部分性能提升了k倍,那么所需要的时间就变成了 t’ = aT / k。这时候总的执行时间为
T(总) = T - t + t'
T(总) = T - t + t' = T - aT + aT / k = (1 - a) *T + (aT) / k = (1 - a + a/k) * T
这个时候,加速比就是:S = T / T(总)
T 1 s =------------------ = --------------- (1 - a + a/k ) * T (1 - a + a/k)
假如说:系统中某个部分运行程序耗时比例为60%,他的加速因子为3(k = 3),那么我们可以获得的加速比为
1 / (1 - 0.6 + 0.6 / 3) = 1 / 0.6 = 1.6667
说明,我们对系统一个部分作出重要改进,提速三倍,但是整体的速度却只提速1.6667,明显小于这一部分的提速。这就是Amdahl 的主要观点,要想显著加速整个系统,必须提升全系统中相当大部分的速度。
细节: 表示相对性能:性能提升最好的表示方法就是用比例,T(old) / T(new),如果速度有所改进,那么该比值就会大于1,比如时间由4变成了2,那么比值就是2,我们可以用 ”2.0X“来表示2倍。
Amldahl定律有一个有趣的情况就是考虑k趋向于无穷的时候,这就意味着,我们可以取系统的某一部分将其加速到一个点,在这个点上,这部分花费的时间可以忽略不计,那么就是S(k -> oo) = 1 / (1 - a)。举个例子:
如果60%的系统能够加速到不花时间的程度,我们获得的净加速比仍只有1 / (1 - 0.6) = 1 / 0.4 = 2.5X。
Amdahl定律描述了改善任何过程的一般原则,除了可以用在加速计算机系统方面,还可以用在公司试图降低刀片制作成本,或者学生提高自己的学分绩点平均值等方面。我们常常把性能提升2倍或者更高的比例因子,这么高的比例因子只有通过优化系统的大部分组件才可以获得。
练习题1: 假设你是卡车司机,你要将货物从A 运送到B,全程2500km,在限速范围内,你估计平均速度为100km/h,那么整个过程需要25小时
1). 你听新闻说在你送货的某一段路上取消了限速,这使得行程中1500km可以以150km/h速度行驶,那么这对整个行程的加速比是多少?
2). 你可以为自己的卡车买个新的涡轮增压器,使自己的卡车跑得更快,使得不限速的那段路程跑得更快,如果想让整个行程的加速比为1.67X,那么你必须以多块的速度通过加速的那段路段?
练习题2: 公司的市场部向你承诺,下一个版本的软件性能将改进2X,这项任务被分配给你,你已经确认只有80%的系统能被改进,那么,这80%这一部分需要被改进多少(即k取多少)才能达到整体性能目标?
练习题答案请参考Amdahl定律练习题答案
参考书籍:《深入理解计算机系统(第三版)》